Sunteți pe pagina 1din 22

COLEGIUL NATIONAL GEORGE COSBUC MOTRU

PROIECT ATESTAT
INFORMATICA

ELEV: CHITU ALEXANDRA MARIA


TEMA: STRUCTURA ALTERNATIVA
CLASA: a XII-a B
PROFESOR COORDONATOR: PASCANIUC CLAUDIA
1

TEMA:
STRUCTURA
ALTERNATIVA

Cuprins:
Operatori de relatie........................................................................pag. 4
Operatori logici.............................................................................pag. 5
Instructiuni conditionale: if, else, switch......................................pag. 9
Functii de validare.......................................................................pag. 14
Probleme rezolvate......................................................................pag. 16
Bibliografie .................................................................................pag. 22

CAPITOLUL I
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

CAPITOLUL II
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

sau

if(expresie)
instructiune

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

CAPITOLUL III
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');
}
- 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) {

10

case valoare1:
cod executat daca expresie = valoare1
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:

11

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".

12

- 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()".

13

CAPITOLUL IV
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
//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;
}
?>

14

</body>
</html>

15

CAPITOLUL V
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;
o=o*10+c;
v[i]=v[i]/10;

16

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;
if(d==c)
n=n/10;

17

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

18

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;}
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

19

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/l4instructiunea-de-decizie/
http://informaticasite.ro/atestat/rezolvari-problemeatestat/probleme-rezolvate-atestat-informatica-c++p2.html
http://www.marplo.net/flash/instructiuni-conditionaleif-else-switch_as

22

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