Sunteți pe pagina 1din 37

Utilizarea i Programarea Calculatoarelor

L. A. Fulop

Algoritmi I.

Curs 2

Proceduri de proiectare
Limbaj natural Pseudocod Scheme logice

Examplul 1 Schem logic


Obine datele de intrare Masa, g, nlimea etc

Calculul energiei utilizate Conversia energiei n grame de Nutella

Rezultat: grame de Nutella pentru urcat

Convenii de semne la scheme logice


1 - Date de intrare (Input) sau de iesire (Output) 2 - Proces 3 - Decizie 4 - Funcie / Procedur 5 - Direcia de naintare n schem 6 - START i STOP

Examplul 1 ntrebare
ntrebare n cldire sunt 20 de trepte ntre fiecare etaj, fiecare de 33 cm. Ct Nutella trebuie s mnnce un om de 70 kg s recupereze energia consumat pentr a ajunge la secretariat? (Nutella are 2147 joules / 100 gr)

Ex1 - Reprezentri ale soluiei


Soluie: Energia folosit pentru a urca o trept = m x g x h = 70 x 9.81 x 0.33 = 226.61 j Energia utilizat pentru a ajunge la etajul 1 = 1 x 20 x 226.61 = 4532.22 j Dac 100 gr de Nutella conine 2147 kilo jouli atunci: 1 joul este produs de 100/2147000 gr de Nutella. Va trebui s mnnce 4532.22 x 100 / 2147000 = 0.211 gr de Nutella s ajung la secretariat.
START

m=70 kg h=0.33 m g=9.81 m/s2 ENut=2147kJ/g Etreapta=70 x 9.81 x 0.33 =226.6 J Eetaj=1 x 20 x 226.6 = 4532.2 J EgNut=100/2147000 g E=4532.22 x 100/2147000 = 0.211 g

E=0.211 g STOP

Observatii privind schema logic


1) Orice schem are un START i un STOP. Procesul ncepe undeva i se termin undeva. 2) Procesul prezentat este unul simplu linear. Exist numai o cale ctre soluie, care presupune parcurgerea unor pai consecutivi. 3) Datele (numerele) vehiculate au nume, simboluri. Simbolurile ajut la abstractizarea problemei (n programare ele se numesc variabile). 4) Dac datele de intrare se schimb ca valoare, procedura de soluionare rmne neschimbat.

Construcii de schem logic (1)


Secven de procedur simpl

A B Execut A; Execut B; Do A; Do B;

Construcii de schem logic (2)


Secven de procedur decizional (IF) dac X Adevrat (TRUE) A B Fals (FALSE)

Dac x adevrat atunci execut A altfel execut B IF X true then Do A else Do B

Construcii de schem logic (3)


Secven de procedur condiional repetitiv (DO-WHILE) pn X Adevrat (TRUE) A B Pn X execut A cnd nu X execut B (continu) WHILE X true Do A Fals (FALSE)

Construcii de schem logic (4)


Secven de procedur condiional multipl (CASE) Dac i i=1 A B i=2 C i=3 D i=4

Dac i=1 execut A; dac i=2 execut B; ... Do A if i=1; Do B if i=2; ...

Exemplu de algoritm (1)


Problema: Cutarea celui mai mic numr ntr-un ir aleator. 8 2 4 9 3 6

Care este cel mai mic?

Procedura instinctiv de cutare


Se ia primul numr i se compar cu al doilea. Se reine cel mai mic (MIN). MIN se compar cu al treilea numr i se reine cel mai mic care devine MIN. MIN se compar cu al patrulea numr i se reine cel mai mic care devine MIN. ...

Secvena 1: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

8 2 4 9 3 6
Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3

Pas 3: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6

Secvena 1: Cutarea celui mai mic numr


Pas 4: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 5: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 6: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6

Cate numere in sir: NR Cate numere in sir: NR Cititi sirul de numere: V[] Cititi sirul de numere: V[] Minimul este: min = V[0]

Incepand cu primul numar din sir V[] i=0 Mai avem numere in V[]? De la i=0 pana i<NR.
Da(True) Nu(False)

min>V[i]
Nu(False) Da(True)

Numarul gasit e mai mic decat min! min=V[i]


Nu(False) Nu(False)

Am gasit minimul dintre numere: Am gasit minimul dintre numere: min min

Soluie problem 1
Cel mai mic numr este 2. Am parcurs un algoritm de cutare ntr-o singur secven avnd ase pai!
8 2 4 9 3 6

Are ase pai pentru c erau ase numere n ir?

Exemplu de algoritm (2)


Problema: Ordonarea cresctoare a unui ir aleator.

Cum le ordonm?

Procedura instinctiv de sortare


Cutarea numrul cel mai mic din ir i trecerea n prima csu. Reinut c din lista iniial a fost scos numrul respectiv. Din lista rmas ai cutarea celui mai mic i trecerea pe poziia doi. Din lista rmas cutarea celui mai mic numr i trecerea pe poziia trei. ...

Secvena 1: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

8 2 4 9 3 6
Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3

Pas 3: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6

Secvena 1: Cutarea celui mai mic numr


Pas 4: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 5: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 6: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 2)

8 2 4 9 3 6

Rezultat secvena 1
Secvena 1 s-a terminat n 6 pai. Cel mai mic numr din ir este 2.

irul rmne cu 5 numere dintre care vom cuta cel mai mic! 8 4 9 3 6

Secvena 2: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

4 9 3 6

Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 4)

4 9 3

Pas 3: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 4)

4 9 3 6

Secvena 2: Cutarea celui mai mic numr


Pas 4: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 3)

4 9 3 6

Pas 5: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 3)

4 9 3 6

Rezultat secvena 2
Secvena 2 s-a terminat n 5 pai. Cel mai mic numr din ir este 3.

irul rmne cu 4 numere dintre care vom cuta cel mai mic! 8 4 9 6

Secvena 3: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

4 9

Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 4)

4 9

Pas 3: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 4)

4 9

Secvena 3: Cutarea celui mai mic numr


Pas 4: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 4)

4 9

Rezultat secvena 3
Secvena 3 s-a terminat n 4 pai. Cel mai mic numr din ir este 4.

irul rmne cu 3 numere dintre care vom cuta cel mai mic! 8 9 6

Secvena 4: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 8)

Pas 3: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 6)

Rezultat secvena 4
Secvena 4 s-a terminat n 3 pai. Cel mai mic numr din ir este 6.

irul rmne cu 2 numere dintre care vom cuta cel mai mic! 8 9

Secvena 5: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 8)

Pas 2: Compar minimul cu urmtorul numr i alege cel mai mic dintre ele (Min = 8)

Rezultat secvena 5
Secvena 5 s-a terminat n 2 pai. Cel mai mic numr din ir este 8.

irul rmne cu 1 numr. 9

Secvena 6: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este cel mai mic. (Min = 9)

Rezultat secvena 6
Secvena 6 s-a terminat ntr-un pas. Cel mai mic numr din ir este 9. 9 2 3 4 6 8 9

Cate numere in sir: NR Cate numere in sir: NR Cititi sirul de numere: V[] Cititi sirul de numere: V[] Incepand cu primul numar din sirul sortat V1[] Incepand cu primul numar din sirul sortat V1[] j=0 j=0 Mai avem de completat in sirul sortat V1[]? De la j=0 pana j<NR
Da (True) Da (True)

Minimul este: min = V[0] Pozitia lui min este Pm=0

Mai avem numere in V[]? De la i=0 pana i<NR.


Da(True)
Nu(False) Nu(False)

Nu(False) Nu(False)

min>V[i]
Nu(False) Nu(False) Da(True)

Numarul gasit e mai mic decat min! min=V[i]


Nu(False) Nu(False)

Minimul gasit il punem pe pozitia j al lui V1[]: V1[j]=min Eliminam din V[] numarul gasit: V[Pm]=max(V[])
Nu (False) Nu (False)

Sirul V1[] este ordonat crescator. Sirul V1[] este ordonat crescator.

Concluzii rezolvare (1)


Rezolvarea s-a realizat n ase secvene. Prima secven a avut ase pai, al doilea cinci pai, iar ultimul un singur pas. Numrul pailor nu depinde de ordinea iniial a numerelor din irul original. Numrul total de pai de rezolvare a problemei este 20 pentru ase elemente din ir.

Concluzii rezolvare (2)


Generaliznd pentru n elemente din ir numrul de pai se poate calcula.
Ordonarea simpla a unui sir de numere 100000 Numar de pasi (buc) 80000 60000 40000 20000 0 0 100 200 300 400 Numere in sir (buc)

N = n
1

Orice algoritm care rezolv aceast problem din mai puini pai este un algoritm mai eficient !!!

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