Sunteți pe pagina 1din 38

Codeblocks

Forma generala a unui program in C++ (Codeblocks) este: #include <iostream> program. Fisierul contine intrare/ iesire using namespace std; clase specifice P.O.O int main() principala { cout <<"Salut" << endl; return 0; //include fisierul iostream(in out stream) in // declaratiile unor functii pt. operatii de //spatiul de nume std grupeaza logic functii si //programul (functia) //inceput program //corpul programului

} //sfarsitul programului Programul de mai sus afisaza Salut pe ecran. In C++ este diferenta intre literele mari si mici. Ex: Void void , MAIN main Tipuri standard de date: 1)Tipul INTREG 100 , -100 2)Tipul REAL ex. 2.1231, -123.32, 102 LIMITE true(1) false(0) [0 , 255] [-32.768 , 32.767] [0 , 65.535] [-2.147.483.648 , 2.147.483.647] [0 , 4.294.967.295] [-2.147.483.648 , 2.147.483.647] [0 , 4.294.967.295] [-9.223.372.036.854.775.808 , 9.223.372.036.854.775.807] [0 , 18.446.744.073.709.551.615] [1.17549e-038 , 3.40282e+038] [2.22507e-308 , 1.79769e+308] [3.3621e-4932 , 1.18973e+4932]

TIP bool char short int unsigned short int int unsigned int long unsigned long long long unsigned long long float double long double

MEMORIE OCUPATA 1B 1B 2B 2B 4B 4B 4B 4B 8B 8B 4B 8B 12B

Afisarea momoriei ocupate si a limitelor datelor pentru un tip specificat se face: g << "Dimensiune int: " << sizeof(int) << endl; g << "Limite: " << numeric_limits<int>::min() << ' ' << numeric_limits<int>::max() <<endl;

Tipul char

(int) in fata unui caracter returneza codul ASCII a caracterului Ex: #include <iostream> using namespace std; char a,b,c; int main() { cout<<"dati un caracter " ; cin>>a; cout <<"caracterul citit este: " <<a<<" si are codul ASCII "<<(int)a<<endl; b=82;//82 este codul ASCII a R cout<<b<<" are codul ASCII "<<(int)b<<endl; //afiseaza caracterul cu codul ASCII 82 c=b+1; //variabila c va memora caracterul cu codul ASCII 83 adica S cout<<c<<" are codul ASCII "<<(int)c; //afiseaza caracterul cu codul ASCII 83 return 0; } VOCABULARUL Setul de caractere 1) Litere a,b,..z,A,BZ 2) cifre 0,1,2,9 3) caractere speciale @!#%<,.?/ etc. Identificatori - nume de costante , variabile sau functii - incep cu o litera sau cu _ urmata de litere sau cifre. Ex: a12s, as33, _007, 1a ,nt@ Cuvinte cheie - while,for,if , int cout,cin etc Comentarii // pentru un rand /* pentru mai multe randuri */ Separatori space , (virgila) ; enter Citirea ( cin ) realizeaza citirea variabilelor de la tastatura cin>>a; //citeste variabila a de la tastatura cin>>a>>b>>x; //citeste variabilele a,b si x de la tastatura Afisarea (cout) realizeaza afisarea pe ecran a unui mesaj si/sau a unei variabile 1)cout<<"Salut"; //afiseaza cuvantul salut pe ecran 2)cout<<s; //afiseaza cotinutul variabilei s pe ecran 3)cout<<"suma este: "<<s<<endl; //daca variabila s are valoarea 201 se afiseaza pe ecran suma este: 201 si apoi cursorul trece la rand nou 4)cout<<"suma este: "<<s<<endl << cout<<"produsul este: "<<p; //afiseaza suma este: 201 produsul este: 330 (pe randuri diferite din cauza lui endl) Atribuirea ( = ) x=2; // x primeste valoarea 2 a=a+1; //a creste cu 1 s=s+x; //s creste cu x

p=p*x; //p creste de x ori x=y; // lui x i se atribuie valoarea lui y Probleme 1.Suma a doua numere 2.Aria unui dreptunghi 3.Media aritmetica a 3 numere

Operatori in C++
a)Operatori aritmetici

+ (adunare) a+b - (scadere) a-b * (inmultire) a*b % (modulo restul impartirii 10%3 este 1, 125%10 este 5) / (impartire sau div) 1) / este div - atunci cand ambele numere din operatie sunt intregi
#include <iostream> using namespace std; long b , a, x; int main() { cout << "dati a si b"; cin >> a >> b; x = a / b; cout << "x=" << x << endl; return 0; } Pentru a=101 si b=20 se afiseaza 5

2) / este impartire - atunci cand cel putin unul din numere este real
#include <iostream> using namespace std; float b , a, x; int main() { cout << "dati a si b"; cin >> a >> b; x = a / b; cout << "x=" << x << endl; return 0; } Pentru a=101 si b=20 se afisaza 5.05 Daca avem int a; si float b; sau float a; si int b; rezultatul afisat va fi acelasi. Impartirea a doua numere intregi se face prin conversia catre un numar real cu (float) #include <iostream> using namespace std; int a,b; float x; int main() { cout << "dati a si b"; cin >> a >> b;

x = a / (float)b; cout << "x=" << x << endl; return 0; } Daca a=101 si b=20 se afisaza 5.05 In C++ se pot face atribuiri de genul: 1) int <-float #include <iostream> using namespace std; int a; float x; int main() { cout << "dati a si x"; cin >> a >> x; a=x; cout << "a=" << a << endl; return 0; } Daca a=1000 si x=2.35 se afiseaza 2 (a primeste doar valoarea 2 nu si 0.35) 2) float <- int Daca la programul anterior se face atribuirea x=a; (x=22.22 si a=100) in x se va memora 100 (adica 100.00)

b) Operatori relationali
> (mai mare) < (se subintelege!!!) >= (mai mare si egal) <= (mai mic si egal) == (egal !!!!!!!) != (diferit)

c) Operatori de incrementare/decrementare
++ (incrementare cu 1 adica creste cu 1) --(decrementare cu 1 adica scade cu 1) a++ ( explicatie: a=a+1; a creste cu 1) ++a (a creste cu 1) #include <iostream> using namespace std; int a,b; int main() { cout << "dati a si b"; cin >> a>>b; a++;b--; cout << "a="<<a << endl; cout << "b="<<b << endl; return 0; } Pentru a=100 si b=20 se afisaza a=101 si b=19 ++a este diferit de a++ daca a este implicat intr-o operatie #include <iostream>

using namespace std; int a,b,s; int main() { cout << "dati a si b"; cin >> a>>b; s=b+(++a); //mai intai se face ++a si apoi se face s=b+a cout << "a="<<a << endl; cout << "s="<<s << endl; return 0; } Daca a=100 si b=20 se afiseaza a=101 si s=121 Daca se inlocuieste s=b+(++a); cu s=b+(a++); se afiseaza 120 (se face mai intai s=b+a si apoi se face a++) Ex 1: a=3; b=++a; => b=4 si a=4 ex2: a=3; b=a++; => b=3 si a=4

d) Operatori logici
! not (negat) && and (si) || or (sau) Ex: a<=b && a<c (explicatie: a<=b si a<c) c!=a || c!=b (c diferit de a sau c diferit de b) !a (explicatie: not a) !(a<=b) a>b (atentie !!!!!!!!!!!!!) !(a<b) a>=b (atentie !!!!!!!!!!!!!) !(a!=b) a==b (atentie !!!!!!!!!!!!!)

e) Operatori de atribuire
= se da (ex: a=x; a=3;) *= (p=p*a p*=a) += (s=s+a s+=a) -= (s=s-a s-=a) /= (x=x/10 x/=10) %= (cif=cif%10 cif%=10) &= |= ^=

actioneaza la nivel de bit pe numere (adica pe reprezentarea numarului in baza 2 !!!) << deplasare la stanga >> deplasare la drepta & si | sau ^ sau exclusiv ~ not a b a&b a|b a^b 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 ~1=0 ~0=1 Operatorul deplasare la stanga << a=3; cout<<(a<<2); 3(10)=11(2) => 1100(2) deplasat => 12(10) deci 3(10)= 12(10) Practic a<<x este a*2x a=1; cout<<(a<<3); se afiseaza 8 Operatorul si & a=13; b=7; cout<<a&b; se afisaza 5 13(10)=1101(2) 7(10)= 111(2) & 0101(2) =5(10) Operatorul sau exclusiv ^ a=13; b=7; cout<<a^b; se afisaza 9 13(10)=1101(2) 7(10)= 0111(2) 1010(2) =10(10) Operatorul deplasare la dreapta >> a=17; cout<<(a>>2); 17(10)=10001(2) => 100(2) deplasat => 4(10) deci 17(10)= 4(10) Practic a>>x este a/2x (div) a=13; cout<<(a>>3); se afiseaza 3 Operatorul sau | a=13; b=7; cout<<a|b; se afisaza 15 13(10)=1101(2) 7(10)= 111(2) | 1111(2) =15(10) Operatorul not ~ ~1101=0010

f) Operatori logici pe biti

Prioritatea operatorilor 1. ( )[ ] paranteze rotunde, paranteze vectori 2. ! ~ + - ++ -- not logic, not pe biti, +5,-5,a++,a-3. * -> pointeri 4. * / % inmultire, div sau impartire, mod 5. + a+b,a-b 6. >> << deplasare pe biti 7. < > <= >= operatori relationali 8. == != operatori relationali egal, diferit 9. & si operator logic pe biti 10. ^ sau exclusiv operator logic pe biti 11. | sau operator logic pe biti 12. && si operator logic 12. || sau operator logic 13. = += -= /= %= >>= <<= operatori de
atribuire

Instructiunea IF
f. generala (variante a),b),c) ) if(conditie) if(conditie) { operatie1; operatii else 1; operatie2; } else { operatii2 ; } varianta a) varianta b) if(conditie) operatie1; sau if(conditie) { operatii 1; } varianta c)

Explicatii: Varianta a) Daca conditia este adevarata se executa operatie1, iar daca este falsa se executa operatie2. Nu se pot executa ambele operatii ( operatie1 si operatie2 ). La executia if-ului se executa operatie1 sau operatie2, nu se poate sa nu se execute nici una. Varianta b) Daca if-ul sau else-ul au mai multe operatii ( 2,3,..) acestea se grupeaza intre acolade {.} Varianta c) La if-ul simplificat se realizeaza executia operatie1 daca condita este adevarata, si daca conditia este falsa nu se face nimic. Daca if-ul are mai multe operatii ( 2,3,..) acestea se grupeaza intre acolade {.} In C++ 0 este fals si 0 adevarat Tabel pentru conditii logice: 0 false 1 true

a F F A A

b F A F A

a&&b F F F A

a||b F A A A

Pr1. Min a doua numere #include <iostream> using namespace std; int a,b; int main() { cout <<"Dati valori pentru a si b"; cin>>a>>b; if (a<b) cout << "minimul este:"<<a<<endl; else cout << "minimul este:"<<b<<endl; return 0; } Pr2. Max a 3 numere #include <iostream> using namespace std; int a,b,c; int main() { cout << "Dati valori pentru a, b si c" << endl; cin >>a>>b>>c; if(a>=b && a>=c) cout<<"Maximul este a"<<endl; if(b>=a && b>=c) cout<<"Maximul este b"<<endl; if(c>=a && c>=b) cout<<"Maximul este c"<<endl; return 0; } Pr3. Max a 5 numere #include <iostream> #include <iostream> using namespace std; using namespace std; int a,b,c,d,e,maxi; int a, b, c, d, e, maxi; int main() int main() { { cout << "dati 5 cout << "Dati valori pentru a,b,c,d si e" numere"; << endl; cin >> a >> b >> c >> d cin >>a>>b>>c>>d>>e; >> e; if(a>=b && a>=c && a>=d && a>=e) maxi = a; maxi=a; if (maxi < b) maxi = b; if(b>=a && b>=c && b>=d && b>=e) if (maxi < c) maxi = c; maxi=b; if (maxi < d) maxi = d; if(c>=a && c>=b && c>=d && c>=e) if (maxi < e) maxi = e; maxi=c; cout<<"Max if(d>=a && d>=c && d>=b && d>=e) este:"<<maxi; maxi=d; return 0; if(e>=a && e>=c && e>=d && e>=b) } maxi=e; cout<<"maximul este:"<<maxi; return 0;

Pr4. Ec de gr.I #include <iostream> using namespace std; int a,b; float x; int main() { cout << "Dati coeficientii ecuatiei a si b" << endl; cin>>a>>b; if(a!=0){ x=-(float)b/a; cout<<x<<endl; } else if(b==a) cout<<"orice x este solutie"<<endl; else cout<<"nu exista solutii"; return 0; }

Pr5. Ec de gr.II #include <iostream> #include <cmath> using namespace std; int a, b, c, d; float x1, x2; int main() { cout << "Dati valori pentru a, b si c" << endl; cin >> a >> b >> c; if(a!=0){ d=b*b-4*a*c; if(d>=0){ x1=(-b+sqrt(d))/(float)(a*2); x2=(-b-sqrt(d))/(float)(a*2); cout<<"x1="<<x1<<endl<<"x 2="<<x2; } else cout <<"nu exista solutii reale"; } else{ if(b!=0){ x1=-(float)c/b; cout <<x1<<endl; } else{ if (c==b) cout<<"orice x1 e solutie a ecuatiei"; else cout<<"nu exista solutie pt ecuatie"; }} return 0; }

Pr6. Relatia intre 3 numere(<,>,=) #include <iostream> using namespace std; int a,b,c; int main() { cout << "Dati valori pentru a, b" << endl; cin >>a>>b; if(a>b) cout<<"a >b"<<endl;

if(a<b) cout<<"a<b"<<endl; if(a==b) cout<<"a==b"<<endl; return 0; } Pr7. Adunarea a doua durate de timp 9 3 13 30 20 (h1 m1 s1) 42 50 (h2 m2 s2) 13 10 (h m s )

#include <iostream> using namespace std; int h, h1, h2, m, m1, m2, s, s1, s2; int main() { cout << "Dati valori pentru h1,h2,m1 si m2,s1,s2:" << endl; cin >> h1 >> m1 >> s1 >> h2 >> m2 >> s2; s = s1 + s2; m = m1 + m2; h = h1 + h2; if (s >= 60) { s = s - 60; m = m + 1; } if (m >= 60) { m = m - 60; h = h + 1; } cout << h << " " << m << " " << s << endl; return 0; } Pr8. Inversul unui numar short int Pr9. Comparati doua date calendaristice Pr10. Fie a,b,c laturile unui triunghi. Precizati tipul triunghlui: oarecare, isoscel, echilateral, dreprunghic, dreptunghic isoscel. Pr11. Fie 3 numere a,b,c. precizati relatiile dintre ele: a=b=c,abc,a=bc,a=cb,b=ca Tema Inversul unui numar de 3 cifre Min 4 nr

Instructiuni repetitive (for, while, do while) for


forma generala: for( i=vali; i<=valf; i++ ) operatie1 sau for( i=vali; i<=valf; i++ ) { operatii1 } unde vali valoare initiala valf valoare finala executie: i - ia valorile vali,vali+1,vali+2, .valf-1,valf si pentru fiecare valoare a lui i se executa operatie1. Ex1: for(i=1;i<=n;i++) cout<<i<< ; se afiseaza pe ecran 1 2 3 4 5 ..n Exista for(i=n;i>=1;i--) cout<<i<< ; se afiseaza pe ecran n n-1 .. 3 2 1 Exista for(i=2;i<=11;i=i+2) cout<<i<< ; se afiseaza pe ecran 2 4 6 8 10 Ex2: Calculati suma s=1+2+3+100 s=0; for(i=1;i<=n;i++) s+=i; cout<<suna este: <<s; Probleme: 1.Calculati p=2*4*6* ..*n 2.E=1/1+1/2+1/3++1/n //p=2*4*..*n #include <iostream> #include <iostream> using namespace std; using namespace std; int i,n; int i,n,p; float s; int main() int main() { { cout<<"Dati un numar n par: "; cout<<"Dati n: "; cin>>n; cin>>n; p=1; s=0; for(i=2;i<=n;i=i+2) p*=i; for(i=1;i<=n;i++) s+=(float)1/i; cout<<"Produsul nr pare din sir cout<<"Suma este:"<<s; este:"<<p; return 0; return 0; } } 3.S=2+5+8+..+n #include <iostream> using namespace std; int i,n,s; int main() { cout<<"Dati un numar n par: "; cin>>n; s=0; for(i=2;i<=n;i=i+3) s+=i; cout<<"Suma este:"<<s; return 5. E=1 + 1*2 + 1*2*3 + 1*2*3*4 + +1*2*3*..*n 4.S=23+43+63++n3 #include <iostream> using namespace std; int i,n,s; int main() { cout << "Dati un nr n:"; cin>>n; for(i=2;i<=n;i=i+2) s+=i*i*i; cout<<"Suma este:"<<s; return 0; } 6. Suma a n numere //suma a n numere

#include <iostream> using namespace std; int i, s, n, p; int main() { cout << "Dati un nr n:"; cin >> n; p = 1; for (i = 1;i <= n;i++) { p *= i; s += p; } cout << "Suma este:" << s; return 0; } 7.Suma numerelor pare dintr-un sir #include <iostream> using namespace std; int i, s, n, x; int main() { cout << "Dati un nr n:"; cin >> n; for (i = 1;i <= n;i++) { cin >> x; if(x%2==0)s += x; } cout << "Suma celor pare este:" << s; return 0; } 9. Pentru un sir de n numere aflati minimul par. //minimul par dintr-un sir de n #include <iostream> using namespace std; int x,mini,n,i; int main() { cout << "Dati un nr n: "; cin>>n; mini=2000000000; for(i=1;i<=n;i++){ cin>>x; if(x%2==0 && x<mini) mini=x; } if(mini==2000000000) cout<<"Nu exista minim"; else cout<<"Minimul par este:"<<mini; return 0; }

#include <iostream> using namespace std; int i, s, n, x; int main() { cout << "Dati un nr n:"; cin >> n; for (i = 1;i <= n;i++) { cin >> x; s += x; } cout << "Suma este:" << s; return 0; } 8.Pentru un sir de n numere aflati minimul. //minimul dintr-un sir de numere #include <iostream> using namespace std; int i, n, x, mini; int main() { cout << "Dati un nr n:"; cin >> n; mini = 32.000; for (i = 1;i <= n;i++) { cin >> x; if (x < mini) mini = x; } cout << "Minimul din sir este:" << mini; return 0; } 9. Pentru un sir de n numere aflati maximul. //Maximul dintr-un sir #include <iostream> using namespace std; int i,n,maxi,x; int main() { cout << "Dati un nr n:"; cin>>n; for(i=1;i<=n;i++){ cin>>x; if(x>maxi) maxi=x; } cout<<"Maximul este:"<<maxi; return 0; }

9. Pentru un sir de n numere aflati cate elemente pozitive, negative si nule sunt.

10.Media aritmetica a mumerelor pozitive dintrun sir.

//cate numere pozitive, negative si nule sunt intrun sir. #include <iostream> using namespace std; int x, i, n, s, kn, kp, ko; int main() { cout << "Dati un nr:"; cin >> n; for (i = 1;i <= n;i++) { cin >> x; if (x > 0) kp = kp + 1; if (x == 0) ko = ko + 1; if (x<0) kn = kn + 1; } cout << "Nr el. pozitive este:" << kp<< endl; cout << "Nr el. negative este:" << kn<< endl; cout << "Nr el. nule este:" << ko; return 0; }

//media aritmetica a nr. pozitive dintr-un sir #include <iostream> using namespace std; int i, n, x, s, k; float ma; int main() { cout << "Dati un nr:"; cin >> n; for (i = 1;i <= n;i++) { cin >> x; if (x > 0) { s += x; k++; } } ma = (float)s / k; cout << "ma=" << ma; return 0; }

Tema S=100+98+96+94+.+12 S=1/(1*1)+ 1/(2*2)+ 1/(3*3)+.. +1/(n*n) S=(1)*(1+2)*(1+2+3)*..*(1+2+3++n) 11.Divizorii unui numar x. 12.Fie doua numere. Afisati numarul ce are cei mai multi divizori. 13.Verificati daca un numar este perfect. 14.Verificati daca un numar este prim. 15. Media aritmetica a numerelor pare 16. Fie doua numere. Afisati numarul ce are cei mai multi divizori. si media aritmetica a numerelor #include <iostream> impare. using namespace std; #include <iostream> int i,n,x,y,k1,k2; using namespace std; int main() int i,n,x,sp,si,kp,ki; { float map,mai; cout<<"Dati un nr x:"; int main() cin>>x; { cout<<"Dati un nr y:"; cout << "Dati un nr n:"; cin>>y; cin>>n; for(i=1; i<=x; i++) for(i=1;i<=n;i++){ if(x%i==0) k1++; cin>>x; for(i=1; i<=y; i++) if(x%2==0){ sp+=x; if(y%i==0) k2++; kp++;} if(k1>k2) cout<<"x are mai multi divizori"; else { si+=x; else if(k1==k2) cout<<"x si y au acelasi nr de ki++;} divizori"; } else cout<<"y are mai multi divizori"; map=(float)sp/kp; return 0; mai=(float)si/ki; cout<<"Media aritmetica a nr pare } este:"<<map<<endl; cout<<"Media aritmetica a nr impare este:"<<mai; return 0;

WHILE

- structura repetitiva cu test initial Forma generala: while(cond) instructiune1; sau while(cond){ instructiuni1; } Execututie: Daca conditia (cond) este adevarata se realizeaza executia repetata. Cand conditia (cond) este falsa se iese din repetare.

DO WHILE

- structura repetitiva cu test final Forma generala: do{ instructiune1; }while(cond); Execututie: Daca conditia (cond) este adevarata se realizeaza executia repetata. Cand conditia (cond) este falsa se iese din repetare. Probleme 1.Descompunerea in factori primi pt. un numar x #include <iostream> using namespace std; int x, d, p; int main() { cout << "Dati un nr x:"; cin >> x; d = 2; while (x != 1) { p = 0; while (x % d == 0) { p++; x = x / d; } if (p > 0) cout << d << " " << p << endl; d++; } return 0; } 3. Cmmdc a doua numere. #include <iostream> 2. Suma a n numere dintr-un sir #include <iostream> using namespace std; int i,n,x,s; int main() { cout << "Dati un nr n:"; cin>>n; i=1; while(i<=n){ cin>>x; s+=x; i++; } cout<<"Suma nr din sir este:"<<s; return 0; }

4.Cmmmc a doua numere. #include <iostream>

using namespace std; int x,y; int main() { cout << "Dati doua nr x si y:"; cin>>x>>y; while (x!=y){ if(x>y) x=x-y; else y=y-x; } cout<<"cmmdc a nr x si y este:"<<x; return 0; }

using namespace std; int a,b,p; float cmmmc; int main() { cout << "Dati doua nr a si b:"; cin>>a>>b; p=a*b; while(a!=b){ if(a>b) a=a-b; else b=b-a; } cmmmc=p/a; cout<<"cmmmc="<<cmmmc; return 0; }

Probleme cu structuri repetitive


1.Media aritmetica a numerelor pare si media aritmetica a numerelor impare dintr-un sir. #include <iostream> using namespace std; int i,n,x,sp,si,kp,ki; float map,mai; int main() { cout << "Dati un nr n:"; cin>>n; for(i=1;i<=n;i++){ cin>>x; if(x%2==0){ sp+=x; kp++;} else { si+=x; ki++;} } map=(float)sp/kp; mai=(float)si/ki; cout<<"Media aritmetica a nr pare este:"<<map<<endl; cout<<"Media aritmetica a nr impare este:"<<mai; return 0; } 3.Precizati daca exista numere impare intr-un sir. #include <iostream> using namespace std; int i,x,n,ok; int main() { cout << "Dati un nr n:"; 2. Fie doua numare x si y. Afisati un mesaj ce precizeaza care numar are mai multi divizori. #include <iostream> using namespace std; int i,n,x,y,k1,k2; int main() { cout<<"Dati un nr x:"; cin>>x; cout<<"Dati un nr y:"; cin>>y; for(i=1; i<=x; i++) if(x%i==0) k1++; for(i=1; i<=y; i++) if(y%i==0) k2++; if(k1>k2) cout<<"x are mai multi divizori"; else if(k1==k2) cout<<"x si y au acelasi nr de divizori"; else cout<<"y are mai multi divizori"; return 0; }

cin>>n; ok=0; for(i=1;i<=n;i++){ cin>>x; if(x%2==1) ok=1; } if(ok==1) cout<<"Da"; else cout<<"Nu"; return 0; }

Fisiere
Intr-o problema citirea datelor se poate face de la tastatura sau din fisier. Afisarea rezultatelor se poate face pe ecran sau intr-un fisier. Problema Suma a doua numere. Citirea numerelor se face din fisierul gigel.in si afisarea sumei se face in fisierul gigel.out; #include <iostream> #include<fstream> using namespace std; fstream f("gigel.in",ios::in); -> indicatorul f va indica la fisierul gigel.in fstream g("gigel.out",ios::out); -> indicatorul g va indica la fisierul gigel.out //ifstream f("gigel.in"); //ofstream g("gigel.out"); int a,b,s; int main() { f>>a>>b; s=a+b; g<<"suma este:"<<s; f.close(); g.close(); return 0; } 1.//suma unui sir de numere cu fisiere #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int i,n,x,s; int main() { f>>n; for(i=1;i<=n;i++){ f>>x; s+=x; } g<<"suma este:"<<s; f.close(); g.close(); return 0; } 2.Afisati minimul, maximul si cmmdc dintre minim si maxim #include <iostream> #include<fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int mini,maxi,i,n,x; int main() { f>>n; maxi=-32000; mini=32000; for(i=1;i<=n;i++){ f>>x; if(maxi<x) maxi=x; if(mini>x) mini=x; } g<<"Minimul nu este:"<<mini<<endl; g<<"Maximul nu este:"<<maxi<<endl; while(mini!=maxi)

if(mini>maxi) mini=mini-maxi; else maxi=maxi-mini; g<<"cmmdc este:"<<mini; f.close(); g.close(); return 0; 3.Precizati daca un numar este prim. #include <iostream> #include<fstream> #include<cmath> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int x,k,i; int main() { f>>x; for(i=2;i<=sqrt(x);i++) if(x%i==0){ k=1;break;} if(k==0) g<<"Da"; else g<<"Nu"; f.close(); g.close(); return 0; } 5.Suma numerelor prime dintr-un sir de n. #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int n,i,x,j,k,s; int main() { f>>n; s=0; for(i=1;i<=n;i++){ f>>x; k=0; for(j=1;j<=x;j++){ if(x%j==0) k++;} if(k==2) s=s+x; } g<<s; f.close(); g.close(); return 0; } } 4.Afisati numerele prime din intervalul [a.b]. #include <iostream> #include<fstream> using namespace std; fstream f("sir.in", ios::in); fstream g("sir.out", ios::out); int a, b, i, x, j, k; int main() { f >> a >> b; for (i = a;i <= b;i++) { x = i;k = 0; for (j = 1;j <= x;j++) { if (x % j == 0) k++; } if (k == 2) g << x << " "; } f.close(); g.close(); return 0; }

Vectori

Un vector reprezinta un sir de elemente cu un nume comun asezate in ordine. Ex: un vector cu 10 elemente: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 Declararea vectorui de mai sus in C++ se face astfel: int a[10] . Elementele sale sunt: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] In general nu vom folosi elemetul a[0]. Operatii de baza cu vectori 1) citirea elementelor unui vector a)de la tastatura cout<<"dati n"; cin >> n; for (i = 1;i <= n;i++){ cout<<"dati element"; cin >> a[i]; } b)din fisier f >> n; for (i = 1;i <= n;i++) 2) afisarea elementelor unui vector a)afisarea pe ecran for (i = 1;i <= n;i++) cout<< a[i]<< " "; b)in fisier for (i = 1;i <= n;i++) g<< a[i]<< " "; 3) suma elementelor unui vector s=0; for (i = 1;i <= n;i++) s+=a[i]; cout<< "Suma este: "<<s; 4) minimul dintr-un sir mini=320000; for (i = 1;i <= n;i++) if (min>a[i]) mini=a[i]; cout<< "minimul este: "<<mini; 5) cate elemente pare sunt intr-un sir k=0; for (i = 1;i <= n;i++) if(a[i]%2==0) k++; cout<< "k este: "<<k; 6) inlocuiti elementele pare cu ultima cifra numarului si cele impare cu penultima cifra for (i = 1;i <= n;i++) if(a[i]%2==0) a[i]=a[i]%10; else a[i]=a[i]/10%10 pr1 Suma numerelor dintr-un sir #include <iostream> #include<fstream> using namespace std; fstream f("sir.in", ios::in); fstream g("sir.out", ios::out); int a[1000], n, i, s; int main() { f >> n; for (i = 1;i <= n;i++) f >> a[i];

for (i = 1;i <= n;i++) s+=a[i]; g << "Suma este:" << s; f.close(); g.close(); return 0; } Pr2 Suma numerelor prime dintr-un sir #include <iostream> #include<fstream> #include<cmath> using namespace std; fstream f("sir.in", ios::in); fstream g("sir.out", ios::out); int a[100], n, i, s, x, j, k; int main() { f >> n; for (i = 1;i <= n;i++) f >> a[i]; for (i = 1;i <= n;i++) { x = a[i]; k=0; for (j = 2;j <= sqrt(x);j++) if (x % j == 0) k++; if (k == 0) s += x; } g << "Suma nr prime din sir este:" << s; f.close(); g.close(); return 0; } Pr3 //afisati numerele vecine ce au aceiasi paritate Varianta 1 #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[1000],n,i,x,y; int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<n;i++){ x=a[i]; y=a[i+1]; if((x%2==0&&y%2==0)||(x%2==1&&y%2==1)) g<<a[i]<<" "<<a[i+1]<<endl; } f.close(); g.close(); return 0; } //afisati numerele vecine ce au aceiasi paritate Varianta 2

#include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[1000],n,i,x,y; int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<n;i++){ x=a[i]; y=a[i+1]; if(x%2==y%2)) g<<a[i]<<" "<<a[i+1]<<endl; } f.close(); g.close(); return 0; } Fie doua multimi a si b. Afisati intersectia celor doua multimi. #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[1000],i,n,m,b[1000],j; int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; f>>m; for(j=1;j<=m;j++) f>>b[j]; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i]==b[j]) g<<a[i]<<" "; g.close(); return 0; } Fie doua multimi a si b. Afisati reuniunea celor doua multimi. #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[1000],b[1000],n,i,j,m,k; int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; f>>m; for(j=1;j<=m;j++) f>>b[j]; for(i=1;i<=n;i++) g<<a[i]<<" "; for(j=1;j<=m;j++){ k=0; for(i=1;i<=n;i++) if(b[j]==a[i]) k++; if(k==0) g<<b[j]<<" "; } f.close(); g.close(); return 0; } Fie un sir de n elemente. Afisati sirul ordonat crescator.(Met bulelor) #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[136],i,n,aux,ord; int main() {

Fie un sir de n elemente. Afisati sirul ordonat crescator.(Met selectiei) #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[145],n,i,j,aux; int main() {

f>>n; for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i]>a[j]){ aux=a[i]; a[i]=a[j]; a[j]=aux; } for(i=1;i<=n;i++) g<<a[i]<<" "; g.close(); return 0; } Fie un sir de numere in intervalul[1,1000].Afisati elementele ce apar de cele mai multe ori. (cu frecventa) sir.in 6 838753 sir.out 38 #include <iostream> #include<fstream> using namespace std; fstream f("sir.in", ios::in); fstream g("sir.out", ios::out); int fr[1001], x, i, n, maxi,j; int main() { f >> n; maxi = 0; for (i = 1;i <= n;i++) { f >> x; fr[x]++; } for (j = 1;j <= 1000;j++) if (maxi < fr[j]) maxi = fr[j]; for (j= 1;j <= 1000;j++) if (maxi == fr[j]) g << j<< " "; f.close(); g.close(); return 0; }

f>>n; for(i=1;i<=n;i++) f>>a[i]; do{ ord=1; for(i=1;i<n;i++) if(a[i]>a[i+1]){ aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; ord=0;} } while(ord==0); for(i=1;i<=n;i++) g<<a[i]<<" "; return 0; } //afisati elementele pare descrescator si suma minimului sir.in 6 21 14 42 81 91 36 sir.out 42 36 14 5 #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[1000],n,j,aux,i,sc,cif,x; int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(a[i]<a[j]){ aux=a[i]; a[i]=a[j]; a[j]=aux;} for(i=1;i<=n;i++) if(a[i]%2==0) g<<a[i]<<" "; g<<endl; x=a[n]; while(x!=0){ cif=x%10; sc+=cif; x=x/10; } g<<sc; f.close(); g.close(); return 0; }

Matrici
a[1] [1] a[2] [1] a[3] [1] a[4] [1] a[4] [1] a[1] [2] a[2] [2] a[3] [2] a[4] [2] a[4] [2] a[1] [3] a[2] [3] a[3] [3] a[4] [3] a[4] [3] a[1] [4] a[2] [4] a[3] [4] a[4] [4] a[4] [4]

(tablouri bidimensionale)

O matrice este un tablou cu m linii si n coloane. Ex: o matrice a 4x5 a[1][5]

a[2][5]

a[3][5]

a[4][5]

a[4][5]

Prima linie este formata din elementele: a[1][1] a[1][2] a[1][3] a[1][4] a[1][5] A treia coloana: a[1][3] a[2][3] a[3][3] a[4][3] Un element din matrice este a[i][j] si el se afla in matrice pe linia i si coloana j;

Operatii cu matrici
a)citirea unei matrici citirea de la tastatura f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; citirea de la tastatura cout<<"dati numarul de linii si coloane:"; cin>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) { cout<<"dati element:"; cin>>a[i][j]; }

b)afisarea unei matrici afisarea in fisier for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl; } afisarea pe ecran for(i=1;i<=m;i++){ for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; }

c)suma elementelor dintr-o matrice s=0; for(i=1;i<=m;i++) for(j=1;j<=n;j++) s+=a[i][j]; cout<<"suma din matrice este: "<<s;
Sa se construiasca o matrice astfel incat a[i][j] este minimul dintre i si j Pentu mxn(3x4) rezulta matricea

1111 1222 1233 #include <iostream> #include <fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int a[100][100],m,n,i,j; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(i<j) a[i][j]=i; else a[i][j]=j; for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl; } f.close (); g.close (); return 0; } Suma de pe prima linie si suma de pe ultima coloana #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],m,n,i,j,s1,s; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(j=1;j<=n;j++) s1+=a[1][j]; g<<s1<<endl; for(j=1;j<=n;j++) s+=a[m][j]; g<<s<<endl; f.close (); g.close (); return 0; }

Construiti matricea mxn Ex: pentru o matrice 5x4 rezulta 1234 1234 1234 1234 1234 #include <iostream> #include <fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int a[100][100],m,n,i,j; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) a[i][j]=j; for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl;} f.close (); g.close (); return 0; } Afisati elementele divizibile cu 3 si minimul. #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[15][20],m,n,i,j,mini; int main() { f>>m>>n; mini=32.000; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl;} for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(a[i][j]%3==0) g<<a[i][j]<<" "; g<<endl; for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(a[i][j]<mini) mini=a[i][j];

g<<mini; f.close(); g.close(); return 0;


Suma elementelor si numarul elementelor pare #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],s,k,i,j,n,m; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++) for(j=1;j<=n;j++) s+=a[i][j]; g<<s<<endl; for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(a[i][j]%2==0) k++; g<<k; f.close(); g.close(); return 0; }

} Suma pe fiecare linie dintr-o matrice Var I #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],m,n,i,j,s; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++){ s=0; for(j=1;j<=n;j++) s+=a[i][j]; g<<s<<endl; } f.close(); g.close(); return 0; }
Suma de pe linia p #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],m,n,p,i,j,sp; int main() { f>>m>>n>>p; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(j=1;j<=n;j++) sp+=a[p][j]; g<<sp; f.close(); g.close(); return 0; }

Suma pe fiecare linie dintr-o matrice(cu un vector suplimentar) var II #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],b[10],m,n,i,j; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++) for(j=1;j<=n;j++) b[i]+=a[i][j]; for(i=1;i<=m;i++) g<<b[i]<<endl; f.close(); g.close(); return 0; }

Afisarea in zig-zag a unei matrici sir.in 33 168 345 279 sir.out 168543279 #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],n,m,i,j; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++){ if(i%2==1) for(j=1;j<=n;j++) g<<a[i][j]<<" "; else for(j=n;j>=1;j--) g<<a[i][j]<<" ";} f.close(); g.close(); return 0; }

Ordonarea elementelor dintr-o matrice sir.in 33 7 2 1 10 8 4 3 1 2 sir.out 112 234 7 8 10 #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],b[100],m,n,i,j,p,aux; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++) for(j=1;j<=n;j++){p++; b[p]=a[i][j];} for(i=1;i<=p;i++) for(j=i+1;j<=p;j++) if(b[i]>b[j]){ aux=b[i]; b[i]=b[j]; b[j]=aux;} p=1; for(i=1;i<=m;i++) for(j=1;j<=n;j++){ a[i][j]=b[p]; p++;} for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl; } f.close(); g.close(); return 0; }

Stergerea liniei p dintr-o matrice #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[10][10],m,n,i,j,p; int main(){ f>>m>>n>>p; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(i=p;i<m;i++) for(j=1;j<=n;j++) a[i][j]=a[i+1][j]; m--; for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl;} f.close(); g.close(); return 0; }
Afisarea numarului de elemente vecine pare pentru fiecare element din matrice(vecinii de sus, jos, stanga, dreapta) #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[24][40],b[13][60],n,m,i,j,k; int main() { f>>m>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) f>>a[i][j]; for(j=0;j<=n+1;j++) a[0][j]=1; for(i=0;i<=m+1;i++) a[i][n+1]=1; for(i=0;i<=m+1;i++) a[i][0]=1; for(j=0;j<=n+1;j++) a[m+1][j]=1; for(i=1;i<=m;i++) for(j=1;j<=n;j++){ k=0; if(a[i-1][j]%2==0) k++; if(a[i][j+1]%2==0) k++; if(a[i+1][j]%2==0) k++; if(a[i][j-1]%2==0) k++; b[i][j]=k; }

Sumele pe diagonalele paralele cu diagonala principala #include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[30][30],n,i,j,s[900]; int main() { 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++) s[n-i+j]+=a[i][j]; for(i=1;i<=2*n-1;i++) g<<s[i]<<endl; f.close(); g.close(); return 0; }

Sumele pe diagonalele paralele cu diagonala secundara

#include <iostream> #include<fstream> using namespace std; fstream f("sir.in",ios::in); fstream g("sir.out",ios::out); int a[24][40],n,i,j,s[19]; int main() { 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++) s[i+j]+=a[i][j]; for(i=2;i<=2*n;i++) g<<s[i]<<" "; f.close(); g.close(); return 0; }

for(i=1;i<=m;i++){ for(j=1;j<=n;j++) g<<b[i][j]<<" "; g<<endl; } f.close(); g.close(); return 0;}

Functii
//doua feluri int sau void //forma generala( tip nume parametri functiei return apel) // v local si globale p. formali sau efectivi // transmiterea parametrilor prin valoare sau referinta /* tip rezultat nume_functie (parametri functiei){ variabile locale(daca este cazul) corpul functiei (instructiunile functiei) return rezultat } */

Pr1.
Sa se scrie care o functie(de tip int) pentru fiecare cerinta: a)suma a doua numere b)calculul ipotenuzei unui triunghi dreptunghic c)suma cifrelor unui numar x d)suma divizorilor unui numar x #include <fstream> #include<cmath> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int x,y,s; //variabile globale int suma(int a,int b){ //suma a doua numere int s; s=a+b; return s; } float ipotenuza(float a,float b){ //ipotenuza unui triunghi dreptunghic return sqrt(a*a+b*b); } long sumacif(long x){ //suma cif lui x long cif,s; // x,cif,s variabile locale s=0; // !!!!!!!!! while(x){ cif=x%10; s+=cif; x=x/10;} return s; } int t; long sum_div(long a){ //suma divizorilor lui a

int d,s=0; for(d=1;d<=a;d++) if(a%d==0) s+=d; return s; } int main() { int d; f>>x>>y; g<<"suma este:"<<suma(x,y)<<'\n'; g<<"ipotenuza este:"<<ipotenuza(x,y)<<'\n'; g<<"suma cifrelor lui x este "<<sumacif(x)<<'\n'; g<<"suma cifrelor lui y este "<<sumacif(y)<<'\n'; g<<"suma divizorilor lui x este "<<sum_div(x)<<'\n'; f.close();g.close(); return 0; }

Pr2.
Sa se scrie care o functie(de tip void) pentru fiecare cerinta: a)suma a doua numere b)calculul ipotenuzei unui triunghi dreptunghic c)suma cifrelor unui numar x d)suma divizorilor unui numar x e)inversarea continutului a doua variabile //functii void //forma generala( void nume parametri functiei apel) // v local si globale p. formali sau efectivi // transmiterea parametrilor prin valoare sau referinta #include <fstream> #include<cmath> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); long x,y,ss,s; //variabile globale void suma(long x, long y,long &s){ //suma a doua numere s=x+y; } void ipotenuza(float a,float b,float &rez){ //ipotenuza unui triunghi dreptunghic rez=sqrt(a*a+b*b); } void sumacif(long x,long &s){ //suma cifrelor lui x long cif; // x,cif,s variabile locale s=0; // !!!!!!!!! while(x){ cif=x%10; s+=cif; x=x/10;} } void sum_div(long a,long &s){ //suma divizorilor lui x int d; s=0; for(d=1;d<=a;d++)

if(a%d==0) s+=d; } void inverseaza(long &a,long &b){ // & transmitere prin adresa int aux; //inverseaza a cu b aux=a;a=b;b=aux; //se poate si cu comanda swap(a,b); } float ip; int main() { f>>x>>y; suma(x,y,ss); g<<"suma este:"<<ss<<'\n'; ipotenuza(x,y,ip); g<<"ipotenuza este: "<<ip<<'\n'; sumacif(x,s); g<<"suma cifrelor lui x este "<<s<<'\n'; sumacif(y,s); g<<"suma cifrelor lui y este "<<s<<'\n'; sum_div(x,s); g<<"suma divizorilor lui x este "<<s<<'\n'; inverseaza(x,y); g<<"x si y dupa inversare"<<x<<" "<<y<<'\n'; f.close();g.close(); return 0; }

pr3
Afisati numerele dintr-un sir ce au suma cifrelor egala cu 10 #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,i,a[100]; long sumacif(long x){ long cif,s; s=0; while(x){ cif=x%10; s+=cif; x=x/10;} return s; } int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) if(sumacif(a[i])==10) g<<a[i]<<" "; f.close();g.close(); return 0; }*/

pr4

Afisati numerele dintr-o matrice ce au prop. ca atat ele cat si patratul lor sunt palindroame #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,i,j,a[10][10]; int palin(long x){ long cif,inv,y; inv=0; y=x; while(x){ cif=x%10; inv=inv*10+cif; x=x/10; } if (y==inv) return 1; else return 0; } int main() { 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++) if(palin(a[i][j])&&palin(a[i][j]*a[i][j])) g<<a[i][j]<<" "; f.close();g.close(); return 0; } // Afisati suma numerele dintr-un sir #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,i,j,a[100]; //vectorii se transmit prin referinta(prin adresa) implicit //regula: se transmit datele si se primesc rezultatele // in rest toate variabile vor fi locale (pentru siguranta) int suma(int x[100],int n){ int i,s=0; for( i=1;i<=n;i++) s+=x[i]; return s; } int main() { f>>n; for(i=1;i<=n;i++) f>>a[i]; g<<suma(a,n)<<" "; f.close();g.close();

pr5

return 0; }

// Ordonati elementele dintr-un sir cu o functie de citire vector, afisare vector, ordonare vector #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,i,j,a[100]; //vectorii se transmit prin adresa implicit !!!! void citeste(int x[100],int &n){ int i; f>>n; for( i=1;i<=n;i++) f>>x[i]; } void afiseaza(int x[100],int n){ int i; for( i=1;i<=n;i++) g<<x[i]<<" "; g<<'\n';//este echivalent cu g<<endl; } void ordonare(int x[100],int n){ int i,j; for( i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(x[i]>x[j]) swap(x[i],x[j]);// functie ce inverseaza a[i] cu a[j] !!! } int main() { citeste(a,n); afiseaza(a,n); ordonare(a,n); afiseaza(a,n); f.close();g.close(); return 0;}

pr 6

pr7
Afisati suma numerele dintr-o matrice #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,i,j,a[10][10]; //matricile si vectorii se transmit prin adresa //regula: se transmit datele si se primesc rezultatele // in rest totul variabile locale(pentru siguranta) int suma1(int x[10][10],int n){ int i,j,s=0; for( i=1;i<=n;i++) for(j=1;j<=n;j++) s+=a[i][j]; return s; }

int main() { f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j]; g<<suma1(a,n)<<" "; f.close();g.close(); return 0; } //pr6. Minimul dintr-o matrice ( citirea si afisarea pentru matrici) //pr7. Inversati doua linii p si q dintr-o matrice //pr8. Determinati punctele de "sa" dintr-o matrice(a[i][j] este "sa" daca este //minimul de pe linie si maximul de pe coloana sau invers

Pr8.
Calc. suma numerelor prime dintr-un sir #include <fstream> #include<cmath> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); long a[100],i,n,s; long prim(long x){ int d; if(x==0||x==1) return 0; for(d=2;d<=sqrt((float)x);d++) if(x%d==0) return 0; return 1; } int main() { f>>n; for(i=1;i<=n;i++)f>>a[i]; for(i=1;i<=n;i++) if(prim(a[i])) s+=a[i]; g<<s; f.close();g.close(); return 0; }

Pr9
Calc. suma a doua numere daca ambele sunt prime si produsul in caz contrar #include <fstream> #include<cmath> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); long x,y; long prim(long a){ int d,k;

for(d=1;d<=a;d++) if(a%d==0) k++; if(k==2)return 1; else return 0; } long prim_eficient(long a){ int d; if(a==0||a==1) return 0; for(d=2;d<=sqrt((float)a);d++) if(a%d==0) return 0; return 1; } int main() { int d; f>>x>>y; if(prim_eficient(x)&&prim_eficient(y)) g<<x+y; else g<<x*y; f.close();g.close(); return 0; } //tema fie 3 nr x,y,z.cal. x nr.de cifre y nr. divizori z cate cif pare are

Pr10.
Construiti o matrice cu primele elemente in ordine crescatoare ce au exact trei divizori. pt. n=4 se va afisa matricea de mai jos: 4 9 25 49 121 169 289 361 529 841 961 1369 1681 1849 2209 2809 obs: numerele cautate sunt patrate de numere prime!! #include <fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int i, k, n, j, a[1000][1000], b[10000], nr; long prim(long a ){ int d, kk; d=0; kk=0; for(d=1; d<=a; d++) if(a%d==0) kk++; if(kk==2) return 1; else return 0;} int main() {f>>n; nr=2; k=0; while(k<=n*n){ if(prim(nr)) {k++; b[k]=nr; } nr++; }

k=1; for(i=1; i<=n; i++) for(j=1; j<=n; j++){ a[i][j]=b[k]*b[k]; k++; } for(i=1; i<=n; i++){ for(j=1; j<=n; j++) g<<a[i][j]<<' '; g<<'\n';} return 0; }

Pr11.
//suma elementelor dintr-o matrice #include <fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int n,i,j,a[100][100]; void citire(int x[100][100], int &n){ int i; f>>n; for(i=1 ; i<=n; i++) for(j=1; j<=n; j++) f>>x[i][j]; } void afisare (int x[100][100], int n){ int i; for(i=1 ; i<=n; i++){ for(j=1; j<=n; j++) g<<x[i][j]<<' '; g<<'\n';}} int suma (int x[100][100], int n){ int i, j, s=0; for(i=1; i<=n; i++) for(j=1; j<=n; j++) s+=x[i][j]; return s; } int main() { citire (a, n); g<<suma (a,n)<<endl; afisare(a,n); return 0; }

Pr12
//minimul dintr-o matrice #include <fstream> using namespace std; ifstream f("sir.in");

ofstream g("sir.out"); int n,i,j,a[100][100],mini; void citire(int x[100][100], int &n){ int i; f>>n; for(i=1 ; i<=n; i++) for(j=1; j<=n; j++) f>>x[i][j]; } void afisare (int x[100][100], int n){ int i; for(i=1 ; i<=n; i++){ for(j=1; j<=n; j++) g<<x[i][j]<<' '; g<<'\n';}} int minim (int x[100][100], int n){ int i, j; mini=32000; for(i=1; i<=n; i++) for(j=1; j<=n; j++) if(x[i][j]<mini) mini=x[i][j]; return mini; } int main() { citire (a, n); g<<minim (a,n)<<endl; afisare(a,n); return 0; }

Pr13
// inverseaza doua linii specificate dintr-o matrice Sir.in 3 123 456 789 1 3 (se va inversa linia 1 cu linia 3) Sir.out 789 456 123 #include <fstream> using namespace std; ifstream f("sir.in"); ofstream g("sir.out"); int n,i,j,a[100][100], p, q; void citire(int x[100][100], int &n){ int i; f>>n; for(i=1 ; i<=n; i++) for(j=1; j<=n; j++) f>>x[i][j]; }

void afisare (int x[100][100], int n){ int i; for(i=1 ; i<=n; i++){ for(j=1; j<=n; j++) g<<x[i][j]<<' '; g<<'\n';}} void inversare (int x[100][100], int n){ int i, j; f>>p>>q; for(j=1; j<=n; j++) swap(x[p][j],x[q][j]); } int main() { citire (a, n); inversare (a,n); afisare(a,n); return 0; }

Pr14.
//Se considera o matrice patratica // Sa se scrie o functie ce calculeaza //cate elemente din matrice au toate cifrele pare #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int n,j,i,a[100][100]; void citire (int x[100][100],int&n){ int i,j; f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>x[i][j]; } int calcul (int x){ int cif; while(x){ cif=x%10; if(cif%2==1) return 0; x=x/10; } return 1; } int main(){ int k=0; citire (a,n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(calcul(a[i][j])) k++; if(k==n*n) g<<"DA";

else g<<"NU"; f.close(); g.close(); return 0;}

pr15
//pentru un numar x construiti numarul format din cifrele sale pare //ex: pt x=12798 => 82 #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int x; int stergere(int x){ int cif,y=0; while(x){ cif=x%10; if(cif%2==0) y=y*10+cif; x=x/10; } return y; } int main(){ f>>x; g<<stergere(x); f.close(); g.close(); return 0; } Pr16. //verificati daca un sir este ordonat crescator #include <fstream> using namespace std; ifstream f("functii.in"); ofstream g("functii.out"); int a[100],n,i,k; int ordonare_cresc(int x[100], int n){ int i; for(i=1;i<=n-1;i++) if(a[i]>a[i+1]) return 0; return 1; } int main(){ f>>n; k=0; for(i=1;i<=n;i++) f>>a[i]; if (ordonare_cresc(a,n)==1) g<<"DA"; else g<<"NU"; f.close(); g.close(); return 0; }