Sunteți pe pagina 1din 15

1. Se citesc numere intregi de la tastatura pna la ntlnirea lui 0.

Cerinte: a) Sa se afiseze numerele citite; b) Sa se afiseze numerele care au exact k divizori si suma acestora (k dat) . Restrictii: 0. Exemplu: Pentru k=4 si numerele 12 , 6, 9, 15, 27, 16,0 se va afisa 6+1 5+27=48. Obs. Pentru afisarea numai a sumei se acorda punctaj partial. #include<iostream.h> void main() { int v[20],i,k,s=0,n,d,x; n=0; do{ cout<<"x="; cin>>x; n++; v[n]=x; }while (x!=0); for(i=1;i<n;i++) cout<<v[i]<<" "; do{cout<<"k=" ; cin>>k; }while(k>10 && k<0); for(i=1;i<n;i++) {x=0; for(d=1;d<=v[i];d++) if(v[i]%d==0) x++; if(x==k) s=s+v[i]; } cout<<"suma elementelor cu k divizori="<<s; } 2. Se citesc de la tastatura n numere naturale mai mici dect 1000. Cerinte: a) Sa se afiseze numerele citite; b) Sa se afiseze produsul cifrelor diferite de zero pentru fiecare numar ci tit. Restrictii: Exemplu: pentru n=4 si numerele: 12, 202, 333, 120 seva afisa: 2 4 9 2 problema 2 #include<iostream.h> void main() {int v[20],n,i,r,p; do{cout<<"n="; cin>>n; }while(n<0 || n>100); for(i=1;i<=n;i++) {cout<<"v["<<i<<"]="; cin>>v[i]; } for(i=1;i<=n;i++) cout<<v[i]<<" ";

for(i=1;i<=n;i++) {p=1; while(v[i]!=0) { r=v[i]%10; if(r!=0) p=p*r; v[i]=v[i]/10; } cout<<"produs="<<p<<endl; } } 3. Scrieti un program care determina toate numerele naturale perfecte mai mici d ect un numar natural n citit de la tastatura. Un numar este perfect daca este e gal cu suma divizorilor strict mai mici decat el. Exemplu: 28 = 1 + 2 + 4 + 7 + 14 #include<iostream.h> int perfect(int x) {int d,s=0,i; for(i=1;i<=x/2;i++) if(x%i==0) s=s+i; return s==x; } void main() {int n,i; do{cout<<"n="; cin>>n; }while(n>100); for(i=1;i<=n;i++) if(perfect(i)==1) cout<<i<<" "; } 4.Dintr-un fisier text se citesc n numere naturale pozitive . Cerinte: a) Afisati numerele citite; b) Afisati toate numerele care ndeplinesc conditia ca oglinditul lor sa fie un numar par. #include<fstream.h> #include<iostream.h> int oglindit(int x) {int xo=0,r; while(x!=0) {r=x%10; xo=xo*10+r; x=x/10; } return xo; } void main() {int n,i,v[29],y; ifstream f("intrare.txt") ; f>>n; for(i=1;i<=n;i++) {f>>y;

v[i]=y; } for(i=1;i<=n;i++) cout<<v[i]<<" "; cout<<endl; for(i=1;i<=n;i++) if(oglindit(v[i])%2==0) cout<<v[i]<<" "; f.close() ; } 5. Se citeste din fisierul date.in un sir format din numere naturale de cel mult 3 cifre. Cerinte: a) Eliminati din sir numerele care se repeta. b) Afisati elementele sirului dat, n ordine crescatoare; # include <fstream.h> ifstream f("date.in"); int v[100], b[100], n, i, k; void citire() { i=0; while (!f.eof()) { f>>v[i]; i++; } n=i-1; } void afisare(int x[100], int m) { for (i=0; i<m; i++) cout<<x[i]<<" "; cout<<endl; } void elimina() { int ok, j; k=0; for (i=0; i<n; i++) { ok=0; for(j=0; j<i; j++) if(v[i]==v[j]) ok=1; if (!ok) { b[k]=v[i]; k++; } } } void sortare() { int ok, aux;

do{ ok=0; for (i=0; i<n-1; i++) if (v[i]>v[i+1]) { aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; ok=1; } } while(ok); } void main() { citire(); cout<<"Sirul initial:"<<endl; afisare(v,n); elimina(); cout<<"Sirul dupa eliminare:"<<endl; afisare(b,k); sortare(); cout<<"Sirul dat, sortat:"<<endl; afisare(v,n); } 6. Scrieti un algoritm eficient de generare a primele n numere prime, n citit de la tastatura. Cerinte: a)Sa se afiseze sirul generat; b)Explicati algoritmul utilizat. #include<iostream.h> int prim(int x) {int n,i,ok=1; for(i=2;i<=x/2;i++) if(x%i==0) ok=0; return ok; } void main() {int n,i; cout<<"n=";cin>>n; for(i=2;i<=n;i++) if(prim(i)==1) cout<<i<<" "; } 7. Din fisierul mat.in se citeste n(dimensiunea,n=10) si apoi liniile. Cerinte: a) afisati elementele matricei: b) afisati suma elementelor de pe diagonala principala si produsul elemente lor de pe diagonala secundara. #include<iostream.h> #include<fstream.h> void main() {int n,i,a[20][20],j,s,p; ifstream f("mat.in"); f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j];

for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } s=0; p=1; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {if(i==j) s=s+a[i][j]; if(i+j==n+1) p=p*a[i][j]; } cout<<"s="<<s<<endl; cout<<"p="<<p; f.close(); } 8. Din fisierul mat.in se citeste n(dimensiunea,n=10) si apoi elementele matricei . Cerinte: a) afisati matricea; b) afisati cel mai mare divizor comun al elementelor de pe fiecare linii. #include<iostream.h> #include<fstream.h> ifstream f("mat.in"); unsigned int a[10][10],n,i,j; void citire() {f>>n; for(i=0;i<n;i++) {for(j=0;j<n;j++) f>>a[i][j]; f.close(); } } void afisare() {cout<<"n="<<n<<endl; for(i=0;i<n;i++) {for(j=0;j<n;j++) cout<<a[i][j]<<" "; cout<<endl; } } int cmmdc(int x,int y) {while(x!=y) if(x>y) x=x-y; else y=y-x; return x; } int linia(int l) {int c=a[1][0]; for(j=1;j<=n;j++) c=cmmdc(c,a[l][j]); return c; }

void main() {citire(); afisare(); for(i=0;i<n;i++) cout<<"pentru linia"<<i<<"cmmdc="<<linia(i)<<endl; } 9. Pe prima linie a fisierului "date.in" se afla n numere naturale nenule (0<n<1 00), Fiecare numar avnd cel mult 4 cifre. Cerinte: a) Sa se formeze si afiseze un numar din prima cifra a fiecarui element al sirului; b) sa se afiseze pe ecran Da , daca numarul format este palindrom, sau Nu ontrar. Date de intrare: 6 12 351 83 814 3 1288 Date de iesire: 138831 Da (numarul format 138831 este palindrom) #include<fstream.h> #include<iostream.h> long int n,v[20]; void citire() {long int i; ifstream f("date.in"); f>>n; for(i=1;i<=n;i++) f>>v[i]; } void afisare() {long int i; for(i=1;i<=n;i++) cout<<v[i]<<" "; } long int cifra(long int x) {while(x>10) x=x/10; return x; } long int construire() {long int z=0,i; for(i=1;i<=n;i++) z=z*10+cifra(v[i]); return z; } long int palindrom(long int z) {long int zo=0,i,y,j; y=z; while(z!=0) { zo=zo*10+z%10; z=z/10; } if(zo==y) return 1; else return 0; } void main()

n caz c

{long int i,t; citire(); afisare(); cout<<endl; t=construire(); cout<<t<<endl; if(palindrom(t)==1) cout<<"da"; else cout<<"Nu"; } 11. Se citeste un text de la tastatura. Sa se insereze dupa fiecare vocala codul ASCII corespunzator acesteia. Afisati textul modificat. # include <iostream.h> # include <string.h> char s[250],vocale[]="aeiouAEIOU"; void inserare (char s[250]) { for(int i=0;i<strlen(s);i++) { cout<<s[i]<<" "; if(strchr(vocale,s[i])) cout<<int(s[i])<<" "; } } void main() { cout<<"s=";cin.get(s,50);cin.get(); cout<<"Sirul dupa inserare"; inserare(s); } 12. Se citeste un text de la tastatura. Sa se nlocuiasca fiecare vocala cu car acterul * . Afisati textul modificat. # include <iostream.h> # include <string.h> char s[250], vocale[]="aeiouAEIOU"; void inserare(char s[250]) { for (int i=0; i<strlen(s); i++) if (strchr(vocale, s[i])) cout<<"*"; else cout<<s[i]; cout<<endl; } void main() { cout<<"s="; cin.get(s,50); cin.get(); cout<<"Sirul dupa inserare..."; inserare(s); } 13. Se citeste un text de la tastatura. Cuvintele se considera separate prin spa tiu, virgula sau punct si virgula. Cerinte: a) Afisati cte cuvinte contine textul b) Afisati cuvintele palindrom. Un cuvnt se considera ca fiind palindrom, daca ignornd diferentele dintre minuscu le si majuscule, este identic cu cuvntul obtinut prin citirea caracterelor de la

dreapta la stnga. # include <iostream.h> # include <string.h> char s[250], separatori[]=" ,.;"; char x[50][50]; int k=0; int numarare(char s[250]) { int nr=0, j=0, k1; for (int i=0; i<strlen(s); i++) if (strchr(separatori, s[i])) {nr++; k1=0; for (int l=j; l<i; l++) {x[k][k1]=s[l]; k1++; } k++; j=i+1; } /* daca textul nu se termina cu semn de punctuatie adun 1*/ if (!strchr(separatori, s[strlen(s)-1])) {nr++; k1=0; for (int l=j; l<i; l++) {x[k][k1]=s[l]; k1++; } k++; } /* for (i=0; i<k; i++) cout<<x[i]<<endl; */ return nr; } void cuvinte_palindrom() { cout<<"Cuvintele palindrom din text:"<<endl; for (int i=0; i<k; i++) { int ok=1, j1=strlen(x[i])-1; for (int j=0; j<=strlen(x[i])/2; j++) { if (x[i][j]!=x[i][j1]) ok=0; j1--; } if (ok) cout<<" "<<x[i]<<endl; } cout<<endl; } void main() { cout<<"s="; cin.get(s,50); cin.get();

cout<<"Numarul de cuvinte..."; cout<<numarare(s)<<endl; cuvinte_palindrom(); } 14. Se considera un tablou bidimensional cu n linii si m coloane ce contine nume re ntregi citite din fisierul "Date.in". Cerinte: a.) Creati o functie care sa determine c.m.m.d.c.-ul elementelor de pe fiecare l inie a matricii; b.) Creati o lista liniara simplu nlantuita care sa contina valorile c.m.m.d.c.-u rilor elementelor fiecarei linii din matrice, astfel nct lista sa fie ordonata cre scator la fiecare pas. #include<iostream.h> #include<fstream.h> int a[50][50],n; ifstream f("date.in") void citire() { int j,i; f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j]; } void afisare() { int i , j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cout<<a[i][j]; cout<<endl; } } int cmmdc(int x, int y) { while(x!=y) { if(x>y) x=x-y; else y=y-x; } return x; } int linie(int i) { int c,j; c=a[i][j]; for(j=1;j<=n;j++) c=cmmdc(c,a[i][j]) return c; } struct nod { int inf; nod * urm; }; nod p , inc ,sf; void creare(int x) { p=new nod; p->inf=x; p->urm=NULL; if(inc==NULL) { inc=p; sf=p; }

else { sf->urm=p; sf=p; } void construire(nod * &inc , nod *& inf) { inc=NULL; sf=NULL; int i ; for(i=1;i<=n;i++) creare(linie(i)); } void main() { citire(); afisare(); construire(); }

15. Se considera o multime de n numere reale. Se cere o submultime a sa , cu un numar maxim de elemente, astfel nct suma elementelor sale sa fie maxima. # include <iostream.h> float v[100]; unsigned int n, i; void citire() { cout<<"n="; cin>>n; for (i=0; i<n; i++) {cout<<"v["<<i<<"]="; cin>>v[i]; } } void afisare() { cout<<"Multimea: {"; for (i=0; i<n; i++) cout<<v[i]<<" "; cout<<"}"<<endl; } void suma_max() { cout<<"Submultimea: {"; float S=0; for (i=0; i<n; i++) if (v[i]>0) { cout<<v[i]<<" "; S=S+v[i]; } cout<<"}"<<endl; cout<<"Smax="<<S<<endl; } void main() { citire(); afisare(); suma_max(); }

16. Se considera o multime de n numere ntregi. Determinati produsul maxim care se poate obtine din numerele date. # include <iostream.h> float v[100]; unsigned int n, i; void citire() { cout<<"n="; cin>>n; for (i=0; i<n; i++) {cout<<"v["<<i<<"]="; cin>>v[i]; } } void afisare() { cout<<"Multimea: {"; for (i=0; i<n; i++) cout<<v[i]<<" "; cout<<"}"<<endl; } void sortare() { int ok; float aux; do{ ok=0; for (i=0; i<n-1; i++) if (v[i]>v[i+1]) { aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; ok=1; } } while(ok); } void produs_max() { int nn=0; for (i=0; i<n; i++) if (v[i]<0) nn++; if (nn%2!=0) nn--; cout<<"Submultimea: {"; float P=1; for (i=0; i<nn; i++) { cout<<v[i]<<" "; P=P*v[i]; } for (i=0; i<n; i++) if (v[i]>0) { cout<<v[i]<<" "; P=P*v[i]; } cout<<"}"<<endl; cout<<"Pmax="<<P<<endl; }

void main() { citire(); afisare(); sortare(); produs_max(); } 17. Se da un graf neorientat G(X, U) prin matricea de adiacenta. Afisati sirul vr furilor obtinute printr-o parcurgere (latime sau adncime) pornind dintr-un vrful de grad minim. #include<iostream.h> int n, a[20][20]; void citire() {int i, j; cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } } void afisare() {int i, j; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } } int grad(int x) {int j, s=0; for(j=1; j<=n;j++) s=s+a[x][j]; return s; } void main() {citire(); afisare(); int v[30], k, i, j, z, b, c[20], viz[20], p, u, min; k=0; for(i=1;i<=n;i++) {k++; v[k]=grad(i); } cout<<endl; for(i=1;i<=n;i++) cout<<v[i]<<" "; min=v[1]; for(i=1;i<=n;i++) if(v[i]<min) min=v[i]; for(i=1;i<=n;i++) if(v[i]==min) z=min; for(j=1;j<=n;j++) viz[j]=0; c[i]=z; p=1;

u=1; viz[z]=1; while(p<=u) {b=c[p]; for(j=1;j<=n;j++) if((a[b][j]==1)&&(viz[j]==0)) {u=u+1; c[u]=j; viz[j]=1; } p=p+1; } for(j=2;j<=u;j++) cout<<c[j]<<" "; } 18. Se da un graf neorientat G(X, U). Matricea de adiacenta se va citi din fisie rul text g1.txt. Afisati nodul(nodurile) care are(au) gradul maxim. # include <iostream.h> # include <fstream.h> int a[20][20],n; void citire() { int i,j; ifstream f("g1.txt"); f>>n; for(i=1;i<n;i++) for(j=1;j<=n;j++) f>>a[i][j]; f.close(); } void afisare() { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } } int grad(int x) { int j,s=0; for(j=1;j<=n;j++) s=s+a[x][j]; return s; void main() { int i,j,max ,v[20],k; citire(); afisare(); k=0; for(i=1;i<=n;i++) { k++; v[k]=grad(i); max=v[1]; for(i=2;i<=n;i++) if(v[i]>max) max=v[i]; for(i=1;i<=n;i++) if(v[i]==max) cout<<i<<" ";

} } 19. Se dau doua grafuri neorientate G1 si G2. Matricile de adiacenta se vor citi din fisierele text g1.txt respectiv g2.txt. Afisati un mesaj daca graful G2 est e sau nu un partial al grafului G1. # include <iostream.h> # include <fstream.h> int a[20][20],b[20][20],n1,n2; ifstream f("g1.txt"); ifstream g("g2.txt"); void citire() { int i,j; f>>n1; for(i=1;i<=n1;i++) for(j=1;j<=n1;j++) f>>a[i][j]; g>>n2; for(i=1;i<=n2;i++) for(j=1;j<=n2;j++) g>>b[i][j]; } void afisare() { int i,j; cout<<"g1"; for(i=1;i<=n1;i++) { for(j=1;j<=n1;j++) cout<<a[i][j]; cout<<endl; } cout<<"g2"; for(i=1;i<=n2;i++) { for(j=1;j<=n2;j++) cout<<b[i][j]<<" "; cout<<endl; } } void main() { int i,j; citire(); afisare(); if(n1==n2) { for(i=1;i<=n2;i++) for(j=1;j<=n2;j++) if((b[i][j]==1)&&(a[i][j]==0)) cout<<"g2 nu este graf partial"; else cout<<"g2 este graf partial"; } }

20. Se considera graful orientat G(X, U) dat prin matricea de adiacenta. Afisati nodurile pentru care gradul exterior este egal cu gradul interior. #include<iostream.h> int a[20][20],n; void citire() { int i,j;

cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } } void afisare() { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } } int grad_interior(int x) { int s=0; for(j=1;j<=n;j++) s=s+a[x][j]; return s; } int grad_exterior(int x) {int s=0; for(i=1;i<=n;i++) s=s+a[x][i]; return s; } void main () {int i; citire () afisare () for(i=1;i<=n;i++) if(grad_interior(i)==grad_exterior(i)) cout<<" "; }

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