16
1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină orice caractere ( litere mari, litere mici, cifre şi caractere speciale). Să se tipărească textul obţinut prin transformarea în litere mici a literelor mari. #include<string.h> #include <iostream> #include <fstream> using namespace std; int main() { ifstream f; char s[255]; int k,i; f.open("exemplu.txt"); f.getline(s,256); k=strlen(s); for(i=0;i<k;i++) if(s[i]>='A' && s[i]<='Z') s[i]=s[i]+'a'-'A'; cout << s; return 0; } 2) Se citeşte din fişierul date.in, de pe prima linie, un şir de caractere care poate să conţină numai litere şi cifre. Afişaţi în fişierul date.out, numărul cifrelor din text. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; char s[255]; int k,i,p=0; f.open("date.in"); f>>s; f.close(); k=strlen(s); for(i=0;i<k;i++) if(s[i]>='0' && s[i]<='9') p++; cout << p; return 0; }

ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

  • Upload
    lenhan

  • View
    239

  • Download
    8

Embed Size (px)

Citation preview

Page 1: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

1

ATESTAT 2015-probleme rezolvate

1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină orice caractere ( litere mari, litere mici, cifre şi caractere speciale). Să se tipărească textul obţinut prin transformarea în litere mici a literelor mari. #include<string.h> #include <iostream> #include <fstream> using namespace std; int main() { ifstream f; char s[255]; int k,i; f.open("exemplu.txt"); f.getline(s,256); k=strlen(s); for(i=0;i<k;i++) if(s[i]>='A' && s[i]<='Z') s[i]=s[i]+'a'-'A'; cout << s; return 0; }

2) Se citeşte din fişierul date.in, de pe prima linie, un şir de caractere care poate să conţină numai litere şi cifre. Afişaţi în fişierul date.out, numărul cifrelor din text. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; char s[255]; int k,i,p=0; f.open("date.in"); f>>s; f.close(); k=strlen(s); for(i=0;i<k;i++) if(s[i]>='0' && s[i]<='9') p++; cout << p; return 0; }

Page 2: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

2

3) Scrieţi un program care citeşte de la tastatură un număr natural nenul (n20), apoi n cuvinte, fiecare

cuvânt având numai literele mici ale ale alfabetului englez, şi afişează în fişierul exemplu.txt, care dintre cele n cuvinte sunt formate numai din vocale. Se consideră vocale literele din mulţimea {a,e,i,o,u}. #include <iostream> #include<string.h> #include <fstream> using namespace std; int main() { ofstream f; char s[255]; int n,k,i,j,p; f.open("exemplu.txt"); cin>>n; for(i=0;i<n;i++) { cin>>s; k=strlen(s); p=1; for(j=0;j<k;j++) if(strchr("aeiou",s[j])==0) p=0; if(p) f<<s<<endl; } f.close(); return 0; }

4) Din fişierul “palindrom.in” se citeşte un număr natural nenul n, iar de pe următoarea linie se citesc n numere naturale nenule, separate prin câte un spaţiu. Să se afişeze pe ecran numerele palindrom, adică numerele care au proprietatea că citite de la stânga la dreapta sau de la dreapta la stânga sunt identice (de exemplu 15451 este palindrom, 15452 nu este palindrom). #include <iostream> #include <fstream> using namespace std; int main() { ifstream f; int n,k,i,j,p; f.open("palindrom.in"); f>>n; for(i=0;i<n;i++) {

Page 3: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

3

f>>k; p=0; j=k; while(k>0) { p=p*10+k%10; k=k/10; } if(j==p) cout<<p<<endl; } f.close(); return 0; }

5) De pe prima linie a fişierului “fractii.in” se citeşte un număr natural nenul n, care reprezintă un număr de fracţii raţionale. De pe următoarele n linii se citesc perechi de numere naturale nenule, separate prin câte un spaţiu reprezentând numărătorul respectiv numitorul unei fracții. Să se afişeze pe ecran cele n fracţii simplificate. Exemplu: fractii.in fractii.out 4 4/9 17/23 27/14 5/11 12 27 17 23 54 28 125 275 #include <iostream> #include <fstream> using namespace std; int cmmdc(int a, int b) { while(a!=b) if(a>b) a=a-b; else b=b-a; return b; }; int main() { ifstream f; ofstream g; int n,k,i,j,p; f.open("fractii.in"); g.open("fractii.out"); f>>n; for(i=0;i<n;i++)

Page 4: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

4

{ f>>k; f>>p; j=cmmdc(k,p); g<<k/j<<' '<<p/j<<endl; } f.close(); g.close(); return 0; }

6) Să se afişeze, pe ecran, toate numerele naturale de 4 cifre cu proprietatea că cifrele lor sunt în ordine descrescătoare. #include <iostream> #include <fstream> using namespace std; int main() { int a,b,c,d,n; for(d=0;d<=9;d++) for(c=d;c<=9;c++) for(b=c;b<=9;b++) for(a=b;a<=9;a++) cout<<1000*a+100*b+10*c+d<<endl; return 0; }

7) Scrie un program în care se vor citi din fişierul “inaltime.in”, de pe prima linie un număr reprezentând elevii din echipa sportivă, de pe următoare n linii datele înălţimea fiecărui sportiv, ca număr zecimal. Să se afișeze pe ecran înălțimile sportivilor în ordine descrescătoare. #include <iostream> #include <fstream> using namespace std; int main() {

Page 5: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

5

int n,i,k; float aux,h[30]; ifstream f; f.open("inaltime.in"); f>>n; for(i=0;i<n;i++) f>>h[i]; for(i=0;i<n-1;i++) for(k=i+1;k<n;k++) if(h[i]<h[k]) { aux=h[i]; h[i]=h[k]; h[k]=aux; } for(i=0;i<n;i++) cout<<h[i]<<' '; return 0; }

8) Se citeşte de la tastatură un număr natural n şi apoi n numere naturale distincte din intervalul [0,n]. Deoarece în intervalul [0,n] sunt n+1 numere naturale, rezultă că unul dintre numere lipseşte. Scrieţi un program care afişează numărul absent. Exemplu :n=7 , și numerele citite 2 6 1 4 7 0 5 se va afișa numărul 3 . #include <iostream> using namespace std; int main() { int n,i,k,v[30]; cin>>n; for(i=0;i<=n;i++) v[i]=0; for(i=0;i<n;i++) { cin>>k; v[k]++; } for(i=0;i<n;i++) if(v[i]==0) cout<<i; return 0; }

Page 6: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

6

9) Se citesc n numere întregi. Să se afişeze în fişierul date.out cel mai mare număr obţinut din ultima cifră a fiecărui număr.

Ex. Din numerele 900, 267, 75 se obţine 750 #include <iostream> #include <fstream> using namespace std; int main() { int n,i,k,aux,v[30]; ofstream f; f.open("date.out"); cin>>n; for(i=0;i<n;i++) { cin>>k; v[i]=k%10; } for(i=0;i<n-1;i++) for(k=i+1;k<n;k++) if(v[i]<v[k]) { aux=v[i]; v[i]=v[k]; v[k]=aux; } k=0; for(i=0;i<n;i++) k=k*10+v[i]; f<<k; f.close(); return 0; }

10) Se citeşte de la tastatură un caracter şi un text de maxim 40 caractere. Afişaţi de câte ori apare caracterul citit în text. Literele mici nu se vor considera diferite de majuscule. Ex. În textul “Anul acesta temperaturile vor creşte” - litera e apare de 6 ori. #include<string.h> #include <iostream>

Page 7: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

7

using namespace std; int main() { char a,s[255]; int k,i,p=0; cin.getline(s,256); cin>>a; k=strlen(s); for(i=0;i<k;i++) if(s[i]==a) p++; cout << p; return 0; }

11) Fie un șir de numere întregi citite dintr-un fişier date.in, de pe prima linie. Să se afişeze toate perechile de numere consecutive din șir pe crânduri diferite, care au proprietatea că au aceeași paritate. Exemplu : 5, 41, 3, 22, 16, 41, 28, 5, 141, 84. -Se vor afişa perechile : 5 41 41 3 22 16

5 141 #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int k=0,i,v[100]; f.open("date.in"); while(!f.eof()) { f>>v[k]; k++; } f.close(); for(i=0;i<k-1;i++) if((v[i]+v[i+1])%2==0) { cout <<v[i]<<' '<<v[i+1]<<endl; } return 0; }

12) Din fișierul date.in se citește de pe prima linie n număr natural iar de pe a doua linie n numere naturale. Să se afișeze pe ecran cel mai mare număr prim dintre cele citite. Ex; 22, 3, 102, 17, 54, 13,6.

-Se afişează 17.

Page 8: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

8

#include <fstream> #include<string.h> #include <iostream> using namespace std; int prim(int k) {int i; for(i=2;i<k;i++) if(k%i==0) return 0; return 1; } int main() { ifstream f; int n,k,i,p=0; f.open("date.in"); f>>n; for(i=0;i<n;i++) { f>>k; if(prim(k) && k>p) p=k; } f.close(); cout <<p; return 0; }

13) Se citește n număr natural și apoi n numere naturale. Să se afişeze acelea cu proprietatea că se divid cu suma cifrelor lor. Ex: Dc n=3 şi numerele 13, 18 şi 67 se va afişa 18. (18 se divide cu 1+8=9) #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int n,k,i,p,s; f.open("date.in"); f>>n; for(i=0;i<n;i++)

Page 9: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

9

{ f>>k; p=k; s=0; while(p>0) { s=s+p%10; p=p/10; } if(k%s==0) cout<<k; } f.close(); return 0; }

14) Fie (Xn), cu n N, un şir de numere reale, care verifică următoarele relaţii de recurenţă: X0=1; X1=2; Xn=2*Xn-1 + Xn-2;

Pentru n număr natural citit de la tastatură să se afișeze termenii șirului X1, X2,..,Xn. #include<string.h> #include <iostream> using namespace std; int main() { int i,n,x0,x1,s; x0=1; x1=2; cin>>n; for(i=0;i<n;i++) { cout<<x1<<' '; s=2*x1+x0; x0=x1; x1=s; } return 0; } 15) Fie n (n<=100) puncte în plan date prin coordonatele lor întregi şi identificate prin numere de ordine de la 1 la n. Să se numere câte puncte sunt în interiorul unui cerc de rază r şi centru O(0,0), unde r >0 este citit de la tastatura, cat si coordonatele celor n puncte. #include <fstream>

Page 10: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

10

#include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int n,x,y,i,p=0; float r; f.open("date.in"); f>>r; f>>n; for(i=0;i<n;i++) { f>>x; f>>y; if(x*x+y*y<r*r) p++; } f.close(); cout<<p; return 0; } 16) Sa se determine printr-o singura parcurgere a unui sir dat de numere reale atat elementul cel mai mic cat si frecventa aparitiei acestuia. Sirul de numere se va citi de la tastatura, pana la intalnirea valorii nule. #include<string.h> #include <iostream> using namespace std; int main() { int k=0,i,m,nr,v[100]; cin>>v[k]; while(v[k]!=0) { k++; cin>>v[k]; } m=v[0]; nr=1; for(i=1;i<k;i++) { if(v[i]==m) nr++;

Page 11: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

11

if(v[i]<m) { m=v[i]; nr=1; } } cout<<"Minimul este: "<<m<<endl<<" si are frecventa: "<<nr; return 0; } 17) Sa se scrie un program care însumează elementele de deasupra diagonalei principale, dintr-o matrice pătratică. Dimensiunea si elementele matricei se citesc de la tastatura. #include<string.h> #include <iostream> using namespace std; int main() { int n,i,j,s,v[10][10]; cin>>n; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>v[i][j]; s=0; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) s=s+v[i][j]; cout<<"Suma elementelor aflate deasupra diagonalei principale este: "<<s; return 0; } 18) Se citesc succesiv numere naturale, până la apariţia valorii 0. Să se afişeze dintre numerele citite, pe acelea care au cel mai mare numar de divizori proprii. #include<string.h> #include <iostream> using namespace std; int main() { int k=0,i,j,nr=2,v[100],w[100];

Page 12: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

12

cin>>v[k]; while(v[k]!=0) { k++; cin>>v[k]; } for(i=0;i<k;i++) { w[i]=0; for(j=1;j<=v[i];j++) if(v[i]%j==0) w[i]++; if(nr<w[i]) nr=w[i]; } for(i=0;i<k;i++) if(nr==w[i]) cout<<v[i]<<endl; return 0; } 19) Să se calculeze suma primilor n (n ≤ 100) termeni din următorul şir: 1, 3, 5, 11, 21, 43, 85, … #include<string.h> #include <iostream> using namespace std; int main() { int n,k=1,p=1,s=0,i; cin>>n; for(i=0;i<n;i++) { s=s+k; k=2*k+p; p=-p; } cout<<s; return 0; }

Page 13: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

13

20) Din fişierul ’f1.txt’ se citește de pe prima linie n dimensiunea unei matrice pătratice iar de pe următoarele n linii elementele matricei. Să se afișeze pe ecran media aritmetică a elementelor aflate pe diagonala secundară a matricei. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int n,k,i,j,p=0,v[100][100]; f.open("f1.txt"); f>>n; for(i=0;i<n;i++) for(j=0;j<n;j++) f>>v[i][j]; f.close(); for(i=0;i<n;i++) p=p+v[i][n-i-1]; cout <<p; return 0; } 21) Se citește de la tastatură un text de maxim 100 caractere, litere, cifre și spații. Să se înlocuiască toate caracterele ’a’, cu caracterul ’b’ şi să se afişeze pe ecran textul obținut cât și numărul de substituții efectuate. #include<string.h> #include <iostream> using namespace std; int main() { char s[101]; int k,i,p=0; cin.getline(s,101); k=strlen(s); for(i=0;i<k;i++) if(s[i]=='a') { s[i]='b'; p++; }

Page 14: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

14

cout <<s<<endl<< p; return 0; } 22) Fişierul grf.in conţine pe prima linie două numere naturale n şi m, despărţite prin spaţiu, care reprezintă numărul de noduri şi numărul de muchii ale unui graf neorientat. Pe urmatoarele m linii se află câte două numere întregi, care reprezintă nodurile grafului între care există muchie. Să se afişeze pe ecran matricea de adiacență a grafului. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int n,m,k,p,i,j,v[100][100]; f.open("grf.in"); f>>n; f>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) v[i][j]=0; for(i=0;i<m;i++) { f>>k; f>>p; v[k][p]=1; v[p][k]=1; } f.close(); for(i=1;i<=n;i++) { cout<<endl; for(j=1;j<=n;j++) cout<<v[i][j]; } return 0; } 23) Fişierul nod.in conţine pe prima linie numerele N şi M, care reprezintă numărul, de noduri şi respectiv de muchii , ale unui graf neorientat, iar pe următoarele M linii nodurile care reprezintă extremităţile câte unei muchii a grafului. Să se afişeze care sunt nodurile izolate. #include <fstream> #include<string.h> #include <iostream>

Page 15: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

15

using namespace std; int main() { ifstream f; int n,m,k,p,i,j,v[100][100],t[100]; f.open("nod.in"); f>>n; f>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) v[i][j]=0; for(i=1;i<=n;i++) t[i]=0; for(i=0;i<m;i++) { f>>k; f>>p; v[k][p]=1; v[p][k]=1; t[k]++; t[p]++; } f.close(); for(i=1;i<=n;i++) if(t[i]==0) cout<<i<<endl; return 0; } 24) Fişierul m2.in conţine pe prima linie un număr natural N, iar pe următoarele N linii, elementele, numere întregi, ale unei matrice pătratică de ordin N. Să se afişeze elementul maxim situat pe diagonala principală. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; int n,p,i,j,v[100][100]; f.open("m2.in"); f>>n; for(i=0;i<n;i++)

Page 16: ATESTAT 2015-probleme rezolvate - MateInfo.Net - … · 1 ATESTAT 2015-probleme rezolvate 1) De pe un rând al fişierului “exemplu.txt” se citeşte un text care poate să conţină

16

for(j=0;j<n;j++) f>>v[i][j]; f.close(); p=v[0][0]; for(i=1;i<n;i++) if(v[i][i]>p) p=v[i][i]; cout <<p; return 0; } 25) Fişierul numere1.txt conţine un număr natural N<10000. Să se afişeze în fişierul numere2.txt câte cifre are numărul citit. #include <fstream> #include<string.h> #include <iostream> using namespace std; int main() { ifstream f; ofstream g; int n,k=0; f.open("numere1.txt"); f>>n; f.close(); if(n==0) k=1; g.open("numere2.txt"); while(n>0) { k++; n=n/10; } g<<k; g.close(); return 0; }