Sunteți pe pagina 1din 32

1. Se citesc numere intregi de la tastatur pn la ntlnirea lui 0.

Cerine: a) S se afieze numerele citite; b) S se afieze numerele care au exact k divizori i suma acestora (k dat). Restricii: 0 k 10 0. Exemplu: Pentru k=4 si numerele 12 , 6, 9, 15, 27, 16,0 se va afia 6+15+27=48. Obs. Pentru afiarea numai a sumei se acord punctaj parial.

#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 tastatur n numere naturale mai mici dect 1000. Cerine: a) S se afieze numerele citite; b) S se afieze produsul cifrelor diferite de zero pentru fiecare numr citit. Restricii: 0 n 100 Exemplu: pentru n=4 i numerele: 12, 202, 333, 120 seva afia: 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. Scriei un program care determin toate numerele naturale perfecte mai mici dect un numr natural n n 100 citit de la tastatur. Un numr este perfect dac este egal cu suma divizorilor strict mai mici dect 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 fiier text se citesc n numere naturale pozitive Cerine:

n 100 .

a) Afiai numerele citite; b) Afiai toate numerele care ndeplinesc condiia ca oglinditul lor s fie un numr 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 citete din fiierul date.in un ir format din numere naturale de cel mult 3 cifre. Cerine: a) Eliminai din ir numerele care se repet. b) Afiai elementele irului dat, n ordine cresctoare;

# 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. Scriei un algoritm eficient de generare a primele n numere prime, n citit de la tastatur. Cerine: a)S se afieze irul generat; b)Explicai 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 citete n(dimensiunea,n10) i apoi liniile. Cerine: a) afiai elementele matricei: b) afiai suma elementelor de pe diagonala principal i produsul elementelor de pe diagonala secundar.

#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 citete n(dimensiunea,n10) i apoi elementele matricei . Cerine: a) afiai matricea; b) afiai 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 fiierului "date.in" se afl n numere naturale nenule (0<n<100), Fiecare numr avnd cel mult 4 cifre. Cerine: a) S se formeze i afieze un numr din prima cifr a fiecrui element al irului; b) s se afieze pe ecran Da, dac numrul format este palindrom, sau Nu n caz contrar. Date de intrare: 6 12 351 83 814 3 1288

Date de ieire: 138831 Da (numrul 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() {long int i,t; citire(); afisare(); cout<<endl; t=construire(); cout<<t<<endl; if(palindrom(t)==1) cout<<"da"; else cout<<"Nu";

11. Se citete un text de la tastatur. S se insereze dup fiecare vocal codul ASCII corespunztor acesteia. Afiai 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 citete un text de la tastatur. S se nlocuiasc fiecare vocal cu caracterul *. Afiai 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 citete un text de la tastatur. Cuvintele se consider separate prin spaiu, virgul sau punct i virgul. Cerine: a) Afiai cte cuvinte conine textul b) Afiai cuvintele palindrom. Un cuvnt se consider ca fiind palindrom, dac ignornd diferenele dintre minuscule i majuscule, este identic cu cuvntul obinut 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<<" } cout<<endl; } "<<x[i]<<endl;

void main() { cout<<"s="; cin.get(s,50); cin.get(); cout<<"Numarul de cuvinte..."; cout<<numarare(s)<<endl; cuvinte_palindrom(); }

14. Se consider un tablou bidimensional cu n linii i m coloane ce conine numere ntregi citite din fisierul "Date.in". Cerine: a.) Creai o funcie care s determine c.m.m.d.c.-ul elementelor de pe fiecare linie a matricii; b.) Creati o list liniar simplu nlnuit care s conin valorile c.m.m.d.c.-urilor elementelor fiecrei linii din matrice, astfel nct lista s fie ordonat cresctor 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 consider o mulime de n numere reale. Se cere o submulime a sa , cu un numr maxim de elemente, astfel nct suma elementelor sale sa fie maxim.

# 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 consider o mulime de n numere ntregi. Determinai produsul maxim care se poate obine 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 d un graf neorientat G(X, U) prin matricea de adiacen. Afiai irul vrfurilor obinute printr-o parcurgere (lime 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 d un graf neorientat G(X, U). Matricea de adiacen se va citi din fiierul text g1.txt. Afiai 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 dou grafuri neorientate G1 i G2. Matricile de adiacen se vor citi din fiierele text g1.txt respectiv g2.txt. Afiai un mesaj dac graful G2 este sau nu un parial 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 consider graful orientat G(X, U) dat prin matricea de adiacen. Afiai 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