Instructiunea de Decizie

29
PROIECT DE ATESTARE PROFESIONALA LA INFORMATICA 1

Transcript of Instructiunea de Decizie

Page 1: Instructiunea de Decizie

PROIECT DE ATESTARE PROFESIONALA LA INFORMATICA

2013

1

Page 2: Instructiunea de Decizie

Instructiunea de decizie C++

2

Page 3: Instructiunea de Decizie

Cuprins:

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

3

Page 4: Instructiunea de Decizie

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)

4

Page 5: Instructiunea de Decizie

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

5

Page 6: Instructiunea de Decizie

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 adevarataOperatorul 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))

Observatiiprioritatea operatorilor logici: negare, SI, SAUin cazul expresiilor logice se pot aplica regulile lui De Morgan: !( exp1 si exp2) = !exp1 sau !exp2!(exp1 sau exp2) = !exp1 si !exp2Instructiunea de decizie (de test; sau detest )

Sintaxa:

daca (exp_logica) atunci instructiune1

6

Page 7: Instructiunea de Decizie

[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”.

7

Page 8: Instructiunea de Decizie

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*cpentru 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 impartiriurmariti 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<03*x+5 daca x apartine [0,5)-x+2 daca x>=5este 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.

8

Page 9: Instructiunea de Decizie

Sintaxa:

if(expresie) sau if(expresie) instructiune1 instructiune 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

9

Page 10: Instructiunea de Decizie

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

Page 11: Instructiunea de Decizie

- 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 switchAceasta 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

Page 12: Instructiunea de Decizie

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 conditionaleOperatorii 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

Page 13: Instructiunea de Decizie

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

Page 14: Instructiunea de Decizie

- 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

Page 15: Instructiunea de Decizie

//in cazul in care register_globals este dezactivata$nume = $_POST[‘nume’];$prenume = $_POST[‘prenume’];$email = $_POST[‘email’];$parola = $_POST[‘parola’];

//validarea campurilorif (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

Page 16: Instructiunea de Decizie

PROBLEME REZOLVATE:

1) Scrieţi un program C/C++ care citeşte de la tastatura un număr 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 afişeze pe ecran diferenţa 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) Scrieţi programul C/C++ care citeşte de la tastatura un număr natural n (n<100) si un sir cu n numere întregi din intervalul [100 ;999] ; programul construieşte un sir de numere rezultat prin înlocuirea fiecărui număr din şirul citit cu numărul obţinut prin interschimbarea cifrei unitatilor cu cifra sutelor. Numerele din noul sir se vor afişa pe ecran separate printr-un singur spaţiu. De exemplu , pentru n=3 si şirul 123 , 904 , 500 , se afişează 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;

16

Page 17: Instructiunea de Decizie

c=v[i]%10;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 relaţia a<=b daca : a1<=b1 , a2<=b2 , … , an<=bn. Scrieţi program in limbajul C/C++ care citeşte doua tablouri unidimensionale a si b cu acelaşi număr 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) Scrieţi un program in limbajul C/C++ care afişează toate numerele naturale formate din cifre identice , mai mari decât 10 si mai mici decât o valoare data n, n<=2.000.000. De exemplu pentru n=195 , se afişează : 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)

17

Page 18: Instructiunea de Decizie

{d=n%10;if(d==c)n=n/10;elsereturn 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) Scrieţi un program C/C++ care citeşte de la tastatura trei numere naturale x, y si k, (1<x<y<2000000, k<1000) si afişează pe ecran k numere prime din intervalul [x, y]. Daca nu exista k numere prime în intervalul [x,y] se vor afişa toate numerele prime găsite iar pe linia următoare se va afişa mesajul “s-au găsit mai puţine numere prime: ” urmat de numărul acestora. De exemplu, pentru x=3, y=12 si k=5 se vor afişa pe ecran:3 5 7 11 s-au găsit mai puţine 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;elsed++;if(p){cout<<n<<endl;a++;}n++;}if(a<k)cout<<"au fost gasite mai putine nr prime"<<a;}

6) .Scrieţi un program C/C++ care citeşte din fişierul 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 afişează pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca nu se găsesc numere palindrom, se va afişa pe ecran valoarea –1. Un număr

18

Page 19: Instructiunea de Decizie

are proprietatea de a fi palindrom daca citit de la dreapta la stânga sau de la stânga la dreapta are aceeaşi valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este palindrom.

Exemplu : daca din fişierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 , atunci pe ecran se vor afişa : 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 număr 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 . Scrieţi un program C/C++ care determina numărul de cifre nule aflate pe ultimele poziţii consecutive ale valorii obţinute in urma evaluării lui n!, n fiind un număr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi 2 deoarece 3628800 are două zerouri la sfârşit.

#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;}elsex=0;}cout<<nr;}

19

Page 20: Instructiunea de Decizie

8) Se citeşte de la tastatura un număr natural nenul n care are cel mult 9 cifre. Sa se afişeze in fişierul Date.out numărul k, natural, astfel încât produsul 1*2*…*(k-1)*k sa aibă o valoare cat mai apropiata de numărul n. De exemplu, daca se citeşte numărul n=25 fişierul Date.out are următorul conţinut: 4. iar daca se citeşte numărul n=119 fişierul Date.out are următorul conţinut: 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;elseg<<"numalul k este "<<k-1;g.close();}

9) Scrieţi un program care citeşte un număr natural n>1 cu maximum 9 cifre, si afişează valoarea celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in descompunerea in factori primi a numărului 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;}elsed++;}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

Page 21: Instructiunea de Decizie

10) Scrieţi un program care construieşte o matrice pătrată de ordin n formată din valorile 1 si 2 astfel încât elementele de pe diagonala principala si secundară sa fie egale cu 1 iar restul elementelor cu 2. Valoarea lui n se citeşte de la tastatură: n număr natural (2<23), iar matricea se va afişa pe ecran, cate o linie a matricei pe fiecare rând pe ecran cu spatii intre elementele fiecărei linii.

Exemplu: Fie n=5. Se va afişa:1 2 2 2 1

2 1 2 1 2

2 2 1 2 2

2 1 2 1 2

1 2 2 2 1

#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;elsea[i][j]=2;for(i=1;i<=n;i++){for(j=1;j<=n;j++)cout<< a[i][j];cout<< endl;}}

21

Page 22: Instructiunea de Decizie

BIBLIOGRAFIE

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

22