Documente Academic
Documente Profesional
Documente Cultură
ro
www.infopuc.ro
LABORATOR
ALGORITMI Limbajul C
1. Definiia algoritmilor. Reprezentarea algoritmilor. Clasificare. 2. Algoritmi secveniali. 3. Algoritmi ramificai. 4. Algoritmi repetitivi. 5. Algoritmi pentru prelucrarea tablourilor de date.
cdamian@ee.tuiasi.ro
www.infopuc.ro
1. Definiie. Reprezentare. Clasificare. Definiie: Algoritmul poate fi definit ca o succesiunea finita de pai care trebuie parcurs pentru a obine, pornind de la datele iniiale (numite i date de intrare) informaiile pe care dorim s le determinm prin calcul (date de ieire). Obs. Alctuirea algoritmului precede n mod obligatoriu scrierea programului de calcul.
Etapele alctuirii algoritmului de rezolvare a unei probleme: nelegerea textului problemei; precizarea mrimilor (datelor) care sunt cunoscute (date iniiale sau date de intrare); precizarea mrimilor cerute, a cror valoare se calculeaz (date de ieire); stabilirea relaiilor de calcul pentru fiecare mrime cutat, eventual i pentru mrimi intermediare (modelul matematic); alegerea identificatorului (numelui) pentru fiecare variabil care intervine n modelul matematic; reprezentarea algoritmului (pseudocod i organigram); verificarea algoritmului prin parcurgerea tabelului de verificare i compararea rezultatelor cu valorile obinute prin rezolvarea direct a problemei.
cdamian@ee.tuiasi.ro
www.infopuc.ro
Reprezentarea algoritmilor Modalitile de codificare a algoritmilor sunt diverse. Cele mai folosite dintre acestea sunt: Pseudocodul este o reprezentare semantic a operaiilor. Aceast form este cea mai apropiat de Schema logic (organigrama) este reprezentarea algoritmului sub forma unei succesiuni de
programul de calcul. simboluri grafice interconectate.Fiecare operaie este indicat printr-un simbol grafic distinct.
Clasificarea algoritmilor Organizarea unui algoritm este determinat de: problema de rezolvat, modelul matematic ales, limbajul de programare folosit pentru implementare. Cea mai utilizat form de alctuire este aceea a evidenierii n cadrul algoritmului numai a unor blocuri de operaii tip. Aceste se numesc structuri fundamentale (tip) i sunt: structura secvenial; structura de decizie; structura repetitiv (cu cele trei variante: contorizare, test anterior, test posterior ).
cdamian@ee.tuiasi.ro
www.infopuc.ro
blocuri delimitatoare
start stop
Citire date
Afisare date
blocuri de atribuire
blocuri de conectare i i
cdamian@ee.tuiasi.ro
www.infopuc.ro
citirea date de intrare; calculul valorii unei/unor expresii i atribuirea valorii unei/unor variabile; afiarea rezultatelor; schema logic
pseudocod
program ex1 citete datele de intrare ecou (afieaz datele de intrare) evalueaz expresiile de calcul afieaz rezultatele sfrit program
ecou
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
cdamian@ee.tuiasi.ro
www.infopuc.ro
pseudocod
program banc citete b, db, n afieaz b, db, n //ecou
schema logic
start
citete b,
db, n
afieaz
b, db, n
sfrit banc
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Etapele rezolvrii problemei: a) Definirea datelor de intrare/ieire b) Modelul matematic: start Zre = a1 + a2 Date de intrare : Zim = b1 + b2 - a1, b1, a2, b2 citete a1, b1, a2, b2 Date de ieire: - rezultatul operaiei matematice Zre + Zim * i afieaz a1, b1, a2, b2
program complex citete a1, b1, a2, b2 afieaz a1, b1, a2, b2 //ecou Zre = a1 + a2 Zim = b1 + b2 afieaz Zre + Zim * i sfrit complex Zre = a1 + a2
Zim = b1 + b2
afiare Zre + Zim * i
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Etapele rezolvrii problemei: a) Definirea datelor de intrare/ieire b) Modelul matematic: start Zre = a1*a2-b1*b2 Date de intrare : Zim = a1*b2+a2*b1 - a1, b1, a2, b2 citete a1, b1, a2, b2 Date de ieire: - rezultatul operaiei matematice Zre + Zim * i afieaz a1, b1, a2, b2
program complex citete a1, b1, a2, b2 afieaz a1, b1, a2, b2 //ecou Zre = a1 * a2 - b1 * b2 Zim = a1 * b2 + a2 * b1 afieaz Zre + Zim * i sfrit complex Zre = a1*a2-b1*b2
Zim = a1*b2+a2*b1
afiare Zre + Zim * i
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Tabel de verificare:
Afiare a1, b1, a2, b2 Zre = a1*a2 - b1*b2 Zim = a1*b2 + a2*b1 Afiare Zre + Zim * i
STOP
cdamian@ee.tuiasi.ro
www.infopuc.ro
A p( p a)( p b)( p c)
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 8. Fie R1, R2, R3 trei rezistene. Calculai curentul I, daca circuitul
este alimentat cu o tensiune U.
R1
R2
R3
R1 R2
I1 U R2 R1 R3 I2 U I3
R3
cdamian@ee.tuiasi.ro
www.infopuc.ro
1.
O persoana economiseste in prima luna 30% din venitul lunar, in a doua luna 21% din venitul lunar iar in a treia luna 15% din venitul lunar. In cea de-a doua luna persoana respectiva primeste o marire de salariu de 10%. Sa se calculeze suma economisita dupa cele trei luni. Folositi si operatorul cast. Afisarea datelor trebuie sa corespunda cu urmatorul prototip fig1:
fig1
2. Se introduc doua numere intregi de la tastatura (intre 1 si 15). Sa se foloseasca operatori aritmetice, relationali logici si operatori la nivel de bit pentru cele 2 numere. Doar rezultatele de la operatorii relationari vor fi scrise de utilizator, restul sunt calculate de PC dupa modelul matematic dat. Afisarea datelor trebuie sa corespunda cu urmatoarea imagine : fig 2.
fig3 fig2
cdamian@ee.tuiasi.ro
www.infopuc.ro
3.
Sa se foloseasca adresarea indirecta (pointeri) si tablouri intr-un exemplu care are ca date de intrare 4 prenume. Se afiseaza in consola cele 4 cuvinte si lunginea a 2 tablouri in care sunt stocate prenumele si lungimea a doi pointeri care pointeaza la adresele de inceput a doua tablouri. fig3
fig3
cdamian@ee.tuiasi.ro
www.infopuc.ro
LABORATOR
ALGORITMI
1. Definiia algoritmilor. Reprezentarea algoritmilor. Clasificare. 2. Algoritmi secveniali. 3. Algoritmi ramificai (de decizie). 4. Algoritmi repetitivi. 5. Algoritmi pentru prelucrarea tablourilor de date.
cdamian@ee.tuiasi.ro
www.infopuc.ro
Structura de decizie (se mai numete i structur alternativ sau structur ramificat) introduce n algoritm operaia de ramificare, stabilirea valorii adevrat sau fals a acesteia i adoptarea unei decizii privind modul n care se continu calculele.
schema logic
pseudocod
dac (test?) atunci set instruciuni 1 NU
test?
DA
altfel
set instruciuni 2 sfrit dac
set instruciuni 2
set instruciuni 1
aciune 3
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 1. Fie a i b dou numere date de utilizator. Se cere s se afieze maximul i suma lor.
a) Definirea datelor de intrare/ieire b) Modelul start matematic: program max_suma S=a+b Date de intrare : a, b citete a, b Date de ieire: numrul maxim (a sau b) i suma: S
afieaz a, b atunci
citete a, b
dac ( a > b )
afieaz a, b
afieaz a
altfel afieaz b sfrit dac
S=a+b
NU
afiare b
a>b ?
DA
afiare a
cdamian@ee.tuiasi.ro
www.infopuc.ro
instruciuni
citete a, b afieaz a, b
Verif 1 3, 8 3, 8 3>8?
Verif 2 7, 2 7, 2
a>b?
NU afieaz a DA
7>2 ?
7
afieaz b
8
S = 3 + 8 = 11 11 STOP S=7+2=9 9 STOP
S=a+b
afieaz S
STOP
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exist posibilitatea ca secvena de decizie s fie alctuit dintr-un singur subbloc de instruciuni
pseudocod
dac (test?) atunci set instruciuni 1 sfrit dac
schema logic
NU
test?
DA
set instruciuni 1
aciune 3
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 2. S se afieze modulul unui numr x dat de utilizator. a) Definirea datelor de intrare/ieire Date de intrare : x Date de ieire: modulul lui x b) Modelul matematic: x dac x>0 si ( x ) dac x<0
start
instruciuni
program modul citete x afieaz x dac ( x < 0 ) atunci x=-x sfrit dac afieaz x sfrit modul
stop
afieaz x citete x afieaz x afieaz x 3 3<0 ? -5 -5 < 0 ? x=-(-5) 3 STOP 5 STOP x<0? NU DA x=-x x=-x afieaz x STOP Verif 1 Verif 2
citete x
-5
NU
x<0 ?
DA
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 3. S se rezolve ecuaia de gradul I ( a * x + b = 0 ) n ipoteza considerrii tuturor variantelor posibile ale datelor de intrare.
a) Definirea datelor de intrare/ieire Date de intrare : a, b Date de ieire: x b) Modelul matematic: se alctuiete relaia: x = - b / a dac a 0 atunci x= - b / a dac a = 0 atunci sunt dou cazuri: dac b = 0, ecuaia devine 0 * x + 0 = 0 dac b 0, ecuaia nu are soluii (imposibilitate)
cdamian@ee.tuiasi.ro
www.infopuc.ro
start
citete a, b
afieaz a, b
a=0 ?
DA
b=0 ?
NU
DA
x=-b/a afiare x
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
instruciuni
citete a, b
afieaz a, b a=0? NU b=0? NU DA afieaz infinitate de soluii afieaz nu sunt solutii DA
Verif 1
Verif 2
Verif 3
0, 1
0, 1 0=0 ? 1=0?
0, 0
0, 0 0=0 ? 0=0 ? afieaz inf. de soluii
2, 3
2, 3 2=0 ?
x=-b/a
afieaz x
STOP
cdamian@ee.tuiasi.ro
www.infopuc.ro
cdamian@ee.tuiasi.ro
www.infopuc.ro
NU NU
b>c ?
a>b ?
DA NU
b>c ?
DA NU
DA
afieaz a, b, c
NU
afieaz c, b, a
a>c ?
DA
afieaz b, a, c
c>a ?
DA
afieaz c, a, b afieaz a, c, b
afieaz b, c, a
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
<math.h>
Putere double pow(double base, double exponent); Ex: p = pow(a,2);
Radical double sqrt(double x); Ex: rad = sqrt(2); Exponent double exp(double x); Ex: expo = exp(3); Sinus double sin(double x); Ex: sinus = sin(M_PI); Logaritm double log(double x); Ex: logaritm = log(5);
cdamian@ee.tuiasi.ro
www.infopuc.ro
f(x)=
structura ramificat.
cdamian@ee.tuiasi.ro
www.infopuc.ro
LABORATOR
ALGORITMI
1. Definiia algoritmilor. Reprezentarea algoritmilor. Clasificare. 2. Algoritmi secveniali. 3. Algoritmi ramificai (de decizie). 4. Algoritmi repetitivi. 5. Algoritmi pentru prelucrarea tablourilor de date.
cdamian@ee.tuiasi.ro
www.infopuc.ro
Problemele rezolvate cu ajutorul SC necesit parcurgerea repetat a unor grupuri de instruciuni de calcul i de decizie. Pentru o programare mai convenabil n limbajele de programare s-au definit structurile repetitive.
i=0
iniializare variabil
iniializare variabil
i<n ?
NU
DA
set instruciuni i=i+1
test ? NU
DA
set instructiuni modificare variabila
contorizare
test iniial
cdamian@ee.tuiasi.ro
www.infopuc.ro
schema logic
i=0
pseudocod
pentru i = ( 0, n-1 ) execut set instruciuni 1 sfrit pentru
i<n ? NU
DA
set instruciuni i=i+1
cdamian@ee.tuiasi.ro
www.infopuc.ro
GENERALITI: !!! Operatorul / returneaz ctul operaiei de mprire dintre doi operatori. Rezultatul este de tip: - ntreg dac cei doi operatori sunt de tip ntreg - real dac cel puin unul dintre operatori este de tip real !!! Operatorul % returneaz restul operaiei de mprire dintre cei doi operatori.
7/3=2 7%3=1
123 / 10 = ?
123 % 10 = ?
26 / 3 = ? 35 % 7 =?
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 1. S se afieze primele n numere naturale, unde n este dat de utilizator. a) Definirea datelor de intrare/ieire Date de intrare : n
pseudocod
program n_numere citete n afieaz n pentru i = ( 0, n-1 ) execut afieaz i sfrit pentru sfrit n_numere
s c h e m a l o g i c
i=0
i<n ? NU
DA
afieaz i i=i+1
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 2. S se afieze primele n numere naturale pare n ordine invers, unde n este dat de utilizator. a) Definirea datelor de intrare/ieire s Date de intrare : n start c
pseudocod
program n_numere citete n afieaz n pentru i = ( n-1, 0 ) execut afieaz 2 * i sfrit pentru sfrit suma
h e m a l o g i c
citete n afieaz
i = n-1
i[0,n-1] ? NU
DA
afieaz 2* i i=i-1
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 2. S se afieze primele n numere naturale pare n ordine invers, unde n este dat de utilizator. a) Definirea datelor de intrare/ieire s Date de intrare : n start c
pseudocod
program n_numere citete n afieaz n pentru i = ( n-1, 0 ) execut m=2*i afieaz m sfrit pentru sfrit suma
h e m a l o g i c
citete n afieaz
i = n-1
i[0,n-1] ? NU
stop
DA
m=2*i afieaz m
i=i-1
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 3. S se determine : a) Definirea datelor de intrare/ieire Date de intrare : n Date de ieire: S b) Modelul matematic: S = 13 + 23 + 33 + ... + n3
S i3
i 1
schema logic
s=0 i=1
pseudocod
program suma citete n afieaz n s=0 pentru i = ( 1, n ) execut s=s+i*i*i sfrit pentru afieaz s sfrit suma
i<=n ? NU
DA
s=s+i*i*i i=i+1
afiare s
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
instruciuni
citete n afieaz n s=0 instruciune repetitiv i=1 i <= n ? NU DA
pas 2
pas 3
pas 4
4 <= 3 ?
s=s+i*i*i i=i+1
afieaz s
36 STOP
STOP
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 4. S se determine valoarea expresiei: a) Definirea datelor de intrare/ieire Date de intrare : n Date de ieire: S
start citete n afieaz n si = 0 i=1
S i j 2
i 1 j 1
b) Modelul matematic:
S i j 2
i 1 j 1
pseudocod
program suma_1 citete n afieaz n si = 0 pentru i = ( 1, n ) execut sj = 0 pentru j = ( 1, i ) execut sj = sj + j * j sfrit pentru si = si + i * sj sfrit pentru afieaz si sfrit suma_1
i<n ?
DA
sj = 0 j=1
NU
j<i ?
DA
sj = sj + j * j j=j+1
NU
si = si + i * sj j=j+1
afieaz si
stop
schema logic
cdamian@ee.tuiasi.ro
www.infopuc.ro
Exemplul 5. S se afieze toate numerele naturale multiplu de m i mai mici dect n. Exemplul 6. S se afieze primele m puteri ale lui 2. Exemplul 7. S se calculeze suma cifrelor unui numr m dat de utilizator. Exemplul 8. S se tabeleze funcia f(x)=2x2+x-6, pentru x [xmin,xmax], unde xmin, xmax i pasul sunt date de utilizator. Exemplul 9. S se scrie un algoritm care calculeaz i afieaz suma numerelor pozitive introduse de la tastatur. Programul se oprete prin introducerea unui numr negativ.
cdamian@ee.tuiasi.ro
www.infopuc.ro
LABORATOR
ALGORITMI
1. Definiia algoritmilor. Reprezentarea algoritmilor. Clasificare. 2. Algoritmi secveniali. 3. Algoritmi ramificai (de decizie). 4. Algoritmi repetitivi. 5. Algoritmi pentru prelucrarea tablourilor de date.
cdamian@ee.tuiasi.ro
www.infopuc.ro
Prelucrarea irurilor unidimensionale (vectori) Ex1. S se citeasc de la tastatur i s se afieze un vector format din n elemente: a) Definirea datelor de intrare/ieire Date de intrare : n dimensiunea vectorului; v [ ] - vectorul start Date de ieire: v [ ] - vectorul citete n
pseudocod
program vector citete n afieaz n pentru i = ( 0, n-1 ) execut citete v[i] sfrit pentru pentru i = ( 0, n-1 ) execut afieaz v[i] sfrit pentru sfrit vector
afieaz n
schema logic
i=0
i[0,n-1] ?
DA
NU
citete v[i]
i=i+1
i=0
i[0,n-1] ?
DA
NU
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Ex2. S se initializeze automat i s se afieze un vector format din n elemente: a) Definirea datelor de intrare/ieire Date de intrare : n dimensiunea vectorului; v [ ] - vectorul start Date de ieire: v [ ] - vectorul citete n
pseudocod
program vector citete n afieaz n pentru i = ( 0, n-1 ) execut v[i] = i; sau v[i] = 3; sfrit pentru pentru i = ( 0, n-1 ) execut afieaz v[i] sfrit pentru sfrit vector
afieaz n
schema logic
i=0
i[0,n-1] ?
DA
v[i] = i;
i=i+1
NU
i=0
i[0,n-1] ?
DA
NU
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Ex3. S se citeasca de la tastatura un vector format din n elemente si sa se afiseje suma valorilor elementelor din care este format.
start
pseudocod
program vector citete n afieaz n sum=0; pentru i = ( 0, n-1 ) execut citeste [vi] sfrit pentru pentru i = ( 0, n-1 ) execut sum = sum+v[i]; sfrit pentru afieaz sum; sfrit vector
schema logic
i[0,n-1] ?
DA
NU
i=0
i[0,n-1] ?
DA
NU
sum=sum+v[i] i=i+1
afiseaza sum
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Ex4. S se citeasc un vector de la tastatur i s se afieze elementele pare ale vectorului: start
citete n
pseudocod
program vector citete n afieaz n pentru i = ( 0, n-1 ) execut citete v[i] sfrit pentru pentru i = ( 0, n-1 ) execut dac ( ( v[i] mod 2 ) == 0 ) atunci afieaz v[i] sfrit dac sfrit pentru sfrit vector
afieaz n i=0
schema logic
DA
i[0,n-1] ?
NU
i=0
i[0,n-1] ?
DA
(v[i] mod 2) ==0
NU
DA
afieaz v[i]
i=i+1
stop
cdamian@ee.tuiasi.ro
www.infopuc.ro
Ex5. S se citeasc un vector de la tastatur i s se afieze valoarea maxima stocata in elementele acestuia:
pseudocod
program vector variabile: i, n, aux1; vectorul: v[30]; citete n afieaz n pentru i = ( 0, n-1 ) execut citete v[i] sfrit pentru pentru i = ( 0, n-2 ) execut dac ( v[i] >= v[i+1]) atunci dac (v[i] >= aux1) atunci aux1 = v[i]; altfel aux1 = aux1; altfel dac (v[i+1] >= aux1) atunci aux1 = v[i+1]; altfel aux1 = aux1; sfrit pentru afisare aux1; sfrit vector
cdamian@ee.tuiasi.ro
www.infopuc.ro
cdamian@ee.tuiasi.ro
www.infopuc.ro
Ex7. S se citeasca un vector de la tastatur i s se afieze elementele impare ntre doua limite (L_inferioar si L_superioar). Ex8. S se citeasca un vector de la tastatur i s se afieze valoarea minim stocat n elementele acestuia, numarul elementului si adresa lui. Ex9. S se citeasca un vector de la tastatur prin alocare dinamica a memoriei. Acesta va initializa un al doilea vector astfel nct valoarea primului element din primul vector se va gasi ca valoare a ultimului element din cel de-al doilea vector (ex: v1[0] -> v2[n-1]). Ex10. S se ordoneze descrescator un vector citit de la tastatura.