probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
SUBIECTE SI REZOLVARI C++ PENTRU EXAMENUL DE ATESTAT LA INFORMATICĂ 1.Scrieţi un program C/C++ care citeşte de la tastatura un număr natural n (2
#include void main()
{int n,i,j; long a[20][20],s1=0,s2=0,d; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) {cout<<"a["<>a[i][j];}} for(i=1;i<=n;i++) {for(j=1;j<=n;j++) if(i==j) s1=s1+a[i][j];}; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) if(i+j==n+1) s2=s2+a[i][j];} cout<
3.Scrieţi programul C/C++ care citeşte de la tastatura un număr natural n (n<100) si un sir cu n numere întregi din intervalul [100 ;999] ; programul construieşte un sir de numere rezultat prin înlocuirea fiecărui număr din şirul citit cu numărul obţinut prin interschimbarea cifrei unitatilor cu cifra sutelor. Numerele din noul sir se vor afişa pe ecran separate printr-un singur spaţiu. De exemplu , pentru n=3 si şirul 123 , 904 , 500 , se afişează 321 , 409 , 5.
1 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
#include void main() {int n,i,o,v[20],c; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"v["<>v[i];} for(i=1;i<=n;i++) {o=0; c=v[i]%10; o=o*10+c; v[i]=v[i]/10; c=v[i]%10; o=o*10+c; v[i]=v[i]/10; o=o*10+v[i]; v[i]=o; cout<
4.Doua tablouri unidimensionale a si b , cu elementele a1 , a2 , … , an , respectiv b1 , b2 , … bn sunt in relaţia a<=b daca : a1<=b1 , a2<=b2 , … , an<=bn. Scrieţi program in limbajul C/C++ care citeşte doua tablouri unidimensionale a si b cu acelaşi număr de elemente de tip întreg si verifica daca a<=b sau b<=a afişând un mesaj adecvat.
#include void main() {int a[10],i,n,j,k,aux,min; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"a["<>a[i];} for(i=1;i<=n-1;i++) {min=a[i];
2 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
k=i; for(j=i+1;j<=n;j++) if(a[j]
8.Scrieţi un program in limbajul C/C++ care afişează toate numerele naturale formate din cifre identice , mai mari decât 10 si mai mici decât o valoare data n, n<=2.000.000. De exemplu pentru n=195 , se afişează : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111.
#include int n,i; int identic(int n) {int d,c; c=n%10; while (n>0) {d=n%10; if(d==c) n=n/10; else return 0;} if(n==0) return 1;} void main() {cout<<"n=";cin>>n; for (i=10;i<=n;i++) {if(identic(i)) cout<
10.Scrieţi un program C/C++ care citeşte de la tastatura trei numere naturale x, y si k, (1
3 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
k numere prime în intervalul [x,y] se vor afişa toate numerele prime găsite iar pe linia următoare se va afişa mesajul “s-au găsit mai puţine numere prime: ” urmat de numărul acestora. De exemplu, pentru x=3, y=12 si k=5 se vor afişa pe ecran: 3 5 7 11 s-au găsit mai puţine numere prime:4
#include void main() {int x,y,k,n,d,a,p; cout<<"x=";cin>>x; cout<<"y=";cin>>y; cout<<"k=";cin>>k; a=0; n=x; while ((n>=x)&&(n<=y)&&(a
12.Scrieţi un program C/C++ care citeşte din fişierul text BAC.TXT , cel mult 100 de numere naturale aflate pe o singura linie, formate din cel mult 9 cifre fiecare, separate prin spatii si dintre acestea le afişează pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca nu se găsesc numere palindrom, se va afişa pe ecran valoarea –1 . Un număr are proprietatea de a fi palindrom daca citit de la dreapta la stânga sau de la stânga la dreapta are aceeaşi valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este palindrom.
Exemplu : daca din fişierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 ,
4 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
atunci pe ecran se vor afişa : 828 , 2 , 131.
#include int palindrom(int n) {int copie=n,oglindit,c; oglindit=0; {while(n!=0) c=n%10; oglindit=oglindit*10+c; n=n/10;} return (copie==oglindit);} void main() {int v[100],n,i,p; p=0; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"v["<>v[i];} for(i=1;i<=n;i++) if(palindrom(v[i])) {cout<
14.Pentru orice număr natural nenul n definim n factorial (notat n!) ca fiind produsul tuturor numerelor naturale nenule mai mici sau egale cu n (n! = 1*2*3*…*n) De exemplu : 3!=1*2*3=6 5!=1*2*3*4*5=120 . Scrieţi un program C/C++ care determina numărul de cifre nule aflate pe ultimele poziţii consecutive ale valorii obţinute in urma evaluării lui n! , n fiind un număr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi 2 deoarece 3628800 are două zerouri la sfârşit.
#include void main()
{long int n,x=1,nr=0,c,p=1;
5 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
cout<<"n=";cin>>n; for(int i=1;i<=n;i++) p=p*i; while(x==1) {c=p%10; if(c==0) {nr=nr+1; p=p/10;} else x=0;} cout<
15.Scrieţi un program C/C++ care citeşte din fişierul text DATE.IN cel mult 100 de numere naturale nenule aflate pe o singura linie, formate din cel mult 4 cifre fiecare, separate prin spatii si scrie in fişierul DATE.OUT numerele, in ordinea inversa fata de cea in care au fost citite, pe o singura linie separate prin spatii. De exemplu daca din fişierul DATE.IN se citesc numerele 93 207 15 1982 3762, atunci conţinutul fişierului DATE.OUT va fi 3762 1982 15 207 93.
#include void main() {int n,i,v[100]; fstream f("date.in",ios::in); fstream g("date.out",ios::out); f>>n; for(i=1;i<=n;i++) f>>v[i]; for(i=n;i>0;i--) g<
17.Scrieţi un program C/C++ care citeşte de pe prima linie a fişierului text BAC.TXT trei numere naturale a, b, c formate din cel mult patru cifre fiecare, separate prin cate un spaţiu si afişează pe ecran cel mai mare divizor comun al acestora. De exemplu, daca din fişier se citesc numerele : 9 27 15,
6 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
atunci se afişează 3.
#include int cmmdc (int x,int y) {while (x!=y) if(x>y) else y=y-x; return x;} void main() {int a,b,c,d; fstream("bac.txt";ios::in); f>>a>>b>>c; f.close; d=cmmdc(a,b); cout<
19.Scrieţi un program care verifica daca un număr natural k(1
#include int prim(int n) {int prim=1; for(int d=2;d<=n/2;d++) if(n%d==0) prim=0; if(prim) return 1; else return 0;} void main() {int n; cout<<"n=";cin>>n; if(prim(n)) cout<<"da"; else cout<<"nu";}
7 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
21.Se considera fişierul text date.in care conţine exact 19 numere distincte formate fiecare din maxim 2 cifre. Sa se afişeze in fişierul text date.out numărul care lipseşte din fişierul date.in .
#include void main() {int v[100],n,i,j,p; fstream f("date.in",ios::in); fstream g("date.out",ios::out); for(i=1;i<=19;i++) f>>v[i]; f.close(); for(i=10;i<=99;i++) {p=1; for(j=1;j<=19;j++) if(i==v[j]) p=0; if(p) g<
22.Se citeşte de la tastatura un număr natural nenul n (n<1000). Scrieţi un program C/C++ care construieşte fişierul text bac.txt care sa contina, pe prima linie, toţi divizorii lui n in ordine strict descrescătoare. Divizorii vor fi separaţi prin spaţiu. De exemplu, daca n =10 , atunci fişierul bac.txt va conţine : 10 , 5 , 2 , 1
#include #include void main() {int d,n; cout<<"n=";cin>>n; fstream g("bac1.txt",ios::out); for(d=n;d>=1;d--)
8 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
if(n%d==0) g<
25.Se citeşte de la tastatura un număr natural nenul n care are cel mult 9 cifre. Sa se afişeze in fişierul Date.out numărul k, natural, astfel încât produsul 1*2*…*(k-1)*k sa aibă o valoare cat mai apropiata de numărul n . De exemplu, daca se citeşte numărul n=25 fişierul Date.out are următorul conţinut: 4. iar daca se citeşte numărul n=119 fişierul Date.out are următorul conţinut: 5
#include #include
void main() {int k,p,r,n; cout<<"n=";cin>>n; k=1; fstream g("date.out",ios::out); p=1; while(p<=n) {p=p*k; k++;} p=p/(k-1); r=p*k; if((n-p)<=(r-n)) g<<"numarul k este "<
27.Scrieţi un program care citeşte un număr natural n>1 cu maximum 9 cifre, si afişează valoarea celui mai mic divizor prim a lui precum si puterea la care acest divizor apare in descompunerea in factori primi a numărului
n,
9 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
n .
#include int n,p,c;
void cmmd(int n) {int gasit=0,d=2; while((d
void main() {cout<<"n=";cin>>n; cmmd(n); cout<
28.Să se scrie un program care să calculeze şi să afişeze pe ecran produsul cifrelor pare şi suma cifrelor impare a unui număr natural n citit de la tastatură. #include unsigned int n, s, p=1, c; void main() { cin>>n; while(n) { c=n%10; if(c%2==0) p=p*c;
10 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
else s=s+c; n=n/10; } cout<< p <<" "<< s; } 29.Sa se verifice daca doua cuvinte introduse de la tastatura (cuvintele având maxim 50 de caractere fiecare) sunt rime, adică ultimele p caractere ale celor doua cuvinte coincid, unde p (2<=p<=10) este dat.
#include #include char s1[51], s2[51]; int p, x, y, ok=0; void main() { cin>> s1>>s2>>p; x=strlen(s1)-1; y= strlen(s2)-1; for( int i=1;i<=p && ok==0 ;i++) { if(s1[x]!=s2[y]) ok=1; x--; y--; } if(ok) cout<<"Nu sunt rime"; else cout<<"Sunt rime"; }
30.Scrieţi un program care construieşte o matrice pătrată de ordin n formată din valorile 1 si 2 astfel încât elementele de pe diagonala principala si secundară sa fie egale cu 1 iar restul elementelor cu 2. Valoarea lui n se citeşte de la tastatură: n număr natural (2<23), iar matricea se va afişa pe ecran, cate o linie a matricei pe fiecare rând pe ecran cu spatii intre elementele fiecărei linii.
11 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
Exemplu: Fie n=5. Se va afişa:
12221 21212 22122 21212 12221
#include int a[10][10], i, j, n; void main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j || i+j==n+1) a[i][j]=1; else a[i][j]=2; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<< a[i][j]; cout<< endl; } }
31.Scrieţi un program care citeşte de la tastatură un sir de cel mult 50 de caractere si construieşte fişierul atestat.txt ce conţine şirul si prefixele acestuia de lungime cel puţin 1, fiecare pe cate o linie, in ordinea descrescătoare a lungimii prefixelor.
Exemplu: Daca se citeşte şirul ‘proba’ atunci atestat.txt va conţine:
proba prob pro
12 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
pr p
#include #include char s[51]; int n; void main() { cin>>s; ofstream f("atestat.txt"); n=strlen(s); while(n>=0) { for(int i=0; i< n; i++) f << s[i]; f<< endl; n--; } f.close(); }
32.Să se scrie un program care să numere cuvintele dintr-un text citit din fişierul ”cuvinte.txt”. Textul conţine cuvintele separate numai printr-un spaţiu, fără semne de punctuaţie, singurul semn de punctuaţie este ‘.’ de la sfârşitul textului. Numărul de cuvinte se va afişa pe ecran.
Exemplu: Fişierul ”cuvinte.txt” conţine textul: Ana are mere. se afişează: 3
#include #include void main() { ifstream f("cuvinte.txt"); char s[100]; int k=1,n; f.getline(s,100);n=strlen(s); for(int i=0;i< n;i++) if(s[i]==' '&& s[i+1]!=' ')
13 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
k++; cout<< k; f.close(); }
33.Scrieţi programul care citeşte de la tastatură o valoare naturală n (2≤n≤100), construieşte in memorie si apoi afişează pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n, car conţine numerele naturale, in ordine crescătoare, de la 1 la n2, dispuse pe coloane, in ordine crescătoare. Astfel coloana 1 va conţine numerele de la 1 la n, coloana 2 numerele de la n+1 la 2*n, coloana 3 de la 2*n+1 la 3*n si aşa mai departe, ca in exemplu. Matricea se va afişa pe ecran, cate o linie a matricei pe cate o linie a ecranului, elementele fiecărei linii fiind separate intre ele prin cate un spaţiu.
Exemplu: pentru n = 4 se va afişa matricea:
1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
#include int a[10][10], k=1,s,n; void main() { cout<<"n="; cin>>n; for(int j=1;j<=n;j++) for(int i=1;i<=n;i++) { a[i][j]=k; k++; } for(int i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<< a[i][j]<<" "; cout<< endl; }
14 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
}
34.Se dă n număr natural. Să se afişeze cel mai apropiat număr prim fată de n. Programul va conţine cel puţin un subprogram.
Exemplu: n=24 se va afişa 23, pentru n=26 se va afişa 29
#include int prim(int x) { if(x==0 || x==1) return 0; for(int i=2;i<=x/2;i++) if(x%i==0) return 0; return 1; } void main() { unsigned n, x, y; cout<< "n="; cin>>n; x=n+1; y=n-1; while(prim(x)==0) x++; while(prim(y)==0) y--; if(x-n>n-y) cout<< y; else cout<< x; }
35.Se considera un vector cu n (1< n<100) componente numere naturale. Sa se determine componentele vectorului cu cei mai mulţi divizori. Se va folosi un subprogram pentru citirea vectorului si unul pentru calculul numărului de divizori ai unui număr.
#include
15 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
int n, a[100]; void citire () { int i; for(i=1;i<=n;i++) cin>>a[i]; } int div(int x) { int i, nr=0; for(i=2;i<=x;i++) if(x%i==0) nr++; return nr; } void main() { int i,max=0; cin>>n; citire(); for(i=1;i<=n;i++) if(div(a[i])>max) max=div(a[i]); for(i=1;i<=n;i++) if(div(a[i])==max) cout<< a[i]<<" "; }
36.Se consideră un şir de n numere întregi. Să se verifice dacă o valoare x, citită de la tastatură, apare sau nu în vector. În caz că se află printre valorile din vector se va preciza şi în ce poziţie apare. În caz contrar se va afişa mesajul NU .
#include void main() { int n, v[100], i, x, p=0; cin>>n>>x; for(i=1;i<=n;i++) { cin>>v[i]; if(v[i]==x)p=i; } if(p==0) cout<<"nu"; else cout<< "Valoarea "<< x<< "apare in pozitia "<< p; }
16 / 17
probleme rezolvate atestat informatica c++ Scris de Administrator Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06
{joscommentenable}
17 / 17