Documente Academic
Documente Profesional
Documente Cultură
Algoritmi Manual PDF
Algoritmi Manual PDF
ALGORITMI
Observaţii:
1. Oricărei probleme care admite o formulare matematică i se poate asocia un
algoritm.
2. Dezvoltarea unui algoritm este, în general, mai dificilă decât scrierea programului
sursă pe baza algoritmului.
Caracteristici fundamentale: Orice algoritm trebuie să îndeplinească cinci
caracteristici:
1. generalitate - un algoritm trebuie sa ofere o metodă generală de rezolvare a unui
anumit tip de probleme, pentru date iniţiale arbitrare.
2. precizie (claritate) - descrierea algoritmului trebuie facută fără ambiguităţi, iar
comenzile trebuie să exprime operaţii cunos-cute calculatorului, care pot fi executate de
către procesor.
3. determinare - la fiecare pas, acţiunea care urmează a fi executată trebuie să poată
fi determinată fără echivoc şi unic pe baza acţiunilor precedente.
4. finitudinea - un algoritm trebuie să conducă la obţinerea rezultatelor într-un număr
finit de paşi.
5. eficienţă - un algoritm trebuie să fie construit în aşa fel încât să folosească
resurse hard cât mai puţine şi să necesită un timp minim de execuţie.
6. executabilitate - algoritmul ca întreg şi fiecare pas al său trebuie să poată fi
executat.
Eta
pele
rez
olva
rii u
nei
pro
ble
me:
1. De start şi de stop
- cuprind cuvintele start, respectiv stop încadrate în elipse şi marchează începutul,
respectiv sfărşitul algoritmului
START
STOP
2. De citire şi de scriere
citire - cuprinde într-un paralelogram o operaţie de citire specificată prin cuvântul
citeste şi lista variabilelor ce urmează a fi citite
scriere - cuprinde într-un paralelogram o operaţie de scriere specificată prin
cuvântul scrie şi lista expresiilor ale căror valori urmează a fi scrise
SCRIE lista de expresii
CITESTE lista de
variabile
Exemplu:
Determină afişarea pe ecran a textului cuprins între
apostrofuri (fără apostrofuri)
SCRIE ”n nu poate fi 0
”
Dacă dorim ca afişarea să fie mai frumoasă, să cuprindă pe lângă valoarei variabilei x
şi un text din care să rezulte semnificaţia valorii, blocul de scriere ar putea fi:
Variabilaexpresie
De procedură
Denumirea procedurii
De început de procedură
Denumirea
procedurii
De sfârşit de procedură
Return
Cuprinde într-o elipsă cuvântul Retur şi marchează sfârşitul unei scheme logice care
descrie operaţiile unei procepuri
Principiile de bază ale programării structurate
Principiile de bază ale programării structurate sunt:
1. Proiectarea descendentă a algoritmilor – este cel mai important principiu
deoarece el asigură o modalitate naturală şi eficientă de dezvoltare a algoritmilor care
evidenţiază ideile de bază utilizate în rezolvarea problemei, pornind de la aspecte generale
şi ajungând în final la ultimele detalii ale rezolvării
2. Utilizarea în algoritm a trei tipuri de structuri de control: structura
secvenţială(secvenţa), structura alternativă(decizia) şi structura repetitivă(ciclul).
Structura secvenţială(secvenţa)
Cuprinde o succesiune de operaţii, reprezentate prin unul sau mai multe blocuri
procedurale care se execută secvenţial, adică unul după celălalt în ordinea în ordinea în
care sunt scrise.
Probleme exemplu:
1. Să se afişeze durata exprimată în zile a mişcării de rotaţie a Pământului în jurul
Soarelui ştiind că este de 265 zile 5 ore 48 minute şi 46 secunde.
Analiza problemei
Start
d360+5/24+1/24(48/60+46/3600)
Stop
2. Să se calculeze aria unui triunghi oarecare dacă se cunosc lungimile laturilor
triunghiului.
1. Analiza problemei.
Datele de intrare:
Lungimile laturilor: numere reale a, b şi c
Datele de ieşire:
Aria triunghiului: număr real notat cu s
Datele de manevră:
Semiperimetrul: număr real notat cu p
Funcţia programului:
Este de a calcula cu formula lui Heron aria triunghilui dat prin lungimile laturilor.
2. Determinarea algoritmului de rezolvare a problemei
P1. Se introduc de la tastatură valorile reale a, b şi c
P2. Se calculează valoarea semiperimetrului p=(a+b+c)/2
P3. Se calculează valoarea ariei s p * ( p a) * ( p b) * ( p c)
P4. Se scrie aria
P5. Stop
Schema logică Start
Citeste a, b, c
P=(a+b+c)/2
s p * ( p a ) * ( p b) * ( p c )
1. Determină perimetrul şi aria unui dreptunghi, unde lungimile laturilor sunt citite
de la tastatură.
2. Pentru a un număr real, citit de la tastatură, care reprezintă lungimea laturii unui
cub, calculează şi afişează volumul şi suprafaţa totală a cubului.
3. Interschimbă valorile a două numere reale a şi b introduse de la tastatură şi apoi
le afişează.
4. Descrieţi, punând în evidenţă analiza problemei şi succesiunea paşilor, algoritmul
în schemă logică care pentru 2 valori a şi b numere întregi, afişează 5 valori, reprezentând
rezultatea celor 5 operaţii (suma, produsul, diferenţa, câtul şi restul operaţie de împărţire
pe mulţimea numerelor întregi)
Exemplul 1
.
Fie a şi b două variabile întregi. Dorim să schimbăm între ele valorile celor
două variabile. Mai precis, dacă a = 640 şi b = 480, dorim să obtinem a = 480 şi b = 640.
Un mod de a realiza această schimbare presupune utilizarea unei variabile suplimentare, cu
rol de intermediar. Folosind trei operatii de atribuire, algoritmul are următorii paşi:
1. citeşte a, b
2. t := a
3. a := b
4. b := t 480 640
5. scrie a,b
a b
t
Determinarea maximului pentru
Ex: Se da un sir de numere întregi formate din 3 cifre. Si se determine maximul acestui sir.
n=5 -2,14,-32,158,4
Pseudocod
Început
Citeste n
max=-999
Pentru contor=1,n executa
citeste a
Daca (max<a) atunci max=a
Sfârsit_daca
Sfarsit_pentru
Scrie max
Sfîrsit
CITESTE
A, B
DA NU
A0
NU DA
B=0
X=-B/A
STOP
folosind recursivitatea
fact(n)
{
daca n=0 atunci
returneaza 1
altfel
returneaza n*fact(n-1)
}
3)Sa se verifice daca un numar n diferit de 0 sau 1 este prim sau nu.
Un numar este prim daca nu are divizori decat pe 1 si pe el insusi.Un numar d este divizor pentru n daca restul
impartirii lui n la d este 0.Pentru a afla restul impartirii vom folosi operatorul mod(%)
start
citeste n
prim=1
pentru d=2,n/2 executa
daca n mod d =0 atunci
prim=0
daca prim=1 atunci
scrie "este prim"
altfel
scrie"nu este prim"
sfarsit
varianta optimizata
start
citeste n
prim=1
d=2
cat timp d<=n/2 si prim=1
daca n mod d = 0 atunci
prim=0
altfel d=d+1
daca prim=1 atunci
scrie "este prim:
altfel
scrie"nu este prim"
sfarsit
prin impartiri repetate (algoritmul lui Euclid): ultimul rest diferit de 0 reprezinta cmmdc
start
citeste a,b
deimp=a
imp=b
cat timp imp != 0 executa
{
r=deimp mod imp
deimp=imp
imp=r
}
scrie "cmmdc este",deimp
stop
prin scaderi repetate (algoritmul lui Nicomachus): din numarul mai mare se scade
numarul mai mic cat timp cele doua numere sunt diferite
start
citeste a,b
cat timp a != b executa
daca a>b atunci
a=a-b
altfel
b=b-a
scrie "cmmdc este",a
stop
Ultima cifra este data de restul impartirii numarului la 10 (n mod 10).Catul impartirii il aflam folosid operatorul div
start
citeste n
s=0
cat timp n>0
{
c=n mod 10
s=s+c
n=n div 10
}
scrie s
sfarsit
Un numar este perfect daca este egal cu suma divizorilor sai, inclusiv 1, dar fara el insusi.Exemplu: 6=1+2+3 este
numar perfect
start
citeste n
s=0
pentru d=1,n/2
daca n mod d = 0 atunci
s=s+d
daca s=n atunci
scrie "este numar perfect"
sfarsit
7)Sa se afle cifra maxima a unui numar (cea mai mare cifra a unui numar)
start
citeste n
max=-1
cat timp n>0
{
c=n mod 10
daca max<c atunci
max=c
n=n div 10
}
scrie max
sfarsit
Citeste n,x
2. Fie pseudocodul alăturat :
Mx
a) Care vor fi valorile variabilelor M si P daca la intrare
se citesc n=5, iar pentru x valorile 1, 2, 7, 9, 5? P1
b) Scrieti un program pseudocod echivalent care sa
┌Pentru i=2,n executa
utilizeze o structura repetitiva cu test final.
│ Citeste x
│ │ Mx
│ │ Pi
│ └■
└■
scrie M,P
citeste y
3. Se consideră următorul algoritm descris în
pseudocod: citeşte x
a) Deduceţi ce se va afişa, dacă valorile citite ale lui x
nr0
sunt, în ordine, 2, -3, -6, 4, 8, 16, 0;
b) Formulaţi un enunţ pentru problema dată; ┌repetă
│ └■
scrie nr
Citeste n
4. Fie pseudocodul alăturat :
dacă n=1 sau n=2 atunci
a) Ce se va afişa pentru n=6?
t1
altfel
b) Rescrieţi algoritmul, folosind o structură repetitivă cu a1
număr cunoscut de paşi b1
i2
cât timp i<n execută
ta+b
ba
at
ii+1
scrie t
Citeşte x, n
5. Fie pseudocodul alăturat :
y1
a) Ce valoare y se va afişa pentru x=3 şi n=3?
contor x
contorcontor-1
Scrie y
Scrie forma generală şi schema logică pentru structura repetitivă cu test final.
(1 p)
Scrie principiul de execuţie pentru structura cât timp. (1 p)
Parcurgeti secventa (1 p)
k 5; q=2;
pentru j k-4 , k*k execută
q=q *10;
j= j+5;
scrie q;
Se dă un număr natural n şi un număr x, dacă x este număr par si divizibil cu 3 să se calculeze suma primelor n
numere naturale, dacă x este impar să se calculeze produsul primelor n numere naturale.
(2 p)
Scrie forma generală şi schema logică pentru structura repetitivă cu test iniţial.
(1 p )
Parcurgeti secventa (1 p )
k 4; s=5;
pentru j k-3 , k*k execută
s=s*6;
j=j+3;
scrie s;
Fie următoarea secvenţă de program:
P ← 0; a ← 1; i ← 1;
cât timp i <= 4 execută (1 p )
p ← p + a*i;
a ← a * n;
i ← i + 1;
scrie p;
Să se rescrie această secvenţă folosind structura repetitivă
de tip do-while, (1 p )
Să se rescrie această secvenţă folosind structura repetitivă
de tip pentru. (1 p )
5) Se dă un număr natural n şi un număr x, dacă x este număr negativ, să se calculeze suma primelor n
numere naturale, dacă x este pozitiv si este divizibil cu 4, să se calculeze produsul primelor n numere
naturale. (2 p)
**
Cum se scrie corect si ce va afişa pe ecran în urma execuţiei următoarelor
secvenţe de program?
x:=15; if x>0 then scrie(0) else if x=5 then scrie(1) else scrie(2);
0,5 p
b) dacă de la tastatură se citesc valorile –5 şi - 4 ce va afisa programul ?
var x, y ,s,:integer; read(x,y); s:=0; if (x>y) sau (y>0) then s:=floor(y/x); x:=x+y;
else if y<0 then s:=pow(y,x); y:=y-x; end; scrie(s,’ ‘,x,’ ‘,y) end. 0.5p)
Fiind dată expresia de mai jos, scrieti in pseudocod algoritmulde rezolvare :(x
intreg).
0, dacă x-1
F(x) = x2, dacă 0x2
x+1, dacă 3x5
x-1, dacă 5<x10
2p)
Se considera urmatorul program:
var a,b,c,medie:integer;
citeste a,b,c;
medie:=(a+b+c) / 3;
case (medie )
1..4:scrie(‘F.rau’);
5..7:scrie(‘Mediocru’);
8..9:scrie(‘Bine’);
10:scrie(‘F.bine’);
else scrie (‘EROARE !’);
Ce se va afisa pentru a=5, b=6, c=8. si dati un exemplu de valori pentru a, b, c,
pentru care se va afisa mesajul „Bine”. 1p)
Scrieti in limbaj C++
1p)
3p)
1) . Cum se scrie corect si ce va afişa pe ecran în urma execuţiei următoarelor
secvenţe de program :
a) a=1,b=1,c=4; if a>=1 then if b>=2 then if c>=3 then scrie(3) else
scrie(2) else scrie(1); 0.5p)
x= 7 şi y=3; if x>y then t=x; x=y; y=t p=1; d=y-x; if d% 2=1 then p=ceil(p/d); else
p=p*d; d=d+1 end; scrie(p,d); 0.5p)
2p)
**
Evaluare
Scrie forma generală şi schema logică pentru structura repetitivă cu test final.
Să se afişeze toate numerele de 3 cifre care împărţite la 9,11 şi 13 dau de fiecare dată restul
5.
Scrie forma generală şi schema logică pentru structura repetitivă cu test iniţial.
**. Se da un numar intreg format din exact patru cifre si se cere sa se tipareasca: suma
cifrelor lui, produsul cifrelor lui.
Pentru numerele construite astfel: din cifra sutelor si cifra unitatilor se va construi
un numar; din cifra zecilor si cifra miilor cel de-al doilea numar; iar dintre cele doua
se va tipari cel mai mare.
Ex: pentru numarul 9321 se vor tipari datele: suma= 15, produs=54, cel mai mare
dintre 31 si 29 este 31 3p)
Se consideră un număr natural
deteminaţi numărul de cifre ale acestui număr; (1p)
determinaţi numărul format din cifrele numărului iniţial fără cifra 1; (1p)
determinaţi cea mai mică cifră din număr; (1p)
determinaţi inversul numărului; (1p)
Se citesc n numere naturale. Să se determine, folosind structura repetitivă repetă … cât
timp numărul format din ultima cifră a fiecărui număr din şir. Se consideră că n<9. (3p)
Ce se afişează pentru n=10? (1p)
s=0; i=1; p=1;
Repetă
p=p*i;
s=s+p;
i=i+1;
cât timp i<n;
scrie s;
**.Se considerǎ urmǎtorul algoritm descris în pseudocod:
Date de intrare:n natural,a întreg;
Date de ieşire:S întreg;
Date de manevrǎ:i natural;
Citeşte n;
i0; S0;
Cât_timp i<n executǎ
{Citeşte a;
ii+1;
SS+a;}
Scrie S;
a)Urmǎriţi pas cu pas algoritmul pentru valorile:4,5,1,10,4.
b)Care este efectul acestui algoritm?
c)Scrieţi o secvenţǎ echivalentǎ care sǎ utilizeze structura repetitive executǎ cât_timp.
d)Ce asemǎnǎri /deosebiri existǎ între cele douǎ instrucţiuni repetitive?
**
a, b întregi //date de intrare
aux întreg //date de manevra
citeste a, b
aux = a
a=b
b =aux
scrie a, b
Explicarea algoritmului:
Pentru a interschimba valorile, se foloseste o variabila auxiliara, care preia valoarea
lui a, apoi a ia valoarea lui b, urmând ca în final b sa ia valoarea lui aux, adica valoarea lui
a avuta initial. Algoritmul de interschimbare se mai numeste si “Regula celor trei pahare”,
deoarece este necesara o a treia variabila pentru a face interschimbarea.
**
Evaluare 2
I. Instructiunea de atribuire:
-sintaxa;(0.25p)
- principiul de functionare;(0.5p)
III. Realizati un algoritm care sa afiseze toti divizorii impari ai unui numar n
natural dat de la
tastatura.(3p)
-sintaxa;(0.25p)
- principiul de functionare;(0.5p)
Nr.I
15 15 -3 5
Început
x,p,s: integer;
citeşte x;
p:=1; s:=0;
altfel s:=s +x
sfârşit dacă;
scrie p, s;
stop
7. Să se scrie schema logică şi pseudocodul pentru calculul valorii expresiei ştiind că a este
o constantă:
8. Se citeşte un număr întreg. Dacă acesta este par să se determine maximul dintre două
numere reale, iar dacă nu este par să se afişeze suma a două numere naturale, doar dacă
este divizibilă cu 5. (schema logică sau pseudocod ).
ya;
altfel scrie 0;
n a+b; b b-1;
altfel scrie 1
stop
Nr.II
altfel s:=s +n
sfârşit dacă;
s:=s+n;
p:=p*n;
scrie p,s;
stop
a) 1 7 b) 7 14 c) 1 0
8. Se citeşte un număr întreg. Dacă acesta este pozitiv să se afişeze media geometrică a
două numere, în caz contrar să se calculeze şi să se afişeze produsul a 2 numere întregi,
doar dacă sunt pare.
altfel scrie 0;
n a+b;
b b-1;
a=3627; k=0; k:=0;
daca n= -
do{ for(g=3;g<8;g++)
(m- x)
c=a % 10; a=a/10; for(u=2; u<6;u++)
} while(a); cout<<k;
Scrie k;
atunci scrie 1
altfel scrie 1
stop
1. Scrieţi 2 programe care, folosind două structuri repetitive la alegere, afişează numerele
naturale din intervalul [a, b].
(2p)
Un numar este prim daca nu are divizori decat pe 1 si pe el insusi.Un numar d este divizor pentru n
daca restul impartirii lui n la d este 0.Pentru a afla restul impartirii vom folosi operatorul mod(%)
Se citesc mai multe numere pana se tasteaza zero. Sa se afiseze numerele prime.
citeste n
while n<>0
prim=1
pentru d=2,n/2 executa
daca n mod d =0 atunci
prim=0
daca prim=1 atunci
scrie n ,” ”
citeste n
Ultima cifra este data de restul impartirii numarului la 10 (n mod 10).Catul impartirii il aflam folosid
operatorul div
citeste n
s=0
cat timp n>0
{
s
c=n mod 10
s=s+c
n=n div 10
}
scrie
Sa se afle daca un numar este perfect
Un numar este perfect daca este egal cu suma divizorilor sai, inclusiv 1, dar fara el insusi.Exemplu:
6=1+2+3 este numar perfect
citeste n
s=0
pentru d=1,n/2
daca n mod d = 0 atunci
s=s+d
daca s=n atunci
scrie "este numar perfect"
sfarsit
Sa se afle cifra maxima a unui numar (cea mai mare cifra a unui numar)
start
citeste n
max=-1
cat timp n>0
{
c=n mod 10
daca max<c atunci
max=c
n=n div 10
}
scrie max
sfarsit
Se citeste un numar format din mai multe cifre. sa se afiseze un mesaj daca
numarul citit este palindrom -Memoram o valoare pentru n
-Initializam variabila invers cu zero . Aceasta variabila
citeste n va retine valoarea vazuta in oglinda. Ex: n=23432
inv=0 inv=23432
-Memorez in variabila numar valoarea lui n pentru a
nr=n nu se pierde cu div si mod
cat timp n>0 -se adauga in inv ultima cifra din n
{ -se elimina o cifra din n
inv=inv*10+n%10
n=n div 10 -compar numarul initial cu cel inversat. Daca DA atuni
este palindrom
}
if(nr==inv)
scrie “numarul citit este palindrom”
Se citesc mai multe numere pana se citeste cifra 0. Sa se afiseze toate
numerele citite divizibile cu 5
-Cat timp n diferit de zero
citeste n
p=0
Initializez variabila p=0 care retine de cate ori apare un
cat timp n<>0 numar divizibil cu 5
{ Testez daca numarul citit are divizorul 5
daca n%5==0 atunci Daca DA sa-l afiseze
scrie n Se mai citeste un numar diferit de zero
citeste n
}
scrie p
Fie x un numar întreg format din exact 5 cifre. Sa se afiseze cifra unitatilor si cea a
sutelor, pe acelasi rând, cu un spatiu între ele.
Explicarea algoritmului:
Pentru a obtine cifrele unui numar trebuie sa efectuam împartiri la 10. Am aratat ca
operatorul „%” returneaza restul împartirii. În cazul în care un numar se împarte la 10,
atunci restul este chiar ultima cifra, iar câtul împartirii este numarul fara ultima cifra. În
cazul împartirii la 100 restul returneaza ultimele 2 cifre, iar câtul este numarul fara
ultimele 2 cifre. Pentru a afisa cifra sutelor este suficient sa eliminam ultimele 2 cifre (prin
împartire la 100) si sa afisam ultima cifra a numarului n
**
Cifra control
Cerinta: determinati cifra de control al unui numar citit de la tastatura (suma cifrelor
respectivului numar, pana cand ajunge la rang de unitate)
Ex: 1824- 1+8+2+4=15; 1+5=6
Rezolvare:
Cifre ordonate
Cerinta: verificati daca un numar citit de la tastatura are cifrele ordonate crescator.
Rezolvare:
Cifre pare
Cerinta: verificati daca un numar citit de la tastatura are toate cifrele pare
Rezolvare:
Cmmdc
Metoda 1:
Nr. deosebit
Cerinta: verificati daca un numar citit de la tastatura este deosebit (este egal cu suma
dintre alt numar m si suma cifrelor numarului m)
Rezolvare:
Nr. perfect
Cerinta: verificati daca un numar citit de la tastatura este perfect (un numar este perfect
daca este egal cu suma cifrelor sale)
Rezolvare:
Nr. prim
Metoda 1:
Metoda 2:
Palindrom
Cerinta: afisati mesajul „da„ daca un numar este palindrom ( este egal cu inversul sau)
Rezolvare:
Suma cifrelor
#include <iostream>
int main()
{
int n,nq,n10,q,p;
cout<<"numarul zecimal= ";cin>>n;
cout<<"baza= ";cin>>q;
nq=0;p=1;
while(n!=0)
{
nq=nq+p*(n%q);
n=n/q;
p=p*10;
}
cout<<"nr= "<<nq;
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
//Pasul 1 declararea dI si iesire
int a,b, S,P,Ma,Mg;
//P2 citirea DI
cout<<" ce valoarea are a ?";
cin>>a;
cout<<"ce valoare are b ?";
cin>>b;
//P3 rezolvarea problemei
S=a+b;
P=a*b;
Ma=S/2;
Mg=sqrt(P);
//P4 afisarea rezultatelor
cout<<"suma este: "<<S<<endl;
cout<<"produsul celor doua valori este : "<<P<<endl;
cout<<"media aritmetica: "<<Ma<<endl;
cout<<"media geometrica: "<<Mg;
return 0;
}
**
#include <iostream>
#include<math.h>
int main()
{int a,b,c;
cout<<"a=";cin>>a; cout<<"b=";cin>>b;
c=a%b;
cout<<c;
return 0;
}
**
#include <iostream>
int main()
{int a,b,c;
cout<<"a=";cin>>a; cout<<"b=";cin>>b;
c=a%b;
cout<<c;
cout<<"cati octeti ocupa variabila c:"<<endl;
cout<<sizeof(c);
cout<<"cati octeti ocupa tipul de date intregi (int) ?:"<<endl;
cout<<sizeof(int);
cout<<"cati octeti ocupa tipul de date shortint(intregi si pozitive) ?:"<<endl;
cout<<sizeof(short int);
cout<<"cati octeti ocupa tipul de date long double: (reale ) ?:"<<endl;
cout<<sizeof(long double);
cout<<"cati octeti ocupa tipul de date char (de tip caracter) ?:"<<endl;
cout<<sizeof(char);
return 0;
}
**
#include <iostream>
#include<math.h>
int main()
{int a,b,c;
cout<<"a=";cin>>a; cout<<"b=";cin>>b;
c=a%b;
cout<<c;
return 0;
}
#include <iostream>
#include<math.h>
int main()
{float x1,x2,y1,y2,L,xm,ym;
cout<<"se citeste punctul A de pe abscisa :";
cin>>x1;
cout<<"se citeste punctul A de pe ordonata :";
cin>>y1;
cout<<"se citeste punctul B de pe abscisa :";
cin>>x2;
cout<<"se citeste punctul B de pe ordonata :";
cin>>y2;
L=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
xm=(x1-x2)/2+x1;
ym=(y1-y2)/2+y1;
cout<<"lungimea segmentului AB="<<L<<endl;
cout<<"mijlocul segmentului se afla la coordonatele "<<x1+xm<<","<<y1+ym<<endl;
return 0;
}
**
#include <iostream>
int main()
{
long int z,o,s,h,m,sec;
return 0;
}
**
** //se citeste un numar natural nenul din 3 cifre ,// sa se afiseze cifrele separate si suma
lor
#include<iostream>
int main()
{ long nr,a,b,c,s=0;
cout<<"Se citeste un numar format din 3 cifre: ";
cin>>nr;
a=nr%10; //extragem cifra unitatilor (ultima cifra)
nr=nr/10; //reducem numarul cu o cifra mai putin
b=nr%10; //cifra zecilor extrasa dupa ce am eliminat o cifra din nr
nr=nr/10;
c=nr%10;
cout<<"am separat nr in cifre: "<<endl;
cout<<c<<" ; "<<b<<" ; "<<a<<endl;
cout<<"suma cifrelor extrase este: "<<a+b+c<<endl;
return 0;
}
int main()
{ float a,b;
cout<<"se citesc doua valori: ";
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"pentru valorile "<<a<<" si "<<b<<" calculam urmatoarele functii:" <<endl;
cout<<" modulul lui " <<a<<" este: "<<abs(a)<<endl;
cout<<a<<" la puterea "<<b<<" este: "<<pow(a,b)<<endl;
cout<<a<<" rotunjit la cel mai aproape intreg mai mare: "<<ceil(a)<<endl;
cout<<a<<" rotunjit la o valoare mai mica: "<<floor(a)<<endl;
cout<<"sinus de "<<a<<" este: "<<sin(a);
#include<iostream.h>
int main()
{
int n,i,k;
cout<<"valoarea lui n ";
cin>>n;
k=0;
cout<<" divizorii lui "<<n <<endl;
cout<<"1"<<endl;
for(i=2;i<=n/2;i++)
if(n%i==0){ k=k+1;
cout<<i<<" "<<n<<"%"<<i<<"="<<n%i<<endl; }
cout<<"sunt "<<k <<" divizori";
}
#include<iostream.h>
int main()
{
int n,i,j;
cout<<"valoarea lui n ";
cin>>n;
for(i=1;i<=n;i++)
{cout<<"valoarea lui i= "<<i<<endl;
for(j=i; j<=n-1;j++)
{cout<<"valoarea lui j="<<j;
if(j%i==0)
cout<<" perechea (" <<i<<" , " <<j<<" ) "<<endl;
}
}
}
Structuri alternative
-Structura alternativa dirijeaza executia unei secvente de instructiuni S1 sau S2 in functie de valoarea conditiei
logica
Structura de selectie dirijeaza executia unei secvente de instructiuni (S1, S2, ….Sn) in functie de valoarea
unui selector
switch (selector)
{ case 1: S1; break;
case 2: S2; break;
case 3: S3; break;
..........................
case n: Sn; break;
default: cout<<"ati tastat o optiune inexistenta";
}
**Exemplu
// se citeste de la tastatura x si y
// programul calculeaza operatii arimtmetice in functie de optiunea utilizatorului
#include <iostream>
using namespace std;
int main()
{ char oper;
int a,b;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"Introduceti un operator aritmetic: + , - , / , * sau % "<<endl;
cin>>oper;
cout<<"\n ai ales operatorul :"<<oper; // \n echivalent cu<<endl; (new line)trece la linie noua
switch (oper) // in functie de valoarea variabilei OPER se va executa o instructiune;
{
case('+'):
cout<<"\n Operatorul de adunare!\n"<<"a+b= "<<a<<"+"<<b<<"="<<a+b;
break;
case ('-'):
cout<<"\n Operatorul de scadere!\n"<<"a-b= "<<a<<"-"<<b<<"="<<a-b;
break;
case ('*'):
cout<<"\n Operatorul de inmultire!\n"<<"a*b= "<<a<<"*"<<b<<"="<<a*b;
break;
case ('/'):
cout<<"\n Operatorul de impartire!\n"<<"a/b= "<<a<<"/"<<b<<"="<<a/b;
break;
case ('%'):
cout<<"\n Operatorul rest!\n"<<"a%b= "<<a<<"%"<<b<<"="<<a%b;
break;
default:
cout<<"\n Operator ilegal!\n";
}
return 0;
}
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
int zi;
cout<<"ce zi este astazi? "; cin>>zi; //s-a citit selectorul zi
switch (zi) {
case (7):
cout<<"\n este duminica si stai acasa";
break;
case (2):
cout<<"\n este o zi in cursul sapatamanii si mergi la cursuri";
break;
case (6):
cout<<"\n Este sambata si mergi la bunici";
break;
default:
cout<<"\n Merg la lucru";
}
return 0;
}
**
#include <iostream>
int main()
{int x,y,E,T,S,K;
cout<<"x=";cin>>x; cout<<"y=";cin>>y;
#include<iostream.h>
#include<math.h>
using namespace std;
int main()
{ float ag,am,as,bg,bm,bs,sg=0,sm=0,ss;
cout<<"gradele primului unghi ";
cin>>ag;
cout<<"minutele primului unghi ";
cin>>am;
cout<<"secundele primului unghi ";
cin>>as;
cout<<"gradele celui de-al doilea unghi ";
cin>>bg;
cout<<"minutele celui de-al doilea unghi ";
cin>>bm;
cout<<"secundele celui de-al doilea unghi ";
cin>>bs;
ss=as+bs;
if(ss>60) {ss=ss-60;
sm=1;}
sm=sm+am+bm;
if(sm>60) {sm=sm-60;
sg=1;}
sg=sg+ag+bg;
if(sg>360) sg=sg-360;
cout<<"suma gradelor celor 2 unghiuri este: "<<sg<<" grade "<<endl;
cout<<sm<<" minute si "<<ss<<" secunde"<<endl;
**
#include<iostream>
using namespace std;
int main()
{ int a,b,c;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if(a==b && b==c) cout<<"triunghi echilateral";
else if(a==b || b==c || a==c)cout<<"triunghi isoscel";
else if(a*a==b*b+c*c || b*b==a*a+c*c || c*c==a*a+b*b)
cout<<"triunghi dreptunghic";
else cout<<"triunghi oarecare";
#include<iostream>
void main(){
int a1, b1, c1, a2, b2, c2, d, dx, dy;
float x, y;
cout<<"a1="; cin>>a1;
cout<<"b1="; cin>>b1;
cout<<"c1="; cin>>c1;
cout<<"a2="; cin>>a2;
cout<<"b2="; cin>>b2;
cout<<"c2="; cin>>c2;
d=(a1*b2-b1*a2);
dx=(b2*c1-b1*c2);
dy=(a1*c2-a2*c1);
if (d==0)
if (dx==0)
cout<<”Sistem nedeterminat.”;
else
cout<<”Sistem incompatibil.”;
else{
x=dx/d;
y=dy/d;
cout<<”x=”<<x<<endl;
cout<<”y=”<<y;
}
}
Structuri repetitive
Structurile repetitive pot fi contidionate anterior sau cu test initial, conditionate posterior sau cu test final si cu
numar cunoscut de pasi.
for (i=exp1;i<=exp2;i++)
{
<I>;
}
while ( <L> )
{
<I>;
}
Structura repetitiva conditionata posterior are urmatorul principiu:
do
{
<I>;
}
while ( <L> ) ;
Exemple:
Calculati produsul numerelor naturale impare mai mici sau egale cu o valoare data n
#include<iostream >
int main()
{
int i,n;
long f,p,a;
cout<<"n=";cin>>n;
p=a=1;
cout<<a<<" "<<p<<endl;
for(i=3;i<=n;i++)
{
f=p+a;
cout<<f<<endl;
a=p;
p=f;
}
}
Scrieti un program care afiseaza numarul de aparitii a unei cifre x intr-un numar
n;de ex daca citim n=2232 si x=2 se afiseaza numarul 3.
#include<iostream >
int main()
{
int n,n1,nr,x;
cout<<"n=";cin>>n;
cout<<"x=";cin>>x;
nr=0;
n1=n;
do
{
if(n1%10==x) nr++;
n1=n1/10;
}while(n1);
cout<<"cifra "<<x<<" apare de "<<nr<<" ori";
}
#include<iostream>
int main()
{
int a,b,r;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
cout<<"cmmdc: "<<b;
}
Sa se scrie un program tcare realizeaza trecerea unui numar din baza 10 in baza b, unde
b se citeste de la tastatura
#include<iostream >
int main()
{
long n,n1,b,aux,nr;
aux=nr=0;
cout<<"n=";cin>>n;
cout<<"b=";cin>>b;
n1=n;
do
{
aux=aux*10+n1%b;
n1=n1/b;
}
while(n1!=0);
cout<<aux<<endl;;
do
{
nr=nr*10+aux%10;
aux=aux/10;
}
while(aux);
cout<<"numarul "<<n<<" in baza "<<b<<" este: "<<nr;
}
#include<iostream >
int main()
{
unsigned long n;
cin>>n;
if(n%3==0 || n%3==1)
cout<<2*(n/3);
else cout<<2*(n/3)+1;
}
//Secitesc mai multe numere pana cand se tasteaza cifra 0;//Sa se afiseze media cifrelor
pare
#include<iostream>
Int main()
{
int n,ma,x=0,s=0;
cout<<"Nr.= ";cin>>n;
while(n!=0)
{
if(n%2==0){
x++;
s=s+n;
}
cout<<"Nr.= ";cin>>n;
}
ma=s/x;
cout << "Media aritmetica = " <<ma<< endl;
}
#include<iostream>
Int main()
{
int x,p=0,n=0;
do
{
cout<<"Introduceti nr :";
cin>>x;
if(x>0)
p+=1;
else
n+=1;
} while(x!=0);
cout << "Ati introdus " <<p<<" nr. pozitive si "<<n<<" nr. negative."<<endl;
}
Ionel depune la banca o suma s. Dup ace afla care este dobanda d , ce suma se
capitalizeaza dupa n ani?
#include<iostream>
using namespace std;
int main()
{
int n,d,i;
float s;
cout<<"\n ce suma se depune? ";
cin>>s;
cout<<"\n ce dobanda pe an cu capitalizare?
";
cin>>d;
cout<<"\n pentru cati ani? ";
cin>>n;
for(i=1;i<=n;i++)
s=s+s*d/100;
cout<<"\n dupa "<<n<<"ani s-au cumulat "<<s<<"lei in banca: ";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a,b,c,max;
cout<<"valoarea lui a: ";
cin>>a;
cout<<"valoarea lui b: ";
cin>>b;
cout<<"valoarea lui c: ";
cin>>c;
max=a;
if (max<b)
max=b;
if(max<c)
max=c;
cout<<"valoarea maxima este "<<max;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n,i,s;
int nr;
cout<<"valoarea lui n; " ;
cin>>n;
s=0; nr=n;
while(n!=0)
{s=s+n%10; cout<<"s= "<<s<<" " ;
n=n/10; cout<<"n= " <<n<<endl;
}
cout<<"suma cifrelor lui "<<nr<<" este "<<s;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n,nr,s,c;
cout<<"valoarea lui n; " ;
cin>>n; nr=n;
s=0;
while(n!=0)
{ c=n%10; cout<<"c= "<<c<<" ";
s=s*10+c; cout<<"s= " <<s<<" ";
n=n/10; cout<<"n= "<<n<<endl;
}
cout<<"numarul "<<nr<<" inversat este "<<s;
return 0;
}
Se citesc n numere . Sa se calculeze valoarea maxima
#include<iostream>
using namespace std;
int main()
{
int max,i,n,nr;
cout<<"cate numere se citesc? ";
cin>>n;
cout <<"primul numar citit "; // se initializeaza
maximul cu primul numar
cin>>max;
i=1;
while(i<n){cout<<"dam valoare urmatorului numar
";
cin>>nr;
if(max<nr)
max=nr;
i=i+1;
}
cout<<"valoarea maxima este "<<max;
return 0;
}