Sunteți pe pagina 1din 17

Colegiul Naional Al.I.

Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

STRUCTURA LINIAR
1. Se citeste un numr natural de 3 cifre . S se afieze cifrele sale. //a,b,c sunt cifrele numrului; n numrul ntreg n, a, b, c citete n a n%10 n n/10 b n%10 n n/10 c n%10 scriecifrele numarului sunt, a ,ultima cifra scrie b, penultima cifra,c, prima cifra Rezolvare C++ #include<iostream.h> void main( ) { short n,a,b,c;// n numar natural scurt cout<< Intr. valoare pt n :; cin >>n; a = n%10; n = n/10; b = n%10; n = n/10; c = n%10; cout<<cifrele numarului sunt<< a <<ultima cifra; cout<< b<< penultima cifra<<c<< prima cifra; }

2. Fie a un numr natural format din 5 cifre. S se afieze numrul format din prima , a treia i a cincea cifr. a_nou a1*100+a3*10+a5 //a1 prima cifra,a3 a treia cifra //a5 a cincea cifra // n numrul //a_nou-numarul nou ntreg n,a1,a3,a5,a_nou citete a a5 n%10 n n/1000 a3 n%10 n n/100 a5 n%10 scrienoul numar este:, a_nou 3. Cunoscnd media din oral a unui elev i nota din tez s se calculeze media semestrial a acestuia . //notm media din oral cu mo #include<iostream.h> // nota din tez cu nt i media cu m void main( ) ntreg nt { int nt; Real mo,m float mo,m; Citeste mo,nt cout<< Intr. media in real:; cin >>mo;//a se citi o val de // forma 7,33 M ( mo*3+ nt)/4 cout<< Intr. nota la teza ; cin >>nt; Scrie media semestriala este, m M =( mo*3+ nt)/4 ; cout<< media semestriala este<< m; } 1 #include<iostream.h> void main( ) { int n,a1,a3,a5,a_nou; cout<<introduceti numarul:;cin >>n; a5 = n%10; n = n/100; a3= n%10; n = n/100; a5 = n%10; a_nou= a1*100+a3*10+a5; cout<<noul numar este:<< a_nou; }

Exemplu: Pentru numarul n=12345 se va afia a_nou=135

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

4. ntr-o clas sunt E elevi din care B% sunt biei, iar restul sunt fete. Afiai numrul de biei i numrul de fete din clas.( E i B se citesc de la tastatur). #include<iostream.h> void main( ) {int E ,B, f, b ; cout<<Intr. numarul elevilor:; cin >>E; cout<<Intr. procentul baietilor :; cin >>B; b = E*B/100; f = E-b; cout<< numarul fetelor este:<< f; cout << iar al baietilor este: << b;//se afiseaza in continuare} 5. Pentru dou localiti din ara noastr se cunosc coordonatele lor n sistem XOY. S se calculeze i s se afieze distana dintre localiti. Exemplu: intreg xa,ya,xb,yb//xa-abscisa localit. A #include<iostream.h> Pentru A(4,7) i //ya- ordonata localit. A; la fel xb,yb #include<math.h> B(8,10) se obine //d distanta dintre localitati void main( ) d=6 real d; { int xa,ya,xb,yb ; citeste xa,ya,xb,yb float d ; cout<<Introduceti abscisa loc. A:; cin >>xa; d sqrt( (xb-xa)* (xb-xa)+ (yb-ya)* (yb-ya)) cout<<Introduceti ordonata loc. A:; cin >>ya; scrie distanta dintre localitati este:, d cout<<Introduceti abscisa loc. B:; cin >>xb; cout<<Introduceti ordonata loc. B:; cin >>yb; d =sqrt( (xb-xa)* (xb-xa)+ (yb-ya)* (yb-ya)); cout<< distanta dintre localitati este:<< d;} 6. Pentru plantarea unei pduri s-au folosit P puiei( P citit de la tastatur). tiind c din numrul total de puiei 1/5 erau stejari, 3/5 erau fagi, iar restul frasini s se calculeze i s se afieze numrul de frasini care s-au plantat. intreg P, s,f,fr//s-nr stejarilor, f-nr. fagilor //fr-nr.frasinilor citeste P s P/5 f P*2/5 fr P-s-f scrie numarul frasinilor plantati este:, fr #include<iostream.h> void main( ) {int P, s,f,fr; cout<<numarul puietilor =; cin >>P; s = P/5; f= P*2/5; fr= P-s-f; cout<<numarul frasinilor plantati este:<< fr;} 7. Se citesc dou valori a i b . S se interschimbe valorile variabilelor ntre ele. Exemplu a=3, b=5 se va afia a=5 i b=3. #include<iostream.h> ntreg a,b,aux void main( ) citeste a, b { int a,b,aux ; cout<<Introduceti val pentru a ; cin >>a; auxa; ab; b aux ; cout<<Introduceti val pentru b ; cin >>b; scrie a,b
aux=a; a=b; b= aux ; cout<<a<< <<b;}

intreg E ,B, f, b//f numarul de fete // b numarul de baieti citeste E, B// B va fi de forma 30 b E*B/100 f E-b scrie numarul fetelor este:, f, iar al baietilor este: , b

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore STRUCTURA DECIZIONAL

1. Se citesc 2 numere intregi. S se afieze numrul cel mai mare.( maximul dintre cele dou numere) intreg a,b, max//a, b numerele //max-maximul dintre cele 2 nr citeste a, b daca a>b atunci maxa altfel maxb sfrsit daca scrie maximul dintre cele 2 nr este:, max #include<iostream.h> void main( ) { int a,b, max cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; if (a>b) max=a; else max=b ; cout<< maximul dintre cele 2 nr este:<< max ;}

2. Se citesc 3 numere intregi. S se afieze numrul cel mai mare.( maximul dintre cele 3 numere). intreg a,b,c,aux, max//a, b,c numerele //max-maximul dintre cele 3 nr //aux-un auxiliar folosit la interschimbare citeste a, b,c daca (a<b) atunci auxa; ab; b aux ; sfrsit daca daca (b<c) atunci auxb; bc; c aux ; sfrsit daca daca (a<b) atunci auxa; ab; b aux ; sfrsit daca scrie maximul dintre cele 3 nr este:, a interschimba valorile Voi #include<iostream.h> intre ele dac nu sunt n ordine descresctoare i void main( ) astfel primul numr va fi {int a,b,c,aux, max ; cel mai mare. cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; cout<< Intr. valoare pt c :; cin >>c; if (a<b) { aux=a; a=b; b=aux ;} if (b<c) {aux=b; b=c; c=aux ;} if (a<b) {aux=a; a=b; b=aux ; } cout<< maximul dintre cele 3 nr este:<<a;}
Explicaie : Voi interschimba valorile intre ele dac nu sunt n ordine scresctoare i astfel irul de numere n ordine cresctoare va fi a,b,c. Explicaie :

3. Se citesc 3 numere intregi. S se afieze numerele n ordine cresctoare. intreg a,b,c,aux, max//a, b,c numerele //max-maximul dintre cele 3 nr //aux-un auxiliar folosit la interschimbare citeste a, b,c daca (a>b) atunci auxa; ab; b aux ; sfrsit daca daca (b>c) atunci auxb; bc; c aux ; sfrsit daca daca (a> b) atunci auxa; ab; b aux ; sfrsit daca scrie Numere scrise n ordine cresctoare sunt:, a,b,c

#include<iostream.h> void main( ) {int a,b,c,aux, max ; cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; cout<< Intr. valoare pt c :; cin >>c; if (a>b) { aux=a; a=b; b=aux ;} if (b>c) {aux=b; b=c; c=aux ;} if (a>b) {aux=a; a=b; b=aux ; } cout<< Numere scrise n ordine cresctoare sunt:<<a; cout<< <<b<< <<c;}

Oservatie : daca se dorete s se afieze 4 numere n ordine cresctoare se fac aceleai operaii dar se mai adaug operaiile: daca (a>b) atunci auxa; ab; b aux ;sfrsit daca ;daca (b>c) atunci auxb; bc; c aux ; sfrsit daca ; daca (a> b) atunci auxa; ab; b aux ; sfrsit daca ; daca (b>c) atunci auxb; bc; c aux ; sfrsit daca ; daca (a> b) atunci auxa; ab; b aux ; sfrsit daca

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

4. Se citesc de la tastatur 3 numere reale a, b, c. S se verifice daca aceste numere pot fi laturile unui triunghi, iar n caz afirmativ s se precizeze tipul triunghiului(echilateral, dreptunghic, isoscel, dreptunghic isoscel,oarecare). real a, b, c citeste a, b, c daca ((a>0 && b>0 && c>0) && (a+b>c || b+c>a || a+c>a)) atunci scrie val||ile date pot fi lat. unui triunghi daca ( a=b || b=c || c=a) atunci isoscel altfel daca ( a=b && b=c) atunci scrie echilateral altfel daca ( a*a=b*b+c*c || b*b=a*a+c*c || c*c=b*b+a*a ) atunci scrie dreptunghic altfel daca ( ( a*a=b*b+c*c || b*b=a*a+c*c || c*c=b*b+a*a )&&(a=b || b=c || c=a)) atunci scrie dreptunghic isoscel altfel scrie oarecare sfrit daca sfrit daca sfrit daca sfrit daca altfel scrie valorile date nu pot forma un triunghi sfrit daca Rezolvare C++ #include<iostream.h> void main( ) {float a, b, c; cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; cout<< Intr. valoare pt c :; cin >>c; if ((a>0 && b>0 && c>0) && (a+b>c || b+c>a || a+c>a)) {cout << valorile date pot fi lat. unui triunghi; if ( a= =b || b= =c || c= =a) cout<< isoscel; else if ( a= =b && b= =c) cout<< echilateral; else if ( a*a= =b*b+c*c || b*b= =a*a+c*c || c*c= =b*b+a*a ) cout<< dreptunghic; else if ( ( a*a= =b*b+c*c || b*b= =a*a+c*c || c*c= =b*b+a*a )&&(a= =b || b= =c || c= =a)) cout << dreptunghic isoscel; else cout << oarecare; } else cout << valorile date nu pot forma un triunghi; }

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

5. Se dau dou numere naturale a i b (b<>0). S se verifice ce fel de fracie este fracia a/b( subunitar, echiunitar, supraunitar) intreg a,b//a, b numerele citeste a, b daca (a>b) atunci scrie fractia a/b este supraunitara altfel daca ( a<b) atunci scrie fractia a/b este subunitara altfel scrie fractia a/b este echiunitara sfrit daca sfrit daca #include<iostream.h> void main( ) {int a, b; cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; if ( a > b) cout << fractia a/b este supraunitara; else if ( a < b) cout << fractia a/b este subunitara; else cout << fractia a/b este echiunitara;}

6. S se scrie un program care citete de la tastatur o dat calendaristic sub forma : zi, luna, an apoi afieaz sezonul pentru aceast dat.( luna se va citi ca un intreg) Primvara 21 martie-20 iunie Vara 21 iunie-22 septembrie Toamna 23 septembrie- 21 decembrie Iarna 22 decembrie- 20 martie Intreg zi, luna, an//variabile pt zi, luna, an Citeste zi, luna, an Dac (( luna =3 and zi>=21) or (luna =6 and zi<=20) or luna=4 or luna =5 ) atunci scrie primavara sfrit dac Dac (( luna =6 and zi>=21) or (luna =9 and zi<=22) or luna=7 or luna =8 ) atunci scrie vara sfrit dac Dac (( luna =9 and zi>=23) or (luna =12 and zi<=21) or luna=10 or luna =11 ) atunci scrie toamna sfrit dac Dac (( luna =12 and zi>=22) or (luna =3 and zi<=20) or luna=1 or luna =2 ) atunci scrie iarna sfrit dac Rezolvare C++ #include<iostream.h> void main( ) {int zi, luna, an; cout<< Intr. valoare pt zi :; cin >>zi; cout<< Intr. valoare pt luna :; cin >>luna; cout<< Intr. valoare pt an :; cin >>an; if (( luna =3 and zi>=21) or (luna =6 and zi<=20) or luna=4 or luna =5 ) cout<< primavara; if (( luna =6 and zi>=21) or (luna =9 and zi<=22) or luna=7 or luna =8 ) cout<< vara; if (( luna =9 and zi>=23) or (luna =12 and zi<=21) or luna=10 or luna =11 ) cout<< toamna; if (( luna =12 and zi>=22) or (luna =3 and zi<=20) or luna=1 or luna =2 ) cout<< iarna;}

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

STRUCTURA REPETITIV STRUCTURA REPETITIV CU NUMAR CUNOSCUT DE PASI 1. S se calculeze suma primelor n numere naturale : s = 1+2+3+.....+n.

intreg n, i,s citeste n s0 pentru i 1, n execut s s+i sfrit pentru scriesuma primelor, n ,numere naturale este:, s
2. S se afieze primele n numere impare.

#include<iostream.h> void main( ) {int n, i,s=0; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++) s=s+i; cout<<suma primelor<<n<<numere naturale este:; cout<< s;} #include<iostream.h> void main( ) {int n, i ; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=2*n;i++) if (i % 2!=0) cout<< i<< ; }

intreg n, i citeste n pentru i 1, 2*n execut dac (i % 2<>0) atunci scrie i sfrit dac sfrit pentru

Exemplu pt. n=5

Se afiseaza 13579

3. S se afieze primele n numere impare.( varianta 2 de rezolvare cu parcurgerea numerelor pn la 2*n de la 1 din 2 n 2)

intreg n, i citeste n pentru i 1, 2*n,2 execut scrie i sfrit pentru

#include<iostream.h> void main( ) {int n, i ; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=2*n;i=i+2) cout<< i<< ; }

4. S se afieze primele n numere pare n ordine descresctoare. Pentru n= 10 se va afia: 20 , 18 , 16 , 14, 12, 10, 8, 6, 4, 2.

intreg n, i citeste n pentru i 2*n, 2, -2 execut scrie i sfrit pentru

#include<iostream.h> void main( ) {int n, i ; cout<< Intr. valoare pt n :; cin >>n; for( i = 2*n ; i>=2 ; i=i-2) cout<< i<< ; }

Colegiul Naional Al.I.Cuza Galai 5. S se calculeze expresia E = 1!+2!+3!+......+n! intreg n, i, p, s citeste n p1 s0 pentru i 1, n execut p p*i s s + p sfrit pentru

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

scrie valoarea expresiei este:,s #include<iostream.h> void main( ) {int n, i,s=0, p=1; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++)
{ p=p*i;

s=s+p ;} cout<< valoarea expresiei este:<<s;}

6. S se calculeze expresia E =

4! 5! 6! ( n +1)! + + +.... + , unde n!= 1*2*3*........*n 3 4 5 n

intreg n, i, p, s citeste n p6//ia valoarea 1*2*3 s0 pentru i 3, n execut p p*(i+1) s s + p/i sfrit pentru scrie valoarea expresiei este:,s

#include<iostream.h> void main( ) {int n, i,s=0, p=6; cout<< Intr. valoare pt n :; cin >>n; for( i = 3;i<=n;i++)
{ p=p*(i+1);

s=s+p / i;} cout<< valoarea expresiei este:<<s;}

7. Se consider un numr n citit de la tastatur. Realizai un program care s permit afiarea pe ecran a unor caractere dispuse ca n exemplul urmtor. intreg n, i, j citeste n ***** pentru i 1, n execut **** pentru j 1, n-i+1 execut *** scrie *, ** sfrit pentru * scrie endl//ca sa treaca pe linie noua-end line sfrit pentru
Exemplu pt. n=5 Se afiseaza

#include<iostream.h> void main( ) {int n, i, j; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++) {for( j = 1;j<=n-i+1;j++) cout<< *<< ; cout<< endl;} }

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

8. Se consider un numr n citit de la tastatur. Realizai un program care s permit afiarea pe ecran a unor caractere dispuse ca n exemplul urmtor. Exemplu pt. n=5 intreg n, i, j 1 citeste n 12 pentru i 1, n execut 123 pentru j 1, i execut 1234 scrie j , 12345 sfrit pentru scrie endl//ca sa treaca pe linie noua-end line sfrit pentru
Trebuie sa se afiseaze

#include<iostream.h> void main( ) {int n, i, j; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++) {for( j = 1;j<=i;j++) cout<< j<< ; cout<< endl;} }

9. Se consider un numr n citit de la tastatur. Realizai un program care s permit afiarea pe ecran a unor caractere dispuse ca n exemplul urmtor. Exemplu pt. n=5 intreg n, i, j 1 citeste n 22 pentru i 1, n execut 333 pentru j 1, i execut 4444 scrie i , 55555 sfrit pentru scrie endl//ca sa treaca pe linie noua-end line sfrit pentru
Trebuie sa se afiseaze

#include<iostream.h> void main( ) {int n, i, j; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++) {for( j = 1;j<=i;j++) cout<< i<< ; cout<< endl;} }

10. Se citesc n numere ntregi . S se afieze numerele pare din ir.


Exemplu: n=5 i sirul de numere 12 , 13, 14, 15, 16 se va afia 12 14 16

intreg n, i, nr //n numarul de numere // nr- numerele din sir citite la fiecare pas i citeste n pentru i 1, n execut citeste nr dac (nr % 2 = 0) atunci scrie nr sfrit dac sfrit pentru

#include<iostream.h> void main( ) {int n, i,nr; cout<< Intr. valoare pt n :; cin >>n; for( i = 1;i<=n;i++) {cout<<Introduceti numarul:<<i ; cin>>nr; if (nr % 2 = =0) cout<<nr<< ; } }

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR ALGORITMUL PENTRU VERIFICAREA PROPRIETII DE NUMR PRIM

1. Se citete un numr ntreg n. S se verifice dac numrul citit este prim. intreg n, f// n-numrul
//f trece prin toate valorile de la 2 la n-1

citeste n f 2 ct timp ((n % f ! =0) and (f<n)) execut f f+1 sfrit ct timp dac (f = nr) atunci scrie numarul citit este prim; altfel scrie numarul citit nu este prim; sfrit dac

#include<iostream.h> void main( ) { int n, f ; cout<< Intr. valoare pt numar :; cin >>n; f= 2; while ((n % f ! =0) && (f<n)) f + +; if (f= =n) cout<< numarul citit este prim; else cout<< numarul citit nu este prim; }

2. Se citete un numr ntreg n. S se verifice dac numrul citit este prim.( varianta 2 de rezolvare)

intreg n, f, g// n-numrul


//f trece prin toate valorile de la 2 la sqrt(n) //g-variabila de stare; g=0 cand numarul nu are nici un divizor //g=1 cand numarul are cel putin un divizor

citeste n pentru f 2, sqrt(n) executa daca ( n %f = 0) atunci g1 sfrit pentru dac (g= 0) atunci scrie numarul citit este prim; altfel scrie numarul citit nu este prim; sfrit dac

#include<iostream.h> void main( ) { int n, f,g ; cout<< Intr. valoare pt numar :; cin >>n; g= 0; for( i = 2; i<=sqrt(n) ; i++) if ( n %f = =0) g =1; if (g = =0) cout<< numarul citit este prim; else cout<< numarul citit nu este prim; }

3. Se citete un ir de n numere ntregi. S se verifice cte dintre numerele citite sunt prime. Exemplu: n=5 i irul de
numere 12, 14, 5, 13, 17 se va afia 3 pentru c n ir sunt 3 numere prime i anume 5, 13, 17.
intreg n, f, k, nr, i// n-numrul de numere //nr numarul din sir citit la pasul i //f trece prin toate valorile de la 2 la nr-1 citeste n k0; pentru i 1, n executa citeste nr; f2; ct timp ((nr % f ! =0) and (f<n)) execut f f+1; sfrit ct timp dac (f = nr) atunci k k+1; sfrit dac sfrit pentru scrie numarul de numere prime din sir este: , k ; #include<iostream.h> void main( ) { int n, f, k=0, nr, i ; cout<< Intr. valoare pt numarul de numere :; cin >>n; for( i = 1; i<=n ; i++) { cout<< Intr. valoare pt un numar din sir :; cin >>nr; f= 2; while ((nr % f ! =0) && (f<nr)) f + +; if (f== nr) k++; } cout<< numarul de numere prime din sir este:<<k; }

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

4. S se afieze primele n numere prime, n introducndu-se de la tastatur.


intreg n, f, i , nr citeste n// n-numrul de numere ce trebuie gasite //i- la al ctlea numr prim s-a ajuns nr 2; //incep de la 2 pt ca este primul numar prim i 1; ct timp (i<=n) f2; ct timp ((nr % f ! =0) and (f<n)) execut f f+1; sfrit ct timp dac (f = nr) atunci i i+1; scrie nr; sfrit dac nr nr+1 sfrit ct timp #include<iostream.h> void main( ) { int n, f, nr, i ; cout<< Intr. valoare pt cte numere prime tb gasite :; cin >>n; nr = 2; i =1; while (i<=n) { f=2; while ((nr % f ! =0) && (f<n)) f++; if (f == nr) {i ++; cout<< nr<< ;} nr = nr+1; } }

5. S se afieze descompunerea unui numr natural par, strict mai mare dect 2, ntr-o sum de dou numere prime( verificarea ipotezei lui Goldbach). Exemplu: 8=3+5; 14=3+11
intreg n, f, i ,g, nr1, nr2// n-numrul de numere ce trebuie gasite // g este numarul care prin valoarea 0 imi spune daca am reusit sa // scriu numarul ca suma de 2 numere prime //nr1-primul numar prim din descompunere //nr2-al doilea numar prim din descompunere citeste n g 1 nr1 2; //incep de la 2 pt ca este primul numar prim ct timp (g=1) f2; // verific daca nr1 este numar prim ct timp ((nr1 % f <>0) and (f<nr1)) execut f f+1; sfrit ct timp dac (f = nr1) atunci nr2n - nr1; f2; // verific daca nr2 este numar prim ct timp ((nr2 % f ! =0) and (f<nr2)) execut f f+1; sfrit ct timp dac (f = nr2) atunci scrie numarul, nr, se poate scrie ca suma dintre, nr1 , i, nr2 g0 sfrit dac altfel nr1nr1+1 sfrit dac sfrit ct timp #include<iostream.h> void main( ) { int n, f, i ,g, nr1, nr2 cout<< Intr. valoare pt numarul ce trebuie descompus :; cin >>n; g =1; nr1= 2; //incep de la 2 pt ca este primul numar prim //care s-ar putea regasi in descompunerea lui n while (g==1) { f=2; while ((nr1 % f ! =0) &&(f<nr1)) f= f+1; if(f = =nr1) { nr2=n - nr1; f=2; while ((nr2 % f ! =0) && (f<nr2)) f= f+1; if (f == nr2) {cout<< numarul<<nr << se poate scrie ca suma dintre<<nr1 << i<< nr2; g = 0; } } else nr1=nr1+1; } }

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR

10

Colegiul Naional Al.I.Cuza Galai

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore

ALGORITMUL PENTRU CALCULUL DIVIZORILOR PRIMI AI UNUI NUMR

1. S se afieze divizorii primi ai unui numr, pe cte o linie a ecranului. intreg nr, f, g// nr-numrul //f parcurge toate numerele intregi de la 2 la o val < nr #include<iostream.h> //g o var de stare care are val 0 daca f nu este divizor pentru nr void main( ) citeste nr { int nr, f, g; f 2 cout<< Intr. valoare pt numar :; cin >>nr; repet f= 2; g0 do{ g=0; ct timp (nr%f= =0) execut while (nr%f= =0) nrnr/f; g 1 { nr=nr/f ; g= 1;} sfrit ct timp if (g= =1) cout<< f<< endl; dac (g= 1) atunci scrie f, endl //endl trecere la linie nou f++; sfrit dac }while(nr! =1); ff+1 } pn cnd (nr= =1)

2. S se calculeze suma divizorilor primi ai unui numr. intreg nr, f, g, s// nr-numrul
//f parcurge toate numerele intregi de la 2 la o val < nr //g -o var de stare care are val 0 daca f nu este divizor pentru nr //s- suma divizorilor primi ai nr

citeste nr f 2; s0 repet g0 ct timp (nr%f =0) execut nrnr/f ; g 1 sfrit ct timp dac (g= 1) atunci ss+f sfrit dac ff+1 pn cnd (nr=1) scrie suma diviz primi ai lui, nr, este: , s

#include<iostream.h> void main( ) { int nr, f, g, s=0; cout<< Intr. valoare pt numar :; cin >>nr; f= 2; do{ g=0; while (nr%f= =0) { nr =nr / f ; g= 1;} if (g= =1) s=s+f; f++; }while(nr! =1); cout<< suma diviz primi ai lui<< nr<< este: << s; }

3. Se introduce de la tastatur un numr prim p i se citesc pe rnd de la tastatur mai multe numere naturale pn cnd se citete numrul 0. S se determine numrul maxim n astfel nct pn s divid numerele naturale introduse de la tastatur , fr s se calculeze produsul acestor numere. Indicaie: se citesc pe rnd numerele n variabila nr i ntr-o variabil n se adun de cte ori se mparte numrul curent la p. Pentru numrul prim p=2 i irul de numere 12 , 13, 4, 6 , 8, 11,15, 0 se va obine n=7 deoarece 12 se mparte la 2 de 2 ori, 13 nu se mparte la 2 , 4 se mparte la 2 de 2 ori, 6 se mparte la 2 de 1 ori, 8 se mparte la 2 de 3 ori, 13 nu se mparte la 2, 15 nu se mparte la 2, deci n = 2 +2 + 1 + 3 = 8. 11

Colegiul Naional Al.I.Cuza Galai intreg n, p, nr //nr numerele din ir // p-numrul prim; n puterea maxim //la care apare p n produsul numerelor din ir citeste p n0 citeste nr ct timp (nr!=0) execut ct timp (nr%p= =0) execut nrnr/p; nn+1 sfrit ct timp citete nr sfrit ct timp scrie numrul maxim n la care , p , la puterea n divide prod. nr. din ir este:, n

Fi de lucru informatic- algoritmi elementari Prof. Magdalena Grigore #include<iostream.h> void main( ) { int p, nr, n=0 ; cout<< Intr. un numar prim pt p :; cin >>p; cout<< Intr. primul numar din sir :; cin >>nr; while (nr!=0) { while(nr%p= =0) { nr= nr/p; n=n+1 ;} cout<< Intr. urmtorul numr din sir :; cin >>nr; } cout<< numrul maxim n la care << p<< la puterea n divide prod. nr. din ir este:<< n ; }

4. S se simuleze schema descompunerii n factori primi ai unui numr.


intreg nr, f// nr-numrul //f parcurge toate numerele intregi de la 2 la o val < nr citeste nr f 2 repet ct timp (nr%f= =0) execut scrie nr,|, f,endl nrnr/f; sfrit ct timp ff+1 pn cnd (nr= =1) #include<iostream.h> void main( ) { int nr, f; cout<< Intr. valoare pt numar :; cin >>nr; f= 2; do{ while (nr%f= =0) { cout<< nr<<|<<f<<endl; nr=nr/f ; } f++; } while(nr! =1); }

5. S se afieze toi divizorii comuni ai 2 numere n1 i n2 citite de la tastatur.


Exemplu : pentru 60 si 350 se va afia 1, 2 , 5, 10 intreg n1, n2, f //f parcurge toate numerele intregi de la 1 la o val < cea mai //mic valoare dintre n1 i n2 citeste n1, n2 dac n1<n2 atunci pentru f 1,n1 execut dac ((n1%f= =0) and (n2%f= =0)) scrie f , sfrit dac sfrit pentru altfel pentru f 1,n2 execut dac ((n1%f= =0) and (n2%f= =0)) scrie f , sfrit dac sfrit pentru sfrit dac #include<iostream.h> void main( ) { int n1, n2, f; cout<< Intr. valoare pt primul numar :; cin >>n1; cout<< Intr. valoare pt al doilea numar :; cin >>n2; if (n1<n2) for( f=1;f<=n1;f++) if ((n1%f= =0) && (n2%f= =0)) cout<< f<< ; else for( f=1;f<=n2;f++) if ((n1%f= =0) && (n2%f= =0)) cout<< f<< ;

12

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR ALGORITMUL PENTRU CALCULUL DIVIZORILOR PROPRII I IMPROPRII AI UNUI NUMR

1. S se verifice dac un numr este perfect. Se numete numr perfect numrul care are suma divizorilor proprii( n afar de ele nsui) egal cu numrul. Exemplu 6 , 28 sunt numere perfecte 6=1+2+3 ; 28=1+2+4+7+14
intreg nr, s, i// nr-numrul ; s -suma diviz citeste nr s0 pentru i 1, nr/2 execut dac (nr%i= =0) ss+i sfrit dac sfrit pentru dac (nr = s) atunci scrie nr este perfect; altfel scrie nr nu este perfect; sfrit dac #include<iostream.h> void main( ) { int nr, s=0, i ; cout<< Intr. valoare pt numar :; cin >>nr; for( i = 1; i<=nr/2 ; i++) if (nr%i= =0) s=s+i; if (nr = = s) cout<< nr este perfect; else cout<< nr nu este perfect; }

2. S se scrie un algoritm care calculeaz numrul de numere perfecte din intervalul ( a, b ), unde a i b sunt citite de la tastatur.
intreg s,a,b i,j,k// s- suma diviz //k-numarul de numere perfecte citeste nr, a, b k0 pentru i a+1, b-1 execut// parcurg intervalul a, b pentru j 1, i/2 execut // verific pt. fiecare i este perfect s0; dac (i % j= =0) ss+j sfrit dac sfrit pentru dac (i = s) atunci kk+1 sfrit dac sfrit pentru scrie numarul de numere perfecte este:, k intreg nr, ,n, s, i,j// n-numrul de numere din ir ; //s- suma diviz fiecarui numar in parte //nr -numarul din ir la pasul curent i citeste n pentru i 1, n execut citeste nr // citesc la fiecare pas i cte un numar, din cele n s0 //initializez cu 0 suma diviz fiecarui numar pentru j 1, nr/2 execut // verific pt. fiecare nr este perfect dac (nr%j= =0) ss+j sfrit dac sfrit pentru dac (nr = s) atunci scrie nr sfrit dac sfrit pentru

#include<iostream.h> void main( ) { int nr, s, i , j, a, b, k=0; cout<< Intr. valoare pt a :; cin >>a; cout<< Intr. valoare pt b :; cin >>b; for( i = a+1; i<=b-1 ; i++) { s=0; for( j = 1; j<=i/2 ; j++) if (i%j= =0) s=s+j; if (i = = s) k + +; } cout<< numarul de numere perfecte este:<< k; }

3. Se citesc n numere ntregi . S se afieze toate numerele perfecte din ir


#include<iostream.h> void main( ) { int nr, s, i ,j ; cout<< Intr. valoare pt numarul de numere :; cin >>n; for( i = 1; i<=n ; i++) { cout<< Intr. valoare pt un numar din sir :; cin >>nr; s=0; for( j = 1; j<=nr/2 ; j++) if (nr % j= =0) s=s+j; if (nr = = s) cout<<nr< ; } }

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR

ALGORITMUL PENTRU CALCULUL INVERSULUI UNUI NUMR 1. Se citete un numr ntreg n. S se afieze inversul numrului.

intreg n, ninv//n numrul // ninv-numrul inversat citeste n ninv 0 ct timp (n!=0) execut ninvninv*10+n%10; nn/10; sfrit ct timp scrie inversul numrului este , ninv

#include<iostream.h> void main( ) { int n, ninv=0 ; cout<< Intr. un numar pt n :; cin >>n; while (n!=0) { ninv=ninv*10+n%10; n=n/10; } cout<< inversul numrului este:<<ninv; }

2. Se citete un ir de n numere ntregi. S se afieze inversul numerelor din ir.

intreg n, ninv, nr, nr1, i//n numrul de numere din ir //nr- numrul din ir citit la pasul i // ninv-numrul inversat la pasul i //nr1- reine valoarea numrului nr la pasul i citeste n pentru i1,n execut citete nr ninv 0;nr1nr ct timp (nr1!=0) execut ninvninv*10+nr1%10; nr1nr1/10; sfrit ct timp scrie inversul numrului, nr, este , ninv sfrit pentru

#include<iostream.h> void main( ) { int n, ninv, nr, nr1,i ; cout<< Intr. numarul de numere n :; cin >>n; for(i=1 ; i<=n ; i++) { cout<<Intr. un numar nr : ; cin>>nr; ninv=0 ; nr1=nr ; while (nr1!=0) { ninv=ninv*10+nr1%10; nr1=nr1/10; } cout<< inversul numrului<<nr<< este: <<ninv; } }

3. Se citete un numr ntreg s se verifice dac este palindrom. Un numr este palindrom dac este egal cu inversul su.
Exemplu : 121 este palindrom , iar 123 nu este palindrom ( 123 321)

intreg n, ninv, n1//n numrul // ninv-numrul inversat //n1-pstreaz numrul n deoarece n ajunge la 0 citeste n n1 n ninv 0 ct timp (n1!=0) execut ninvninv*10+n1%10; n1n1/10; sfrit ct timp dac ( n=ninv) atunci scrie numrul este palindrom altfel scrie numrul nu este palindrom

#include<iostream.h> void main( ) { int n, n1,ninv=0 ; cout<< Intr. un numar pt n :; cin >>n; n1=n ; while (n1!=0) { ninv = ninv*10+n1%10; n1=n1/10; } if (n= =ninv) cout<< numrul este palindrom; else cout<< numrul nu este palindrom; }

4. Se citesc n numere ntregi . S se calculeze suma numerelor palindrom. Exemplu : n=4 i irul de numere 12, 121, 3, 45 suma numerelor palindrom va fi s= 121+3= 124. Dac nu exist numere palindrom se va afia un mesaj corespunztor.

intreg n, nr, nrinv, n1, i, s//n numrul de numere


//nr- numrul citit la pasul i // nrinv-numrul inversat //nr1-pstreaz numrul nr deoarece nr ajunge la 0

citeste n; s0; pentru i 1, n execut citete nr; nr1 nr nrinv 0 ct timp (nr1!=0) execut nrinvnrinv*10+nr1%10; nr1nr1/10; sfrit ct timp dac ( nr = nrinv) atunci s s+nr sfrit dac sfrit pentru dac ( s>0) atunci scrie suma numerelor palindrom este:, s altfel scrie nu exista numere palindrom n irul citit

#include<iostream.h> void main( ) { int n,nr, nr1,nrinv, s=0 ; cout<< Intr. un numar pt n :; cin >>n; for( i=1 ;i<=n ;i++) { cin>>nr ; nr1=nr ; nrinv=0 ; while (nr1!=0) { nrinv = nrinv*10+nr1%10; nr1=nr1/10; } if (nr = = nrinv) s=s+nr; } if (s>0) cout<< suma numerelor palindrom este:<< s; else cout<< nu exista numere palindrom n irul citit; }

5. Se citesc n numere ntregi . S se calculeze suma dintre inversele pare ale numerelor citite. Exemplu : pentru n= 4 i
irul de numere 123, 25, 4671, 57 se va obine s = 52 + 1764= 1816

intreg n, nr, nrinv, i, s//n numrul de numere


//nr- numrul citit la pasul i // nrinv-numrul inversat //OBS: nu mai tb sa pstreaz numrul nr //deoarece nu-l mai utilizm dup calculul inversului

citeste n; s0; pentru i 1, n execut citete nr; nrinv 0 ct timp (nr!=0) execut nrinvnrinv*10+nr%10; nrnr/10; sfrit ct timp dac (nrinv mod 2 = 0) atunci s s+nrinv sfrit dac sfrit pentru scrie suma inverselor pare ale nr este:, s

#include<iostream.h> void main( ) { int n,nr,nrinv, s=0 ; cout<< Intr. un numar pt n :; cin >>n; for( i=1 ;i<=n ;i++) { cin>>nr ; nrinv=0 ; while (nr!=0) { nrinv = nrinv*10+nr%10; nr =nr/10; } if (nrinv % 2= =0) s=s+nr; } cout<< suma inverselor pare ale nr este:<< s; }

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR ALGORITMUL PENTRU CALCULUL CELUI MAI MARE DIVIZOR COMUN A DOU NUMERE 1. Se citesc 2 numere ntregi a i b. S se calculeze c.m.m.d.c a numerelor citite.

intreg a, b, r// r restul impartirii lui a la b citete a, b repet r a%b

ab br pn cnd ( r = 0); scrie c.m.m.d.c a celor dou numere este:, a

#include<iostream.h> void main( ) { int a, b, r; cout<< Intr. un numar pt a :; cin >>a; cout<< Intr. un numar pt b :; cin >>b; do{ r =a%b; a = b; b = r;}while ( r!=0); cout<< c.m.m.d.c a celor dou numere este:<< a; }

2. Se citesc n numere ntregi. S se calculeze c.m.m.d.c a numerelor citite. Exemplu: dac se citete n=6 i irul de numere 12, 4, 36, 48, 8, 16 se va afia 4. intreg a, b, r, n // r restul impartirii lui a la b //n numrul de numere citite citete a, n// citim primul numr i numrul de numere

pentru i 2, n execut // i porneste de la 2 pt ca mai avem de citit


//doar n-1 numere deoarece am citit un numr //n afara structuriii repetitive pentru citete b // citim val pt b care va fi pe rnd urmtoarele numere din ir

repet r a%b

ab br pn cnd ( r = 0);// cmmmdc a lui a si b va fi a


// deci va trebui sa citim o noua val pt b

sfrit pentru scrie c.m.m.d.c a celor dou numere este:, a

#include<iostream.h> void main( ) { int a, b, r; cout<< Intr. un numar pt a :; cin >>a; cout<< Intr. valoare pt n :; cin >>n; for( i=1 ;i<=n-1 ;i++) { cout<< Intr. un numar pt b :; cin >>b; do{ r =a%b; a = b; b = r; }while ( r!=0); } cout<< c.m.m.d.c a celor <<n<< numere este:<< a; }

3. Se citesc 2 numere ntregi a i b. S se verifice dac numerele citite sunt prime ntre ele. intreg a, b, r// r restul impartirii lui a la b altfel scrie numerele nu sunt prime ntre ele citete a, b #include<iostream.h> repet void main( ) r a%b { int a, b, r;

ab br pn cnd ( r = 0); dac (a = 1) atunci scrie numerele sunt prime ntre ele sfrit dac

cout<< Intr. un numar pt a :; cin >>a; cout<< Intr. un numar pt b :; cin >>b; do{ r =a%b; a = b; b = r;}while ( r!=0); if (a = =1) cout<< numerele sunt prime ntre ele; else cout<< numerele nu sunt prime ntre ele;
}

PROBLEME CARE UTILIZEAZ IN REZOLVAREA LOR ALGORITMUL PENTRU CONVERSIA UNUI NUMAR DIN BAZA 10 IN BAZA q Se citeste un numar natural . sa se scrie transformarea numarului din baza 10 in baza q unde q este citit de tastatura.

Intreg n, q, nq, p Citeste n, q

p1 Cat timp n< > 0 executa Nq nq*p + n mod 10 P p*10 N n div 10 Sfarsit cat timp Scrie nq

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