Sunteți pe pagina 1din 11

Probleme propuse pentru examenul de atestat clasa a 12-a Profilul : matematic informatic neintensiv 1.

. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere prime in scrierea carora apare cifra k, se gasesc in sirul dat. Exemplu.: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 . #include <iostream.h> #include <math.h> int n, k, i, aux, ok, x, cont=0, j; void main() { cout<<"n="; cin>>n; cout<<"k="; cin>>k; //Se introduc valorile lui k si n cout<<endl<<"Dati numerele: \n"; for(i=1;i<=n;i++) {cin>>aux; x=aux; ok=0;//presupun ca nu am gasit inca cifra k in nr aux while(aux>0) { if(aux%10==k) { ok=1; aux=0; } //Daca am gasit cifra k retin acest lucru in var ok si setez aux pe 0 ca sa nu caut mai departe aux=aux/10; } if(ok==1) //ok=1 => s-a gasit cifra k {ok=0; aux=x; for(j=2;j<=sqrt(aux);j++) //verificam daca e prim if(aux%j==0) { aux=0; ok=1; } } if(!ok) cont++; //daca ok=1 => nr. are cifra k si e prim. il punem in carucior } cout<<"Rezultat: "<<cont<<endl; } 2. Se citeste de la tastatura un numar natural n cu cel mult noua cifre si care determina daca exista un #include <iostream.h> int k=1, n, fact=1, ok=0; //f de la factorial void main() { cout<<"n="; cin>>n; //citim n while(fact<=n) //calculam 1!, 2!, 3!...etc pana cand acesta este egal sau este mai mare decat n { if(fact==n) ok=1; fact=fact*k; k++; } if(ok) cout<<"Doh."; else cout<<"Nah."; cout<<endl; } 3. Se citeste de la tastatura un numar natural n, 0<n<1000000. Sa se afiseze pe ecran, daca exista, un numar natural care este strict mai mare decat n si care are exact aceleasi cifre ca si n. Daca se gaseste un astfel de numar afisati mesajul Exista, altfel se va afisa mesajul Nu exista. De exemplu, pentru n=165, exista numarul 561 care satisface conditia din enunt, deci se va afisa mesajul Exista.Pentru n=14589 , nu exista nici un numar care sa satisfaca conditia din enunt, deci se va afisa mesajul Nu exista. //daca este egal, inseamna ca n se poate scrie ca 1*2*...*k si setam ok pe 1 numar natural k cu proprietatea ca n=1*2*3**k. Daca exista un astfel de numar, programul va afisa mesajul Da , altfel va afisa mesajul Nu. //Verificam daca cifra k se regaseste in cifrele numarului //Citim numerele

#include <iostream.h> long int n, aux; int v[10], i; void main() {cout<<"n="; cin>>n; //citim n aux=n; while(aux>0) //punem cifrele lui n intr-un vector caracteristic {v[aux%10]++; aux=aux/10; } for(i=9;i>=0;i--) //parcurgem vectorul in ordine descrescatoare si construim cel mai mare nr. cu cifrele date while(v[i]>0) { aux=aux*10+i; v[i]--; } //unele cifre se pot repeta if(aux>n) cout<<"Exista. Uite-l: "<<aux; else cout<<"Uite.. ca nu-i."; cout<<endl; } 5. Se considera numarul natural a, a>10000. Folosind descompunerea in factori primi a lui a, decideti daca acesta exprimat ca produs de doua numere prime si dati un mesaj corespunzator. De exemplu, pentru n=15, exista numerele 3 si 5 prime, care satisfac conditia din enunt, deci se va afisa mesajul Da, iar pentru n=16, se va afisa mesajul Nu. #include <iostream.h> int n, d, putere=0, ok=0, copie_n; //putere de la puterere void main() { cout<<"n="; cin>>n; copie_n = n; d=2; while(n>1){putere=0; while(n%d==0) { putere++; n=n/d; if(putere==2) { if(copie_n!=d*d) //daca numarul nu este patratul unui numar prim (de ex 4, 9, 25 etc) {ok=1; n=1;} //numarul se poate descompune in factori neprimi. n=1 ca sa oprim bucla mai rpd. }} d++;} if(ok) cout<<"Nu."; else cout<<"Da."; cout<<endl; } 6. n fiierul valori.txt pe aceeai linie, desprite printr-un spaiu, se gsesc maximum 1000 de numere ntregi. Scriei un program care s determine valoarea maxim i valoarea minim, mpreun cu numrul de apariii al maximului, respectiv al minimului. Folosii o metod eficient din punct de vedere al memoriei i al numrului de operaii efectuate i afiai pe ecan valorile obinute. #include <fstream.h> ifstream fin("p6i.txt"); //folosim fisierul asta ca sa citim valorile int min, max, apx=1, apn=1, nr; //aparitii-max, aparitii-min void main(){ fin>>min; //luam ca valoare minima/maxima primul nr. din fisier max=min; while(!fin.eof()) //comparam cu restu' pana la sf. fisierului {fin>>nr; //citim numerele if(max<nr) { apx=1; max=nr; } //daca gasim un nr>max resetam nr. de aparitii la 1 else if(max==nr) { apx++; } if(min>nr) { apn=1; min=nr; } else if(min==nr) { apn++; }} cout<<"min="<<min<<" nr_aparitii="<<apn<<endl; cout<<"max="<<max<<" nr_aparitii="<<apx<<endl; poate fi

fin.close();} 7. Fiierul unu.in conine pe primul rnd valoarea n ( 2n1.000.000 ), iar pe a doua linie se gsesc n numere ntregi formate din cel mult 9 cifre i desprite prin spaiu. tiind c fiierul conine cel puin dou numere distincte printre cele n de pe a doua linie, scriei un program care s scrie n fiierul unu.out pe o singur linie i separate printr-un spaiu, n ordine descresctoate, cele mai mari dou valori distincte din fiierul de intrare. Alegei o metod eficient de rezolvare att ca gestionare a memoriei. #include <fstream.h> long int max1, max2, n , nr, i; void main () { ifstream fin("p7i.txt"); ofstream fout("p7o.txt"); fin>>n; fin>>nr; max1=nr; //atribuim o valoare initiala lui max (primul nr din fisier) for(i=0;i<n;i++) { fin>>nr; if(nr>max1) { max2=max1; max1=nr; } //daca gasim un numar mai mare il atribuim lui max else if((nr>max2)&&(max1!=nr)) max2=nr; //daca nu vedem daca numarul e mai mare decat max2 si diferit de max1} fout<<max1<<" "<<max2;} 8. Scriei programul C, C++ sau Pascal, care citete de la tastatur un ir s de cel mult 30 de caractere i un caracter c. Programul determin triplarea fiecrei apariii a caracterului c n s i scrie noul ir obinut n fiierul text final.out. #include <fstream.h> #include <string.h> ofstream fout("p8o.txt"); char s[30] ,d[90], c ; int i, p; void main() {cout<<"Dati sirul initial: \n"; cin.get(s,30,'\n'); //citim sirul s cin.get(); cout<<"c="; cin>>c; p=0; for(i=0;i<=strlen(s);i++) //parcurgem s si cautam caracterul c if(s[i]==c) { d[p]=c; d[++p]=c; d[++p]=c; p++; } //il multiplicam de 3 ori in sirul d else { d[p]=s[i]; p++; } fout<<d; fout.close();} 9. Fiirele unu.txt i doi.txt conin fiecare dintre ele, numere ntregi distincte ordonate cresctor. Creai fiierul trei.txt i apoi scriei n el, cte una pe linie, valorile distincte din cele dou fiiere, n ordine cresctoare. #include <fstream.h> ifstream fin1("unu.txt"); ifstream fin2 ("doi.txt"); ofstream fout("trei.txt"); int i, j, a[100], b[100], n, m; void main(){ i=0; while(!fin1.eof()){ fin1>>a[i]; i++;} n=i; j=0; while(!fin2.eof()) {fin2>>b[j]; j++; } m=j; i=j=0; timp de executare, ct i ca

while(i<n && j<m) {if(a[i]<b[j]) {fout<<a[i]<<" "; i++;} else if(a[i]>b[j]) {fout<<b[j]<<" "; j++;} else {fout<<a[i]<<" ";i++;j++;} } while(i<n) {fout<<a[i]<<" "; i++;} while(j<m) {fout<<b[j]<<" "; j++;}} 10. Se d irul recurent definit prin relaiile : x(1)=1 ; x(2)=2; x(n)=2*x(n-1) x(n-2) , pentru n>2. Cunoscnd valoarea n, numr natural citit de la tastatur cu 0<n<100.000 , scriei programul care afieaz n ordine cresctoare toate valorile de 2 cifre din irul recurent. #include <iostream.h> int n, x1 , x2, xs, i; void main() {cout<<"n="; cin>>n; x1=1; x2=2; for(i=1;i<=n;i++) {xs=2*x2-x1; //formula termenului sirului if(xs>=10 && x2<100) cout<<xs<<" "; x1=x2; x2=xs; //atribuim ultimele doua valori lui x1 si x2 ca sa il calculam din nou pe xs}} 11. Scriei un program care citete de la tastatur un ir de caractere format din cel mult 50 de litere din alfabetul englez i care afieaz mesajul DA dac irul este format din numr egal de vocale i consoane, respective mesajul NU n caz contrar. #include <iostream.h> #include <string.h> char s[51]; int voc, cons, i; //r e initializat cu 0 si plecam de la ideea ca sirul are un nr. egal de consoane si vocale void main() {cout<<"Sirul:"; cin.get(s,51,'\n'); //functia cin.get(numesir,lungimea,'\n') cin.get(); for(i=0;i<strlen(s);i++) if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u') voc++; //incrementam nr de vocale else cons++; //incrementam nr de consoane if(voc!=cons) cout<<"Nah."; //daca r e diferit de 0( >0 = mai multe vocale, <0=mai multe consoane) inseamna ca sirul n-are nr. egal else cout<<"Doh."; cout<<endl;} 12. Scriei un program care citete de la tastatur dou iruri de caractere, fiecare ir fiind format din cel mult 100 de litere mici din alfabetul englez, i care afieaz mesajul DA dac toate literele din primul ir se gsesc n cel de-al doilea ir, nu neaprat n aceeai ordine i de acelai numr de ori, sau mesajul NU n caz contrar. #include <iostream.h> #include <string.h> char s[101], d[101]; void main() {cout<<"S1: "; cin.get(s,101,'\n'); cout<<"S2: "; cin.get(d,101,'\n'); cin.get(); for(i=0;i<strlen(s);i++) //fiecare caracter din s este cautat in d for(j=0;j<strlen(d);j++) cin.get(); int i, j, ok;

if(s[i]==d[j]) { ok++; j=strlen(d); } //daca il gasim. punem o conditie sa nu il mai cautam si in //restul sirului d si trecem la urmatorul caracter din s else if (j==strlen(d)-1) i=strlen(s); //daca nu l-am gasit si am ajuns la capatul lui d iesim din for if(ok==strlen(s)) cout<<"E bun."; //nr. de caractere gasite = nr. caracter s => e bun else cout<<"Nu-i bun.";} 13. n fiierul numere.txt, se afl memorate, pe prima linie, dou numere naturale, n i m desprite de un spaiu ( 1n10000 i mn), iar pe urmtoarea linie a fiierului, n numere reale desprite prin cte un spaiu. Scriei programul C/C++/Pascal, care citete din fiier datele existente i afieaz pe cea de-a treia linie a fiierului, suma obinut din cele mai mari m elemente negative citite din fiier. n cazul n care fiierul nu conine cel puin m numere negative, se va afia valoarea 0. <conio.h> int n,m, a[10000], j, i, sch, aux, x; void main() {ifstream fin ("numere.txt"); fin>>n>>m; for(i=0;i<n;i++) {fin>>x;//citesc un nr if(x<0)//daca e negativ a[j++]=x;//il pun in vectorul a } if(j==0)//nu am gasit nici un numar negativ cout<<0; else do {sch=0; for(i=0;i<j-1;i++ if(a[i]<a[i+1]) {aux=a[i];a[i]=a[i+1]; a[i+1]=aux; sch=1;}} while(sch); for(i=0;i<m;i++) cout<<a[i]<<" ";}} 14. Scriei programul C/C++/Pascal care citete de la tastatur un numr natural n ( n100) i un ir cu n numere ntregi din intervalul [100,999] ; programul construiete n mod eficient din punctul de vedere al spaiului de memorie folosit, un ir de numere rezultat prin nlocuirea fiecrui numr din irul citit cu numrul obinut prin interschimbarea cifrei unitilor cu cifra sutelor. Numerele din noul ir se vor afia pe ecran separate printr-un singur spaiu. #include <iostream.h> int n, nr, u, s, i; int a[101]; void main() {cout<<"n="; cin>>n; for(i=0;i<n;i++) {cout<<"nr="; cin>>nr; u=nr%10; s=nr/100%10; for(i=0;i<n;i++) cout<<a[i]<<" ";} 15. Scriei programul C/C++/Pascal care citete dou numere naturale a i b (ab) cu cel mult 4 cifre fiecare i tiprete toate numerele prime de 3 cifre din intervalul [a,b]. #include <iostream.h> #include <math.h> int a, b, j, ok; void main(){ cout<<"a="; cin>>a; cout<<"b="; cin>>b; //cifra unitatilor //cifra zecilor } {j--; #include <fstream.h> #include

a[i]=nr-s*100-u+u*100+s; //scadem cifra sutelor*100 si cifra unitatilor si adunam cifra unitatilor*100 si cifra sutelor

for(a=a;a<=b;a++) //pornim de la a, mergem pana la b { ok=1; //presupunem ca numarul e prim for(j=2;j<=sqrt(a);j++) if(a%j==0) { ok=0; j=a; } //daca gasim un nr. j care divide a=> nr nu e prim. si punem o conditie sa iesim mai repede din for if(ok) cout<<a<<" ";}} 16. Fiierul matrice.txt conine pe primul rnd dou valori naturale m i n (1n100, 1m100), reprezentnd numrul de linii i respectiv de coloane ale unei matrice a, iar pe urmtoarele m linii cte n valori ntregi cu maximum 4 cifre fiecare, separate prin cte un spaiu, reprezentnd elementele matricei a. Afiai pe ecran un ir de 2*(n+m) 4 numere ordonate cresctor, ir format din elementele aflate pe chenarul exterior al matricei a. Chenarul exterior este format din prima i ultima linie, respectiv prima i ultima coloan din matrice. #include <fstream.h> ifstream fin("p16i.txt"); int n, m, l, c, i, aux, p, sch; int a[101][101]; int b[400]; void main() {fin>>n; fin>>m; for(l=1;l<=n;l++) for(c=1;c<=m;c++) fin>>a[l][c]; //introducem elem. in matrice i=1; for(c=1;c<=m;c++) { b[i]=a[1][c]; i++; b[i]=a[n][c]; i++; } //luam elem. de pe linia 1 si linia n for(l=2;l<n;l++) { b[i]=a[l][1]; i++; b[i]=a[l][m]; i++; } //luam elemm. de pe coloana 1 si coloanam p=i;//nr de elemete din b do {sch=0; for(i=0;i<p-1;i++) if(b[i]>b[i+1]) { aux=b[i];b[i]=b[i+1];b[i+1]=aux;sch=1;}} while(sch); for(i=1;i<=2*(n+m)-4;i++) cout<<b[i]<<" ";} 17. Se citete de la tastatur o valoare natural m (2m100). Scriei programul C/C++/Pascal care construieete n memorie i apoi afieaz pe ecran matricea a cu m linii i m coloane de numere ntregi, construit dup urmtoarea regul : elementul de pe linia i i coloana j a matricii ( 1i , jm) este : 1 dac i*i+j*j este ptrat perfect 2 dac i*i+j*j nu este ptrat perfect, dar este numr prim mai mare dect 2 3 n rest. int a[101][101];

#include <iostream.h> #include <math.h> int m, i, j; int pp(int m) //subprogram care verifica daca numarul este patrat perfect {int rad = int(sqrt(m)); if(m==rad*rad) return 1; else return 0;} int prim(int m) //subprogram care verifica daca numarul este prim {int j=2, ok=1; //presupunem ca nr. e deja prim for(j=2;j<=sqrt(m);j++) //cautam un j care divide m if(m%j==0) { ok=0; j=m; } //daca il gasim=> nr. nu e prim si iesim din for if(ok&&m>2) return 1; //daca nr. e prim si mai mare ca 2 returnam 1 altfel 0 else return 0;} void main() {cout<<"m="; cin>>m; for(i=1;i<=m;i++) for(j=1;j<=m;j++) if(pp(i*i+j*j)) a[i][j]=1; //apelam functia pp else if(prim(i*i+j*j)) a[i][j]=2; //apelam functia prim

else a[i][j]=3; for(i=1;i<=m;i++) //afisam matricea {cout<<endl; //sarim pe urmatoarea linie for(j=1;j<=m;j++) cout<<a[i][j]<<" ";} cout<<endl; } 18. Fiierul text numere.in conine pe prima linie un numr natural n (0n5000), iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cte un spaiu. S se scrie un program care citete n, apoi cele n numere naturale din fiierul numere.in i scrie n fiierul numere.out, pe cte o linie fiecare, numerele de pe a doua linie a fiierului numere.out care sunt palindroame cu exact patru cifre (un numr este palindrom dac este egal cu inversul su). #include <fstream.h.> ifstream fin("p18i.txt"); ofstream fout("p18o.txt"); int n; long int nr, i; void main() {fin>>n; for(i=1;i<=n;i++) //daca nr. are 4 cifre e cuprins intre 1000 si 9999. stiind ca are 4 cifre vedem daca cifra uitatilor e egala cu cifra miilor si daca cifra sutelor e egala cu cifra zecilor {fin>>nr; if(nr>=1000&&nr<=9999&&nr/1000==nr%10&&nr/10%10==nr/100%10) fout<<nr<<" "; }} 19. Se citeste de la tastatura n, si apoi n perechi de cate doua numere intregi a si b cu ( a<0<b) numere ce reprezinta capetele unor intervale inchise. Afisati pe ecran , doua numere x si y ce reprezinta capetele intervalului intersectie al celor n intervale date. De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= -1 si y= 9. #include <iostream.h> int n, a, b, x, y, i; void main() {cout<<"n="; cin>>n; cout<<"a="; cin>>x; cout<<"b="; cin>>y; for(i=2;i<=n;i++) {cout<<"a="; cin>>a; cout<<"b="; cin>>b; if(x<a) x=a; if(y>b) y=b; //cautam cea mai mare valoare la stanga intervalului //cautam cea mai mica valoare la dreapta intervalului}

if(x<y) cout<<"["<<x<<","<<y<<"]"<<endl; else cout<<"Nu exista."<<endl;} 20. Se citesc de la tastatura doua numere naturale n si p (1<n<1000, 1<p<10). Sa se afiseze pe ecran, cu spatii intre ele, acele numere naturale mai mici sau egale cu n, care au toate cifrele mai mici sau egale cu p. #include <iostream.h> int n, p, nr, i, ok; void main() {cout<<"n="; cin>>n; //citim n si p cout<<"p="; cin>>p; for(i=1;i<=n;i++) {nr=i; ok=1; while(nr>0) {if(nr%10>p) { ok=0; nr=0; } //verificam daca numarul din sir are cifre mai mari decat p. caz in care ok=0 si nr=nr/10; if(ok) cout<<i<<" "; 22. Fiierul text cuvinte.in //nr nu mai e scris} }} conine mai multe linii nevide de text, fiecare linie de cel mult 255 de caractere. Orice linie este

compus din unul sau mai multe cuvinte separate prin cte un spaiu. S se scrie un program care citete de la tastatur un numr natural L i scrie n fiierul cuvinte.out toate cuvintele palindromice de lungime L din fiierul de intrare, n ordinea n care apar ele n text. #include <fstream.h> #include <string.h> char s[255];

int i, j, ok, L; ifstream fin("p22i.txt"); ofstream fout("p22o.txt"); void main() {cout<<"Dati L: ";cin>>L; while(!fin.eof()) {fin>>s; ok=1; j=strlen(s)-1; for(i=0;i<strlen(s);i++) {if(s[i]!=s[j]&&i!=j) { ok=0; i=strlen(s); } j--;} if(ok && strlen(s)==L) fout<<s<<endl;}} 23. Pentru dou puncte A i B din plan, puncte date prin coordonatele lor ntregi (xa,ya) , (xb,yb) se cere s se verifice dac punctele A i B sunt egal deprtate de originea axelor de coordonate. Scriei apoi programul care citete de la tastatur cele 4 numere ntregi i afieaz pe ecran mesajul DA n cazul n care A i B se afl la aceeai distan fa de punctul O (originea) i afieaz mesajul NU n caz contrar. #include <iostream.h> int xa, ya, xb, yb; void main() {cout<<"Xa="; cin>>xa; cout<<"Ya="; cin>>ya; cout<<"Xb="; cin>>xb; cout<<"Yb="; cin>>yb; if(xa*xa+ya*ya==xb*xb+yb*yb) cout<<"Da."; else cout<<"Nu.";} 24. Scriei un program care citete de la tastatur o propoziie de cel mult 80 de caractere litere i redundante din propoziie, adic cele de la nceputul i de la sfritul textului, precumi spaiile multiple dintre cuvintele propoziiei. #include <iostream.h> #include <string.h> int i, j; char s[80]; void main() {cin.get(s,80,'\n'); cin.get(); for(i=0;i<strlen(s);i++) if(s[i]==' '&&s[i]==s[i+1]) { for(j=i;j<strlen(s);j++) s[j]=s[j+1]; i--; } if(s[0]==' ') for(i=0;i<strlen(s);i++) s[i]=s[i+1]; cout<<s<<endl;} 25. Scriei un program care citete din fiierul text date.in cel mult 100 de numere naturale nenule aflate pe o singur linie, formate din cel mult patru cifre fiecare, separate prin spaii i scrie aceste numere n fiierul text date.out , n ordine invers fa de cea n care au fost citite, pe o singur linie, separate prin spaii. #include <fstream.h> ifstream fin("p25i.txt"); ofstream fout("p25o.txt"); int nr, i; int v[101]; void main() {i=1; while(!fin.eof()) {fin>>nr; i++;} v[i]=nr; spaii i apoi elimin spaiile

for(i=i-1;i>0;i--) fout<<v[i]<<" "; } 26. Scriei un program care citete de la tastatur un numr natural n (0n25) i un ir de n numere naturale cu cel mult patru cifre fiecare. Programul va determina i afia pe ecran numrul maxim de factori primi care poate s apar n descompunerea n factori primi a numerelor din ir. #include <iostream.h> int n, i, d, cont, nr, max; void main() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) {cout<<"nr("<<i<<")="; cin>>nr; d=2; cont=0; while(nr>1) {if(nr%d==0) cont++; while(nr%d==0) nr=nr/d; d++;} if(max<cont) max=cont;} cout<<max<<endl;} 27. Scriei un program care citete de la tastatur un cuvnt i care scrie n fiierul cuvant.out , cuvntul citit sub forma unei elipse, astfel : dac cuvntul citit este masa fiierul va avea urmtorul coninut #include <fstream.h> #include <string.h> ofstream fout ("p27o.txt"); char s[30]; int i, j, a, n, mijl; void main() {cin.get(s,30,'\n'); n = strlen(s); mijl = (n%2==1)?n/2+1:n/2;//calculez ce lungime are jumatatea superioara a clepsidrei (inclusiv mijlocul) for(i=0;i<mijl;i++)//afisez jumatatea superioara {for(j=0;j<i;j++)//spatiile de la inceput cout<<" "; for(j=i;j<strlen(s)-i;j++)//caracterele cout<<s[j]; for(j=strlen(s)-i;j<strlen(s);j++)//spatiile de la sfarsit cout<<" "; cout<<endl;} for(i=mijl-2;i>=0;i--)//afisez jumatatea inferioara a clepsidrei {for(j=0;j<i;j++)//spatiile de la inceput cout<<" "; for(j=i;j<strlen(s)-i;j++)//caracterele cout<<s[j]; for(j=strlen(s)-i;j<strlen(s);j++)//spatiile de la sfarsit cout<<" "; cout<<endl;}} 28. Se citete de la tastatur un numr natural n (1n100) i k numr natural (1kn). Apoi se citesc cele n*n elemente numere ntregi ale matricii a. Scriei un program care realizeaz mutarea primelor k coloane ale matricii pe ultimele poziii. Afiai matricea dup prelucrare. #include <iostream.h> int i,j,n,k, a[100][100], aux; void main() {cout<<"Dati n: "; cin>>n; cout<<"Dati k: "; cin>>k; cout<<"Dati matricea: \n"; cin.get();

for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>a[i][j]; for(j=0;j<k;j++)//cele k coloane care trebuie interschimbate {for(i=0;i<n;i++) {aux=a[i][j]; a[i][j]=a[i][n-k+j]; a[i][n-k+j]=aux;}} for(i=0;i<n;i++) {for(j=0;j<n;j++) cout<<a[i][j]<<" "; cout<<endl;}} 29. Se citesc de la tastatur dou numere natrurale n i m ( 1n10 , 1m10 ) i o matrice a cu n linii i m coloane. Realizai ordonarea elementelor matricii, astfel nct acestea s fie n ordine cresctoare att pe fiecare linie, ct i pe fiecare coloan. Afiai matricea dup prelucrare. #include <iostream.h> int a[100], mat[10][10], n, m, i, j, k, sch, aux; void main() {cout<<"Dati n: ";cin>>n; cout<<"Dati m: "; cin>>m; cout<<"Dati matricea"<<endl; //citesc matrice for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>mat[i][j]; //pun elementele din matrice intr-un vector for(i=0;i<n;i++) for(j=0;j<m;j++) a[k++]=mat[i][j]; //sortez vectorul do{ sch=0; for(i=0;i<k-1;i++) if(a[i]>a[i+1]) {aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; sch=1;}} while(sch); //pun inapoi in matrice elementele din vector care acum sunt sortate k=0; for(i=0;i<n;i++) for(j=0;j<m;j++) mat[i][j]=a[k++]; //afisez matricea for(i=0;i<n;i++) {for(j=0;j<m;j++) cout<<mat[i][j]<<" "; cout<<endl;}} 30. Fiierul numere.in conine pe prima linie un numr natural n ( 0 n 1000000), iar pe a doua linie n numere reale separate prin cte un spaiu.fiecare numr real este format din cel mult 10 cifre, inclusiv partea zecimal. Scriei programul care determin i afieaz cifrele care nu apar n scrierea nuci unui numr real din fiier. Aceste cifre se vor afia pe ecran n ordine cresctoare, separate prin cte un spaiu. n cazul n care toate cifrele sunt utilizate n scrierea numerelor din fiier, se va afia mesajul NICI UNA. #include <fstream.h> #include <math.h> long int n, cifre[10],k, i, uc, cif, parte_intreaga, zec;

double a, parte_fract; ifstream fin("date.txt"); void main() { fin>>n; for(i=0;i<n;i++) {fin>>a; a=fabs(a);//fac modul din a...nu ma intereseaza semnul parte_intreaga = double(floor(a));//scot partea intreaga ... parte_fract = a- floor(a);//...si partea fractionara while(parte_intreaga!=0)//pentru ciferele din partea intreaga bifez in vectorul cifre cifrele gasite {uc = parte_intreaga%10; cifre[uc] = 1; parte_intreaga/=10;} while(parte_fract - floor(parte_fract) !=0)//construiesc numarul de dupa virgula {parte_fract*=10; } zec=parte_fract;//repet operatiunea de la partea intreaga while(zec!=0) {uc = zec%10; cifre[uc] = 1; zec/=10; } } for(i=0;i<10;i++)//numar cifrele pe care nu le-am intalnit if(cifre[i] == 0) k++; if (k==0) cout<<"Nici una"; else cout<<k; }

S-ar putea să vă placă și