Sunteți pe pagina 1din 11

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 < k = 10 0. Exemplu: Pentru k=4 si numerele 12 , 6, 9, 15, 27, 16,0 se va afisa 6+15+27=48. Obs. Pentru afisarea numai a sumei se acorda punctaj partial. #include<iostream.h> void main() { unsigned int n=1,i,k,m,S=0,a[101],b[101],p=2,q=1; cout<<"Numarul de divizori=";cin>>k; cout<<"n=";cin>>n; b[1]=n; while(n) {m=1; for(i=1;i<=n/2;i++) if(n%i==0) m++; if(m==k) {S=S+n; a[q++]=n;} cout<<"n=";cin>>n; b[p++]=n; } for(i=1;i<p;i++) cout<<b[i]<<' '; cout<<endl; for(i=1;i<q;i++) if(i==q-1) cout<<a[i]<<"="; else cout<<a[i]<<"+"; if(a[1]!=0) cout<<S<<endl; } 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 citit. Restrictii: 0 = n = 100 Exemplu: pentru n=4 si numerele: 12, 202, 333, 120 seva afisa: 2 4 9 2 #include<iostream.h> void main() { unsigned int i,n,nr,k=1,a[20]; cout<<"Numarul de numere, n=";cin>>n; for(i=1;i<=n;i++) {cout<<"nr=";cin>>nr;a[i]=nr; } for(i=1;i<=n;i++) {cout<<a[i]; if(i!=n) cout<<",";} cout<<" "; for(i=1;i<=n;i++) {nr=a[i]; while(nr) if(nr%10) {k=k*(nr%10); nr=nr/10;} else nr=nr/10; cout<<k<<" "; k=1; } cout<<endl;

} 3.Se citesc de la tastatura numerele naturale n (n = 1000 000) si b(2=b = 20 ). Cerinte: a) Afisati conversia numarului n din baza 10 n baza b; b) Explicati algoritmul utilizat. Restrictii: nu se vor folosi vectori. #include<iostream.h> void main() { unsigned long n; unsigned int b; cout<<"n=";cin>>n; cout<<"b=";cin>>b; while(n) { cout<<n%b;n=n/b; } } 4. Scrieti un program care determina toate numerele naturale perfecte mai mici d ect un numar natural n (n = 100) citit de la tastatura. Un numar este perfect daca este egal cu suma divizorilor strict mai mici decat el. Exemplu: 28 = 1 + 2 + 4 + 7 + 14 #include<iostream.h> void main() { unsigned int n,i,j,m; cout<<"n=";cin>>n; for(i=1;i<=n;i++) { m=0; for(j=1;j<=i/2;j++) if(i%j==0) m=m+j; if(m==i) cout<<m<<" "; } } 5. Dintr-un fisier text se citesc n numere naturale pozitive (n = 100). Cerinte: a) Afisati numerele citite; b) Afisati toate numerele care ndeplinesc conditia ca oglinditul lor sa fie un nu mar par. #include<fstream.h> #include<iostream.h> void main() { ifstream f("date.in"); unsigned int n,m,v,p,i,a[101]; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {f>>a[i]; cout<<a[i]<<' ';} cout<<endl;

for(i=1;i<=n;i++) {m=a[i]; while(m) {p=m%10; m=m/10; } if(p%2==0) cout<<a[i]<<' '; } f.close(); } 6. 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> #include<conio.h> void main() {clrscr(); ifstream f("date.in"); unsigned int n=0,nr,i=1,j,a[100],gasit,aux; while(f>>nr) {a[i]=nr; n++; for(j=1;j<i;j++) if(a[j]==nr) {i--;n--;} i++; } f.close(); do {gasit=0; for (i=1;i<n;i++) if (a[i]>a[i+1]) {aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; gasit=1;} } while (gasit); for(i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl; } 7.Scrieti un algoritm eficient de generare a primele n numere prime, n citit de la tastatura. Cerinte: c) Sa se afiseze sirul generat; d) Explicati algoritmul utilizat. #include<iostream.h> void main() { unsigned int i,n,j,nr,prim; cout<<"n=";cin>>n;

cout<<"1 2 "; for(i=3;i<=n;i=i+2) { nr=i; prim=1; for(j=2;j<=nr/2;j++) if(nr%j==0) prim=0; if(prim) cout<<i<<' '; } cout<<endl; } 8. Sa se scrie un numar natural n citit de la tastatura ca suma de trei numere n aturale prime n ordine crescatoare n fisierul prime.txt. (1 nu este numar prim). Ex.Pt. n=12, fisierul prime.txt va contine: 12=2+3+7 12=2+5+5. #include<fstream.h> ofstream f("prime.txt"); int n,nr; int prim(int x) { if(x<=1) return 0; else for(long d=2;d*d<=x;d++) if(x%d==0) return 0; return 1; } void main() {cout<<"n=";cin>>n; for(int i=2;i<=n/3;i++) for(int j=1; j<=(n-i)/2;j++) if(prim(i) && prim(j) && prim(n-i-j)&&(i<j)) {f<<n<<"="<<i<<"+"<<j<<"+"<<n-i-j<<endl; nr++;} f.close(); } 9. 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 elementelor d e pe diagonala secundara. #include<iostream.h> #include<fstream.h> void main() {ifstream f("mat.in"); int a[20][20],m,n,i,j,s=0,p=1; 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;

} for(i=1;i<=n;i++) s=s+a[i][i]; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {if(j==n+1-i) p=p*a[i][j];} cout<<"suma="<<s<<endl; cout<<"produsul="<<p; }

10. 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"); void main() {int n,i,j,v[10][10],rest,a; f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>v[i][j]; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) cout<<v[i][j]<<" "; cout<<endl; } for(i=1;i<=n;i++) { a=v[i][1]; for(j=2;j<=n;j++) while(a!=v[i][j]) if(a>v[i][j]) a=a-v[i][j]; else v[i][j]=v[i][j]-a; cout<<"cmmdc pe linia "<<i<<" este "<<a<<endl; } f.close(); } 11. Pe prima linie a fisierului "date.in" se afla n numere naturale nenule (0<n< 100), Fiecare numar avnd cel mult 4 cifre. Cerinte: Sa se formeze si afiseze un numar din prima cifra a fiecarui element al sirului; a) sa se afiseze pe ecran Da, daca numarul format este palindrom, sau Nu n caz contrar. Date de intrare: 6 12 351 83 814 3 1288 Date de iesire: 138831 Da

(numarul format 138831 este palindrom) #include<iostream.h> #include<fstream.h> #include<conio.h> ifstream f("date.in"); void main() {clrscr(); unsigned int n; unsigned long nr=0,ninv=0,m; while(f>>n) {m=n; while(m>=10) m=m/10; nr=nr*10+m; } cout<<nr<<" "; m=nr; while(m!=0) { ninv=ninv*10+m%10; m=m/10; } if(nr==ninv) cout<<"DA"<<endl<<"(numarul format "<<nr<<" este palindrom)"; else cout<<"NU"<<endl<<"(numarul format "<<nr<<" nu este palindrom)"; f.close(); } 12. 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> #include <conio.h> void main() { char a[51],i,j,n; clrscr(); cout<<"Introduceti textul:"; cin.get(a,25); n=strlen(a); for(i=0;i<n;i++) {if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i] =='u' || a[i]=='A' || a[i]=='E' || a[i]=='I' || a[i]=='O' || a[i] =='U') {for(j=n;j>i;j--) a[j]=a[j-1]; a[i+1]='*'; i++; n++; } } for(i=0;i<n;i++) cout<<a[i]; cout<<endl; }

13. Se citeste un text de la tastatura. Sa se nlocuiasca fiecare vocala cu caract erul *. Afisati textul modificat. #include <iostream.h> #include <string.h> #include <conio.h> void main() { char a[50],i; clrscr(); cout<<"Introduceti textul:"; cin.get(a,49); for(i=0;i<strlen(a);i++) {if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i] =='u') a[i]='*'; if(a[i]=='A' || a[i]=='E' || a[i]=='I' || a[i]=='O' || a[i] =='U') a[i]='*'; } cout<<a<<endl; } 14. ntr-un fisier text sunt pastrate informatii despre elevii unei clase. Pe prim ul rnd este nregistrat numarul n de elevi din clasa. De pe urmatoarele n linii se vor citi pe ntru fiecare elev: numele si CNP-ul. Sa se afiseze numele si sexul celui mai mic elev din clasa. Da ca sunt mai multi elevi cu aceeasi vrsta minima, se vor afisa toti elevii respectivi. Codul numeric personal este format din 13 caractere, astfel: saallzzxxxxxx, unde s precizeaza sexul persoanei respective si poate lua valoarea 1 pentru masculin si 2 pentru feminin , iar aa reprezinta anul , ll reprezinta luna, zz reprezinta ziua din data de nastere. #include #include #include #include #include <iostream.h> <fstream.h> <stdlib.h> <conio.h> <string.h>

void main() { ifstream f("elevi.txt"); clrscr(); char nume[15],numem[15],cnp[14],copie[8]; int i,j,n,s; long k,max; f>>n; f>>nume; f>>cnp; // initializez valorile maxime for(i=0;i<strlen(nume);i++) numem[i]=nume[i]; numem[i+1]=0; for(i=0;i<7;i++) copie[i]=cnp[i]; //copiez doar primele7 cifre, cele semnificative pentru mine k=atol(copie); //conversie sir catre tipul long s=k/1000000; //prima cifra din sir, cea care determina sexul max=k%1000000; //numarul ce determina data nasterii:an,luna,zi for(j=2;j<=n;j++) // incep cautarea unei date de nastere mai mare {f>>nume; f>>cnp; for(i=0;i<7;i++) copie[i]=cnp[i];

k=atol(copie); if(max<k%1000000) {max=k%1000000; s=k/1000000; for(i=0;i<strlen(nume);i++) numem[i]=nume[i]; numem[i]=0; } } cout<<"Numele:"<<numem<<" sexul:"; if(s==1) cout<<'M'<<endl; else cout<<'F'<<endl; f.close(); } 15. 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 minuscul e si majuscule, este identic cu cuvntul obtinut prin citirea caracterelor de la dreapt a la stnga. #include<conio.h> #include<iostream.h> #include<string.h> void main() { char v[100],*p,s[]=" ,;",s1[100]; /*am declarat o variabila de tipul char* numita p si un vector de caractere s pe care l-am initializat cu caracterele spatiu, virgula si punct virgula*/ int nr=0; clrscr(); cout<<"Dati sirul: "; cin.get(v,100); cout<<"Cuvintele palindrom sunt: "; p=strtok(v,s); /*Variabila p retine adresa de inceput a cuvantului. Daca acesta este gasit p va retine o valoare diferita de 0 (zero), cautarea va continua functia strtok(v,s) cauta in v unul dintre caracterele spatiu ; sau , care separa cuvintele */ while(p!=0) { nr++; strcpy(s1,p); //copie cuvantul intr-un alt sir strrev(s1); //inverseaza sirul copiat if(strcmp(s1,p)==0) //compara sirul cu inversul sau si daca sunt egale cout<<p<<" "; //afiseaza ca este palindrom p=strtok(NULL,s); //in momentul in care nu mai sunt cuvinte functia returneaza v aloarea NULL } cout<<endl; cout<<"Sirul citit contine "<<nr<<" cuvinte"; //afiseaza nr de cuvinte

getch(); } 16. Se considera un tablou unidimensional ce contine n numere ntregi. Determinati secventa de elemente de suma maxima. #include <fstream.h> #include <iostream.h> #include <conio.h> int n,a[100],i,j,k,suma,S,st,dr; void main() { clrscr(); ifstream f("numere.in"); f>>n; for (i=1; i<=n; ++i) f>>a[i]; f.close(); for (i=1; i<=n; ++i) { for (j=n; j>=1; --j) { suma=0; for (k=i; k<=j; ++k) suma=suma+a[k]; if (suma>S) { S=suma; st=i; dr=j; } } } cout<<"Suma maxima="<<S<<endl; cout<<"pozitia de inceput a secventei este "<<st<<endl; cout<<"pozitia de sfarsit a secventei este "<<dr<<endl; } 17. Pentru un graf neorientat G(X, U) se cunosc n numarul de noduri, m numarul d e muchii, precum si muchiile grafului. Afisati un mesaj daca acesta este un graf c omplet. #include<iostream.h> void main() { int n,m; cout<<"Introduceti nr. de varfuri: ";cin>>n; cout<<"Introduceti nr. de muchii: "; cin>>m; if(m==n*(n-1)/2) cout<<"graf este complet"; else cout<<"graful nu este complet"; cout<<endl; } 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<fstream.h> ifstream f("g1.txt"); int n,i,j,max,nr,grad[100];

void main() { f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {f>>nr; if(nr==1)grad[i]++; } max=grad[1]; for(i=2;i<=n;i++) if(max<grad[i]) max=grad[i]; cout<<"varfurile de grad maxim= "; for(i=1;i<=n;i++) if(max==grad[i]) cout<<i<<" "; cout<<endl; } 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 este sau nu un par tial al grafului G1. #include<fstream.h> #include<conio.h> ifstream f("g1.txt"); ifstream g("g2.txt"); int n,m,x,y; int citire() {f>>m; g>>n; if(m!=n) {cout<<"Eroare! Grafurile nu au acelasi numar de varfuri"; return 0;} else for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {f>>x; g>>y; if(x==0 && y==1) return 0; } return 1; } void main() {clrscr(); if(citire()==1) cout<<"G2 este graf partial al lui G1"<<endl; else cout<<"G2 nu este graf partial al lui G1"<<endl; } 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> #include <fstream.h> #include <conio.h> ifstream f("graf.txt"); int n,a[10][10];

void citire() {int i,j; f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j]; } int grad_p(int x) {int j,nr=0; for(j=1;j<=n;j++) if(a[x][j]==1) nr++; return nr; } int grad_m(int x) {int i,nr=0; for(i=1;i<=n;i++) if(a[i][x]==1) nr++; return nr; } void main() {clrscr(); citire(); cout<<"Nodurile care au gradul interior egal cu gradul exterior sunt: "<<endl; for(int k=1;k<=n;k++) if(grad_p(k)==grad_m(k)) cout<<k<<" "; cout<<endl; f.close(); }

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