Instructiunea de Decizie

Descărcați ca doc, pdf sau txt
Descărcați ca doc, pdf sau txt
Sunteți pe pagina 1din 22

PROIECT DE ATESTARE PROFESIONALA LA INFORMATICA

2013

Instructiunea de decizie C++

Cuprins: Operatori de relatie........................................................pag 5 Operatori logici..............................................................pag 6 Instructiuni conditionale: if, else, switch.......................pag 10 Functii de validare..........................................................pag 14 Probleme rezolvate.........................................................pag 16

MOTIVAREA TEMEI

Fara instructiunea de decizie sau de test (in nici un caz detest) algorimul ar fi linear. Aceasta instructiune ne ajuta in cazul in care avem o intrebare privind natura datelor folosite, a valorii lor la un moment dat. Practic, trebuie sa punem intrebari la care algoritmul sa raspunda cu adevarat/fals; ce operatori folosim pentru a obtine raspunsuri adevarat/fals? Expresii cu valoare logica (adevarat/fals)

Operatori de relatie:
> inseamna mai mare a>b are valoarea adevarat numai daca valoarea variabilei a este mai mare decat valoarea variabilei b < inseamna mai mic a<b are valoarea adevarat numai daca valoarea variabilei a este mai mica decat valoarea variabilei b >= inseamna mai mare egal a>b are valoarea adevarat numai daca valoarea variabilei a este mai mare sau egala cu valoarea variabilei b <= inseamna mai mic sau egal a>b are valoarea adevarat numai daca valoarea variabilei a este mai mica sau egala cu valoarea variabilei b = inseamna egal a=b are valoarea adevarat numai daca variabila a are aceeasi valoare cu variabila b != inseamna diferit a!=b are valoarea adevarat numai daca variabila a NU are aceeasi valoare cu variabila b

Operatori logici:
Operatorii logici (cu care lucreaza si logica matematica) sunt SI, SAU si NEGARE: Operatorul SI este un operator binar, cu doi operanzi cu valoare logica. Rezultatul operatorului SI este adevarat numai daca ambii operanzi au valoarea ADEVARAT. Mie imi place fata bruneta si cu ochi albastri! daca fata nu este bruneta sau nu are ochi albastri nici nu ma uit la ea (:P), ceea ce inseamna fals; daca macar una dintre conditii este falsa atunci intreaga expresie este falsa Operatorul SAU este un operator binar cu doi operanzi cu valoare logica. Rezultatul operatiei SAU este adevarat daca macar unul din operanzi are valoarea ADEVARAT. Mie imi place fata bruneta SAU cu ochi albastri! Fata nu trebuie sa aiba ambele calitati. Daca este bruneta imi place (ADEVARAT). Daca este cu ochi albastri imi place (ADEVARAT). Daca macar una din conditii este adevarata atunci intreaga expresie este adevarata Operatorul de negatie (vom folosi semnul ! ) schimba valoarea de adevar a expresiei: ! ADEVARAT==FALS si !FALS ==ADEVARAT Exemple: X apartine [-5, -2] (x>=-5) SI (X<=-2) x apartine (0, 10) (x>0) SI (x<10) x nu apartine (-7,9] (x<=-7) SAU (x>9) !(x>-7) SAU !(x<=9) !((X>-7) SI (x<=9)) Observatii prioritatea operatorilor logici: negare, SI, SAU in cazul expresiilor logice se pot aplica regulile lui De Morgan: !( exp1 si exp2) = !exp1 sau !exp2 !(exp1 sau exp2) = !exp1 si !exp2 Instructiunea de decizie (de test; sau detest ) Sintaxa: daca (exp_logica) atunci instructiune1 [altfel instructiune2;]

Efect: Se evalueaza expresia logica; daca valoarea logia ca expresiei este ADEVARAT se executa intructiunea 1; Daca exista sectiunea ALTFEL si valoarea logica a expresiei este FALS se executa intructiunea 2; in ambele cazuri, dupa executarea intructiunii corespunzatoare si executa ce instructiune urmeaza dupa testul nostru. Observatie. Un algoritm trebuie sa fie clar si sa poata fi inteles intr-un singur fel. Din acest punct de vedere, exista doua moduri de a scrie un algoritm: cate o instructiune pe linie si cu marcatori la sfarsitul instructiunilor de test si repetitive (cum cere manualul) mai multe instructiuni pe line, separate printr-un marcator; pentru cazul cand un grup de instructiuni trebuie executate impreuna pe unul din cazurile intrtuctiunii de decizie (de exemplu ), acestea pot fi incadrate cu acolade (in limbajul C++) sau cu cuvinte rezervate (begin end); Pentru ca pdeudocodul nu este un limbaj in sine ci doar o conventie de notatii, sugerez sa folosim deja notatiile din C++; cand o secventa de instructiuni trebuie executate una dupa alta, datorita logicii algoritmului, acea secventa o vom incadra in acolade (de exemplu: {instructiune1; instructiune2; instructiune3; }); vom reveni cu amanunte. Exemple: Sa se afiseze maximul a doua valori citite. intreg a,b; citeste a,b; daca (a>b) atunci scrie a altfel scrie b. Sa se afiseze modulul (matematic) al unui numar intreg. intreg a; citeste a; daca (a>0) atunci scrie a altfel scrie -a. Sa memoram valoarea maxima intr-o variabila si sa o afisam. intreg a,b,max; citeste a,b; daca (a>b) atunci max<-a altfel max<-b; Scrie max. Sa se citeasca o valoare intreaga si sa se stabileasca daca s-a citit o valoare para sau nu. intreg a; citeste a; daca (a%2 ==0) atunci scrie Valoarea citita este para! altfel scrie Valoarea citita este impara!. Fie a si b coeficientii unei ecuatii de grad 1. Sa se afiseze solutia ecuatiei a*x + b =0; evident x=-b/a daca a!=0; intreg a,b; real x; citeste a,b; daca (a!=0) atunci { x<- -b/a; scrie Solutia ecuatiei este ; Scrie x;} altfel scrie Nu se poate calcula solutia ecuatiei.

Secventa { x=-b/a; scrie Solutia ecuatiei este ; Scrie x;} trebuie gandita ca un intreg deoarece este valabila numai pentru cazul in care a este nenul; de aceea am incadrat-o intre acolade. Fie a, b si c coeficientii unei ecuatii de grad 2 (a*x^2+b*x+c=0). Sa se calculeze valorile radacinii, daca exista. conditia pentru a fi ecuatie de grad 2: coeficientul a trebuie sa fie nenul (a!=0) trebuie calculata valoarea DELTA=b*b-4*a*c pentru a avea solutii, valoarea DELTA trebuie sa fie pozitiva, cel putin nula; vom folosi radical (expr) pentru a calcula valoarea radicalului unei expresii reale/intregi intreg a,b,c,delta; real x1,x2; citeste a,b,c; daca (a==0) atunci scrie Coeficientii nu formeaza ecuatie de gradul 2 altfel {delta=b*b-4*a*c; daca (delta<0) atunci scrie Nu se pot calcula radacini reale altfel {x1<- (-b+radical(delta))/(2*a); x2<- -b-radical(delta))/(2*a); scrie Solutiile sunt :, x1, , x2; }} Observatii: x1 si x2 sunt declarati reali pentru ca se obtin in urma radicalului si a unei impartiri urmariti daca algoritmul scrie concide cu termenii problemei pentru cazul coeficientului a nenul trebuie efectuate doua operatii (calculul lui delta si testul lui delta), motiv pentru care acestea au fost incadrate intre acolade la calculul solutiilor au fost puse paranteze pentru separarea numitorului si a numaratorului de asemenea, aici au trebuit puse acolade pentru calculul celor doua solutii si a afisarii solutiilor Fie o functie matematica data pe intervale. Sa se calculeze valoarea functiei intr-un punct x oarecare daca expresia functiei este: x^2+2*x+1 daca x<0 3*x+5 daca x apartine [0,5) -x+2 daca x>=5 este clar ca valoarea functie difera pe cele trei intervale; va trebui sa verificam, pe rand, carui interval apartine valoarea citita pentru x; real x,f; citeste x; daca (x<0) atunci f<- x*x+2*x+1 altfel daca (x>=5) atunci f<- -x+2 altfel f<- 3*x+5; scrie f.

Sintaxa: if(expresie) instructiune1 else instructiune2 Semantica: Se evalueaza expresie; daca valoarea ei este adevarat ( diferita de 0 ) se executa instructiune1, altfel, daca exista ramura else, se executa instructiune2. Observatii: Instructiunea corespunde structurii de control selectie din schemele logice; Pentru ca programele scrise se fie cat mai clare este bine ca instructiunile corespunzatoare lui if si else sa fie scrise decalat fata de acestea; Instructiunea corespunzatoare valorii adevarat sau fals, poate fi orice instructiune C: daca instructiunea corespunzatoare valorii adevarat este o instructiune expresie, simbolul ; apare in fata cuvantului cheie else instructiunea bloc ( atunci cand trebuie executate mai multe prelucrari ) o alta instructiune de decizie - deci instructiunile if-else pot fi incuibate; fiecare else corespunde if-ului anterior cel mai apropiat, fara pereche. Exemplu: //urmatoarele trei secvente echivalente verifica daca trei valori pot reprezenta lungimile //laturilor unui triunghi sau if(expresie) instructiune

Instructiuni conditionale: if, else, switch


Instructiunile conditionale determina programele sa testeze diferite conditii si in functie de acestea sa decida executia anumitor comenzi. Aceste instructiuni conditionale sunt: if() - executa comenzile dorite cand o conditie scrisa in paranteze este adevarata. if() ... else - executa anumite comenzi cand o conditie este adevarata si alte comenzi cand aceasta este falsa. switch - selecteaza care comanda va fi executata. 1. Instructiunea "if" "if()" (daca) este cea mai simpla instructiune conditionala. Forma generala a acestei instructiuni este urmatoarea : if (conditie) { // Codul care va fi executat daca este Adevarata conditia } - Unde 'conditie' poate fi orice expresie alcatuita cu operatori rationali, de egalitate si logici. De exemplu: if(8 > 7) { trace('Conditie Adevarata'); } - Daca rezultatul conditiei este TRUE se executa codul dintre acolade, in caz contrar, cand conditia returneaza FALSE, se trece peste acest cod. 2. Instructiunea "if ... else" In exemplu anterior am vazut ca daca este adevarata conditia din parantezele instructiunii "if()", se executa codul dintre acoladele ei, iar in caz contrar nu se intampla nimic. Folosind combinatia "if() ... else" (daca ... altfel) putem stabili comenzi care sa fie executate si cand conditia instructiunii "if()" este FALSE. Forma generala a instructiuni "if() ... else" este urmatoarea : if (conditie) { // codul care va fi executat daca este Adevarata conditia } else { // codul ce va fi executat daca conditia este falsa } - Unde 'conditie' poate fi orice expresie logica. Daca rezultatul conditiei este TRUE se executa codul dintre primele acolade, care apartin de "if()", in caz contrar, cand conditia returneaza FALSE, sunt executate comenzile din acoladele de la "else". De exemplu: var ziua:String = 'o_zi'; if(ziua=='duminica') { trace('Stau acasa'); } else { trace('Merg la lucru'); }

10

- Daca "ziua" are valoarea "duminica" va afisa in Output sirul "Stau acasa", altfel, se executa codul din acoladele lui "else" (afiseaza in Output "Merg la lucru"). 3 Formula "else if()" Cu "if() ... else" sunt posibile executia doar a doua optiuni, cea de la "if()" sau de la "else". Dar sunt stuatii in care avem mai multe optiuni, in acest caz se foloseste formula "else if()" (altfel daca). Cu aceasta se pot crea si alte optiuni suplimentare intre cele doua. Sintaxa generala pentru folosirea acestei formule este: if (conditie 1) { // codul care va fi executat daca este Adevarata conditia 1 } else if (conditie 2) { // codul ce va fi executat daca prima conditie este Falsa si este Adevarata conditia 2 } else if (conditie 3) { // codul care va fi executat daca primele doua conditii sunt False si este Adevarata conditia 3 } // ... else { // codul executat daca toate conditiile sunt False } - Pot fi adaugate oricate optiuni "else if". De exemplu, in urmatorul cod: var ziua:String = 'o_zi'; if(ziua=='duminica') { trace('Stau acasa'); } else if(ziua=='luni') { trace('Merg la cursuri'); } else if(ziua=='sambata') { trace('Merg la bunici'); } else { trace('Merg la lucru'); } - In functie de valoarea lui "ziua", va fi afisat in Output sirul din optiunea cu "trace()" corespunzaoare. Daca "ziua" nu are vreuna din valorile: duminica, luni, sambata, se executa codul din acoladele lui "else". 4. Instructiunea switch Aceasta instructiune e folosita pentru a compara o valoare cu altele dintr-o lista, si in functie de acea valoare se executa codul asociat ei in lista "switch". Sintaxa generala a instructiuni "switch" este urmatoarea. switch (expresie) { case valoare1: cod executat daca expresie = valoare1

11

break; case valoare2: cod executat daca expresie = valoare2 break; case valoare3: cod executat pt. expresie = valoare3 break; default : cod executat daca expresie e diferit de valoare1, valoare2 sau valoare3 } - Prima data este evaluata expresia scrisa intre paranteze rotunde, la "switch()", apoi valoarea expresiei este comparata pe rand cu fiecare valoare determinata de "case". Daca se gaseste o identitate se executa codul asociat acelui "case". Apoi se iese din instructiunea "switch". Daca, parcurgand fiecare "case", nu se gaseste o egalitate, se executa codul de la "default". Prin folosirea lui "break" se opreste parcurgerea corpului instructiunii atunci cand s-a gasit o valoare egala cu 'expresie' si se iese din "switch". - Instructiunea "switch" poate inlocui un sir de conditii cu "else if". De exemplu: var ziua:String = 'o_zi'; switch (ziua) { case 'duminica': trace('Stau acasa'); break; case 'luni': trace('Merg la cursuri'); break; case 'sambata': trace('Merg la bunici'); break; default: trace('Merg la lucru'); }

5.Operatori logici si instructiunile conditionale Operatorii logici sunt "&&" si "||". Rolul lor este asemanator cu cel al operatorilor relationali si de egalitate, in sensul ca si acestia compara valoarea a doi operanzi. Operatorii logici compara operatii, expresii de cod, iar rezultatul lor este unul din valorile TRUE (Adevarat) sau FALSE (Fals). exp1 && exp2 - Returneaza True daca si "exp1" si "exp2" sunt Adevarate; altfel, returneaza False. exp1 || exp2 - Returneaza True daca oricare din "exp1" sau "exp2" e Adevarat; altfel, daca amandoua sunt false, returneaza False. exp1 && exp2 || exp3 - Returneaza True daca expresia (exp1 && exp2) sau "exp2" e Adevarata; altfel, returneaza False. De exemplu:

12

3>2 && 5<=8 True (ambele adevarate) 3>2 || 5>=8 True (una din expresii, prima e adevarata) 3<2 && 5>8 || 4<9 True (a treia expresie, dupa || (SAU), e adevarata) Datorita rezultatului True sau False pe care-l dau acesti operatori logici, ei sunt folositi cu instructiuni conditionale, contribuind la efectuarea unor conditii mai complexe in parantezele instructiunii "if()" si "else if()". Iata un exemplu: var ziua:String = 'luni'; var nr:Number = 8; if(ziua=='duminica' && nr==8) { trace('Stau acasa'); } else if(ziua=='luni' || nr>9) { trace('Merg la cursuri'); } else { trace('Merg la lucru'); } - In Output va fi afisat "Merg la cursuri" deoarece conditia "(ziua=='duminica' && nr==8)" returneaza False [nu sunt amandoua expresii adevarate], iar "(ziua=='luni' || nr>9)" returneaza True [cu "||" e suficient una sa fie adevarata]. 6. Operatorul conditional "? :" O alta metoda de a executa un cod in functie daca o expresie este Adevarata sau Falsa e operatorul "? :" (intrebare doua puncte). Acest operator conditional, desi arata diferit de ceilalti, este o forma prescurtata a instructiunii "if() else". Sintaxa generala de folosire a lui este: expresie-conditionala ? daca-TRUE : daca-FALSE; - Operatorul conditional evalueaza expresia conditionala. Daca expresia are valoarea TRUE, operatorul conditional returneaza valoarea de la "daca-TRUE"; in caz contrar, returneaza valoarea de la "daca-FALSE". Iata un exemplu: var a:Number = 9.3; var b:int = 8; // Se defineste "c", in functie de "a>b" var c:String = (a > b) ? 'valoare pt. True' : 'val. pt. False' trace(c); // valoare pt. True /* Echivalent cu: if(a>b) { var c:String = 'valoare pt. True'; } else { var c:String = 'val. pt. False'; } */ - In acest cod se defineste o variabila "c" in functie de relatia dintre alte doua variabile (a si b). Daca "a" este mai mare decat "b", "c" va primi valoarea "valoare pt. True", in caz contrar, "c" va avea "val. pt. False".

13

- Pentru verificare, functia "trace(c)" afiseaza in Output valoarea pe care "c" a primit-o. Comentariu care este dupa "trace(c)" arata asemanarea cu "if() else". Pe langa atribuirea unei valori in functie de rezultatul unei expresii, acest operator conditional poate fi utilizat in aceeasi forma si la determinarea apelarii unei anumite functii, dupa rezultatul unei expresii logice. Formula este: (expresie-logica) ? dacaTrue() : dacaFalse(); - "dacaTrue()" si "dacaFalse()" pot fi considerate doua functii. Exemplu: (var1 == var2) ? oFunctie() : altaFunctie(); - Daca "var1" este egal cu "var2", va fi apelata "oFunctie()", in caz contrar este executata "altaFunctie()".

Functii de validare
Aceste functii sunt folosite pentru a valida datele dintr-un formular. Prima functie este empty(), care verifica daca o anumita variabila are o valooare diferita de 0, respective de un sir fara continute. Daca returneaza TRUE, variabila nu are valoare, in caz contrar va returna FLASE. Functia isset() reprezinta opusul lui empty(). Functia isset returneaza TRUE daca variabila are o valoare si FALSE daca nu are valoare. Functia is_numeric() returneaza TRUE daca variabila trimisa are o valoare numerica valida, FALSE in caz contrar. O alta metoda de verificare daca o caseta de introducere a textului a fost completata (in afara functiei empty()) este: If(strlen ($var) >0 { //$var este corecta } Acesta este scriptul pentru verificarea completarii tuturor campurilor unui fomular: <html> <head> <title>trimiterea datelor</title> </head> <body> <?php

14

//in cazul in care register_globals este dezactivata $nume = $_POST[nume]; $prenume = $_POST[prenume]; $email = $_POST[email]; $parola = $_POST[parola]; //validarea campurilor if (empty($nume)) { print Va rugam introduceti numele; } if empty($prenume)) { Print Va rugam introduceti prenumele; } if empty($email)) { Print Va rugam introduceti adresa de email; } if empty($parola)) {Print Va rugam introduceti parola; } ?> </body> </html>

15

PROBLEME REZOLVATE:

1) Scriei un program C/C++ care citete de la tastatura un numr natural n (2<n<21) si apoi n linii cu cate n numere ntregi de cel mult 7 cifre ce formeaz un tablou bidimensional a. Sa se afieze pe ecran diferena dintre suma elementelor de pe diagonala principala si suma elementelor de pe diagonala secundara a matricei a. #include<iostream.h> void main() {int n,i,j; long a[20][20],s1=0,s2=0,d; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];}} for(i=1;i<=n;i++) {for(j=1;j<=n;j++) if(i==j) s1=s1+a[i][j];}; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) if(i+j==n+1) s2=s2+a[i][j];} cout<<s1-s2; }

2) Scriei programul C/C++ care citete de la tastatura un numr natural n (n<100) si un sir cu n numere ntregi din intervalul [100 ;999] ; programul construiete un sir de numere rezultat prin nlocuirea fiecrui numr din irul citit cu numrul obinut prin interschimbarea cifrei unitatilor cu cifra sutelor. Numerele din noul sir se vor afia pe ecran separate printr-un singur spaiu. De exemplu , pentru n=3 si irul 123 , 904 , 500 , se afieaz 321 , 409 , 5. #include<iostream.h> void main() {int n,i,o,v[20],c; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"v["<<i<<"]=";cin>>v[i];} for(i=1;i<=n;i++) {o=0; c=v[i]%10; 16

o=o*10+c; v[i]=v[i]/10; c=v[i]%10; o=o*10+c; v[i]=v[i]/10; o=o*10+v[i]; v[i]=o; cout<<v[i]<<endl; } }

3) Doua tablouri unidimensionale a si b , cu elementele a1 , a2 , , an , respectiv b1 , b2 , bn sunt in relaia a<=b daca : a1<=b1 , a2<=b2 , , an<=bn. Scriei program in limbajul C/C++ care citete doua tablouri unidimensionale a si b cu acelai numr de elemente de tip ntreg si verifica daca a<=b s #include<iostream.h> void main() {int a[10],i,n,j,k,aux,min; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"a["<<i<<"]=";cin>>a[i];} for(i=1;i<=n-1;i++) {min=a[i]; k=i; for(j=i+1;j<=n;j++) if(a[j]<min) {min=a[j]; k=j;} aux=a[k]; a[k]=a[i]; a[i]=aux;} for(i=1;i<=n;i++) cout<<a[i]<<" ";}

4) Scriei un program in limbajul C/C++ care afieaz toate numerele naturale formate din cifre identice , mai mari dect 10 si mai mici dect o valoare data n, n<=2.000.000. De exemplu pentru n=195 , se afieaz : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111. #include<iostream.h> int n,i; int identic(int n) {int d,c; c=n%10; while (n>0) {d=n%10;

17

if(d==c) n=n/10; else return 0;} if(n==0) return 1;} void main() {cout<<"n=";cin>>n; for (i=10;i<=n;i++) {if(identic(i)) cout<<i<<endl;}}

5) Scriei un program C/C++ care citete de la tastatura trei numere naturale x, y si k, (1<x<y<2000000, k<1000) si afieaz pe ecran k numere prime din intervalul [x, y]. Daca nu exista k numere prime n intervalul [x,y] se vor afia toate numerele prime gsite iar pe linia urmtoare se va afia mesajul s-au gsit mai puine numere prime: urmat de numrul acestora. De exemplu, pentru x=3, y=12 si k=5 se vor afia pe ecran: 3 5 7 11 s-au gsit mai puine numere prime:4 #include<iostream.h> void main() {int x,y,k,n,d,a,p; cout<<"x=";cin>>x; cout<<"y=";cin>>y; cout<<"k=";cin>>k; a=0; n=x; while ((n>=x)&&(n<=y)&&(a<k) ) {d=2;p=1; while((d<=n/2)&&(p==1)) if(n%d==0) p=0; else d++; if(p) {cout<<n<<endl;a++;} n++;} if(a<k) cout<<"au fost gasite mai putine nr prime"<<a;}

6) .Scriei un program C/C++ care citete din fiierul text BAC.TXT , cel mult 100 de numere naturale aflate pe o singura linie, formate din cel mult 9 cifre fiecare, separate prin spatii si dintre acestea le afieaz pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca nu se gsesc numere palindrom, se va afia pe ecran valoarea 1. Un numr

18

are proprietatea de a fi palindrom daca citit de la dreapta la stnga sau de la stnga la dreapta are aceeai valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este palindrom. Exemplu : daca din fiierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 , atunci pe ecran se vor afia : 828 , 2 , 131. #include<iostream.h> int palindrom(int n) {int copie=n,oglindit,c; oglindit=0; {while(n!=0) c=n%10; oglindit=oglindit*10+c; n=n/10;} return (copie==oglindit);} void main() {int v[100],n,i,p; p=0; cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"v["<<i<<"]=";cin>>v[i];} for(i=1;i<=n;i++) if(palindrom(v[i])) {cout<<v[i]; p=1;} if(p==0) cout<<"-1";} 7) .Pentru orice numr natural nenul n definim n factorial (notat n!) ca fiind produsul tuturor numerelor naturale nenule mai mici sau egale cu n (n! = 1*2*3**n) De exemplu : 3! =1*2*3=6 5!=1*2*3*4*5=120 . Scriei un program C/C++ care determina numrul de cifre nule aflate pe ultimele poziii consecutive ale valorii obinute in urma evalurii lui n!, n fiind un numr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi 2 deoarece 3628800 are dou zerouri la sfrit. #include<iostream.h> void main() {long int n,x=1,nr=0,c,p=1; cout<<"n=";cin>>n; for(int i=1;i<=n;i++) p=p*i; while(x==1) {c=p%10; if(c==0) {nr=nr+1; p=p/10;} else x=0;} cout<<nr;}

19

8) Se citete de la tastatura un numr natural nenul n care are cel mult 9 cifre. Sa se afieze in fiierul Date.out numrul k, natural, astfel nct produsul 1*2**(k-1)*k sa aib o valoare cat mai apropiata de numrul n. De exemplu, daca se citete numrul n=25 fiierul Date.out are urmtorul coninut: 4. iar daca se citete numrul n=119 fiierul Date.out are urmtorul coninut: 5 #include<iostream.h> #include<fstream.h> void main() {int k,p,r,n; cout<<"n=";cin>>n; k=1; fstream g("date.out",ios::out); p=1; while(p<=n) {p=p*k; k++;} p=p/(k-1); r=p*k; if((n-p)<=(r-n)) g<<"numarul k este "<<k-2; else g<<"numalul k este "<<k-1; g.close(); } 9) Scriei un program care citete un numr natural n>1 cu maximum 9 cifre, si afieaz valoarea celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in descompunerea in factori primi a numrului n. #include<iostream.h> int n,p,c; void cmmd(int n) {int gasit=0,d=2; while((d<n/2)&&(gasit==0)) {if(n%d==0) {c=d; gasit=1;} else d++;} p=0; while(n%c==0) {n=n/c; p=p+1;}} void main() {cout<<"n=";cin>>n; cmmd(n); cout<<c<<" la puterea "<<p; }

20

10) Scriei un program care construiete o matrice ptrat de ordin n format din valorile 1 si 2 astfel nct elementele de pe diagonala principala si secundar sa fie egale cu 1 iar restul elementelor cu 2. Valoarea lui n se citete de la tastatur: n numr natural (2<23), iar matricea se va afia pe ecran, cate o linie a matricei pe fiecare rnd pe ecran cu spatii intre elementele fiecrei linii. Exemplu: Fie n=5. Se va afia: 12221 21212 22122 21212 12221 #include<iostream.h> int a[10][10], i, j, n; void main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j || i+j==n+1) a[i][j]=1; else a[i][j]=2; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<< a[i][j]; cout<< endl; } }

21

BIBLIOGRAFIE

http://bigfoot.cs.upt.ro/~cami/upc/capitol4.html#TOP http://mchelariu.wordpress.com/2009/08/10/l4-instructiunea-de-decizie/ http://informaticasite.ro/atestat/rezolvari-probleme-atestat/probleme-rezolvate-atestatinformatica-c++-p2.html http://www.marplo.net/flash/instructiuni-conditionale-if-else-switch_as

22

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