Documente Academic
Documente Profesional
Documente Cultură
Implementarea structurilor de
Algoritmul proiectat pentru rezolvarea unei anumite probleme trebuie implementat ntr-un limbaj de programare; prelucrarea datelor se realizeaz cu ajutorul instruciunilor. Instruciunea descrie un proces de prelucrare pe care un calculator l poate executa. O instruciune este o construcie valid (care respect sintaxa limbajului) urmat de ; . Ordinea n care se execut instruciunile unui program definete aa-numita structur de control a programului. Limbajele moderne sunt alctuite pe principiile programrii structurate. Conform lui C. Bohm i G. Jacobini, orice algoritm poate fi realizat prin combinarea a trei structuri fundamentale: structura secvenial; structura alternativ (de decizie, de selecie); structura repetitiv (ciclic).
Sn
Figura 3.1. Schema logic pentru structura secvenial Implementarea structurii secveniale se realizeaz cu ajutorul instruciunilor: Instruciunea vid Sintaxa: ; Instruciunea vid nu are nici un efect. Se utilizeaz n construcii n care se cere prezena unei instruciuni, dar nu se execut nimic (de obicei, n instruciunile repetitive). Exemple:
int . . int ; for { a; . . . . j; (;;)
41
CAPITOLUL 3 control . . . . }
Implementarea structurilor de
expresie; apel_funcie;
Exemple:
int b, a=9; double c; b=a+9; cout<<a; c=sqrt(a); clrcsr();//apelul funciei predefinite care terge ecranul; prototipul n headerul conio.h
} ntr-un bloc se pot declara i variabile care pot fi accesate doar n corpul blocului. Instruciunea bloc este utilizat n locurile n care este necesar prezena unei singure instruciuni, ns procesul de calcul este mai complex, deci trebuie descris n mai multe secvene.
Ramura else este opional. La ntlnirea instruciunii if, se evalueaz expresie (care reprezint o condiie) din paranteze. Dac valoarea expresiei este 1 (condiia este ndeplinit) se execut instruciune1; dac valoarea expresiei este 0 (condiia nu este ndeplinit), se execut instruciune2. Deci, la un moment dat, se execut doar una dintre cele dou instruciuni: fie instruciune1, fie instruciune2. Dup execuia instruciunii if se trece la execuia instruciunii care urmeaz acesteia. Observaii:
1. 2. Instruciune1 i instruciune2 pot fi instruciuni compuse (blocuri), sau chiar alte instruciuni if
(if-uri imbricate). Deoarece instruciunea if testeaz valoarea numeric a expresiei (condiiei), este posibil prescurtarea: if (expresie), n loc de if (expresie != 0). 3. Deoarece ramura else a instruciunii if este opional, n cazul n care aceasta este omis din secvenele if-else imbricate, se produce o ambiguitate. De obicei, ramura else se asociaz ultimei instruciuni if. Exemplu:
if (n>0) if (a>b) z=a; else z=b; 42
CAPITOLUL 3 control
Implementarea structurilor de
4. Pentru claritatea programelor surs se recomand alinierea instruciunilor prin utilizarea tabulatorului orizontal. 5. Deseori, apare construcia: Aceeai construcie poate fi scris i if (expresie1) astfel:
instruciune1; else if (expresie2) instruciune2; else if (expresie3) instruciune3; . . . . . . . . . else instruciune_n; if (expresie1) instruciune1; else if (expresie2) instruciune2; else if (expresie3) instruciune3; . . . . .. . . . . . else instruciune_n;
Expresiile sunt evaluate n ordine; dac una dintre expresii are valoarea 1, se execut instruciunea corespunztoare i se termin ntreaga nlnuire. Ultima parte a lui else furnizeaz cazul cnd nici una dintre expresiile 1,2,. . ., n-1 nu are valoarea 1. 6. n cazul n care instruciunile din cadrul if-else sunt simple, se poate folosi operatorul condiional. Exerciii: 1. S se citeasc de la tastatur un numr real. Daca acesta se afl n intervalul [-1000, 1000], s se afiseze 1, dac nu, s se afiseze -1.
#include <iostream.h> void main() { double nr; cout<<Astept numar:; cin>>nr; int afis = (nr>= -1000 && nr <= 1000 ? 1 : -1); cout<<afis; /* int afis; if (nr >= -1000 && nr <= 10000) afis = 1; else afis= -1; cout<<afis; */ }
2. S se calculeze valoarea funciei f(x), tiind c x este un numr real introdus de la tastatur: - 6x + 20 , dac x [- , -7 ] f(x) = x + 30 , dac x (-7, 0] , dac x>0 x
#include <iostream.h> Sau: #include <math.h> void main() { double x,f;cout<<x=;cin>>x; if (x <= -7) f= -x* 6 +20; else if ( x<=0 ) f= x+30; else f=sqrt(x); cout<<f=<<f<<\n; }
#include <iostream.h> #include <math.h> void main() { double x,f;cout<<x=;cin>>x; if (x <=- 7) f= -x* 6 +20; if (x>=-7 && x<=0 ) f= x+30; if (x>0) x=sqrt(x); cout<<f=<<f<<\n; }
Uneori, construcia if-else este utilizat pentru a compara valoarea unei variabile cu diferite valori constante, ca n programul urmtor: 3. Se citete un caracter reprezentnd un operator aritmetic binar simplu. n funcie de caracterul citit, se afieaz numele operaiei pe care acesta o poate realiza.
43
CAPITOLUL 3 Implementarea structurilor de control #include <iostream.h> void main() { char oper; cout<<Introdu operator aritmetic, simplu, binar:; cin>>oper; if (oper == +) cout<<Operatorul de adunare!\n; else if (oper==- ) cout<<Operatorul de scadere!\n; else if (oper==* ) cout<<Operatorul de inmultire!\n; else if (oper==/ ) cout<<Operatorul de impartire!\n; else if (oper==% ) cout<<Operatorul rest!\n; else cout<<Operator ilegal!!!\n; }
Instruciunea switch n unele cazuri este necesar o decizie multipl special. Instruciunea switch permite acest lucru.
test_expresie
Dac expresie=expr_const_1 instruciune1; [ieire;] Altfel dac expresie=expr_const_2 instruciune2; [ieire;] Altfel dac expresie=expr_const_n-1 instruciune_n-1; [ieire;] Altfel instruciune_n;
instruciune_n
Figura 3.2. Decizia multipl Se testeaz dac valoarea pentru expresie este una dintre constantele specificate (expr_const_1, expr_const_2, etc.) i se execut instruciunea de pe ramura corespunztoare. n schema logic test_expresie este una din condiiile: expresie=expr_const_1, expresie=expr_const_2, etc. Sintaxa: switch (expresie ) { case expresie_const_1 : instructiune_1 ; [break;] case expresie_const_2 : instructiune_2 ; [break;] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . case expresie_const_n-1: instructiune_n-1; [break;] [ default: instructiune_n ; ] }
44
CAPITOLUL 3 control
Implementarea structurilor de
Este evaluat expresie (expresie aritmetic), iar valoarea ei este comparat cu valoarea expresiilor constante 1, 2, etc. (expresii constante=expresii care nu conin variabile). n situaia n care valoarea expresie este egal cu valoarea expr_const_k , se execut instruciunea corespunztoare acelei ramuri (instruciune_k ). Dac se ntlnete instruciunea break , parcurgerea este ntrerupt, deci se va trece la execuia primei instruciuni de dup switch. Dac nu este ntlnit instruciunea break, parcurgerea continu. Break-ul cauzeaz deci, ieirea imediat din switch. n cazul n care valoarea expresiei nu este gsit printre valorile expresiilor constante, se execut cazul marcat cu eticheta default (cnd acesta exist). Expresiile expresie, expresie_const_1, expresie_const_2, etc., trebuie s fie ntregi. n exemplul urmtor, ele sunt de tip char, dar o dat de tip char este convertit automat n tipul int. Exerciiu: S rescriem programul pentru problema 3, utiliznd instruciunea switch.
#include <iostream.h> void main() { char oper; cout<<Introdu operator aritmetic, simplu, binar:; cin>>oper; switch (oper) { case (+): cout<<Operatorul de adunare!\n; break; case (-): cout<<Operatorul de scadere!\n; break; case (*): cout<< Operatorul de inmultire!\n; break; case (/): cout<<Operatorul de impartire!\n; break; case (%): cout<<Operatorul rest!\n; break; default: cout<<Operator ilegal!\n; } }
45
CAPITOLUL 3 control
Implementarea structurilor de
ciclului) se repet att timp ct expresie are valoarea 1. n momentul n care expresie ia valoarea 0 (condiie nendeplinit), se iese din ciclu i se trece la urmtoarea instruciune de dup while. Observaii: 1. n cazul n care la prima evaluare a expresiei, aceasta are valoarea zero, corpul instruciunii while nu va fi executat niciodat. 2. Instruciune din corpul ciclului while poate fi compus (un bloc), sau o alt instruciune ciclic. 3. Este de dorit ca instruciunea din corpul ciclului while s modifice valoarea expresiei. Dac nu se realizeaz acest lucru, corpul instruciunii while se repet de un numr infinit de ori. Exemplu:
int a=7; while (a==7) cout<<Buna ziua!\n;
Instruciunea for n majoritatea limbajelor de programare de nivel nalt, instruciunea for implementeaz structura ciclic cu numr cunoscut de pai (vezi reprezentarea prin schema logic i pseudocod din capitolul 1). n limbajul C instruciunea for poate fi utilizat ntr-un mod mult mai flexibil. Reprezentare prin schema logic (figura 3.3.): evaluare expresie1 (particular iniializare contor) expresie2 1 instruciune evaluare expresie3 (particular incrementare contor) Figura 3.3. Structura ciclic cu test iniial Sintaxa: for (expresie1 ; expresie2 ; expresie3 ) instructiune; Nu este obligatorie prezena expresiilor, ci doar a instruciunilor vide. Exemplu: for ( ; expresie2; ) sau: for ( ; ; )
instructiune; instructiune;
Reprezentare n pseudocod:
evaluare expresie1 CT TIMP expresie2 REPET NCEPUT instruciune evaluare expresie3 SFRIT
Se execut instruciune . Se evalueaz apoi expresie . Dac aceasta are valoarea 1, se execut instruciune . Se testeaz din nou valoarea expresiei. Se repet instruciune ct timp valoarea
46
CAPITOLUL 3 control
Implementarea structurilor de
expresiei este 1 (condiia este ndeplinit). n cazul instruciunii do-while, corpul ciclului se execut cel puin o dat. Exerciii: 1. Se citete cte un caracter, pn la ntlnirea caracterului @. Pentru fiecare caracter citit, s se afieze un mesaj care s indice dac s-a citit o liter mare, o liter mic, o cifr sau un alt caracter. S se afieze cte litere mari au fost introduse, cte litere mici, cte cifre i cte alte caractere. Se prezint trei modaliti de implementare (cu instruciunea while , cu instruciunea for i cu instruciunea do-while ).
#include <iostream.h> #include <conio.h> void main() { char c; clrscr(); int lmic=0, lmare=0, lcif=0; int altcar=0; cout<<"Atept car.:"; cin>>c; while (c!='@'){ if (c>='A' && c<='Z') { cout<<"Lit. mare!\n"; lmare++; } else if (c>='a' && c<='z') { cout<<"Lit. mic!\n"; lmica++; } else if (c>='0' && c<='9') { cout<<"Cifr!\n"; lcif++; } else { cout<<"Alt car.!\n"; altcar++; } cout<<"Atept car.:";cin>>c; } cout<<"Ai introdus \n"; cout<<lmare<<" litere mari, "; cout<<lmic<<" litere mici\n"; cout<<lcif<<" cifre i \n"; #include <iostream.h> #include <conio.h> void main() { char c;clrscr(); intlmic=0,lmare=0,lcif=0;int altcar=0; cout<<"Atept caract.:"; cin>>c; for( ; c!='@'; ){
Observaii legate de implementare Variabila c (tip char) memoreaz caracterul introdus la un moment dat, de la tastatur. Variabilele ntregi lmic, lmare, lcif i altcar sunt utilizate pe post de contor pentru litere mari, mici, cifre, respectiv alte caractere. Aciunea care se repet ct timp caracterul citit este diferit de constanta caracter '@' const din mai multe aciuni simple: citirea unui caracter (cu afiarea n prealabil a mesajului "Atept car.:"; testarea caracterului citit (operatorii relaionali pot fi aplicai datelor de tip char). Ca urmare, aciunea din corpul instructiunii while a fost implementat printr-o instruciune bloc. Tot instruciuni bloc au fost utilizate pe fiecare ramur a instruciunii if (afiare mesaj referitor la caracter i incrementare contor).
Pentru implementarea aceluiai algoritm se poate utiliza instruciunea for. n cadrul acesteia, expresie1 i expresie3 lipsesc, ns prezena instruciunilor vide este obligatorie.
// corp identic
} cout<<"Ai introdus \n"; cout<<lmare<<" litere mari, "; cout<<lmic<<" litere mici\n"; cout<<lcif<<" cifre i \n"; cout<<altcar<<" alte carctere\n"; getch(); }
O alt variant de implementare poate fi urmtoarea, n care i iniializarea variabilelor contor se realizeaz n cadrul expresiei expresie1 .
int lmic, lmare, lcif, altcar; for(lmare=0, lmic=0, lcif=0, altcar=0; c!='@'; ){
// corp identic
}
47
CAPITOLUL 3 control
Implementarea structurilor de
//corp do-while
} while (c!='@'); cout<<"Ai introdus \n";
//. . .
2.
S se calculeze suma i produsul primelor n numere naturale, n fiind introdus de la tastatur. Se vor exemplifica modalitile de implementare cu ajutorul instruciunilor do-while, while, i for. (Se observ c: S =
k , P =
k= 1
k ).
k= 1
Pentru a ilustra multiplele posibiliti oferite de instruciunea for, prezentm variantele // varianta1
int S=0, P=1, k; for (k=1; k<=n; k++){ S+=k; P*=k; } cout<<"P="<<P<<"\tS="; cout<<S<<'\n';
cout<<"n="; int n; cin>>n; int S=0, P=1, k=1; while (k <= n){ S+=k; P*=k; k++; } cout<<"P="<<P<<"\tS="<<S<<'\n';
cout<<"n="; int n; cin>>n; int S=0, P=1, k=1; do{ S+=k; P*=k; k++; } while (k <= n); cout<<"P="<<P<<"\tS="<<S<<'\n';
// varianta2
int S=0, P=1; for (int k=1; k<=n; k++){ S+=k; P*=k; } cout<<"P="<<P<<"\tS="; cout<<S<<'\n';
// varianta3
for (int S=0, P=1, k=1; k<=n; k++){ S+=k; P*=k; } cout<<"P="<<P<<"\tS="<<cout<<S<<'\n';
// varianta4
for (int S=0, P=1, k=1; k<=n; S+=k, P*=k, k++) ; cout<<"P="<<P<<"\tS="<<cout<<S<<'\n';
3. S se citeasc un ir de numere reale, pn la ntlnirea numrului 900. S se afieze maximul numerelor citite.
#include <iostream.h> Se presupune c primul element din irul de void main() numere are valoarea maxim. Se memoreaz {double n; valoarea sa n variabila max. Se parcurge apoi cout<<"Introdu nr:"; cin>>n; irul, comparndu-se valoarea fiecrui element double max=n; cu valoarea variabilei max. n cazul n care se while (n!=900) gsete un element cu o valoare mai mare dect { if (n>=max) a variabilei max, se reine noua valoare max=n; (max=n). cout<<"Introdu nr:"; cin>>n; } cout<<"Max ir este:"<<max<<'\n'; 4. S } se afieze literele mari ale alfabetului i codurile aferente acestora n ordine cresctoare, iar literele
mici i codurile aferente n ordine descresctoare. Afiarea se va face cu pauz dup fiecare ecran.
48
CAPITOLUL 3 control
Implementarea structurilor de
#include <iostream.h> #include <conio.h> #define DIM_PAG 22 //dimensiunea paginii (numarul de randuri de pe o pagina) void main() {clrscr(); cout<<"LITERELE MARI:\n";int nr_lin=0; // nr_lin este contorul de linii de pe un ecran for (char LitMare='A'; LitMare<='Z'; LitMare++){ if (nr_lin==DIM_PAG){ cout<<"Apasa o tasta...."; getch(); clrscr(); nr_lin=0;} cout<<"Litera "<<LitMare<<" cu codul ASCII "<<(int)LitMare<<'\n';
5. S se scrie un program care realizeaz conversia numrului N ntreg, din baza 10 ntr-o alt baz de numeraie, b<10 (N i b citite de la tastatur). Conversia unui numr ntreg din baza 10 n baza b se realizeaz prin mpriri succesive la b i memorarea resturilor, n ordine invers. De exemplu: 547:8=68 rest 3; 68:8=8 rest 4; 8:8=1 rest 0; 1:8=0 rest 1 547 10 = 1043 8
#include <iostream.h> void main() { int nrcif=0,N,b,rest,Nv,p=1; long Nnou=0; cout<<"\nIntroduceti baza<10, b=";cin>>b; cout<<"Introduceti numarul in baza 10, nr=";cin>>N; Nv=N; while(N!=0) { rest=N%b; N/=b; cout<<"nr="<<N<<'\n'; cout<<"rest="<<rest<<'\n'; nrcif++; Nnou+=rest*p; p*=10; cout<<"Nr. nou="<<Nnou<<'\n'; } cout<<"Numarul de cifre este "<<nrcif<<'\n'; cout<<"Nr. in baza 10 "<<Nv; cout<<" convertit in baza "<<b<<" este "<<Nnou<<'\n'; }
6. S se calculeze seria urmtoare cu o ero are mai mic dect EPS (EPS introdus de la tastatur): 1+ xk , x [0,1], x citit de la tastatur. Vom aduna la sum nc un termen ct timp diferena dintre k= 1 k suma calculat la pasul curent i cea calculat la pasul anterior este mai mare sau egal cu EPS.
#include <iostream.h> #include <conio.h> #include <math.h> void main() { double T,S,S1;long k;k=1;T=1;S=T;double x; cout<<"x="; cin>>x;
// T= termenul general de la pasul curent; S=suma la pasul curent; S1=suma la pasul anterior
do { S1=S;k=k+1;T=pow(x,k)/k; //funcia pow(x, k), aflat n <math.h> calculeaz x k S=S+T; // cout<<k<<" "<<T<<" "<<S<<'\n';getch(); } while ((S-S1)>=EPS); 49
Instruciunea continue ntlnirea instruciunii continue (figura 3.4.) determin ignorarea instruciunilor care o urmeaz n corpul instruciunii ciclice i reluarea execuiei cu testarea valorii expresiei care determin repetarea sau nu a corpului ciclului.
Exemplu: S revenim la programul realizat pentru problema 1, care folosete instruciunea dowhile. Dac primul caracter citit este chiar caracterul @, se realizeaz testarea acestuia; ca urmare, se afieaz mesajul "Alt car.!" i se incrementeaz valoarea contorului altcar . Dac nu se dorete ca acest caracter s fie testat i numrat, n corpul instruciunii do while putem face un test suplimentar.
int lmic=0,lmare=0,lcif=0,altcar=0;cout<<"Atept caract.:";cin>>c; do { if (c == '@') break; //ieire din do while
//corp do-while
} while (c!='@'); cout<<"Ai introdus \n"; //. . . do{ while (expresie1){ instructiune1; instructiune2; if (expresie2) break; else continue; instructiune3; instructiune1; instructiune2; if (expresie2) break; else continue; instructiune3; } while (expresie1);
}
for (expr1; expr2; expr3)){ instructiune1; instructiune2; if (expresie2) break; else continue; instructiune3;
NTREBRI I EXERCIII
CAPITOLUL 3 control
Implementarea structurilor de
Chestiuni teoretice 1. Care sunt instruciunile care implementeaz n limbajul C structura condiional? 2. Care sunt instruciunile care implementeaz n limbajul C structura secvenial? 3. Care sunt instruciunile care implementeaz n limbajul C structura repetitiv cu test iniial? Chestiuni practice 1. 2. 3. 4. S se implementeze programele cu exemplele prezentate. S se scrie programele pentru exerciiile rezolvate care au fost prezentate. S se implementeze algoritmii proiectai pentru problemele 1-7 din capitolul 1. S se calculeze aria unui triunghi, cunoscndu-se mrimea laturilor sale. Numerele care reprezint mrimile laturilor vor fi introduse de utilizator. Se va testa mai nti dac cele 3 numere reprezentnd mrimea laturilor pot forma un triunghi ( a <= b+c, b <= c+d, c <= a+b). 5. S se rescrie urmtoarea secven, folosind o singur instruciune if.
if (n<0) if (n>=90) if (x!=0) int b= n/x;
4. Care sunt instruciunile care implementeaz n limbajul C structura repetitiv cu test final? 5. Ce deosebiri sunt ntre instruciunea while i instruciunea do-while? 6. Pornind de la sintaxa instruciunii for, stabilii echivalena ntre aceasta i instruciunile while i do-while.
6. S se citeasc un numar natural n. S se scrie un program care afieaz dac numrul n citit reprezint sau nu, un an bisect (anii biseci sunt multipli de 4, exceptnd multiplii de 100, dar incluznd multiplii de 400). 7. S se gseasc toate numerele de dou cifre care satisfac relaia:
xy =( x + y ) 2
8. S se citeasc un ir de numere reale, pn la ntlnirea numarului 800 i s se afieze valoarea minim introdus, suma i produsul elementelor irului. 9. Scriei un program care s verifice inegalitatea 1/(n+1) < ln[(n+1)/n] < 1/n, unde n este un numr natural pozitiv, introdus de la tastatur. 10. Fie funcia 3 e x , x [0, 1) S se calculeze f(x), x citit de la tastatur. f(x)= sinx+cosx , x [1, 2) 0,9ln(x+3) , x [2, 100] 11. S se scrie un program care calculeaz i afieaz maximul a 3 numere reale (a, b i c) citite de la tastatur. 12. S se scrie un program care calculeaz i afieaz minimul a 3 numere reale (a, b i c) citite de la tastatur. 13. S se citeasc 2 caractere care reprezint 2 litere mari. S se afieze caracterele citite n ordine alfabetic. 14. S se citeasc 3 caractere care reprezint 3 litere mici. S se afieze caracterele citite n ordine alfabetic. 15. S se scrie un program care citete o cifr. n funcie de valoarea ei, s se fac urmtorul calcul: dac cifra este 3, 5 sau 7 s se afieze ptratul valorii numerice a cifrei; dac cifra este 2, 4 sau 6 s se afieze cubul valorii numerice a cifrei; dac cifra este 0 sau 1 s se afieze mesajul "Valori mici"; altfel., s se afieze mesajul "Caz ignorat!". 16. Fie irul lui Fibonacci, definit astfel: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n cazul n care n>1. S se scrie un program care implementeaz algoritmul de calcul al irului Fibonacci. 17. S se calculeze valoarea polinomului Cebev de ordin n ntr-un punct x dat, cunoscnd relaia: T 0 (x)=1, T 1 (x)=x i T k + 1 (x) - 2xT k (x) + T k 1 (x) = 0 18. S se citeasc cte 2 numere ntregi, pn la ntlnirea perechii (0, 0). Pentru fiecare pereche de numere, s se calculeze i s se afieze cel mai mare divizor comun. 19. Se citesc cte 3 numere reale, pn la ntlnirea numerelor 9, 9, 9. Pentru fiecare triplet de numere citit, s se afieze maximul.
51
CAPITOLUL 3 control
Implementarea structurilor de
20. Se citete cte un caracter pn la ntlnirea caracterului @. S se afieze numrul literelor mari, numarul literelor mici i numrul cifrelor citite; care este cea mai mare (lexicografic) liter mare, liter mic i cifr introdus. 21. Se citesc cte 2 numere ntregi, pn la ntlnirea perechii de numere 9, 9. Pentru fiecare pereche de numere citite, s se afieze cel mai mare divizor comun al acestora. 22. S se calculeze suma seriei 1 + x 3 /3 - x 5 /5 + x 7 /7 - cu o eroare mai mic dect epsilon (epsilon citit de la tastatur). S se afieze i numrul de termeni ai sumei. 23. S se citeasc un numr ntreg format din 4 cifre (abcd). S se calculeze i s se afieze valoarea expresiei reale: 4*a + b/20 -c + 1/d. 24. S se scrie un program care afieaz literele mari ale alfabetului n ordine cresctoare, iar literele mici - n ordine descresctoare. 25. S se scrie un program care genereaz toate numerele perfecte pn la o limit dat, LIM. Un numr perfect este egal cu suma divizorilor lui, inclusiv 1 (exemplu: 6=1+2+3). 26. S se calculeze valoarea sumei urmatoare, cu o eroare EPS mai mic de 0.0001: S=1+(x+1)/ 2! + (x+2)/ 3! + (x+3)/ 3! + ... , unde 0<=x<=1, x citit de la tastatur. 27. S se genereze toate numerele naturale de 3 cifre pentru care cifra sutelor este egal cu suma cifrelor zecilor i unitilor. 28. S se citeasc cte un numr ntreg, pn la ntlnirea numrului 90. Pentru fiecare numar s se afieze un mesaj care indic dac numrul este pozitiv sau negativ. S se afieze cel mai mic numr din ir. 29. S se genereze toate numerele naturale de 3 cifre pentru care cifra zecilor este egal cu diferena cifrelor sutelor i unitilor. 30. S se calculeze suma: (1 + 2!) / (2 + 3!) - (2+3!) / (3+4!) + (3+4!) / (4+5!) - .....
52