0% au considerat acest document util (0 voturi)
263 vizualizări125 pagini

ECDL Computing

Încărcat de

Raluca Bondoc
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
263 vizualizări125 pagini

ECDL Computing

Încărcat de

Raluca Bondoc
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 125

CUPRIN S

CAPITOLUL 1 - GANDE;TE CA UN PROGRAMATOR


I. 1 Gandirea Computa[ionala

1.2 Instructiuni

I.3 Exercitii Recapitulative

CAPITOLUL 2 - DEZVOLTARE SOFTWARE


2. 1 Precizia Limbajului

2.2 Limbaje de Programare

2.3 Text in cadrul Codului

2.4 Etapele de Dezvoltare ale unui Program

2.5 Exercitii Recapitulative

CAPITOLUL 3 - ALGORITMI
3.1 Pasii unui Algoritm

3.2 Metode de Reprezentare a unei Probleme

3.3 Scheme Logice

3.4 Pseudocod

3.5 Remedierea Erorilor din Algoritmi

3.6 Exercitii Recapitulative ::


CAPITOLUL 4 - PROGRAMARE
4. 1 Introducere in Python

4.2 Explorare Python

4.3 Salvarea unui Program

4.4 Exercitii Recapitulative

CAPITOLUL 5 - EFECTUAREA CALCULELOR


5. 1 Efectuarea Calculelor in Python

5.2 Ordinea Operatorilor

5.3 Exercitii Recapitulative :;


CAPITOLUL 6 - VARIABILE SI TIPURI DE DATE
6.1 Tipuri de Date

6.2 Variabile
6.3 Dincolo de Numere

6.4 Exercitii Recapitulative

CAPITOLUL 7 - ADEVARAT SAU FALS

7.I Expresii Booleene

7.2 Operatori de Compara[ie

7.3 Operatori Booleeni

7.4 Variabile de tip Boolean

7.5 Combinarea Expresiilor Booleene

7.6 Exercitii Recapitulative

CAPITOLUL 8 - TIPURI DE DATE AGREGAT


8.1 Tipuri de Date Agregat in Python

8.2 Lisle

8.4 Exercitii Recapitulative

CAPITOLUL 9 - CONSTRUIREA CODURILOR


9.1 Cod

9.2 Comentarii

9.3 Organizarea Codului

9.4 Nume Descriptive

9.5 Exercitii Recapitulative

CAPITOLUL 10 - INSTRUCTIUNI CONDITIONALE


10.1 Secvente si instructiuni

1 0.2 Instructiunea IF

10.3 Instructiunea IF...ELSE

1 0.4 Exercitii Recapitulative

CAPITOLUL ll - PROCEDURI SI FUNCTII


1 I.1 Subrutine

1 I.2 Functii si Proceduri

1 1.3 Exercitii Recapitulative

CAPITOLUL 12 - BUCLE (LOOP)


12.1 Bucle (Loop)

12.2 Bucle folosind Variabile


12.3 Tipuri de Bucle

12.4 Recapitulare

12.5 Exercitii Recapitulative

CAPITOLUL l3 - BIBLIOTECI
1 3. 1 Utilizarea Bibliotecilor

1 3.2 Biblioteci standard

13.3 Evenimente

1 3.4 Biblioteca Pygame

13.5 Cod Boilerplate

1 3.6 Desenarea utilizand Bibliotecile

1 3.7 Exercitii Recapitulative

CAPITOLUL 14 - RECURSIVITATE
14. 1 Recursivitate

l4.2 Desen recursiv

14.3 Exeicitii Recapitulative

CAPITOLUL 15 - TESTARE SI IMBUNATATIRE


15.1 Tipuri de Erori

1 5.2 Identiflcarea Erorilor

1 5.3 Testarea si Depanarea unui Program

I 5.4 Imbunat5tirea unui Program

1 5.5 Exercitii Recapitulative


CAPITOLUL 1 -
GANDESTE CA UN PROGRAMATOR

La finalul acestui capitol, veti putea sa:

. Deflniti termenul computing

. Deflniti termenul de gandire computationala

. IdentiflCati tehniCi de gandire COmPutatiOnal5 precum descompunerea,


recunoasterea de sabloane, abstractizarea si utilizarea algoritmilor

. Utilizati descompunerea unei probleme pentru a diviza date, procese sau


probleme complexe in p5rti mai mici
. Deflniti termenul de program

. Intelege[i modul de utilizare al algoritmilor in gandirea computafional5

. IdentiflCati SablOanele in Cadrul PrOblemelOr deSCOmPuSe

. Utilizati abstractizarea pentru a flltra detaliile considerate inutile in analizarea


unei probleme
Capitolul 1 - Gandeste ca un programator ECDL Computing

1.1 GANDIREA COMPUTATIONALA

E Concepte

computing reprezimt5 efectuarea calculelor sau procesarea datelor, cu ajutorul untri:Computer.

Gandirea computational£ reprezinta procesul de analiza a problemelor si de identiflcare a


solutiilor posibile de rezolvare.
Gandirea computationala este util5 in rezolvarea problemelor si sarcinilor complexe precum
proiectarea produselor, gatitul manc5rurilor, planificarea evenimentelor, repararea obiectelor
defecte, asamblarea diverselor piese de mobilier, precum si in multe alte situatii
Gandirea computational5 utilizeaz5 4 tehnici cheie de rezolvare a problemelor. Acestea pot fl
utilizate in orice ordine si in orice combinatie.

Recunoasterea de sabloane
Un sablon reprezint5 un element sau o caracteristic5 repetitiv5, cum ar fl de exemplu un motiv
de pe o fesatur5. Sabloanele pot fl regasite de asemenea si in activit5ti, Gum ar fl diverse retete ce
pot implica setarea cuptorului la o anumit5 temperatur5 si a;teptarea inc5lzirii cuptorului. Acest
lucru este cunoscut sub denumirea de sablon partajat. Recunoasterea sabloanelor implica
identiflCarea ;abloanelor repetitive in cadrul problemelor complexe sau in cadrul problemelor mai
mic1, COneXe.

in flgura de mai SuS, Primul Set de blOCuri (Patrate) COIOrate a fOSt aPOi SeParat in 2 portiuni
pentru a eviden[ia prezenta unui sablon repetitiv.

Abstractizarea
Abstractizarea reprezinta procesul de extragere a celor mai importante caracteristici din cadrul
unei probleme sau sarcini. Caracteristicile extrase ofer5 informatii utile in examinarea problemei
;i identiflcarea solutiilor potentiale. Abstractizarea implic5 eliminarea detaliilor inutile si
identiflcarea doar a informatiilor relevante pentru rezolvarea problemei. in cadrul unei sarcini de
coacere a unor biscuiti, de exemplu, nu este important dac5 persoana este dreptace sau stangace.
Informatiile relevante in acest caz includ ingredientele folosite, ordinea de amestecare a lor, precum
si durata si temperatura de coacere.

in exemplul de mai jos, din a doua imagine au fost eliminate toate detaliile inutile astfel incat
s5 raman5 doar informatiile relevante in rezolvarea problemei si anume c5 este vorba despre un
caine care vrea mancare.
ECDL Computing Capitolul 1 - Gande?te ca un programator

Descompunerea
Descompunerea implica divizarea unei probleme complexe in probleme mai mici si mai
simple. Apoi, aceste probleme mai simple pot fi la randul lor descompuse in probleme ;i mai mici,
pana cand acestea devin usor de inteles ;i de gestionat. in cadrul unei sarcini de coacere a unor
biscuiti de exemplu, o problem5 minora ar putea fl aSigurarea faPtului c5 cuptorul este setat la
temperatura potrivit5. Imaginea de mai jos ilustreaz5 modul de descompunere a unei probleme in
p5rti din ce in ce mai mici.

=___= ________i a
mai mica
fro
P ro:l^e=a--+
bl e ma.--ir-

rai m:_:?Far-\
::: ;_,:LT:+
r#er:'=£f ;[=
l

A]goritmi
Un algoritm reprezinta un set organizat de instructiuni ce ofer5 pa?ii de rezolvare a unei
probleme sau sarcini. De exemplu, un algoritm ar putea consta in instructiunile dintr-o retet5
culinara sau calculele matematice pe care un computer trebuie sa le urmeze. Proiectarea
algoritmilor reprezint5 procesul de creare a unor instructiuni bine definite, Sub fOrma unOr Pa;i de
urmat pentru a rezolva o problema sau a indeplini o sarcin5 cu succes. Un posibil algoritm pentru
a face clatite implic5 parcurgerea urm5torilor pasi:

Lapte, Oua, LJnt, Se amestec5 pentru a Se prajesc pans se servesc


Zahar, Sale forms aluatul devin aurii calde

-
_EEEiE EE
_.r f
Capitolul 1 - Gande?te ca un programator ECDL Computing

Exist5 doua abordari suplimentare care includ adesea ca parte a gandirii


computationale evaluarea ;i generalizarea:

Evaluarea
Evaluarea implica validarea designului unui produs sau unui algoritm prim
veriflcarea faptului ca acesta functioneaz5 conform speciflCatiilOr Sau C5
rezolva problema in cauza.
::?:
Generalizarea
Generalizarea const5 in identiflCarea unei mOdalitati de a face o anumita solutie utila in cadrul
unui set mai larg de circumstante. Spre exemplu, ati putea folosi simboluri in loo de cuvinte la
controlul produselor astfel incat aceasta metod5 s5 poat5 fl folosit5, indiferent de limb5. in imaginea
urmatoare, structura de baz5 a florii este intotdeauna aceeasi ;i poate fi utilizata in mod repetat,
variind insa caracteristici precum culoarea sau forma florii.

Aceste?ase tehnici de gandire computational5 pot fl fOIOSite in Paralel Pentru a reZOIVa


probleme complexe in domeniul informaticii si nu numai.

Exemplu: Proiectarea unei ma§ini de spalat ruf;e

fn acest exemplu, tehnicile de gandire computationala sunt


aplicate problemei complexe constand in proiectarea unei masini de
spalat rufe.

Abstractizare
Primul pas in proiectarea unei masini de sp5lat rufe const5 in
determinarea scopului ei - spre exemplu, ar trebui sa contina programe
de spalare intensiv5 sau delicata, la o temperatur5 mica sau mare, Ear la flnalul ciclului de sp51are,
rufele sa fle curate. Faza de proiectare implic5 enumerarea caracteristicilor necesare pentru a atinge
scopul propus. Abstractizarea poate fl folosita pentru a-1 ajuta pe proiectant s5 flltreze informatiile
relevante de cele nerelevante pentru a determina ce caracteristici s5 includa si ce anume sa exclud5.
Detaliile nerelevante ar putea include culoarea ma;inii de sp51at sau daca rufele ce urmeaza a fl
sp51ate contin 6 perechi de sosete sau 3 perechi de ;osete.
Detaliile relevante sunt cele care afecteaz5 functionalitatea general5 ;i ar putea include
informatii precum temperatura apei sau daca un anumit program este destinat spal5rii rufelor
delicate sau tesaturilor rezistente la uzura. Aceste detalii sunt relevante in rezolvarea problemei de
a obtine la finalul ciclului de sp5lare rufe curate, far5 a le deteriora.

lO
ECDL Computing Capitolul I - Gandeste ca un programator

Descompunere
Descompunerea poate fl utilizat5 pentru a diviza o problem5 in alte probleme mai mici ;i mai
usor de gestionat, precum:
. Cum introducem ;i cum scoatem rufele din masina de sp51at?
. Cum anume intr5 si iese apa din masina de spalat?
. Cum anume ne asigur5m c5 apa este la temperatura adecvat5?

La randul lor, aceste mici probleme pot fl descompuse in probleme si mai mici:
. Care este pozitia optim5 a u!ii in cadrul ma?inii de sp5lat?
. Cum putem face ca usa s5 se inchid5 etan?, astfel incat apa sa nu se scurga?

Descompunerea unei probleme legate de prolectarea unei maSini de spdlat rufle

A]goritmi
Algoritmii pot fl proiecta[i pentru a specifica pa;ii exac[i pe care masina ar trebui s5 ii urmeze
pentru diferite cicluri de sp5lare. in plus, sunt necesari mull mai mul[i algoritmi. Spre exemplu,
poate fi proiectat un algoritm care sa speciflce secventa exact5 de pa;i ce trebuie urma[i pentru
fabricarea unei masini de sp5lat rufe.

Evaluare
Proiectarea unui produs reprezint5 o provocare major5 ;i ca urmare, proiectele initiale vor fl
evaluate continuu. Prim intermediul acestei evalu5ri, proiectantii determin5 unde si cum poate aduce
imbunatatiri produsului. Spre exemplu, dac5 in timpul testarii unei masini de sp5lat rufe, apa se
scurge in exteriorul acesteia, designul produsului poate fl modificat astfel incat sa se previn5 acest
lucru in viitor.

Generalizare
Aspectul unei masini de spalat poate fl de asemenea imbunat5tit facindu-1 universal, prim
utilizarea pe butoane a simbolurilor in locul cuvintelor, astfel incat ma;ina de spalat s5 poata fl
utilizat5 de orice persoan5, indiferent de limba. O alt5 metod5 ar fl Prim PrOieCtarea unei ma;ini de
sp5lat care sa functioneze atat la 1 10V, cat ;i la 220V pentru a putea fi folosit5 in diferite t5ri. Dac5
designul masinii de spalat este modiflcat in acest fel, poate fi generalizat.

ll
Capitolu] 1 - Gande;te ca un programator ECDL Computing

Recunoasterea de?abloane
Recunoasterea de sabloane are un rol important si, impreuna cu celelalte cinci tehnici, poate fl
utilizata de mai multe ori in diferite etape ale procesului de proiectare. Poate ajuta in procesul de
abstractizare prim evidentierea similaritatilor si diferentelor in aspectele diferite ale unei probleme.
Recunoasterea de sabloane poate ajuta ;i procesul de generalizare, unde anumite aspecte ale unei
probleme specifice pot fi relationate cu probleme mai generale. in mod similar, evaluarea
aspectului ajuta in procesul de generalizare prim evaluarea modului in care acesta poate fi aplicat
pentru diferite set5ri.
Cele 6 tehnici de gandire computationala nu trebuie aplicate obligatoriu intr-o anumit5 ordine
sau in cadrul unei singure etape a procesului de proiectare. Ele pot fl utilizate in diverse etape de
proiectare si intr-o ordine diferit5.

Exemplu: Organizarea unui festival de muzicd

in acest exemplu, tehnicile de gandire computa[ionala sunt aplicate in cadrul unei probleme
complexe precum organizarea unui festival de muzica.

Abstractizarea
Pentru a organiza un festival de muzica, trebuie sa in[elegeti in primul rand ce anume este un
festival de muzic5. Ca urmare, primul pas ar putea consta in enumerarea elementelor esentiale pe
care un festival de muzic5 ar trebui s5 le contin5:
® Muzicieni
. Locatie
. Marketing ;i publicitate
® Bilete
. Personal angajat etc.
Exist5 si alte detalii care trebuie luate in considerare la organizarea unui festival, dar care nu
sunt esentiale, precum culoarea biletelor sau formularea exact5 de pe bilete. Acestea pot ingreuna
planificarea ini!iala?i pot fi elaborate ulterior. Utilizand abstractizarea, detaliile inutile pot fl
eliminate din plan, pentru moment.

Descompunere?i A]goritmi
Provoc5rile majore care apar in organizarea unui festival de muzica pot fi divizate in sarcini
mai mici. in practica, acestea pot fl delegate spre a fl rezolvate diverselor persoane:
. O persoan5 care s5 se ocupe de rezervarea locatiei de desfasurare a festivalului.
. O persoan5 responsabil5 de marketing ;i publicitate.
. O persoan5 responsabila cu gestionarea rezerv5rilor si biletelor.
Aceste sarcini mat mici pot fl la rindul lor divizate in probleme si mai mici. Acest lucru
reprezint5 descompunerea unei probleme si este un exemplu de aplicare a metodelor de gandire
computati onal 5.
De exemplu, problema organizarii locatiei poate fl diViZata in SarCini lnai miCi, PreCum:
a Unde este situat5 locatia?
. Cand este locatia disponibil5?
. Exist5 parcare disponibil5?

Similar, sarcina legat5 de parcarea masinilor poate fi descompus5 in probleme si mai mici. De
asemenea, pot fi creati algoritmi simpli, cum ar fi:

12
ECDL Computing Capitolul 1 - Gande;te ca un programator

. Pentru a directiona masinile spre locurile de parcare destinate.


. pentru a directiona ma;inile spre parcul auto atunci cand parcarea principals este plina.
. Pentru a preveni blocarea rutelor importante.
. Pentru a asigura faptul c5 parcarea prioritar5 este in permanent5 disponibil5 pentru
persoanele VIP.

Problema publicita[ii poate fl descompus5 dup5 cum urmeaza:


. Cum putem prezenta festivalul astfel incat persoanele sa fle interesate sa participe?
. Cum s5 se realizeze promovarea evenimentului catre publicul tinta intr-un mod eflCient Si
rentabil?

?i procesul de rezervare si vanzare de bilete poate fl de aSemenea deSCOmPuS. Spre exemplu,


procesul de vanzare de bilete poate fl divizat intr-un set de pa?i si se poate crea un algoritm ce
acopera proiectarea, tipirirea, cump5rarea, livrarea,?i retumarea biletelor.

a Emitere bilete?
a Retumare bilete?
® Veriflcare bilete?

Descompunerea unei probleme legate de organizarea unui festival de muzica

Evaluare
Dup5 terminarea evenimentului, poate fl util5 colectarea de feedback cu privire la ce a mers
bine si ce nu. Aceasta este o metoda de evaluare a planului. Daca festivalul se mai organizeaza si
anul viitor, lectiile invatate din evaluarea realizat5 anul acesta vor imbunat5ti calitatea
evenimentului de anul viitor.

Generalizare
Generalizarea este de asemenea relevant5. O echip5 care a gestionat cu succes un festival de
muzic5 i;i poate stabili obiective mai ambi[ioase, spre exemplu un tumeu de festivaluri sau
cresterea duratei festivalului, adaugarea mai multor acte artistice sau a mai multor genuri de
muzic5. Solutia existent5 este reutilizata, insa poate fl generaliZata Pentm a include elemente not.

13
Capitolul 1 - Gande;(e ca un programator ECDL Computing

1.2 INSTRUCTIUNI

I) Concepte

Gandirea computa!ional5 reprezint5 o abordare genera15 de rezolvare a problemelor, insa poate


fi de asemenea folosit5 ca punct de plecare pentru crearea instruc[iunilor pentru computere.
Descompunerea problemelor in pa;i mai simpli a condus la dezvoltarea unuia sau mai multor
algoritmi - colectii de pa?i simpli, bine deflniti, ce trebuie urmati pentm a rezolva o problem5.
Algoritmii pot fl apoi prezentati intr-o forma pe care computerele o pot intelege.

Exemplu: Un algoritm de sortare a oamenilor Cn functie de 'lndl(ime

.,y* a+ ~\-
fn acest exemplu, trebuie sortati elevii dintr-o clas5 in functie de inaltime. Pentru aceasta, v-
ati putea decide asupra unui num5r de pa?i de urmat:

Pas 1 : Aliniati toate persoanele pe un singur rand.


Pas 2: Decideti in ce capat al randului vor fl PerSOanele 6inalteC si in ce cap5t cele
cscunde'.

Pas 3 : Comparati in mod repetat inaltimile elevilor si schimbati locurile elevilor atunci
cand ei se afl5 intr-o pozitie gre;ita.
Acest set de pa;i reprezint5 un algoritm. Totu;i, nu este un algoritm foarte detaliat. Pasul 3,
spre exemplu, ar putea fl descompus la randul lui in mai multe probleme mai mici:
. Cu ce cap5t al randului se incepe
. Cum se compar5 inaltimea elevilor
. Cum se procedeaz5 dac5 elevii sunt mat inalti sau mai scunzi
Odat5 ce este construit in mod corect, acest algoritm de sortare a persoanelor dup5 inaltime ar
putea fl modificat astfel incat s5 rezolve diferite alte probleme. O variant5 a acestui algoritm ar
putea sorta elevii dintr-o clasa in functie de data nasterii. Si, dac5 se adaug5 cateva modiflcari,
algoritmul ar putea fl utiliZat Pentru a determina PerSOanele naSCute in aCeeaSi Zi.

B Concepte

AIgoritmi pentru computere


in algoritmul de sortare a elevilor dup5 inaltime, instructiunile erau suflcient de detaliate pentru
a putea fl inteleSe Si eXeCutate de O PerSOana, inS5 nu erau suflCient de detaliate aStfel inCat un
computer s5 le poat5 executa. Un computer trebuie programat utilizand un limbaj de programare,
care este mult mai detaliat si mai precis decat un limbaj uman.

14
ECDL Computing Capitolul 1 - Gandeste ca un programator

Ca urmare, pentru ca un computer sa execute instructiunile din algoritm, acesta trebuie


convertit intr-un limbaj pe care computerul sa il poat5 in!elege. Un algoritm exprimat intr-o form5
ce poate fl inteleas5 ;i executata de catre un computer poarta numele de program.
Atunci cand computerul urmeaza pa;ii descrisi in program, se spume ca el ruleaza sau executa
programul respectiv. in concluzie, un program este scris intr-un limbaj de programare, far
computerul ruleaza sau executa programu1.
Imaginati-v5 un robot care coace o prajitura. O instructiune dintr-un algoritm de a cintroduce
pr5jitura in cuptor, nu ar fl SuflCient de detaliat5 astfel incat robotul (computerul) s5 o execute. Un
robot necesita un program continand mutt mai multe instnlctiuni detaliate despre cum anume s5 isi
mi;te mainile ;i degetele atunci cand pune prajitura in cuptor gi despre cum s5 nu o r5stoame.

1.3 EXERCITII RECAPITULATIVE


9

I. Computing reprezint5 un set de activit5ti ce include:


a. efectuarea unor calcule sau procesarea unor date.
b. respectarea unei re[ete pentru coacerea biscui[ilor.
c. observarea corect5 si atenta a stelelor, pentru o perioada lung5 de limp.
d. observarea corecta ;i atenta a reactiilor chimice.

2. Gandirea computationala reprezinta:


a. rezolvarea unei probleme diflCile de Catre un computer.
b. procesul de analiza a problemelor ;i provoc5rilor ;i de identiflcare a solutiilor
posibile pentru rezolvarea acestora.
c. utilizarea unui computer pentru efectuarea multor calcule matematice.
d. orice activitate in care o persoan5 lucreaz5 1a un computer.

3. Care dintre urmatoarele NU reprezint5 o metod5 de gandire computa[ional5?


a. Abstractizarea
b. Intelegerea
c. Descompunerea
d. Recunoasterea de sabloane

4. Care dintre urmatoarele reprezint5 un bun exemplu de descompunere a unei probleme?


a. Divizarea sarcinii de a proiecta un robot ln sarcini mai mici (proiectarea mainii,
proiectarea sursei de alimentare, proiectarea senzorilor).
b. T5ierea unei pr5jituri in 6 felii egale.
c. Plasarea unei mar intr-un borcan de sticla si fotograflerea lui zilnic5 pentru a
monitoriza degradarea acestuia.
d. Utilizarea unui motor de c5utare pentru a afla r5spunsul la o intrebare.

5. Un program reprezinta:
a. Regulile detaliate ale unuijoc sau unui sport.
b. Un algoritm exprimat intr-o forma adecvat5 pentru un computer.
c. O colectie de legi ;i reglement5ri care determina ce cl5diri pot fl COnStruite legal
intr-un anumit loc.
a. O secvent5 de instructiuni ce trebuie urmate de o persoana (de exemplu o reteta de
prajitur5).

15
CapitoLul 1 - Gande?te ca un programator ECDL Computing

6. Care dintre acestea este eel mai putin probabil sa reprezinte o modalitate prim care
algoritmii sunt utilizati in gandirea computa[ional5?
a. Un algoritm poate duce la un program de calculator care, atunci cand este rulat,
rezolv5 problema.
b. Un algoritm poate duce la un program de calculator care foloseste intuitia pentru a
obtine solutii mai bune.
c. Un algoritm poate fumiza instructiuni pas cu pas pentru fabricarea unui obiect.
d. Un algoritm poate fumiza instructiuni pas cu pas pentru diverse procese ce implic5
oameni, bani si alte resurse.

7. Maijos sunt explicate 3 re[ete:

Tort de ciocolat5:
Setati cuptorul la 1 80oC
Ungeti cu unt 2 tavi de tort de 9,, flecare
Amestecati ingredientele cu un tel timp de 1 minut
Puneti amestecul obtinut in tavile de tort
Coaceti timp de 30 de minute
L5sati torturile s5 se r5ceasca
Omati torturile ;i apoi l5sati-le la rece cateva ore.

Turtadulce:
Amestecati ingredientele pana obtineti un aluat moale
Setati cuptorul la 1 90oC
intindeti aluatul cu sucitorul intr-o foaie groas5 de 1/8" ;i apoi taiati-1 in diverse
forme
Coaceti pan5 cand marginile sunt tari) aproximativ 10 minute.

Briose cu aflne:
Setati cuptorul la 185oC
Ungeti cu unt sau ulei 18 forme de briose
Bateti untul si zaharul pana se obtine o crem5 consistenta
Ad5ugati celelalte ingrediente
Tumati compozitia in formele de briose
Glazurati-le cu topping de ciocolat5
Coaceti timp de 15 - 20 minute.

Care dintre urm5toarele reprezinta un sablon comun pentru toate cele 3 retete?
a. unge;i cuunt sau ulei 18 form; de briose.
b. Oma!i ;i apoi l5sati la rece.
c. fntinde?i aluatul.
d. Setati cuptorul la o anumit5 temperatura.

8. Care dintre urmatoarele ar reprezenta cel mai relevant detaliu in proiectarea unui program
de gatit pentru un robot?
a. Culoarea robotului.
b. Ce cantit5[i s5 utilizeze din flecare ingredient.
c. Din ce magazin au fost cump5rate ingredientele.
d. Dac5 programatorul este dreptaci sau stingaci.

16
CAPITOLUL 2 -
DEZVOLTARE SOFTWARE

La finalul acestui capitol, veti putea sa:

. fn;elegeti diferenta dintre un limbaj formal ;i un limbaj natural

. Definiti termenul de cod si s5 intelege[i distinctia dintre codul sursa si codul


masina

. Intelegeti termenii de descriere a unui program ;i speciflcatii

. Recunoa;teti etapele de creare a unui program: analiz5, proiectare, programare,


testare, imbunatatire.
Capitolul 2 - Dezvoltare software ECDL Computing

2.1 PRECIZIA LIMBAJULUI

E Concepte

Tipuri de limbaje:
. Limbaj natural
Limbile vorbite precum Engleza, Franceza sau Chineza reprezinta limbi naturale. O limb5
naturala are nevoie de un anumit context pentru a fl Clar inteleasa ;i pentru a se evita ambiguit5tile.

. Limbaj formal
Un limbaj formal este foarte strict structural, cu reguli exacte ;i precise. Este utilizat in
matematic5) ecuatii chimice ;i programe de calculator. Este clar ;i lipsit de ambiguitate.

Limbajele de programare reprezinta limbaje formale. O modalitate prim care limbajele formale
pot evita ambiguitatile const5 in utilizarea parantezelor pentru a grupa cuvinte ;i termeni ;i prim
evitarea cuvintelor precum celt sau (eat intr-un context unde adresarea nu este foarte clara
Reg5si[i mai jos 3 tipuri diferite de paranteze utilizate in cadrul limbajelor formale. Fiecare tip
de paranteza are o functie diferita ;i poate fl utiliZata Pentru a deflni diverse lucruri, cum ar fl
ordinea pa;ilor pe care trebuie s5 ii execute un program.

PARANTE ZA NUME

Paranteze rotundet

Acolade.

Paranteze drepte.

Exemplu: Ambiguitate cu i?i fi 'sou

Daca intrebi o persoana ce aroma de bomboane prefer5, aceasta poate r5spunde: ccMure si
Lamaie sau Zmeura si Portocal5''. Vei intelege r5spunsu1, ins5 pentru ca un computer sa poat5
intelege aceasta propozitie, cuvintele trebuie grupate in mod corect.
pentru un computer,' trebuie sa scrii (Mure SI Linaie) SAU (Zmeur5 SI Portoca15)

(Mute SI Ldm&ie) SAU (Zmeurd SI Portocald)

18
ECDL Computing Capitolul 2 - Dezvoltare software

in timp ce, dac5 scrii Mure !I (Portocal5 SAU Linaie)?I Zmeura, computerul inerpreteaz5
astfel:

Mure SI (Portocald SAU Ldmdie) SI Zmeurd

2.2 LIMBAJE DE PROGRAMARE

E Concepte

Limbajele de programare sunt proiectate pentru a scrie programe care instruiesc computerele
sa execute o secvent5 de pa;i in scopul rezolv5rii unei probleme. Limbajele de programare au un
vocabular mai limitat decat limbajele naturale.
Exist5 diverise limbaje de programare. Acest material de instruire face referire la un cunoscut
limbaj de programare numit Python. Alte limbaje de programare foarte cunoscute sunt Java ;i C++.

I) Concepte

Coding
Textul dintr-un program, scris sub forma unei secvente de instructiuni pe care computerul s5
le execute, poarta numele de cod. Diversele limbaje de programare utilizeaza diferite stiluri de cod,
cu reguli diferite si modalita[i diferite de organizare a instructiunilor, cunoscute sub denumirea de
sintax5.
Scrierea unui program poarta numele de programare sau coding.
Persoanele care scriu programe se numesc programatori.
Exist5 2 tipuri de cod: cod surs5?i cod ma?in5.

. Codul surs5 reprezinta codul scris de programator pe care oamenii il pot intelege.
Acesta este introdus in computer, de obicei sub form5 de text, semne de punctuatie si
simboluri si confine instnlctiunile pentru computer. Dac5 inveti limbajul de programare
formal ;i r,egulil,e lui (e.g. :ython), poti scrie cu succes cod srirsa.

. Codul masina reprezint5 o serie de 1 si 0) creat5 de computer pe baza codului surs5,


pe care circuitele electronice ale computerului le pot intelege. Crearea codului ma;ina
pe baza codului surs5 este cunoscuta sub denumirea de compilare sau interpretare a
codului surs5.

19
Capitolul 2 - Dezvoltare software ECDL Computing

E Pasi

Exemplu: Cod masind pentru blocarea unei upi


Instructiunea de blocare a usii scris5 in cod sursa ar putea arata astfe1:

Lock( door )

Chiar dac5 nu este corect din punct de vedere gramatica1, are sens pentru oamenii care il citesc.
Un computer care citeste instructiunile codului surs5 vede literele 6L,, (o,, 6c,, Ck,, a(a,?i a;a
mai departe. Instructiunile nu sunt intr-un format pe baza c5ruia computerul s5 poat5 executa o
actiune. in schimb, computerul are nevoie ca aceste instructiuni s5 fle convertite intr-un format pe
care el il poate intelege ;i executa.
Computerul contine circuite electrice care functioneaz5 conform unor anumite ;abloane sau
combinatii de 1 si 0. Maijos, regasiti un exemplu despre ce ar putea insemna anumite ;abloane de
lsiO.

Cod masina Sons al instructiunii codului masina


0001 Pomeste alarma
0010 Blocheaz5 ferestrele

0100 Blocheaza usa

0110 Blocheaz5 ferestrele si usa

1 000 Porneste sistemul de aspersoare

1001 Pome;te sistemul de aspersoare si alarma

Instructiunile precum 60 1 1 0' reprezint5 instruc[iuni cod ma;ina.


in realitate, gama complet5 de posibile insrfuctiuni cod ma;in5 pentru un computer poate fl
mult mai larg5. Ar f1, de eXemPlu, multe instructiuni pentru efectuarea calculelor aritmetice.
Codul surs5 este convertit in cod masin5 inainte ca un computer s5 execute instructiunile.
cLock( door ), ar fl traduS in 0100 si atunci9computerul ar putea executa instmctiunea.

Cod sursd vs Cod masind

fn acest exemplu simplu, o instruc[iune cod surs5 Lock( door ), corespunde unei instructiuni
cod masina, o 1 00. in mod normal, o singura linie de cod sursa necesita mai multe instructiuni cod
masin5 scrise una dup5 cealalt5, in ordinea corect5.
in trecut, programatorii converteau codul sursa in cod masin5 manual si creau si documentau
singuri seriile de 1 ;i 0. Aparitia programelor care traduc c;dul sursa in, cod m:sins a permis
scrierea unor programe mutt mai marl si mai complexe.

20
ECDL Computing Capitolul 2 - Dezvoltare software

2.3 TEXT fN CADRUL CODULUI

E3 Concepte
Pe ling5 scrierea codului surs5) programatorii trebuie s5 isi documenteze munca sub forma
unor notije de tip text. Aceste notite nu sunt citite de catre computer, ins5 ii ajut5 pe programatori
;i pe ceilalti colegi sa irtyeleaga diferitele etape de dezvoltare ale unui program.

Text ce descrie un program


Programatorii scriu descrierea ;i speciflcatiile unui program pentru a ajuta persoanele implicate
in proiect s5 inteleag5 care este scopul programului?i ce problem5 trebuie acesta sa rezolve.
Acestea pot fl de aSemenea utiliZate Si in etaPa de eValuare Pentru a VerifiCa daC5 programul
functioneaz5 asa cum ar trebui.
O descriere a unui program explic5 scopul acestuia?i modul sau de functionare. Acest lucru
este util ;i pentru alti programatori, pentru utilizatorii produsului final ;i Pentru dePartamentul de
marketing in scopuri de promovare si vanzare.
O specifICatie a unui Program rePreZint5 un set de cerin[e care evidentiaz5 ce anume va face
programu1. in mod normal, speciflCa[iile sunt scrise inaintea programului. O speciflCatie eSte mult
mai detaliat5 decat o descriere ;i prevede cerinte ce pot fl testate.
spre exemplu, o speciflCatie POate include Cerinta CCProgramul VA iNCHIDE monitorul
computerului dac5 calculatorul nu a fost utilizat timp de 1 minut) penrfu a economisi energia
electric5". Odat5 ce programul este scris, el poate fl teStat laSand COmPuterul Sa funCtiOneZe timP
de 1 minut si veriflcand dac5 intr-adev5r programul inchide monitorul. Imaginea de maijos descrie
etapele posibile de realizare a unui program, de la proiectare la execu[ie.

Etapele de creare a unui program

21
Capitolul 2 - Dezvoltare software ECDL Computing

2.4 ETAPELE DE DEZVOLTARE ALE UNUI PROGRAM

I) Concepte

Descrierile ;i speciflca[iile pot juca un rol important in dezvoltarea unui program.


Urm5toarea diagram5 ilustreaza cateva dintre etapele ;i activitatile principale in crearea unui
Program.

dr aliz£
Recuno nst€Fga de ga"Oan)a
Ahafro€fiznre

Pro i©ctare
m€seompuere
Proiee®re ate¢tith

Programare
fragrm"are? €®diing

T£s tare
£v&\unre

fmfrun atatire
t
Gemerahare
Etapele deavoltdrii unui Program

Analiza
Aceasta etap5 implica deflnirea PrOblemelOr Care trebuie reZOIVate. Analiza reprezint5, in linii
marl, un proces de abstractizare, prim care se enumer5 toate aspectele problemei, identiflCandu-Se
aspectele relevante si modul ln care sunt acestea interconectate.

Proiectare
Aceasta etap5 implic5 lucrul cu algoritmi (seturi de pa?i de urmat) in scopul rezolv5rii
problemei. Astfel, se utilizeaz5 descompunerea pentm a diviza problema in papi mai mici si se
planiflC5 modul de proiectare al algoritmilor.

Programare
Aceast5 etap5 presupune scrierea programului. Acest lucru implic5 identiflCarea unei
modalit5fi pentru a exprima algoritmii in limbajul de programare ales.

22
ECDL Computing Capitolul 2 - Dezvoltare software

Testare
Aceast5 etapa presupune verificarea faptului c5 programul finctioneaz5 asa Gum ar trebui. in
etapa de testare se pot identiflCa eVentuale erOri lOgiCe Sau de SintaX5 ale programului. Acest aspect
este acoperit in detaliu in capitolul 1 5.

fmbunatatire
Aceast5 etapa implic5 adfugarea de noi caracterisitici pentru a extinde functionalit5tile
programului, pentru imbunat5tirea performantelor acestuia sau pentru a generaliza programul in
scopul utilizatii sale in diverse situatii.

Descrierea general5 a programului este de obicei formulata foarte devreme in cadrul


proiectului, ca parte a stabilirii scopului programului.

Speciflcafiile programului sunt elaborate in mod normal in etapa de proiectare. O parte dintre
cerintele din speciflCatii pot aPatea direct din deSCOmPunerea PrOblemei in COmPOnente mai miCi.
Specificatiile programului sunt examinate in etapa de testare intrucat fleCare afirmatie legat5 de
functionalit5tile programului trebuie veriflcat5.
fn etapa de imbunat5tire, descrierea programului poate fl actualizat5 pentru a include planuri
de extindere a functionalit5tilor oferite de program.

2.5 EXERCITII RECAPITULATIVE


9

1. Un limbaj formal este:


a. Un limbaj in care nu este posibil s5 faci gre;elf.
b. Un limbaj cu reguli clar definite Si inteleSuri Precise.
c. Gel mai bun limbaj ce poate fl fOIOSit la SCrierea unei Vederi.
d. Orice limbaj care contine cuvintele "siw si wsau".

2. Engleza, Araba ;i Chineza sunt:


a. Limbaje formale.
b. Limbaje de programare.
c. Limbaje naturale.
d. Codsurs5.

3. Un codmasina este:
a. Tradus in cod surs5 astfel incat computerul s5 poat5 executa instructiunile.
b. O metod5 de comunicare in siguranta intre 2 computere.
c. Un sir de 1 ;i 0 pe care computerul il execut5.
d. Un acord scris intre un programator si un client flnal in care se speciflc5
functionalit5tile programului.

4. Un algoritm scris in limbajul de programare Python este un exemplu de:


a. Codsursa
b. Codmasina
c. O speciflcatie a programului
d. O descriere a programului

23
Capitolul 2 - Dezvoltare software ECDL Computing

5. O speciflcatie a programului reprezint5:


a. Codul care va fl executat de computer.
b. Comentariile din cadrul codului pe care un programator le citeste.
c. Semnale electrice din computer, emise atunci cand un program este rulat.
d. O descriere a functionalit5tilor programului, utilizata in perioada de proiectare a
acestuia.

6. Potriviti fleCare etaP5 din crearea unui program (de la a la e) cu scopul ei:
a) 'Testare, b) Proiectare, c) Programare, d) Analiz5, e) imbun5tatire

imbunat5tirea programului existent.


Definirea clara a problemei.
Veriflcarea functionatii corecte a programului.
Proiectarea algoritmilor intr-un limbaj de programare ales.
Elaborarea unor algoritmi pentru rezolvarea problemei.

24
CAPITOLUL 3 -
ALGORITMI

La finalul acestui capitol, veti putea s5:

. Deflniti termenul de SeCVent5 de instructiuni si s5 identiflCati SCOPul utiliz5rii


secventelor de instructiuni in crearea algoritmilor.

. Recunoasteti metodele posibile de reprezentare a problemelor: scheme logice,


pseudocod
. Recunoasteti simbolurile din schemele logice, precum: start/stop) proces,
decizie, intrare/iesire, conector, sageat5

. Identiflcati secvente de operatii reprezentate in cadrul unei scheme logice sau


unui pseudocod.

. Scrieti un algoritm corect pe baza unei descrieri, utilizand o schema logica sau
un pseudocod
. Remediati erorile dintr-un algoritm precum: elemente de program lipsa,
secvent5 incorecta de instructiuni, rezultat incorect
Capitolul 3 - Algoritmi ECDL Computing

3.1 PASII UNUI ALGORITM

I) Concepte

Secvente de instructiuni
Algoritinii reprezint5 probleme complexe descompuse in pa;i sau instructiuni mai simple. in
majoritatea algoritmilor, instructiunile sunt executate una dup5 cealalt5, intr-o anumit5 ordine
(secvent5).
O secvent5 reprezinta un numar de instructiuni simple ce ar fl trebui eXeCutate una duPa
cealalta.

I^n maj oritatea algoritmilor, conteaza ordinea de executare a instructiunilor. Un robot trebuie s5
pun5 amestecul de ingrediente in tav5 inainte de a introduce tava in cuptor.
Proiectarea secventei de instructiuni reprezinta o competenta crucia15 in programare. Un
programator trebuie s5 se asigure ca toate actiunile cerute sunt executate in ordinea corecta pentru
a indeplini sarcina sau setul de sarcini. O secvent5 de instructiuni este metoda fundamentala de
control in cadrul unui program. Secventa de instructiuni este decisa in etapa de proiectare a
programului, unde se utilizeaza algoritmi si scheme logice pentru a crea cea mai eflCient5 si corect5
secvent5 de control a programului.

Intrare si iesire
Instructiunile utilizeaza de cele mai multe ori informatii din lumea exterioar5 computerului, pe
care apoi le prelucreaz5 intr-un anumit fel. Programele primesc informatiile de la utilizator prim
intermediul datelor de intrare (input) ;i genereaz5 un rezultat, anumite date de iesire (output).

Date de intrare (input)


Reprezint5 o valoare aflat5 in afara computerului, necesara pentru executarea instructiunilor.
De exemplu: o masurare a temperaturii sau un numat tastat pe tastatura unui sistem de securitate.

Date de iesire (output)


Reprezint5 o valoare calculat5 sau o actiune efectuat5 de catre program, afisat5 catre lumea
exterioar5. De exemplu: un led care se aprinde si se stinge, o alarm5 care este setat5 sau un mesaj
afl;at pe ecran.

Exemplu: Intrdri?i ieSiri pe un telefon mobil.

Un telefon mobil preia informafii (input), le proceseaza ;i retumeaz5 rezultate (outputs).


. Touch screen-ul este o metod5 important5 de introducere a datelor, de exemplu cind scrieti
un mesaj sau cand ap5sati pe ecran pentru a deschide o aplicapie.
. Ecranul de aft;are rePreZinta O metOda imPOrtant5 de aflSare a unOr date, Ca de eXemPlu
aflSarea unei liste de contacte.

Decizii de tip Da/Nu


Asa Gum ati v5zut in capitolele anterioare, ordinea instructiunilor este importanta in
programare. in general, instructiunile sunt executate uncle dupa celelalte, dar uneori trebuie luate
decizii cu privire la actiunile' viitoare. Algoritmul poate fl proiectat pentlu a pune intreb5ri
utilizatorului si a a;tepta un r5spuns din partea acestuia pentm a decide urmatorul pas.

26
ECDL Computing Capitolul 3 - Algoritmi

O decizie de tip da / nu (yes/no) reprezint5 o instructiune care alege urmatoarea instructiune


de executat. Acest lucru se realizeaz5 in funcfie de r5spunsul pozitiv sau negativ introdris de
utilizator.

Exemplu: A]teptarea ca un cuptor sd se tncdlzeascd


inainte de a adauga amestecul de ingrediente in cuptor, cuptorul trebuie sa flo inCalzit la
temperatura potrivita. Un algoritm ar putea include o decizie da/nu pentru a determina acest lucru.
.'Cuptorul este la temperatura potrivit5?'' Un termostat va fumiza r5spunsul (da sau nu). Dac5
r5spunsul este da, atunci pr5jitura poate fl intrOduSa la CuPtOr. Dac5 raspunsul este nu, algoritmul
va mai a;tepta o perioad5 ;i va pune din nou intrebarea.

3.2 METODE DE REPREZENTARE A UNEI PROBLEME

I) Concepte

2 tehnici care ii ajuta pe programatori in scrierea programelor sunt pseudocodu1?i schemele


logice (flowcllart). Acestea sunt utilizate pentru reprezentarea secventei de pa;i din cadrul unui
algoritm. Algoritmii exprimati in pseudocod sau sub forma schemelor logice sunt rareori suflCient
de preci;i pentru a putea fl utiliZati de un computer, dar PreZint5 o serie de pa;i suflCient de in
detaliu astfel incat un programator s5 poata intelege modul in care ar trebui s5 functioneze
algoritmul respectiv.

Pseudocod:

Un pseudocod reprezint5 o modalitate informal5 de reprezentare a unui algoritm, utilizand


instructiuni scrise intr-un limbaj natural, ca de exemplu Engleza. Pa;ii din cadrul algoritmului sunt
scrisi sub forma unei secvente de instructiuni. Un algoritm scris ca pseudocod este destinat mai
curand sa fle Citit de Oameni deCat de un COmPuter.

Pseudocodul arata ca un cod in care programul va fl scris, ins5 nu este atat de precis. Dac5
pseudocodul poate fl in!eleS, atunCi urmatOrul pas este scrierea efectiva a codului din program.

Un algoritm pentru perierea din!ilor, scris in pseudocod, ar putea ar5ta a;a:

Puneti pasta pe periut5


Periati dintii din dreapta sus
Periati dintii din dreaptajos
Periati dintii din stanga sus
Periati dintii din stanga jos
STOP

27
Capitolul 3 - Algoritmi ECDL Computing

Schema logic5 (flowchart)

O schema logica reprezinta o modalitate graflCa de rePreZentare a unui algoritm. Schemele


logice ilustreaz5 o serie de pa;i simpli folosind sagefi care s5 indice progresul de la un pas la altu1.
Pa;ii sunt reprezentati utilizand blocuri de text de diverse forme. O schema logic5 reprezint5 un
instrument fundamental utilizat in dezvoltarea unui program. Ea permite programatorilor sa
evidentieze, pas cu pas, Gum doresc ei sa rezolve o problem5 sau cum si-ar dori s5 functioneze un
Program.

Algoritmul pentru perierea dintilor ar putea fl rePreZentat Si Sub fOrma unei scheme logice:

Schema logicd penlru perierea dintilor

28
ECDL Computing CapitoluI 3 - Algoritmi

3.3 SCHEME LOGICE

B Concepte

Mai jos sunt prezentate cateva forme de blocuri utilizate in cadrul unei scheme logice:

Nu

Sta rt/Stop proces IntrareITesire Decizie

Simbolurile unei scheme logice

Blocurile reprezint5 urmatoarele :


Start sau Stop
Algoritmul pomeste de la caseta Start ;i ruleaza pana ajunge la caseta Stop.

Proces
Aceste blocuri contin instructiuni simple pentru a executa o actiune, cum ar fi adunarea a
2 numere sau cautarea unui cuvant in dictionar.

Intrare sau ie;ire


Aceste blocuri sunt destinate interactiunii cu lumea exterioar5 computerului. Spre
exemplu, o intrare ar putea fl de la un senzor de temperatur5. O iesire ar putea fl O aCtiune
precum aprinderea sau stingerea unei lumini.

Decizie
Blocurile de decizie permit alegeri altemative privind pa;ii urmatori pe care algoritmul
trebuie sa ii execute. Ele de obicei contin o intrebare cu 2 variante de r5spuns: da si nu.
Daca raspunsul este cda, se urmeaza un anumit scenariu. Dac5 raspunsul este ¢nu', se
urmeaza alt scenariu. Aceasta este metoda prim care algoritmii pot merge dincolo de
secventele simple de pa;i.

Conectarea blocurilor

Exist5 inca 2 simboluri aditionale in cadrul unei scheme logice:

Sfigcatd a onector

Sagetile si conectorii sunt folositi pentru a conecta blocurile din cadrul unei scheme logice.

Sageata
O linie directionala desenata pentru a conecta 2 blocuri in cadrul unei scheme logice.
Aceast5 sageat5 indic5 directia de urmat in cadrul unui algoritm. De obicei, acestea sunt

29
Capitolul 3 - Algoritmi ECDL Computing

denumite linii de flux. De exemplu, instruc[iunile din cadrul unei secvente contin s5ge[i
intreele.

Un mic cerc in cadrul unei scheme logice este utilizat pentru a conecta dou5 linii de flux
intre ele. El indic5 un salt de la un punct din proces la altul, ca de exemplu atunci cand se
raspunde la o intrebare cDaINu,,.

E Conector
Pasi
Exemplu: Schema logicd pentru ITrucul Magic 347347l

Schema logicd pentru un true numeric

Aceasta este schema logica pentru un truc magic cu numere. Ea ilustreaz5 o simpla secventa
de instructiuni, far5 blocuri de decizie. Se pome;te procesul de la blocul Start si se continua urmand
liniile de flux, executand instruc[iunile din fleCare bloc, pan5 se ajunge la blocul Stop.

30
ECDL Computing CapitoluL 3 - Algoritmi

Exemplu: Schema logicd pentru coacerea unei prdjituri

Aceast5 schema logic5 reprezinta un algoritm de coacere a unei pr5jituri. Ea contine un bloc
de decizie. Acesta determina daca prajitura poate fl SCOaSa din CuPtOr Sau, daC5 nu, il instruie;te pe
bucatar sa a;tepte pana cand pr5jitura este gata ;i poate fl scoas5 din cuptor.
cTr5jitura este coapt5?'' reprezint5 o data de intrare in cadrul algoritmului si este reprezentata

printr-un bloc de intrare/ie?ire.

Schema logicd pentru coacerea unei prdj lturi

Exemplu: Schema logicd pentru alegerea unui joc pe telef;onul mobil

Aceasta schema logica arata secventa de actiuni pentru a alege un joe pe telefonul mobil.
Fiecare bloc in forma de romb confine care o intrebare. Raspunsul la intrebare poate fl da Sau nu.
Raspunsul determin5 ce bloc urmeaza.

3l
Capitolul 3 - Algoritmi ECDL Computing

EE teiefonul mobil

_REF _

`l\.:I .:..

is Nu
ffliErmv-H
E
`\ Da
E
/rf-
•rf vrelsa
Vrelsdtre¢l
`.~\. _ /#
fyJ`)(fty``
`'``~~

\
Apllcatia este
buna?
`
p=a.tl:aaj##;A, gut,a-I, ban,`, \€
.. I

/% c`,.` /

'.,`,_
Ei
/ iEEHE ii=H-ti

rf
STOP

Schema logicd pentru alegerea unui joc pe telef;onul mobil

Exemplu: Schernd logicd pentru trezirea dimineata

Creati o schema logic5 pentru a va trezi dimineata, a lua micul dejun ;i a pleca la scoala.

INDICII:
1. Pomiti cu o secventa de actiuni si scrieti acei pa?i ca pseucocod) sub forma unei lisle
numerotate.
2. Luati anumi!i pa;i si descompuneti-I in pa;i mai mici. De exemplu, daca aveti un pas numit
6pregate;te micul dejun, - acesta poate fi divizat in pa;i mai mici precum "pune painea in prajitor,,.
3. Reprezenta[i aceast5 secventa mai detaliat5 sub forma unei scheme logice.
4. Faceti schema logica mai interesamt5 prim introducerea variatiilor. De exemplu, Gum
afecteaz5 vremea drumul c5tre scoala? Variatiile pot depinde de intrebati precum:
I Ploua?
® intarzii la scoala?
5. Adfugati blocuri de decizie pentru flecare dintre aceste intrebari, cu diferi!i pa?i dac5
raspunsul este da sau nu.

32
ECDL Computing Capitolul 3 - A]goritmi

3.4 PSEUDOCOD

I) Concepte

In loo s5 creati o schema logica, un algoritm poate fi reprezentat ln pseudocod.


Pseudocod reprezinta o modalitate de a scrie in mod imformal modul de operare al unui
algoritm. El combina limbajul natural informal (e.g. Engleza) cu portiuni din structura limbajelor
de programare.

Exemplu: Pseudocod pentru 'Trucul Magic' 347 347

Schema logic5 pentru trucul numeric magic ar putea fi scris5 sub forma de pseudocod astfel:
Ganditi-va la un num5r de 3 cifre precum 347
scrieti' numinl de 2 ori pentru a obtine un numar de 6 cifre (ex: 347347)
I^mp5rtiti-I la 1 3
imparti;i-1 1a 1 1
fmparti[i-1 la 7
Ar trebui s5 obtineti numarul ales initial.
STOP

Exemplu: Pseudocod pentru coacerea unei prdjituri

Pseudocodul pentru coacerea unei pr5jituri este prezentat mat jos:

inc5lzi!i cuptoru1 1a 1 800c


Amesteca[i ingredientele
Introduceti praj itura in cuptor
Verificati dac5 prajitura este coapt5 sau nu
A?teptati
Scoate!i prajitura din cuptor
STOP

Pseudocodul este scris utilizand structura si anumite conventii din limbajele de programare.
Cuvantul cA;tepta[i, este indentat, ceea ce indic5 c5 aceasta ac[iune are loc doar daca pr5jitura nu
estecoapta.

3.5 REMEDIEREA ERORILOR DIN ALGORITMI

I) Concepte

La scrierea algoritmilor) este usor sa faceti gre;elf precum omiterea anumitor pa;i, asezarea
pa;ilor lntr-o ordine gre;it5 sau efectuarea de decizii incorecte. Aceste erori trebuie corectate.
Regasiti maijos cateva erori si modul in care le puteti remedia.

33
Capitolul 3 - Algoritmi ECDL Computing

1. Secvent£ incorecta de instructiuni

Scrierea instructiunilor intr-o ordine gre;it5 poarta numele de secvent5 incorecta.


Iata mai jog un algoritm pentru perierea dintilor, scris in pseudocod. Instructiunile sunt intr-o
ordine gre;ita. Algoritmul poate fl reParat Prim mutarea aCtiunii CPune pasta pe periut5' in capul
listei.
Perie dintii din dreapta sus
Perie dintii din dreapta jos
Perie dintii din stanga sus
Perie dintii din stanga jos
Pune pasta pe periut5
STOP

2. Rezultat incorect

lata mai jos un algoritm pentru coacerea unei prajituri si scoaterea ei din cuptor doar atunci
cand este coapt5 ;i nu inainte.
inc51ziti cuptoru1 1a 1 800c
Amestecati ingredientele
Introduceti pr5j itura in cuptor
Prajitura este coapt5?
A;teptati
Scoateti prajitura din cuptor
STOP

Decizia de a a;tepta ar putea fi gre;it5 intrucat nu exist5 niciun test de veriflcare a gradului de
coacere a pr5jiturii. Pentru a corecta un posibil rezultat incorect, este necesara o linie in plus in
cadrul pseudocodului :

fncalzi[i cuptorul la 1 800c


Amestecati ingredientele
Introduceti pr5j itura in cuptor
Testati cu furculita
Prajitura este coapt5?
A!teptati
Scoateti prajitura din cuptor
STOP

3. Lipsa unui element din program

Iat5 mat jos un algoritm pentru coacerea unei prajituri, din care lipsesc anumiti pa;i importatryi.

fncalziti cuptorul la 1 800c.


A;teptati s5 se incinga cuptoru1.
Scoateti praj itura din cuptor.
STOP

34
ECDL Computing Capitolul 3 - Algoritmi

Algoritmul poate fl remedial Prim adfugarea Pa;ilor lips5:

inc5lziti cuptorul la 1 800c.


Amesteca[i ingredientele
Puneti ingredientele in tava de copt
A;tepta[i s5 se incing5 cuptorul
Introduceti pr5j itura in cuptor
A;teptapi s5 se coaca prajitura
Scoate[i praj itura din cuptor
STOP

3.6 EXERCITII RECAPITULATIVE


9

1. O secvent5 reprezint5:
a. Un numar de instructiuni ce pot fl eXeCutate in OriCe Ordine.
b. Un numat de instructiuni ce ar trebui executate in ordine, una dupa cealalt5.
c. O analiz5 a unei probleme ce trebuie rezolvat5.
d. O colectie de recomand5ri pentru imbunatatirea unui program.

2. Care dintre urmatoarele nu reprezint5 un algoritm?


a. Un program.
b. O schema logic5.
c. Unpseudocod.
d. Pseudostiinta.

3. Potriviti um15toarele simboluri cu numele lor:

(a) (b) (c) (a)


-.-. \ `
( e) (fl

Sageata
Decizie
Start sau Stop
Proces
Intrare sau iesire
Conector

35
Capitolul 3 - Algoritmi ECDL Computing

4. in pseudocodul de mat jos, ce instructiune este executata imediat dup5 cAmesteca[i


ingredientele '?
incalzi[i cuptoru1 1a 1 800c
Amestecati ingredientele
Introduce[i pr5j itura in cuptor
VeriflCati daCa Prajitura eSte COaPta ;i daC5 nu este
A?tepta!i
Scoateti praj itura din cuptor

STOP

a. STOP
b. A;teptati
c. Scoateti turta dulce din cuptor
d. Introduceti prajitura in cuptor

5. Urmatorul program trebuie s5 evacueze apa dintr-o ma;in5 de sp5lat. Ce eroare confine?

Porne;te pompa de evacuare a apei


VeriflC5 nivelul apei
Daca nu mai exist5 apa
A?teptati
Opriti pompa de evacuare
STOP

a. Instructiune lips5
b. Secvent5 incorecta
c. Rezultat incorect
d. Indentare incorecta

36
CAPITOLUL 4 -
PROGRAMARE

La finalul acestui capitol, ve[i putea sa:

. Pomiti si sarulati un program

. Introduceti cod intr-un program

. Creati si sa salvati un program

. Deschideti si s5 rulati un program


Capitolul 4 - Programare ECDL Computing

4.1 INTRODUCERE fN PYTHON

E Concepte

Acest material utilizeaza Python, un limbaj de programare flexibil si utilizat pe scara larg5, cu
ajutorul cinlia se pot crea programe simple sau complexe. Python ruleaza mai repede decat
majoritatea limbajelor de programare. fn plus, Python ofera un set complet de comenzi ;i
instructiuni.
Acest material utilizeaza mediul de programare Python IDLE, care permite scrierea, editarea
si rularea de cod, precum si salvarea programelor sub forma unor flSiere Ce pot fl utiliZate ulterior.
El incoaporeaza si un interpretor - Python Shell.
python este denumit un limbaj de programare interactiv, ceea ce inseamna c5 in momentul in
care utilizatorul introduce o comand5, sistemul o evalueaza, o executa si aflSeaZa reZultatul.
in programare, apare pe ecan un cursor pentru a demonstra faptul c5 utilizatorul poate introduce
date. cursorul const5 in 3 caractere ===. in momentul aparitiei acestora pe ecran, puteti incepe
tastarea codului.

4.2 EXPLORARE PYTHON

I) Concepte

Lansare Python
1. Localizati pictograma Python Shell aflat5 pe ecranul de lucru (Desktop).

2. Executati dublu click pe pictogram5. Pe ecran va apirea o fereastr5 interactiva, asa


cum este prezentat mai jos:

?A,
Fl'tf a_i(t I_-b)i
I) tut '\-/rl`Y,3' + rl-i,i

3. Executati click stinga dupa cursoru1 >>>. Acesta reprezinta semnalul ca puteti
introduce cod sau intructiuni pe care Python sa le ruleze.

F::'e:dh:nSshhe::, Debug Opt,ons ,,¥md.,`ng He,p - I X i

38
ECDL Computing Capitolul 4 - Programare

4. Tastati print(66First Steps in Coding'')

7i,.- ,I.-,,"I I,,,,,)

F«e Edit Shell Debug Options V/ir\dows Help

P}.chon 3.2.3 (default" Ap= ll 2O12, O7:15:29) i!-rsC v.150rL/ 32 bit, (Ince|)i
S2
ripe "copyright", ncredltSn Or "license() n for m.Ore lnfO-r!r.aC=erT..
>>> r_-_-i-_I ("E'=r=-I I-==E=- -_:i I-==:I_i"I)

5. Apasati tasta Enter.

/A

Cll'_ _I-\[ _`.t-_ i,cL|J_I


:i-.i .I..i::(L+..-S H€(l=

Pyt.hor1. 3.2.3 (default, Ap= =1 2O12, €l7:|S:2€) [MSC t7.|5a$ 32 bit, (Ir\.cei)i or?. h'irT.
32
Type ncopy=ighc", ncredies" ±= nilcer:se I) " fo-- IT.Ore iZT.fOrmaCiOr..
>>> r=T=.:--I.I("r|='=_-I I_==i::i i:-i I_-i_r.=r')
Flrat St=ep3 i=. Ccd=zl-a
>>>

6. Vizualizati rezultatu1.
7. Ap5sati butonul X pentru a inchide fereastra.

Cum functioneaza programul


. in exemplul anterior, python a interpretat?i executat codul care ii indica sa aflseze
pe ecran textul aflat intre ghilimele.
. Rezultatul este aflSarea Pe eCran a teXtului First Steps in Coding.
. in python, comanda print() este utilizata pentru a aflsa informatii pe ecran.

S5 incerc5m alt5 instruc!iune:


1. Localizati pictograma Python Shell aflat5 pe ecranul de lucru (Desktop).

2. Executati dublu click pe pictograma. Pe ecran va ap5rea o fereastra interactiva, asa


Gum este prezentat mai jos:

?A,( Jl-

i:lL- i-.1?i <llI=l( !!C'l"Cl 'i3pl:l`r.= ,;'`llt``\ tl¢-ll,

prt,nan. a.2.3 (ae£a.d|t., Apr iZ 2Oi2, O7:=S:<^3) [:iSC v.=SO,. 32 b=c (=ace1)I en
32
I.JTPe nCOP.J=igh.C®, "Credits" Or "|iCer\.Se() ll fag nOre ==.fC`-rmaCiC)rt..
>>>

n Ca 4

3. Executati click stinga dupa cursorul >>>. Acesta reprezint5 semnalul ca puteti
introduce cod sau intructiuni pe care Python sa le ruleze.

39
Capitolul 4 - Programare ECDL Computing

7¥ P}*hon Shell _ g x i
File Edit Shell Debug Options _Windo++,a Help

4. Tastati asdf

PtJ- -

F/` i(1' t/l`/Ci Lc:L`1A`J `1r I(I(` n+=`,

PycH.on La.2.3 (default, Apr i1 2O12, O7:15:2€) i2.rsC v.150O 32 blc (Intei)I on win3Z
Tlree "caplj,=ightn, ||credlCS" Or W|icer.se() m for m.c.re lz`fc)rmat,lc)n.
>>> a3df

5. Ap5satitastaEnter
6. Vizualizati rezultatul. fn acest exemplu, Python nu intelege literele asdf. Observati
cele 4 randuri scrise cu culoarea rosie. Python afiseaz5 mesaje de eroare atunci
cand nu in!elege textul introdus de utilizator. fn mod normal, ultima linie a mesajului
de eroare confine cele mai utile informatii despre eroarea respectiv5, in acest caz "
casdf is not defined " (C 6asdf nu este definit ,,).

Pyctt.c}z` 3.2.3 (de£EiuiC, aPr i1 2O12, O7:i5:24) (MSC.7.i5,3O 32 bLC (Ince|); Qn liln32
rsxpe "copyrighc", ncrecllCSn Or "llCer.Se()fl for mere ir.ferrrat;|Or\..
>>> a9dg
I->a=eb,ask I,-Tr.=)3+, ref:er_I_ Call ia_otI :
f=|= v<I=l},L3`'r.±|-.-,-"- , --..- i, ir: =r--.I-Li.i:|la=
6gCif
_t!E|r.re£i~±.a_v: I.,=n._a I a=C±f I =S r'CIC Cie=_|r_eCI

>>>

7. Apasati butonul X pentru a inchide fereastra.

4.3 SALVAREA UNUI PROGRAM

E Concepte

Atunci cand scrieti un cod, este recomandabil s5 il salvati astfel incat s5 il puteti reutiliza
ulterior. Extensia f1;ierelOr Python este.py. Aceasta extensie anunt5 calculatorul c5 acest flSier
reprezinta un program Python, ca de exemplu MagicTrick.py.

Crearea si salvarea unui program


1. Deschideti aplicatia Python. Executati click pe meniul File, New Window.

40
ECDL Computing Capito]ul 4 - Programare

Ftle Edlt Shell D=bug Options 'l',rrt`dous "p

I i| 3i|2, OT:='i:33\ [|LSC ',.15|||| 32 bit (I=,ce|)ier. b'i=. J

Open-I ctr!+ a a?I e= "iice``.`.a r\ a Sc= I_c=e |=.germJ}¢aea`


Recent Files

Open r.1edule". lit+M


ClassBr|.k\,set Aft+C
Path Brc±\sel

Sat,I Ctr!+ S

S¢|,a As".

Sd`,a Copy A¥."


Ctll+Shlft+ S

lit+Shife+S I
•|n. 3 I-okJ

2. Este creat5 o nou5 fereastr5, far5 denumire. Executati click in zona mare alba a
ferestrei.

File Edit Format Rlln Options \\''illdows Help

I
(

3. Introduceti urmatorul text ;i apoi apasati tasta Enter.

print('do my work for me')

File Edit Format Run Optiol.a Windous Help

t=.i-==.l: ( - I 1
+riT

ln; I Col: I:

4. Executati click pe meniul File, Save As si observati aparitia unei ferestre de dialog.
Remarcati urm5toarele:

. Locatia implicita de salvare a fl;ierelor Python este Python 32. Pentru moment
poate fl fOIOSit5 aceasta, ins5 o puteti modiflCa, in funCtie de dOrin[ele dVS.
. Tipul de fisier implicit este Python files (*py,*pyw)

T\*,I SB..eAs xl

sav¢ln r--i-t#fi2J_-_-'~-®-L----alA- -- I--+i I , B] ei. EE.

Name Oate mod(i(ed T!pe

lT,1O,2016 ll:31 Fl!€ fcld€J


Quth ®cccsS
17,lil/=O16 1l:3t File fclde,

l` ` d lT/lO,!01611:3l Fll€ folder

I?1C,:O1611:31 Fl!e folder


besktap
lr/1Cr/:||I6 I1:31 flle felde7

1?,1C 2|'Jl61i;31 File f¢ld€r

Lbranes :::::::. 1?/1O tu`1611:31 Fliefe)der I

I-.!

ThS PC

. -'~ : giv

Nct\\.o*

< >

fro nape I_-I- - I- lTi ._ji:,... _i


save aSt)pe #ih_ai'i:!JSl:'pT,I,_.T¥.:,i_ - ' - -__-__i-:I _c"_needJ

4l
Capitolul 4 - Programare ECDL Computing

5. fn caseta File name, tastati numele fi?ierului Trylt.py.

6. Executati click pe butonul Save.

Fcmma± ELn O£dic}ns "JndlO:rrs REeEp

-_-= I-_= --_ )

ul)

Ln2CdD

7. Remarcati ca numele ferestrei va fl modificat in Trylt.py'. Acesta indic5 numele


programului sau flSierului.

8. Ap5sati butonul X pentru a inchide fereastra ;i programu1.

Deschiderea ;i rularea unui program existent


1. Deschideti aplica[ia Python

2. Executa[i clickpe meniul File, Open.

IEL5C v-|5DD 32 b|-_ /IrJt;ei)) =C lnJI =i

F- rmkS
CffinMeduh. A(#+m
9lj!=fro)I);A,Gr 4jlt+G

Pffirg froeer

3. In fereastra ap5rut5 pe ecran, selectati numele flsierului 6Trylt.py" sau tastati-I in


caseta File name.
7'}, CJ'xp X

Leck g`. T~-ftiffi& I(I ,-@ff-E'


t`ha£ Date medrfjed TJP£

rJut 2ffi3CXse D|Le 17/lO/2O16 1 1:31 Ej]e fGtd£J

Dc€ 17/1O/Ze16 1 1:31 Fite fokler


include 17/1®/2O16 ll:31 rme folder

Deca9S LID 1?/lO€016 ll:31 Ftle folrfer


tire 17/1O/ZO16 ll:31 F|le foldeJ
td 17/1O/2O16 ll..S1 Flte folder
T®®ts 17/1O/aO16 ll:31 Fie fo!def
ra.TfJra er /O1/aO1 7 Oe..Era Pgivco FZ1

::::`.I;il
< >

ife rjzne -
r_u,.- _ ho-
=a ::-_TjiT_::i
fdcac{ue. ffi#rS'._ri£j~__ Cared

4. Apasapi butonul Open. Programul salvat se va deschide.

File Edit format RljJ! OptiDJIS WdJldOus Hdp


I,=1r|t/ L ~-I ' - - j

42
ECDL Computing Capitolul 4 - Programare

5. Pentru rularea programului executati click pe meniul Run existent in bara de


meniu ;i apoi selecta!i op!iunea Run Module:

7g Trpejrty - as
F3fe Edi fa-ff EL 'rfu-rfu,lug hike

a,frorH 5heiJ

Ch=|± hiodu7£ ifer1

I=

6. La rularea programului, iata ce ar trebui s5 se aflSeZe Pe eCran.

7. O alta modalitate de a rula un program este prim apasarea tastei F5. Inchideti
fereastra de rezultat prim ap5sarea butonul X aflat in coltul din dreapta sus. Reveniti
in program ;i ap5sati tasta F5 pentru rularea programului. Vizualiza[i rezultatele.

4.4 EXERCITII RECAPITULATIVE


?

1. Cum rulati un program in Python?

a. Tastati textul run.


b' Apasa[i tasta F5.
a. Tastati textul go.
d. Tastati textul start.

43
CAPITOLUL 5 -
EFECTUAREA CALCULELOR

La finalul acestui capitol, veti putea s5:

. Recunoasteti si sa utilizati operatorii aritmetici +,-,* si /

. Cunoa;te[i modul in care parantezele afecteaza evaluarea expresiilor


matematice
. in!elege[i ;i aplicati ordinea operatorilor in cadrul expresiilor complexe

. intelegeti cum s5 utiliza[i parantezele pentru a structura expresiile complexe


ECDL Computing Capitolul 5 - Efectuarea calculelor

5.1 EFECTUAREA CALCULELOR fN PYTHON

D Concepte

Operatori
Ca si majoritatea limbajelor de programare, Python poate efectua calcule matematice sau poate
evalua expresii matematice, Gum ar fl:

lO+12+15.

El utlizeaz5 simbolul * pentru inmul[ire si simbolul / pentru imp5rtire in locul simbolurilor x


si+.

NOTATI E SEMNIFICATIE

3*4 3 inmultit cu 4

3/4 3 imp5r!it la 4

3+4 3 plus4

3-4 3 minus 4

inpython:

7 inmul[it cu 9 este scris 7 * 9


63 imp5rtit la 3 este scris 63 / 3

Spa[iile dintre numere sunt optionale si 7*9 va func[iona la fel de bine ca ;i 7 * 9.


Simbolurile matematice *, /, + si -, utilizate in programare pentru efectuarea calculelor poarta
nunele de operatori.

Paranteze
Expresiile matematice in Python pot confine de asemenea paranteze, ca de exemplu:
io-(6-4)

Dac5 evalu5m expresia de la stanga la dreapta, ignorand parantezele, solutia ar f1 0.


10-(6-4)-0

Totu;i, acest r5spuns este incorect.


parantezele indic5 ce anume trebuie calculat intai. fn Python, ca si in matematic5, ceea ce este
trecut intre paranteze este calculat mai intai. pentru evaluarea un:i expresii de felu1 10-(6-4),
Python o divizeaza astfel:
intai: 6-4-2

Apoi: 10-2-8

Deci, I 0-(6-4)-8

45
Capitolul 5 - Efectuarea calculelor ECDL Computing

5.2 ORDINEA OPERATORILOR

E3 Concepte
Atunci cand exista paranteze in cadrul unei expresii, este clar pentru Python in ce ordine trebuie
sa calculeze expresia respectiv5. Atunci cand nu exist5 paranteze, exista o ordine acceptata a
operafiilor. O regu15 a limbajului formal determina ordinea de aplicare a operatorilor. Aceasta
regu15 poart5 denumirea de Prioritatea Operatorilor. in majoritatea limbajelor de programare,
secventa sau ordinea in care operatorii sunt aplicati este inmultire, imp5rtire, adunare, sc5dere'
Operatorii * si / sunt aplicati inaintea operatorilor + si -.

Iat5 mai jos cateva exemple:


1+7+2+3

1+7- 8, 8+2- 10, 10+3 - 13 r5spunscorect: 13

2*2*3+4

2*2 -4,4*3 - 12, 12+4- 16 r5spunscorect: 16

4+3*2-?

Ati putea crede c5 r5spunsul corect este 14, pentru c5:


4+3-7,7*2-14

Totu;i, avand in vedere ordinea operatorilor, inmultirea este efectuat5 prima. 4+3*2 este
calculat5 exact ca si cum ar fl fost scris5 sub forma 4+(3*2). Ca urmare:
4+(3*2) I 4+6, ;i 4+6 - 10 raspuns corect: 10

31*7+112*2

Cele 2 inmul[iri sunt efectuate primele ;i apoi operatia de adunare.


31*7+l12*2 -217+224 si217+224-441

Utilizarea Python ca si Calculator


Efectuati acelea;i calcule ca in sectiunea precedent5, dar de aceast5 data utilizind Python:

1. Deschideti aplicatia Python. Executati click dup5 cursorul >==.

Flile Edift Sham Debug ®grchens Wimtioous ifeHp

g`rLhen a.a.a (aefault. 3lp3: ii aOri, a?:_li_:i_e_)____I_is_i_ 5_.is66 _sa__aiiiii€_erri- on win i.J;
Sa
It17Pe "C;C!P`Jrigh-um, twCredit,SH a)-i. |*|l=ense () " f@-r mD]re info:gmat,iC)a_
•--,I
(

th 3 Cdi.4;

2. Tastati expresiile (calculele). Apasati tasta Enter dup5 ce ati terminat de introdus fiecare
expresie.

46
ECDL Computing Capitolul 5 - Efectuarea calculelor

Fl!e a+ill She!i Debug eL,tle1`S l\?mdel\-,a Help

Sy-*.er, I..I._.. 'aeea.a-_I. ig=._1_ =I-1=. I-:1e3=+I tt,Z|=C.I.1S,.r_, ::.2 ten_t l==.E._-_I-. a-i_ +-I-i:. I
+++
I-\xpa "l=exp:Ji'atii'vh'=n`` "¢`_`±a`_=_!n a-= n-`Ji--=¢e=.€e ( : Tl :€t`= =.t=-`=`e -`I=`geEB'at±e.=_`
_`>> _i-2+``'-il
I \

>`` 2t2I`i+i

>>> i--:..i

>',> $1+I+_'d=2'2

iEI

tn i3
I
Ce!,J'

3. Veriflcati rezultatele.

Exemplu: Calcularea costurilor pentru givleti cu vopsea

Daca 1 litru de vopsea rosie cost5 3l€ si 1 1itru de vopsea aurie costa 112€, atunci costul a 7
litri de vopsea rosie si 2 litri de vopsea aurie poate fl calculat astfel:
31*7+112*2

in acest caz, se poate observa ca este important sa se calculeze intai costul pe flecare culoare
;i apoi sa se obtina costul total.
A;adar, (3 l*7)+(1 12*2) ofera pretryl total corect.
Parantezele nu sunt necesare in acest caz datorita ordinii operatiilor.
Totu;i, puteti ad5uga oricand paranteze suplimentare in cadru1 'unei expresii pentru a modiflCa
ordinea operatiilor. Parantezele au prioritate asupra oric5rei reguli legate de ordinea operatiilor.

5.3 EXERCITII RECAPITULATIVE


?

1. Cum convingeti Python s5 evalueze o expresie?


a. Tastati levaluatel, ;i apoi scrieti expresia.
b. Diviz;ti intai expresia in parti mai mici.
c. Tastati expresia dupa cursorul =>>
d. Folosifi mai curand un calculator de birou.

2. Care dintre urm5toarele expresii este utilizat5 pentru a inmulti 2 numere in Python?
a. 4+7
b. 4x7
c. 4#7
d. 4*7

3. Evaluati expresia 3 *4*2+8 utilizand regula de Ordine (Prioritate) a Operatorilor si


selectati de mai jos r5spunsul corect:
a.24
b.32
c.104

d.120

47
CAPITOLUL 6 -
VARIABILE SI TIPURI DE DATE

La flnalul acestui capitol, veti putea s5:

. Utilizati diferite tipuri de date: sir de caractere (string)) caracter (character),


numar ;ntreg (integer), numar real (float), boolean

. Definiti termenul de variabil5 si s5 evidentiati scopul unei variabile in cadrul


unui program.

a Definiti si initializati o variabil5

. Atribuiti o valoare unei variabile

. Utilizati date introduse de utilizator intr-un program

. Utilizati datele de ie;ire dintr-un program, aflSate Pe monitor


ECDL Computing CapitoluI 6 - Variabile ;i tipuri de date

6.1 TIPURI DE DATE

I) Concepte

in programare sunt utilizate toate tipurile de date pentru rezolvarea problemelor ;i generarea
informatiilor. Tipul de date determin5 modul de stocare a acestora in memoria calculatorului,
precum ;i operatiile care pot fl efectuate cu datele respective. Spre exemplu, varsta unei persoane
este stocat5 sub forma unui num5r si se pot efectua diverse calcule matematice pe baza ei, ca de
exemplu compararea ei cu varsta altor persoane. Iar numele unei persoanei este stocat ca si text.
in pyhon tipurile de date utilizate eel mai frecvent sunt: numar intreg (integer), nurilar real
(float), ;ir de caractere (string) ;i Boolean.
Majoritatea limbajelor de programare au tipuri de date standard, care difefa doar ca denumire.
De exemplu, tipul de date (string, (;ir de caractere) utilizat in Python este folosit in alte limbaje de
programare ca si tip de date 'character' (caracter). Tipul de date character poate fl utilizat de
asemenea pentrri a deflni litere sau caractere precum lal lbl lcl l@l etc.

Tipuri de date in Python


Num5r intreg (integer)
Descrie sau deflneste un numar intreg de orice dimensiune, pozitiv sau negativ, precum I , 3,
9,999,999, -712 sau 0.

Num5r real (float)


Descrie sau deflneste un num5r zecimal precum 1 1.456, -71.3, 29.0.
Numerele reale sunt utilizate de asemenea pentru a reprezenta numere foarte mari sau foarte
mici in notatii stiintiflCe. De exemplu, 5.Oe30, ceea ce inseamna 5 urmat de 30 de zerouri, sau 1.7e-
6 ceea ce inseamn5 0.000017, adica I.7 impartit la 1 urmat de 6 zerouri.

Sir de caractere (string)


Descrie sau deflneste o portiune de text sau un csir' de caractere. De exemplu, numele unei
persoane, precum cJohn Smith'. Valorile de tip String apar de obicei ca urmare a utiliz5rii comenzii
input().

Boo]ean
Descrie sau defmeste o valoare ce poate fl fle Adevarata, fle Falsa. Tipurile de date Booleene
pot avea intotdeauna doar aceste 2 valori. Valorile booleene sunt generate de obicei ca rezultat a
comparatiei numerelor intre ele.

De exemplu expresia:
3 < 4 retumeaza valoarea boolean5 True.

6.2 VARIABILE

D Concepte

O variabila este utilizat5 in cadrul unui cod pentru a reprezenta anumite date astfel incat
acestea s5 poat5 fl ulterior folosite de mai multe ori in cadrul unui program. O variabil5 reprezinta
un inlocuitor al valorilor actuale. Ea poate stoca valoarea ;i o poate p5stra pentru o utilizare
ulterioara.

49
Capitolul 6 - Variabile ;i tipuri de date ECDL Computing

Atribuirea unei valori unei variabile


O variabil5 poate reprezenta diferite tipuri de date sau valori, cum ar fl un num5r sau un sir de
caractere. fn cadrul codului trebuie sa speciflCati Ce ValOare Va rePreZenta Variabila - aCeSt luCru
este cunoscut sub denumirea de atribuirea unei valori unei variabile.
fn exemplul urmator, valoarea 3 este atribuita variabilei numite x.
x-3
in acest caz, de flecare data cand variabila x va fl utiliZat5 in cadrul programului, ea va
reprezenta valoarea 3.
o variabil5 poate stoca de asemenea si un sir de caractere, adica o colec[ie de caractere. in
exemplul urm5tor, valoarea Good Morning, ceea ce reprezinta un sir de caractere, este atribuita
variabilei numite Greeting.
Greeting - lGood Morning'

in acest caz, de fiecare data cand variabila Greeting va fl utiliZat5 in cadrul programului, ea va
reprezenta Good Morning. Dup5 atribuire, variabila numit5 Greeting poate fl utilizata in locul
sirului de caractere lGood Momingl.

Utilizarea comenzii Print() pentru afisarea unui rezultat

Python ail;eaZa Pe eCran COntinutul unei variabile, utilizand comanda print().


Asadar, in exemplul x-3
c;manda print( I ) va afl;a pe ecran valoarea 3.
Comanda print( x+2 ) va aflSa Pe eCran Valoarea 5.
?i in exemplul Greeting - lGood Momingl
Comanda print( Greeting ) va af1?a Pe eCran ValOarea lGood Morningl.

Deflnirea, Initializarea ;i Actualizarea Variabilelor

Definirea Variabilelor
Deflnirea unei Variabile inSeamn5 deflnirea in Cadrul codului a tipului de date pe care respectiva
variabil5 il va stoca, cum ar fl un numat (e.g. intreg' real) sau un sir de caractere. fn Python, acest
lucru se realizeaz5 prima data cand se atribuie o valoare unei variinile. Python determina faptul c5
variabila va stoca tipul de date al valorii atribuite.
Daca se asociaz5 num5ru1 (i.e. valoarea) variabilei x, Python va presupune c5 x va reprezenta
intotdeauna o valoare numerica.
x-3

Daca atribuiti ;irul de caracatere ccountry, variabilei q) Python va sti c5 q va reprezenta


intotdeauna un ;ir de caractere. Textul se incadreaz5 intre ghilimelele simple pentru a indica c5 este
vorba de un sir de caractere.
q-'country,

Orice caractere incluse intro ghilimele simple sunt considerate un sir de caractere, chiar si un
num5r. in exemplul de maijos, 12 este un sir de caractere si nu un num5r:
Age-(129

50
ECDL Computing Capitolul 6 - Variabile ;i tipuri de date

Initializarea Variabilelor
fnainte de utilizarea unei variabile, trebuie sa ii atribuiti o valoare initiala. Prima data cand se
atribuie o valoare unei variabile indic5 initializarea variabilei respective.
Dac5 incercati sa aplicati o comand5 unei variabile inaintea ca aceasta s5 fl fOSt initialiZat5,
veti primi un mesaj de eroare. fnainte ca o valoare s5 flo atribuita unei Variabile, variabila este
neinitializat5.

Actualizarea Variabilelor
Valoarea unei variabile poate fi actualizat5 prim atribuirea unei noi valori acesteia. Veti
actualiza variabila si automat ea va fi actualizat5 peste tot in cadrul programului, unde a fost
utilizata. Acesta este un motiv principal pentru care se utilizeaz5 variabilele intrucat este suflCienta
o singura actualizare care sa modiflCe mai multe aParitii ale Variabilei respective. O variabila
stocheaz5 intotdeauna cea mai recent5 valoare atribuit5 acesteia.

Se consider5 variabila x cu valoarea curent5 3. Valoarea atribuita poate fl mOdiflCat5 in 7 prim


introducerea codului :
TFJ

Comanda print( I ) va aflSa aCum Valoarea 7.


comanda print( I+2 ) va ;flSa aCum Valoarea 9.

Exemplu: Lucrul cu variabile


1. Deschideti aplicatiaPython.
2. inaintea initializaiii variabilei x, scrieti comanda print(x).
3. Observati mesajul de eroare.

File Ed:fa SaeNI Deing Options Windovus Help


Pythc)a S.3.3 (defaulc} AIE)I ll 2012, 07:|5=2i) [LiC v.|500 S2 bit (Inte|)I c}n
S2
ripe ncop}mlgnt.} -Credit;3" C)I "license () - for enOre lnfOrmatlOn.
>>> p=lnt( X )
TrE=CebaCk (mrJg-I reCer+I CE[1| |a=t) :
File: "<P-I,.3he1|#rJ=", 1lr;a i, i=- <1n-lOd±ie>
pr|F_I( X )
Nan,_eErrc,I: Tian_e I:+I |S r_Ct ±ef|Z-led

4. Initializati variabila x cu valoarea 3.


5. Int;oduc:ti din nou comanda print(x).

Deboug Ogiven= Winrfecos


python 5-2-S (defa`a|c, Spr || 20i2, 07=|5=24l [&asC v.|5DO S2 bit (Inte|)I on -a
32
Tixpe -cop.JrTlgn=n, Wcr±ait;sn cr -llCeaSE.()n for nape lnfO-aT;1Cn.
>>> pr|r_I_( a j
TraceL`,ask (mc,s-. =ecE=r-I Call |>L.3tt :
File "<p-I,gi--e||fi=rJ>n, llr.e i, =ri <n-,rJC1,ille>
pr|r\-I( x /
i:ameEr=c)I: I.an= l2,_I i3 I,.Ct Qe£|ned
>>> E-9
>>> pi-i_.1.i.: (a)

6. Actualizati variabila x la valoarea 7.


7. Aflsati noua valoare.

51
CapitoluI 6 - Variabile ;i tipuri de date ECDL Computing

file Edlie Shell Debt,g Op!lone I.d/lndt}JV: Help

=i 2J12" .J1:1S:24;I !!J(£C r.15.13 32 £=T. (=-Jte1)1 c=l i,I-i-1.

T±i2e ''u-af!±,=ig=--I., flC=e±ir-5fl I,I ~1ice=.5e i i ' fa-- na=e 12±Crf£ar.ie--..


>>> p=i=_cr a )
Trap,€'cacl|' l=_3`=-I =eCer_i- =E.=i =E;_=t , :
i_=1= T'cF-J7-i:--eliIO>r'7 ==r-e i, ir- Cr-==-=ie>
P=|r-tl 2:
:!a=eE_,i.a=: r_a== I:+I |=-I I_I,-_ 1ef|_-~=C:
>>> x--i
>=+i p-i+-I--i- /xl

>>> x-I
>>> cr1_-_I l¥\

6.3 DINCOLO DE NUMERE

I) Concepte

Lucrul cu siruri de caractere


Exact la fel cum adunam numere putem al5tura caractere sau siruri de caractere. Pentru a face
acest lucru in Python, puteti folosi simbolul +.
Spre exemplu, initializati variabila Name cu valoarea 6David» si variabila Question cu
valoarea 66What is your age?"
Name- 66David"

Question - 66l^That is your age 6+Name+?"

Acest lucru va retuma urmatorul rezultat:


(What is your age David?,

Remarcati spatiile libere in cadrul sirului de caractere. Daca nu se ad5uga spatiu la flnalul
sirului de caractere, atunci nu ar fl existat niciun spatiu intre acesta si numele persoanei, far
intrebarea ar fl aratat aStfe1:

(What is your ageDavid?'

Modificarea sirurilor de caractere in numere


uneori, un sir, de caractere trebuie convertit intr-un num5r (e.g. intreg sau real). De exemplu,
daca variabila Age este sirul de caractere c 12,,
Age-c12,

atunci Age +1 va retuna o eroare, intrucat nu se poate adfuga un num5r la un sir de caractere.
Pentru remedierea acestei erori, puteti converti variabila Age intr-un numar intreg astfe1 :
Age - int( Age )

Utilizarea comenzii Input() pentru introducerea datelor de catre utilizator


Puteti scrie un cod care sa solicite utilizatorului s5 introduca anumite informatii sub forma unui
sir de caractere) ca de exemplu numele lor.
fn python puteti utiliza comanda input() pentru a ruga utilizatorul s5 introduc5 un sir de
caractere.
Comanda input() este o instructiune in Python care solicit5 utilizatorului sa introduca o
anumita informatie, jar programul a;teapta pan5 cand informatia este introdus5.

52
ECDL Computing Capitolul 6 - Variabile ;i tipuri de date

Exemplu: 1ntroducerea unui nume ii afiSarea lui pe ecran.


1. Deschide!i aplicatia PytllOn Si Creati un nOu flSier.
2. Introduceti urm5torul cod.

- I X
I File Edit Format Run Options Windows Help
= JLr'P'Llt ('':'7:Lla= i:i I,I_-I_1,I I_iT.I.=:")

("-fr=,-i.I name la:", Name )

3. Rulati programul.
4. La intrebarea {.\\That is your name?" raspundeti tastand numele dvs.
5. Ap5sati tasta Enter.
6. Salvati programul cu numele Myname.py.

- I X
File Edit Shdl Debug Options Windows Help

pyt.nan 3.2.3 (default., Apr ll 2012, 07:15:24) [lasC +.-1Soo 32 bit. (=nt.el)I c)n vln I
32
Type "copyright,", "credit,5" Or "license()" fC)I more infOrmElt,iC)n.
}>> --------------- RETmT ---------
ls .I,Our narl,.a?Saran
Yc=u`_- rlam|e is: SarEl:n_
•>, I

7. Executati click pe butonul X pentru a inchide fereastra.

Cum functioneaz5 programul


. Utilizatorul este rugat sa introduc5 o valoare, in acest caz numele lui, prim utilizarea
comenzii input().
. Programul a;teapta introducerea informatiilor de c5tre utilizator.
. Variabila 6Name, este initializata pentru a stoca numele introdus de utilizator.
. comanda print() este utilizata pentru a af1;a Pe eCran teXtul.CYour name is:" urmat de
continutul variabilei 6Name?.

Exemplu: Lucrul cu Siruri de caractere

1. Deschideti flsierul salvat anterior, MyName.py, utilizand pa;ii inv5!ati anterior.


2. Modiflcati ex'emplul pentru a arata ca mai jos:

53
Capitolul 6 - Variabile ;i tipuri de date ECDL Computing

FiEE Edit F8;rma± Run Op5ians 'ljiPi;r!di®us HE!P

ITazre - i=.E-i-,t--r_._I-i-I i-= --I-- ----- ='¢


p='=---I-F'__T=_I ==|= i=-:7y. t,lane :i

uTr=est=iaJ= - __i-_---== == -I,== -=== - ElaLrE>- +


gij=e - i-TJPTL=t gQ-=es====.:i
p==:i-I-i_i-I--I i_== ==: _a -nge :I,

3. Rulati programu1.
4. R5spunde[i la prima intrebare ;i ap5sati tasta Enter.
5. R5spunde[i la a doua intrebare si apasati tasta Enter.

File Edife 5hei! Bebijg Bpftic;Frs T*ginE"lt5 Help


= L€STRAT

i-ci ,I,lTi== =-\in,--e'-? L-anLn


I,an-_a 1=-: |Ta*_-.
i,I:i_at i_i; 1'e'I1_I aL-fe LTD:-Jri|? ia
I.I,,,_I, acts i3: 1£
:-.a I

6. Modiflcati programul astfel

File Edit F8rmat Rxpn i=!pEi®n5 i)1¢lfimal®luc Help

=1`-_S=-Clr-r=== i-= _ === =-===i +'4

l=z'=:_JT:r-_-===- =_==_I ==-:To Nape )

a-JieSt-ir==J - -I_i_-=u= i= -=== ,-=== - liar-a i-


ll?+ge - i:I,3J`--rl ::£ueStla=:I
i_J=-=-I.I F--_I- -===- ==-: 'o Jlge :a

-hge - i--i: \fige(i


E=.i--r-I -=== :-=== --== --=i `==- -I. age-i:I

7. Rulati programul din nou.


8. R5spundeti la cele 2 intreb5ri.

EBebug B.peEams #,,mEes/.ve HEBp

` _`\
_lIJ!-|f!t 1_I ,_,,C'tl2=- rT<ci+TCef |Iete=

( ¥|l|:I n'alf_a 1_q: Pete=-


I i,I_let i_i .\rllT_..I, aCfe Fete=--. |5

I `1_)I_-|= t%LJ|e iS: |5I


I ills:kc i.ea= -i,-lT-rl=i ,Lie: =±

I >-`} I
)

9. Salvati si inchideti flSierul.

54
ECDL Computing Capitolul 6 - Variabile ii tipuri de date

6.4 EXERCITII RECAPITULATIVE

1. Care dintre urmatoarele aflrmatii deSPre Variabile eSte COreCt5?


a. Variabilele nu isi modiflCa niCiOdat5 valoarea.
b. Numele variabilei trebuie sa fie SCriS dOar Cu litere miCi.
c. Variabilele trebuie initializate cu valoare 0.
d. Uneori o variabila poate stoca o valoare booleana.

2. Care este scopul unei variabile?


a. Pentru a modiflCa mai u;Or PrOgramul Pe ViitOr.
b. Pentru a-i arata aplica[iei Python cum s5 combine 2 numere.
c. Pentru stocarea anumitor valori astfel incat acestea s5 poat5 fl reutiliZate ulterior in
cadrul programului.
d. Pentru asigurarea unei indentari corecte a codului surs5.

3. Care dintre urm5toarele instructiuni Python initializeaz5 o variabil5?


a. Initialise().
b. x-3.
c. start().
d. flnish().

4. in Python, daca o variabil5 numita length, are valoarea 200 si instructiunea length-400,
este executata, ce se va intampla?
a. Python va retuma un mesaj de eroare, intrucat nu se poate schimba valoarea unei
variabile.
b. Python va retuma un mesaj de eroare, intrucat nu puteti schimba valoarea 200 in
400.
a. Python va atribui valoarea 400 variabilei length.
d. Python va ad5uga 400 la valoarea variabilei length) aceasta avand acum valoarea
600.

5. in Python, functia input():


a. Este utilizat5 pentm a conecta la computer un stick de memorie
b. Poate fl utiliZat5 cu un cursor pentru a introduce datele mai uior sau far5 cursor
pentru a introduce datele mai diflcil.
c. Retumeaz5 un sir de caractere.
d. Trebuie sa fie Prima funCtie aPelat5 in cadrul unui program.

6. in Python, functia output()


a. Este utilizat5 daca se doreste schimbarea tipului de date
b. Este utilizata pentru afl;area unui rezultat
c. Este ultima comand5 din cadrul unui program.
d. Trebuie s5 fie Prima funCtie aPelata in Cadrul unui Program.

7. Un tip de date care confine doar 2 valori poart5 numele de


a. intreg (Integer)
b. Real(Float)
c. Sir de caractere (String)
d. Boolean

55
CAPITOLUL 7 -
ADEVARAT SAU PALS

La finalul acestui capitol, veti putea sa:

. Utilizati expresii Booleene in cadrul unui program

. Recunoa;teti tipurilor de expresii logice booleene pentru a genera o valoare


adev5rat5 sau falsa: -, >, <, >-, <-, - I- --, AND, OR, NOT
a ' 9

. Intelegeti ordinea operatorilor si ordinea de evaluare a expresiilor complexe


ECDL Computing Capitolul 7 - Adev5rat sau Pals

7.1 EXPRESII BOOLEENE

B Concepte

in viata de zi cu zi, veriflcati adesea dac5 o informatie este Adev5rat5 sau Fals5 inainte de
luarea unei decizii. Acest concept este folosit de asemenea si in cadrul programelor de calculator,
unde se veriflca dac5 anumite condi[ii sunt Adev5rate sau False inaintea stabilirii pa;ilor urmatori.
De exemplu:
Este frig afar5?
Adevarat (True) - iaii o hain5
Fals (False) - lasa haina acas5

Este coapta pr5j itura?


Adev5rat (True) - scoate-o din cuptor
Pals (False) - mai coace-o inca 5 minute ;i apoi veriflC5 iar

Adevdral sou Pals in scheme logice

fn cadrul unei scheme logice, veriflc5rile sau test5rile sunt reprezentate prim blocuri de decizie
cu rezultat Da (Yes) sau Nu (No).
Programele lucreaz5 cu rezultate Adevarat (True) ;i Pals (False) decat cu Da (Yes) ;i Nu
(No).True si False reprezint5 concepte importante in programare int"cat este necesara o modalitate
de a testa dac5 anumite conditii sunt indeplinite pentru a putea controla pa?ii urm5tori in cadrul
programului.
fn programare, acest test logic poart5 denumirea de expresie Boolean5. O expresie boolean5
determin5 o valoare boolean5 ce poate fi fle adev5rata, fle fals5.
O modalitate prin care Python utilizeaz5 expresiile booleene este s5 compare dimensiunea unei
valori numerice cu alt5 valoare si s5 retumeze un rezultat de tip 'True, sau 6False,. El executa acest
lucru utilizand un operator de iomparatie. Acesta compara cele 2 valori intre ele si decide rela;ia
lor. Uneori, ace;tia mai poarta numele de operatori relationali.
99>7

57
Capitolul 7 - Adev5rat sau Pals ECDL Computing

Aici, operatorul 6>' compara valorile 99 si 7 pentru a vedea dac5 valoarea din stanga este mai
mare decat valoarea din dreapta. Daca acest lucru este adevarat, el va retuma rezultatul True, in
caz contrar va retuma rezultatul False.
Asadar: 99 = 7 este Adevatat (True) far 6 > 7 este Fals (False).

7.2 0PERATORI DE COMPARATIE

I) Concepte

Operatorii de comparatie reprezinta un tip de expresii logice Booleene utilizate pentru a


compara valori si a decide daca rezultatul este adevarat sau fals.

Tabel al operatorilor de compara[ie

Exist5 6 operatori de comparatie. in tabelul de mat jos X si Y sunt variabile ce stocheaza valori
numerice:

NOTATIE SEMNIFICATIE

X>Y X este mai mare decat Y

X<Y X este mai mic decat Y

X>-- Y X este lnai mare sau egal cu Y

X=Y X este mai mic sauegal cu Y

X--- I Xeste egal CUY

X.I-- I X nueste egal CUY

Not5: Uncle limbaje de programare pot folosi operatoru1 <> pentru a desemna inegalitatea
dintre 2 valori ;i - pentru a desemna egalitatea. Python 3.x nu foloseste - si foloseste -- in loo
de-.

Exemplu: Operatori de comparafie


1. Deschide;i aplicatia Python.
2. Introduceti exemplele de mai jos pentru a veriflca c5 ati inteles cum se folosesc operatorii
de compara!ie.

58
ECDL Computing Capitolul 7 - Adevarat sau Pals

File Edit 5heli Debug Options /^indous Help

I_T te
>>> || i 12
FBI_Fie
>>> i:, <- ||
_i-ie
>>> i:. <- i.I
I=,Je
>>> |Cl i 1l'-1

__+__`____H
L" l46 Cckil

3. Construiti-v5 propriile exemple.

7.3 OPERATORI BOOLEENI

B Concepe

Operatorii booleeni sunt cuvintele ;i (and), sau (or), negatie (not), care sunt alte expresiile
logice Booleene utilizate pentru a combina valori Booleene precum Adevarat sau Fals in scopul
obtinerii unui rezultat final.
Exist5 3 tipuri de operatori Booleeni de baz5:
and
Combina 2 valori booleeme si retumeaza un rezultat - adevarat daca ambele valori sunt
adev5rate si fals in caz contrar

Expres ie Rerfultat
True and True True
True and False False
False and True False
False and False False

Or
Combin5 2 valori booleene si retumeaz5 un rezultat - Adev5rat dac5 una dintre valori este
adev5rata sau dac5 ambele valori sunt adevarate. Pals in caz contrar

Expres ie Rezul [at


True or True True
True or False True
False or True True
False or False False

not
Converteste o singura valoare Booleana din Adevarat in Fals ;i invers.

59
Capitolul 7 - Adev5rat sam Fals ECDL Computing

Rezultat
not True False
not False True

Expresiile Booleene pot utiliza atat operatorii de comparafie, cat ;i operatorii Booleeni, ca de
exemplu:
x<3andy<12
intr-o astfel de expresie mixta, operatorii de compara!ie sunt evaluati inaintea operatorilor
Booleeni. Acest lucru se datoreaz5 ordinii operatorilor despre care vom vorbi mai incolo.

Exemplu: Expresii Booleene

1. Deschide!i aplicatia Python.


2. fncercati s5 evaluati expresii Booleene in Python.
3. Ganditi-v5 la anumite combina[ii pentru a va asigura ca a[i in[eles scopul operatorilor
and, or si not.

File Edit Shell Debug Optlons \WIndOWS Help

4 Cc :i
4. Construiti cateva expresii Booleene complexe folosind paranteze, tinind cont c5
expresiile din interiorul parantezelor sunt evaluate primele.

File Edit Shell Debug Options Windows Help

>>> (==---= I-----I ==------) i=-i r=--i

>>> (-I-=iL== TrL-i=l=) ,i,i I,=|=--I


Fp_igrJ
>>>
_3_i
i_ n_. i lt I) f!
5. Utilizati Python pentru a evalua cateva expresii Booleene rezultate din compararea
numerelor.

Flle Edit Shell Debug Options Windows Help

60
ECDL Computing Capitolul 7 - Adevarat sau Pals

7.4 VARIABILE DE TIP BOOLEAN

I) Concepte

Initializarea si atribuirea valorilor unor variabile se aplic5 pentru nume,?iruri de caractere si


valori Booleene.
Instructiunea Y - 200 va initializa variabila numita Y cu valoarea numerica 200.
Instructiunea A - False va initializa variabila numita A cu valoarea Boolean5 False.
Instruciiunea name-input(66livhat is your name?") va initializa variabila numita name cu un
sir de caractere obtinut ca raspuns la intrebarea "What is your name?"
Iata ce se intampl5:
i. Utilizatorul este intrebat "lhThat is your name?"
ii. Utilizatorul isi introduce numele sub forma unui sir de caractere.
Ill. Valoarea acestui sir de caractere este atribuita varibilei denumite name.
Urm5torul exemplu utilizeaza o variabil5 de tip Boolean denumit5 True or false.
Remarcati folosirea simbolului _ (underscore) intre cuvintele din denumTrea_variabilei. Python
trateaz5 acest simbol din cadrul numelui unei variabile ca pe orice alt5 1itera. Ca urmare,
True or false desemneaz5 o singur5 variabil5. Daca utiliza[i spatiu in loo de _, Python va trata
denu_mirta variabilei ca 3 cuvinte separate si va retuma o eroare.
Instructiunea True or false - Age > 12 compara variabila Age cu valoarea 12 si stocheaza
rezultatul Boolean in ca-druTvariabilei True or false.

Exemplu: Lucrul cu valori de tip Boolean

1. Deschideti programul Myname.py?i modiflCa[i-I a;a Cum eSte PreZentat maijOS.

P.un Optlonr. `lVlndows Help

:Iar_e - i=-I-Jt r___ I


---rI___I_I -a-= _i- , !Ja=e )

Q,=e3CIC--, - a-i - |i±tre - _i _


Age - -I_lp-I-- (i-=e3Cier.)
rJ.--1-=r___,=== === i--:-, Lge )

ice a ir-I(Aget
I-__I_I i / igeTi:I

I_.,=e er fai3e a _-1'--a > i2


i=--==-t[ !aacee, i=` =i=== :--- -- ---I , ===e a-- I-a=3e )

2. Rulati programul.

Introduceti numele dvs.

Introduceti o varst5 mai mare ca 12.

Debug Optlons )i/lndo...vs Help

: >>> --- RE3rlj'T


I,>>>
_ri_1E_C I__CT ,,,C1,== r_amE: :, a,Jig

±rJ==_ -r-if-a i5: I,=e


I.|'_1±E __- a,_I aCSe 5=e: |i
i -|'_oL±= =LIL= ill: _-1

FTe>=t 1.Cc== i,,r---.,-i== i-e: -€


:a,|e |±= oll±e= I.1ar| 1.: lil _i'=L'e
i,,,I

61
Capitolul 7 - Adev5rat sau Pals ECDL Computing

3. Rula[i programul din nou.

Introduceti numele dvs.

Introduceti o varsta mai mica ca 12 pentru a vedea rezultatul.

Flle Edit Shell Options Windows Help

>=r`>
What ls your nan-,Ei? DEIVe
'|'aur r1€LFT_a 1_q: nave

I,mar l3 yO-Jr age I,awe? 1|


Yc=ur a'1lE |S: ll
±Te>:a 'J,ea=- ,rOL_ '1T=ii bE`-: 1£>
Da,re i_i aider I.-,Elf, 12 ill Fai3\=.
>>> I

7.5 COMBINAREA EXPRESIILOR BOOLEENE

B Concepte

Utilizarea parantezelor in expresiile Booleene

Asa cum a fost explicat si anterior, parantezele sunt importante in cadrul expresiilor numerice.
Ele sunt de asemenea importante si in cadrul expresiilor Booleene.
(A and B) or 'C nu este acelasi lucru ca si A and (B or C)

S5 presupunem de exemplu ca A este False, B este True si C este True. Introducerea acestor
valori in 2 expresii retumeaz5 rezultate diferite:
(A and B) or C este evaluat5 ca fiind True

A and (B or C) este evaluata ca flind False

Pentru a veriflca acest lucru, tasta!i expresiile Booleene in Python, asa Gum este prezentat mai
jos.

Exemplu: Utilizarea parantezelor ^ln expresii Booleene

I. Deschide[i aplicatia Python. Tasta[i urmatoarele expresii:

EdTt SheH Debug Options Windo\rvs Help

>>.> A-E_Sic-a
>>> B===,_.,i
>>> C=T=-I-i
>>> (Zl_ ==_i a)
I =i_5E
>>> (A ==.=t a) ==, C'
i_TL=e

L" 1348 Col: 4

Remarcati Gum utilizarea parantezelor a schimbat rezultatul expresiei A and B or C.

62
ECDL Computing Capitolul 7 - Adev5rat sam Fals

Ordinea operatorilor, inclusiv Booleeni

Tabelul de mai jos reprezint5 o list5 par!iala a ordinii in care sunt majoritatea operatorilor
importanti sunt aplicati. in lista de mai jos, operatorii din partea de sus a listei sunt aplicati inaintea
celor aflati la flnalul listei.

Simbol Op er atie

Irmultire si imp5rtire

+- I Adunare si sc5dere

<_>_<-_>-_--_I- Operatori de comparare

not Operator Boolean not

and I,i Operator Boolean and

Or Operator Boolean or

Spre exemplu, in absenta parantezelor, * este evaluat inainte de + (;i in cadrul listei de mai sus
* este inainte de +). Similar, 6and, este evaluat inainte de 6or, (1a fel cum este evidentiat si in lista
demaisus).
O expresie precum:
AorBandC
va fl eValuata aStfel:
Aor(B andC)

O expresie complexa precum:


x<2 or I+3*x>2+4/2 andnotx<y
va fl CalCulata aStfel:
(x <2) or (1+(3*x) > 2+(4/2) and (not (x < y)))
uneori chiar ;i programatorii experimentati uit5 ordinea exacta de evaluare a operatorilor. in
cadrul unei expresii complexe precum cea de mat sus, este uzual sa se includ5 anumite paranteze
pentru a fl mai clara expresia de evaluat:
x<2 or((1+3*x>2+4/2) andnotx<y)

Ordinea operatorilor pentru opera!iile *, /, + si - este utilizat5 atat de frecvent incat rar se
utilizeaz5 parantezele pentru clariflCarea Ordinii de eValuare a eXPreSiei.

63
Capitolul 7 - Adevarat sam Fals ECDL Computing

7.6 EXERCITII RECAPITULATIVE


9

1. Care dintre urmatoarele reprezint5 o expresie in Python pentru a aduna 3 numere si a


imp5rti rezultatul la 3?
a.4+5+6/3
b.4+5+6+3
c. (4+5+6)/3
d. (4+5+6)+3

2. Expresia l3<x and x=-7l este adev5rat5 dac5 x este:


a. 3,4,5,6or7
b. 2,3,4,5or6
c. 4,5,or6
d. 4,5,6or7

3. in Python, care expresie ar retuma un rezultat diferit fat5 de celalte 3?


a. a<b<c
b. c=b>a
c. a<borb<c
d. a<bandb<c

64
CAPITOLUL 8 -
TIPURI DE DATE AGREGAT

La flnalul aCeStui Capitol, veti putea s5:

. Intelege[i tipurile de date agregat

. Utilizati in cadrul unui program date tip agregat: lista ;i tuplu


Capitolul 8 - Tipuri de date agregat ECDL Computing

8.1 TIPURI DE DATE AGREGAT iN PYTHON

I) Concepte

Pe lang5 tipurile standard de date precum integer, string ;i Boolean, exist5 o alt5 categorie de
tipuri de date denumite agregat. Acestea stocheaz5 elemente multiple, ca de exemplu o list5 de
nume. Majoritatea limbajelor de programare abordeaza intr-un anumit fel tipurile de date agregat,
ca de exemplu un tablou ce confine un grup de elemente din acela;i tip de date
in python exista 2 tipuri de date agregat: list5 ;i tuplu.

Lists
Reprezint5 o colectie de valori. Listele pot fl modiflCate Prim adfugarea Sau eliminarea
elementelor din continutul lisei sau prim modiflcarea elementelor existente. Python poate aflsa o
lists intreaga de val;ri. De asemenea, el poate prelua elemente dintr-o lists. (fn Python, tipui de
date agregat clist5' indeplineste rolul de 6tablou (array)' existent in alte limbaje de programare.)

Tuplu
Un tuplu este exact ca o lista, cu precizarea c5, odata creat, nu poate fl modiflcat prim
rearanj area, adfugarea, eliminarea sau modiflCarea elementelor individuale.

Chiar daca restric[ia privind tuplurile pare sa le faca mat putin folositoare decat listele, tuplurile
au dou5 avantaje importante:
1. Preluarea elementelor din tupluri este mai rapida decat cea din liste.
2. Un programator care citeste codul pentru tupluri nu trebuie sa veriflce daca valorile au fost
modiflcate.

Itemii dintr-o lista sau dintr-un tuplu poarta numele de elemente.


Un element dintr-o list5 sau dintr-un tuplu poate fl SeleCtat Prim Slat)ilirea numelui listei sau
tuplului ;i apoi a num5rului elementului dorit in cadrul listei, scris intre paranteze drepte. De
exemplu, elementu1 3 al listei numite pets este:
pets[3]

Elementele sunt mentionate prim numere pomind de la 0. Astfel,?n lista:


rpisi:a-,"caine-,-hamster-,ccpe?ti;or-,c6iepure",C.broasca-]

pets[0] - pisic5

pets[1] - caine

pets[3] - pe?ti?or

8.2 LISTE

E Concepte

Python confine anumite metode predeflnite pentru lucrul cu listele. Spre exemplu, aceast5
comand5 va sorta lista numita pets:
pets.sort()

66
ECDL Computing Capitolul 8 - Tipuri de date agregat

Exemplu: Lucrul cu liste

1. Deschideti Python.
2. Creati o lista numit5 pets, incluzand elementele intre paranteze drepte, asa Gum observati
in imaginea de maijos.
3. Explorati elementele individuale ale listei utilizand numere incluse intre paranteze drepte,
la fel ca maijos.

File Edit Shell Debug Options Wndows Help

>>> pet;9 = I"=iC", "I,Ll_'L=", ":_lair__-tar", ",==.|C!f|_D:rl","I,=±ti__I,'TcL_=t|=-"I


>>> pet,g[1]
ldc)g.

>>> pet5[5]
|turtlel
>>> petg[0]
lcat'
i,,I _ _ _______LE
|" 154 Col:4i

Exemplu: Sortarea unei lisle ^ln Python

1. Deschideti Python.
2. Creati un fisier numit ManyNames.py.
3. Tastati in program codul de mai jos, utilizand numele unor prieteni reali de ai dvs. in
locul celor mentionati mai jos.

Fill Edit Format Run Options Window.s Help

NaJr'e9 - i"_==_-a:-_'',r'=a.,i=", "i===.r', "E±t=--", "::ari","E'E-=|"I


r_.rlr,I ("I_his rT+irr_a_a a|--i", N8n'eS )
Names. sort. ( )

i
T==||t(''r-_-|± I.E,n.==. _c]=.=1=erJ lr_ =iE:,I_ate=i,_-=i ===±=- ===r', NameE! )

4. Rula!i programul.

File Edit ShEll Debug Optlcns `A/indows Help


_;
'; - -------- RI:SI|RI -------

=|ames are ['Saralh_', 'D,3Y|d', 'AJTl', 'Pecei-I, 'I.tar_J' 'Pa_i-|':


;; n_ares _apo1-ted ln a|P_n,=t=et=Cal o=cler ii-e ,,in=J, .a.e'-=±,, ,IIary., ,Pa.||., .Pet i
'5ara:|' i

_._±
Ln 22Col 4

8.3 TUPLURI

E3 Concepte
Tupluri in Python

Tuplurile sunt create in acela;i fel ca ;i listele, ins5 utilizand paranteze rotunde in loo de cele
drepte.

67
Capitolul 8 - Tipuri de date agregat ECDL Computing

Un tuplu poate fl sortat folosind comanda sort(), intrucat Python nu permite rearanjarea
elementelor unui tuplu.
Chiar dac5 o variabila este atribuita unui tuplu, Python tot nu poate modiflca acel tuplu. Python
poate totu!i sa atribuie o noua variabil5 tuplului respectiv, inlocuind astfel tuplulul cu unul nou.
Secventa de maijos prezinta un exemplu al modului in care se poate inlocui un tuplu cu altul:
animal_tuple - (6pisic5','caine','porc')
animal_tuple - ((elefant', (tigru', 6girafa')

Cel de al doilea tuplu il inlocuie;te pe primul.

O utilizare comuna a unui tuplu o reprezinta stocarea pozitiei pe coordonatele x ;i y a unui


punct pe ecran. in loc sa existe 2 variabile, una pentru x si alta pentru y) o singura variabila tuplu
poate stoca ambele valori. Cand sunt necesare valorile pentru x ;i y, acestea pot fl extrase din tuplu.
(O lista poate fi utilizat5 in acelasi mod ca ;i un tuplu pentru stocarea pozi!iei pe coordonatele
x?i y a unui punct pe ecran, insa un tuplu este mat eflcient.)

Exemplu: fncercarea de a sortcl un tuPlu

1. Deschide[i Python.
2. Utilizati codul de maijos pentru a crea un tuplu ce contine nume de frocte.
3. Afisati valorile tuplului tastand lfruitl.
4. fncercati sa sortati tuplul.

Flle Edlt Shell Debug Optlons Winclo\ts Help

>>>- ===-----======-------
>=-i fr.JIG = (_=====_,'=_-i-I-_-
>>}- f=T|it,

I (,I.EJLEiFJ,, lrJ=-a-lC;.El, 'ta=Ja:i,i,I


•l >>> f=uit_sort,0
T=a=±t=l|= lr,-_rJ_---I =eCe=_I I,all |a_Ot1
==il= n<r±,I-pl--±ii=37>H, |1=T-e i, l=- -I-I--:dl=|=`=-
f=,_-,it.=J=| U
atc=-lLn--,tE=r=.,-I-Tfi lt.cpi=' ='-r-a,I.-I- i.-±=- ---i, =t--==L.L== I-==-i:
i,,I
n ,T5,Co#

Exemplu: Extragerea valorilor x?i y din tuplu

1. Deschideti Python.
2. Utilizati codul de maijos pentru a crea un tuplu ce contine valorile 40 si 150.
3. Extrageti valorile x ;i y din tuplu.
4. AflSati ValOrile X ;i y.

68
ECDL Computing CapitoluI 8 - Tipuri de date agregat

8.4 EXERCITII RECAPITULATIVE


9

1. O variabil5 de tip list5 poate stoca:


a. Doarun singurnumdr intre -128 si 128.
b. Un fisier video intr-un format uzual pentru aflsarea pe ecran.
c. Un flSier audio intr-un format uZual Pentru tOnurile de aPel la telefoanele mobile.
d. o list: de studenti ce poate fl sortata utilizand functia sort().

2. Ce tip de date reprezinta in Python flecare din valorile de maijos?


a. 37
b. (Sarah,
( 100,20,25
[ 100,20,25
15.9

9999999999999999999999999999999999
-37.0
h;..I: [ David', cSarah', tAnn', 'Bill' ]
[ Redo, cGreen', cBlue' ]
c[ 100,20,25 ],

69
CAPITOLUL 9 -
CONSTRUIREA CODURILOR

La flnalul acestui capitol, veti putea s5:

. Descrieti caracteristicile unui cod bine structurat si documentat: indentare,


comentarii adecvate, utilizarea numelor descriptive

. Definiti termenul de comentariu si sa identiflcati scopului unui comentariu intr-


un Program

. Utiliza[i comentarii in cadrul unui program


ECDL Computing Capitolul 9 - Construirea codurilor

9.1 COD

E Concepte

Imaginati-va ca tocmai ati finalizat un program pentru un joe pe care I-ati inventat. Cunoasteti
exact ce fac: codul din program intrucat dvs. I-ati scris. Va salvati flsier:le create si trece;i l'a
urmatorul proiect. Imaginati-v5 apoi c5 reveniti la a'cest program dupa caieva luni; cat d'e reped'e v-
ati putea familiariza cu codul respectiv? Cat de usor ar fl Pentru O PerSOan5 care nu a v5zut niciodat5
codul respectiv s5 il inteleaga?
fn realitate, programele create in python pot fl deStul de marl ;i pot COntine multe inStruCtiuni.
De obicei, la aceste programe lucreaz5 mai mul[i programatori, in diverse etape de dezoltare a
progranului. Este esential ca programul s5 contin5 un cod care s5 poata fl 'inteligibil' adic5
persoana care il citeste sa poate intelege usor ce aiume face programul ;i de ce.
Exista o serie de tehnici generale de a face un cod mai u;or de inteles, care se pot aplica in
toate limbajele de programare, ;i anume:
I Utilizarea comentariilor
. Organizarea codului
. Utilizarea numelor descriptive

9.2 COMENTARII

I) Concepte

Un comentariu reprezinta o por[iune de text care explica ce anume face respectiva portiune de
cod. Este o descriere scurt5 a unei portiuni de cod pe care oamenii o pot citi, insa pe care
computerele o vor ignora, flind PrOieCtat5 pentru a-i ajuta pe programatori s5 inteleag5 ce anume
se intampl5 in cadrul programului. Comentariile adecvate reprezint5 o caracteristica a unui cod
bine structurat si documentat. Comentariile din cadrul codului ar trebui sa il ajute pe autor, dar si
pe alti oameni s5 in!eleaga ce anume face fleCare SeCtiune de cod.
Comentariile incep cu simbolul # ;i apar scrise cu ro;u in editorul Python.
Textul rosu care apare intre semnul # si sfarsitul randului nu este luat in considerare de Python
la rularea codului. Acest text este doar pentru programatori.

# Acesta este un comentaliu

9.3 0RGANIZAREA CODULUI

I) Concepte

Programatorii fac codul mai u;or de urmarit prim divizarea lui in portiuni sau blocuri mai mici.
Un bloc este deflnit Ca un gruP adjacent de linii care sunt indentate la fel. Indentarea este
utilizat5 pentru a putea intelege ;i citi mai u;or codul respectiv. Multi editori de coduri realizeaza
indentare automata.
Blocurile sunt de obicei denumite folosindu-se cuvantul ldef urmat de nume, ales pentru a
descrie ce anume face codul respectiv. (Aceste aspecte sunt detaliate in capitolul 1 1 Proceduri ;i
Functii.)

71
Capitolul 9 - Construirea codurilor ECDL Computing

Numele (c6def name") este introdus primul, iar apoi inceputul blocului este evidentiat printr-o
indentare a liniei. Limiile de cod din cadrul unui bloc au aceeasi indentare si reprezint5 o secven[5
de instructiuni ;i, ca urmare? vor fi rulate uncle dup5 celelaltele.
Prim utilizarea unor blocuri denumite corect, un programator poate oferi o structur5 clara a unui
program Python destul de complicat.

Cod simplu, neseparat pe blocuri Cod organizat pe blocuri

9.4 NUME DESCRIPTIVE

I) Concepte

Numele descriptive reprezinta o caracteristic5 a unui cod bine structurat si documentat. in


programare, reprezint5 procesul de a atribui nume semniflcative elementelor, functiilor si
procedurilor. Exist5 o structura acceptata, comun5 tuturor limbajelor de programare. Spre exemplu,
pentru a scrie in Python o mica functie numit5 legg timerl, aceasta ar trebui denumit5 legg_timerl.
Acest lucru permite utilizatorilor s5 inteleaga scopul functiei respective.
Atribuirea unor nume semniflcative variabilelor va oferi mat mull sens utilizatorului. Numele
variabilelor ar trebui alese cu grij5 pentru a oferi indicii despre scopul utilizirii variabilei
respective.
in lista noastr5 de exemple de la capitolul 8, variabila numit5 pets ar fl Putut fl utiliZata in
schimb pentru o lista de fructe:
pets-rananas','mango','kiwi']

Python nu ar avea nicio problem5 si comanda:


print( pets[1] )
araflsa:
6mango,

Cu toate acestea, utilizarea unui astfel de nume va crea confuzie pentru un programator care
incearc5 s5 citeasc5 codul respectiv.

Exemplu: Trarformarea unui cod complex tntr-unul mat usor de citit

1. Studia[i programul Python prezentat mai jos. Este o portiune complex5 de cod,
utilizata aici pentru a ilustra uncle din tehnicile discutate mat sus pentru imbunat5tirea
lizibilitatii codului.
2. in;ercati sa identiflcati in cod urmatoarele:
a) comentariile care 's5 explice func[ionarea programului
b) Numele blocurilor de cod

72
ECDL Computing Capitolul 9 - Construirea codurilor

File Edit Forrlut Run Optic)ns \l.,indolvs Help

i I---i-a c=-=--=±-==e I,==.I-a El =L`t ==`. I:r-a Sl-i,ee=..


i I-== ===t:-`= =-c= :1 ==.5 -- =`= == --I--EL== t1`-i j==L=itiJ=_=/ Cl,I Pa==1=L=
a 30 t'.-.it I:I-_a-,, f=C r.==e=.,- I,i,_ =i-_± i-==-=±=__
===_ plc)L PC\1nt( P ):

x - (a:l``:,+i.6t.,,'19 + S||||
- - l9.I+i:lit,'|l| I all.3 i:i
= - L`Ygar-a.araV7.=eCt !ee=e.--.rL`.B==l, lx'i.,,±, 2t i
p}.gan.a. aisgia'},. ,;2PaaCe ( I I

a ====- p=-`=ei-c=-a drat-.a a C:FrL¥l.i cii-,=L.i==- b|--,L` =r- ti--i =l-=E-±=-


==--I ,±l,i-I-I t=|C,L`( pJ .IIZe I
x - =r-tls}L1:I
\r - irlt[g[|]l
oygapte. gfxdralj]. €l||ed e==Cie ll.e=ee=., 2i, I-, `-iaei-I I eREE:ll
p±\-±ne. a±_=pLay. -\=E.eaee I.I
7==-=rt1 ,x. ==== I,e|ze )
pygarjE.tlr.a.I,Ja=t I 2ri I

3. Revizuiti codurile create pana acum pe baza acestui material si veriflcati unde
anume ati putea imbunatati lizibilitatea codului pe baza tehnicilor prezentate in acest
capitol.

9.5 EXERCITII RECAPITULATIVE


9

1. Un lcomentariul in cadrul unui program reprezinta:


a. Orice este inclus intre ghilimele
b. Orice este inclus in cod, inaintea unei proceduri
c. Caracterul ASCII l#l
d. Un text care ajut5 la documentarea programului.

2. Ar trebui s5 utilizati un comentariu:


a. Dup5 flecare linie din program.
b. inaintea flec5rei linii din program.
c. Pentru a ajuta o persoan5 sa inteleag5 programul creat de dvs.
d. Numai pentru func[ia cea mai diflCil5 din program.

3. Numele variabilelor ar trebui s5 fie:


a. Scurte pentru a face programul sa ruleze cat mat rapid posibil.
b. Folmat din minim 8 litere astfel incat s5 nu fle usor de ghicit de alte persoane.
c. Format din litere si cifre, nu numai din litere.
d. Alese astfel incat Jsa fac5 programul mai usor de inteles.

4. Blocurile de cod sunt indicate astfel:


a. Prim incadrare intre ghilimele.
b. incepcul(I ;i seterminacul)I.
c. incep cu I(I se termina cu I)I.
d. Prim indentarea blocurilor de cod.

73
CAPITOLUL 10 -
INSTRUCTIUNI CONDITIONALE

La flnalul acestui capitol, veti putea s5:

. Definiti termenul de instructiune condi[iona15 si sa identiflCapi SCOPul aCeSteia


in cadrul unui program.

. Deflniti termenul de test logic ;i Sa identifiCati SCOPul aCeStuia in Cadrul unui


Program
. Utilizati expresiile logice Booleene in cadrul unui program

. Utilizati instructiunile conditionale IF...THEN...ELSE intr-un program


ECDL Computing CapitoluI 10 - Instructiuni conditionale

10.1 SECVENTE SI INSTRUCTIUNI


9 9 ®

I) Concepte

in limbajele de programare mat vechi, flecare linie de cod dintr-un program continea o
instructiune care se executa singur5- Fiecare instructiune era executat5 in ordine de computer, una
dup5 cealalt5. Acest lucru poarta denumirea de programare secvential5.
in programarea secventiala instructiunile sunt executate in ordine, una dup5 cealalt5.
in limbajele de programire, o instructiune reprezint5 cea mai mica portiune de cod care se
poate executa singur5.

Un exemplu de instructiune este print():


print( 'Ceva de ail;at')
Atunci cand programatorii utilizeaz5 termenul de 'instructiune', ei fac referire la mici sectiuni
de cod precum print().

10.2 INSTRUCTIUNEA IF

B Concepte

fn earful unei scheme logice, un bloc de decizie poate fl considerat o element complet
autonom. Acest bloc de decizie are un rezultat Adev5rat sau Pals care permite luarea unei decizii
cu privire la ce anume ar trebui codul sa execute in continuare.
O instructiune conditional£ este utilizat5 pentru a evalua o expresie ca flind Adevdrata sau
Falsa. Rezultatul, respectiv valoarea de True sau False, determina pasii urm5tori.
in python, instructiunile conditionale utilizeaz5 un format si un aspect structurat si sunt scrise
folosind cuvantul cheie if urmat de o expresie boolean5 ce evalueaz5 conditia ;i apoi semnul :
De exemplu:
Age - input ("Ce varst5 ai?")

if(12(Age)=14):

print ( "Esti mai tanar/a ca mine" )

Blocul de cod indentat din linia urmatoare (comanda print() in acest caz) va fl executat daca
expresia va fl eValuata ca flind adeVirat5_
Expresia boolean5 (12 (Age ) > 14 ) din cadrul instruc[iunii conditionale ifpoart5 denumirea
de test logic.
Un test logic reprezinta o expresie care ofer5 un r5spuns de tip YesINo, True/ False. Raspunsul
afecteaz5 rularea codului in continuare.

Acesta este formatul structurat care trebuie folosit:


If expression
statement if true

75
Capitolul lO - Instructiuni conditionale ECDL Computing

in pseudocod testul logic poate fi exprimat?n limbaj natural astfel:


'Ai suficienti bani?I

Acelasi test logic ar putea fi prezentat sub forma unei scheme logice astfel:

Exemplu: Un test logic

I. Deschideti Python.
2. Creati un nou f1;ier numit NameLen.py. Scrieti codul de maijos. Asigurati-va ca
utilizati simbolul : 1a flnalul liniei care incepe cu cuvantul cheie if.

D X
Edit Format Run Options Wmdows Help

T¥,ei:_-_Tl:£! I-):-_i-=4i;: --==i_ =i---=-? 9


I_i-+=J_- ( ___ _-_i--,-i i =-i__=== I_=l_i.='E )

-jl
3. Rulati programul.
4. R5spundeti la intrebare prim introducerea fie a unui nume scurf, fle a unuia lung (mai
pufin sau inai mull de 4 litere).
5. Observati rezultatul.

I -p, ftython she"


- I X
File Edit Shew Debug Options Wlndo\^/a Help

RE SIARI

I,i+_at 13 \7lj-== I_arrE.? Sam


Tc,-_I :-_.._tie a _i.-.r=L-I I.aft.a
-+>>

10.3 INSTRUCTIUNEA IF.. ,ELSE

I) Concepte

Python poate permite unui bloc de cod indentat, unei subrutine, sa ruleze dac5 testul logic este
adevatat si unui alt bloc de cod sa ruleze dac5 testul logic este Pals.
Codul este scris tot folosind instructiunea if, ca ;i pan5 acum, la care se adauga cuvantul cheie
else, urmat de simbolul : pentru a adauga codul ce va rula in cazul in care testul logic este fals.
Acesta este formatul structural care trebuie folosit:

76
ECDL Computing Capitolul 10 - Instructiuni conditionale

if expression:
statement if true
else:
statement if false
De exemplu:
Age - input ("Ce varsta ai??")

if(12(Age)=]4):

print ( " Esti mai tanar/5 camine " )

else

print ( " Esti mai batran/a ca mine " )

Blocul de cod indentat din linia urmatoare (comanda print() in acest caz) va fl executat daca
expresia va fl evaluat5 ca flind adevatat5.
Nota: Comanda 'else' nu este indentat5, ea avand acelasi nivel de indentare ca si cuvantul
cheie lif. python initial va indenta cuvantul cheie lelsel, a;a c5 'va trebui sa ap5sati tasta 'Backspace
pentru a obtine nivelul corect de indentare.

Exemplu: O instructiune if:.else.

I. Deschideti exemplul NameLen.py.


2. ModiflCa;i PrOgramul COnfOrm imaginii de mai jOS.
3. Atunci cand ajungeti la momentul scrierii comenzii lelsel apasati tasta Backspace
pentru a anula un nivel de indentare.
4. Nu uitati s5 puneti simbolul : dupa cuvantul cheie else.

File Edit Format R.Jn Cpticus 'l'/indc-,\= HE!P


------_---- - I_ A-------- -- -iJ
:Iarf_ - irlrJ._,I r_-
i_=l ie_-i =Tar,_a 'e < 3 a:
I-==---l= I: a

=l=-|TJt ( I

___ _J
Ln;1 Col:I

5. Rulati codul.
6. Introduceti un nume scurt.
7. Rulati codul din nou.
8. Introduceti un nume mai lung pentru a veriflca executarea codului in cazul in care
testul logic este fals.

Fill Edit 5hE!l P.eb,Jg Opticn= 'l`.,'inclc+TIS HEIR

FE £IEij_A_I
+~,'\
I.I:~Jat- i_: -I:Jl=- -=lEirl--a? I:r1=13tCP-=ler
I t'c= ±rJ=-'t __ll=TJE i -q:=l]=.t: =arLe-I
`_``

77
Capito]ul 10 - Instrucfiuni conditionflle ECDL Computing

10.4 EXERCITII RECAPITULATIVE


9

1. O instructiune conditional5 Python:


a. Confine cuvantul cheie 6if?
b. Contine cuvantul cheie 'def?
c. Este un tip special de comentariu care precizeaz5 in ce conditii ar trebui sa fie utilizat
codul.
d. Este un tip special de procedur5 ce poate fl o functie in anumite conditii.

2. fnurmatorul cod:

if password -- Voldemort, :
print( cl guessed your password correctly' )
else:

print( (I did not guess your password correctly' )

...care dintre urmatoarele aflrmatii este adevirata?


a. Atat primul, cat si eel de al doilea bloc de cod indentat vor fl rulate intotdeauna.
b. Nici primul bloc de cod indentat, nici al doilea nu vor fl rulate niCiOdata
c. Este o eroare logic5 intrucat nu se poate folosi -- cu un?ir de caractere.
d. Primul sau al doilea bloc de cod indentat ar putea fl rulat, in functie de valoarea
parolei.

78
CAPITOLUL ll -
PROCEDURE SI FUNCTII

La finalul acestui capitol, veti putea s5:

. Intelege[i termenul de paramet" ;i s5 identiflCati SCOPul utiliZarii aCeStuia in


cadrul unui program.

. intelegeti termenul de procedur5 ;i s5 identificati scopul utilizdrii acesteia in


cadrul unui program
. Scrieti?i s5 definiti o procedur5 in cadrul unui program

. intelegefi termenul de functie si s5 identificati scopul utilizarii acesteia in


cadrul unui program
. Scrieti ;i sa definiti o functie in cadrul unui program
Capitolul ll - Proceduri si functii ECDL Computing

ll.1 SUBRUTINE

I) Concepte

O portiune de cod poate fl utilizata de mai multe ori in diverse sectiuni ale unui program.
Aceasta poart5 numele de subrutina.
O subrutin5 este un bloc de cod care poate fl apelat si rulat de mai multe ori in cadrul unui
program. Spre exemplu, o rutina ar putea fl utiliZata Pentru aflSarea datei Sau Orei Pe eCranul
monitorului.

in python cuvantul cheie cdef,, (prescurtarea de la ldeflnel) este utilizat pentru a deflni un nume
pentru o subrutina. Putem apoi apela sau invoca o subrutina de oriunde din intregul program prim
referirea la numele ei. Rubrutina va rula si cand se va flnaliza, programul principal va fl reluat din
punctul aflat inainte de inceperea subrutinei.
O subrutin5 poate efectua un calcul si retuma un r5spuns sau o valoare. Acest lucru se numeste
returnarea unei valori.
Exista 2 tipuri de subrutine.
® Functii
O functie reprezint5 o subrutin5 ce calculeaza o valoare in cadrul unui program.

® Proceduri
O procedura reprezinta o subrutina ce execut5 o actiune, fara insa a retuma o valoare.

ll.2 FUNCTII SI PROCEDURI


9 9

I) Concepte

Functiile ;i procedurile pot deveni mai flexibile prim intermediul parametrilor.


Un parametru reprezinta o variabil5 special5 ce este utilizat5?ntr-o subrutina pentru a
influenta modul de functionare a acesteia.

Exemplu: Apelarea func[iilor [i procedurilor predefinite

Python contine anumite subrutine (functii?i proceduri) predeflnite.

input() ;i print() sunt amandou5 subrutine:

. input() este un exemplu de functie. Cand este apelat5 in cadrul unui program,
execut5 o actiune si retumeaza o valoare inapoi codului care a apelat-o.
Programul se reia apoi din punctul in care a fost apelata functia input() in cadrul
programul ui.
. print() este un exemplu de procedur5. Cand este apelata?n cadrul unui program,
executa o ac!iune ;i apoi programul se reia din punctul in care procedura print()
a fost apelat5.

Exemplu: Crearea unei func[ii

Aceasta portiune de cod defmeste o functie numita 6stars, ce contine un parametru numit
(number of stars, care determina numarul de stele dintr-un sir.

80
ECDL Computing Capitolul I I - Proceduri ;i functii

Exista 3 instruc[iuni de aflsare in program care trebuie s5 veriflC5m daca functioneaza corect.
1. Deschideti Pythoi.
2. Creati un nou flSier numit Arrow.py.
3. Introduceti primul bloc de cod din imaginea de mai jos, cu instmctiunea defsi toate
liniile de cod indentate, pentru a area o nou5 functie.
4. Atunci cand introduceti cele 3 instructiuni de aflsare, apelati functia de 3 ori.

=`

(i Erl)t ft:.",nat P.UPI I:lptlrly I,,lr,l,- i-i€lr

:l\=f 9tarJ(n\in£:i af_ st,ar!) :


angwer=' a
I--== i i--- 1.anCl,=l numbe3: O£ atra_rg ):
aJ}erW'er+= I - I
==_J===_ eng|,.Jer

I.i_int ( gt.arS(1)
T=r±r±C ( at.are(<_)
p=ir+I ( gt.arg(3)

5. Rulati programul pentru a vedea rezultatul.

====--=========== RE§TARI ========-


>>>*_*k

Nota: Programul ruleaza in ordine de la prima instructiune de aflSare.


Prima instructiune print() va aflsa o stea pe prima linie.
A doua instru:tiune print() va ailsa 2 stele pe a doua linie.
A treia instmctiune print() va afls'a 3 stele pe a treia linie.
Cantitatea de stele afl;at5 pe flecare rand depinde de valoarea parametrului number_of_stars
din fleCare inStruCtiune Print().
Exemplu: Crearea Procedurilor

1. Deschideti Python.
2. Creati un nou fi;ier numit Lines.py.
3. Introduceti cele dou5 blocuri de cod din imaginea de maijos, cu cele 2 instructiuni
def si toate liniile de cod indentate, pentru a crea 2 noi proceduri.
4. Apoi tastati instructiunea de aflSare Si Cele 2 1inii ce invoc5 cele 2 proceduri din
coxpul principal al programului.
5. Salvati programul ;i rulati-I pentru a vedea rezultatul.

81
Capitolul ll - Proceduri si functii ECDL Computing

7€:. ursdge ,pL+. - C:,-,P`7then32,I+A;edge.p:¢.


- _- `
File Edit Forft\at Run Opti¢nS '|\'mdolvs Help
•\,--I 1=i`_a vest,H ``
I `--i;=.I:(,lTi (|O) :

.\==.i-'.t i.',I i \
-i,,I:_ |l-r,.a -I+o=zO :
arlsveqe3;`F --
i-T= 1 -.i i-.1,,-I-h,~e (1.3i :

answej|-+eel ,
?I,_i_I =r', C faa|tWe=)

\,i.:i-,C, I I _1'-,+,»-:,, i

±=*|e +1e,=C \',i


=>re +,I,==I,I

7€i P,tl,on Sil€ll

File Edit Shell Debug Optlens LA¢mdo\++s Hetp

e'a'e.8T+i!n a_a.3 fdee£a`u=c¢ ap= i| _+¢a2, a?:`J`9:ai!! ?MSl~ ':.`=Selu` 3a bid (InteiU en war. *
E!pld

T'}.se wcoE)y=lg±tn, tlCJfadlCSTI s=` m=lcen_ae I ) `' for er`ege lri±C)a:araSier:I


_ ` . _ _ " l . , ` \ \ ~ l

F=EI5;

a.xerri=ie c-± t,tis,a p_'ocel±ure-a calls+i .c-=¢m `.,.2.C:h.3-rlc= a P--E!g=.ar,.

;: >o,

_ .: _-

Cum functioneaz5 programul:


. Programul ruleaz5 in ordine de la prima instructiune de aflsare
. Programul apeleaza procedura line vert ce va aflSa O linie VertiCal5 de stele pe ecran.
Dup5 executarea acestei proceduri, programul se reia cu urmatoarea instructiune care
apeleaza procedura numita line horz.
. Ambele proceduri sunt rulate, insa ele nu retumeaza nicio valoare programului.

1 1.3 EXERCITII RECAPITULATIVE ?

1. O functie tipica in Python:


a. incepe cu cuvantul cheie defsi ofer5 o portiune de cod care retumeaz5 o valoare.
b. incepe cu cuvantul cheie abc si ofer5 o por;iune de cod care retumeaz5 o valoare.
c. Desemneaz5 o portiune de cod care executa o serie de instruc[iuni ;i apoi opre?te
programul.
d. Desemneaz.a o portiune de cod care execut5 o serie de instructiuni ;i apoi
repomeste interpretorul Python shell.

2. O procedur5 tipic5 in Python:


a. Consta in pseudocod pe care computerul nu trebuie s5 il ruleze.
I). Const5 in totalitate din comentarii care specific5 scopul programului.
c. incepecu#
d. Este exact ca o functie, ins5 nu retumeaza o valoare.

82
ECDL Computing Capitolul 1 I - Proceduri si functii

3. Un parametru este:
a. O valoare care este transmis5 unei proceduri sau unei functii in scopul folosirii
acesteia
b. O metoda de m5surare aproximativ5 a distantei, ce ar putea simpliflCa anumite
portiuni de cod.
c. O modalitate prim care un program poate executa mai multe actiuni in acelasi timp.
d. Un bloc de cod ce contine un anumit numar de linii.

83
CAPITOLUL 12 -
BUCLE (LOOP)

La finalul acestui capitol, veti putea s5:

. Intelege[i termenul de bucla si s5 identificati scopul utilizirii acestora in cadrul


unui program
. Recunoaste[i tipurile de bucle utilizate in cadrul iteratiilor: for, while, repeat

. Intelegeti termenul de buc15 infinit5

. Utilizati iteratiile in cadrul unui program: for, while, repeat


ECDL Computing Capitolul 12 - Bucle

12.1 BUCLE (LOOP)

I) Concepte

Pan5 in acest punct, am creat programe care functioneaz5 secventia1, adica instructiunile sunt
executate in ordinea in care sunt scrise, similar cu respectarea unei retete pas cu pas. Dac5 este
necesar sa se execute acela;i pas de mai multe ori, putem utiliza ceea ce in programare poart5
numele de bucla (loop).
O bucl5 (loop) reprezinta o por!iune de cod care este rulat5 in mod repetat in anumite conditii.
O bucl5 este reprezentat5 in cadrul unei scheme logice printr-o sageata care pome;te de la un
bloc de decizie si este orientat5 inpoi spre blocul anterior din secventa de instructiuni. Examinati
schema logic5 de mai jos pentru coacerea unei prajituri. Veriflcarea prajiturii pentru a vedea dac5
este sau nu coapt5 poate fl repetata de mai multe ori inainte ca prajitura s5 fle gata pentru a fl scoasa
din cuptor. Acest pas repetitiv este reprezentat printr-o buc15 - veriflcati prajitura ;i dac5 nu este
coapta, a;tepta[i 5 minute ;i veriflca[i inca o data.

I." -.-
#ch,#
Prajitura este
c oapta?

O bucld 'ln cadrul unei scheme logice

Utilizarea unei bucle pentru repetarea unei ac!iuni reprezint5 una dintre cele mai utile tehnici
in programare. Codul pentru bucl5 (loop) este prezent in majoritatea limbajelor de programare, cu
mici variatii legate de conventiile de nume e.g. ¢repeat, este utilizat pentru a determina num5rul de
repetari in anumite limbaje de programare; vom vedea mai tarziu in acest capitol ca twhile, face
acest lucru in Python.
Python foloseste instructiunea {for, pentru a crea bucle.
Instructiunea for contine mai multe parti.

for i in range( 10 ):

statement

85
Capitolul 12 - Bucle ECDL Computing

. Cuvantul cheie lforl este urmat de numele variabilei, in acest caz i, tinand cont de
repetitiile buclei. Variabila i va avea o valoare initial5 0 ;i, de flecare data cand bucla
va fl rulat5, va creste la 1' apoi la 2 si tot a;apana la 9.
. cuvintele ,in range'(), cu un numat in,tre paranteze, urmat de simbolul : indic5 num5rul
de rulari ale buclei.
. O linie de cod indentat continand o instructiune va fl executata de 10 ori.

Exemplu: fncercarea de a afilsa un rand cu IO stele

Acest exemplu prezinta o incercare de a afisa un rand cu lO stele.


1. Deschideti Python.
2. Introduceti urmatorul cod.

;:;=5--it-
I_
a- ii:I-: -?:-::9:-i:=T-'£=r-i'!ii¥-d:-1ili a ,Hf,i:i :- :-5i-2=- ; - i,i-L= =.-i-5T=----;2--a-i-I--- -Fi:i-.==jii---=i=, i
r`J'¥EI "Ci=g'JLTrlgrltl1/, "l==eai=3" == »i=l===== ( :i " fr-I I-\--== =TlfC-J=r_=C_-.-
}=r=. _==,.Li- I i_t_ I,,:.__-__-,"a l|=li i
_H=irJJ= I

______ __±
Ln_452Coi:i

3. Ap5sa!i Enter pentru a rula codu1.

File Ed-it Shell Debug Options I+\\'inda,,,5 HeZp

prt-_r..:n_3:2.a I,aefaelt..-±gr == ==.=2. I,-=iS==±,, :1.I.,= -_=S=j 3= £1C l==.r_elH ,I_a_+;1:_


32
I::p= "=L==-fr=g-=C", rJ,==e±=t-a" L== "1=)=e--.=E ; a ' f== m=r= i==_C;-atiCJr-_
>>=J. _==-_- 1 i=_ i-±=_.=eI==lt :

;==-i=J_I _ I

; -i _ __ i
|f! i,.1 Cci i

12.2 BUCLE FOLOSIND VARIABILE

I) Concepte

In exemplul anterior, fiecare stea era afi;at5 pe un rand separat. Se dorea un rand de stele.
O alta abordare ar fl:

print('***********')

Aceasta abordare va functiona, ins5 nu este eflCienta - daC5 vreau s5 aflsez 599 de stele?
fn acest caz, utilizarea buclelor economiseste foarte mult timp ;i scurteaza codul. Putem scrie
o bucla care s5 aflseze 10 stele, 42 de stele sau 599 de stele, in functie de o valoare.

86
ECDL Computing Capitolul 12 - Bucle

Cum functioneaz5 programul:


. Pentru a aflsa un rand de 10 stele prim utilizarea unei bucle, trebuie sa construiti
randul de stele intr-o variabila. Apoi, odat5 ce randul este gata, codul il poate afisa.
Aceasta abordare va utiliza operatoru1 + pentru a adfuga ;irul '*' la variabila numit5
answer.
answer - answer + l*l

Aceast5 1inie de cod utilizeaz5 valoarea curent5 a variabilei answer, adauga o stea la final si
salveaza rezultatul obtinut inapoi in variabila answer.

. Variabila answer trebuie intai sa fie initialiZat5, inainte de a fl utiliZata. Pentm a o


initializa cu un sir de 3 stele utilizati codul:
answer - l***l

Pentru a initializa variabila answer intr-un ;ir go1, ;terge[i cele 3 stele din linia de mai sus.
Pastrati cele 2 ghilimele! F5r5 ele, programul va da eroare. Cele 2 ghilimele de la inceput ;i de la
flnal ii SPun PrOgramului Python c5 variabila answer stocheaz5 un ;ir de caractere.

Exemplu: rend de stele utiliz&nd o variabild


1. Deschide[i Python.
2. Ini[ializati variabila numit5 answer ce confine un ;ir de caractere go1.
3. Utilizati o bucl5pentrua adfuga 10 stele in sir.
4. AflSati Sirul de Stele.

Exist5 o metod5 mai scurt5 de scriere answer-answer+l*l care utilizeaza noul operator +-.

5. Rescrieti codul utilizand de data aceasta operatorul +-, asa cum este prezentat mai
jos:

File Edit shell Odsug Options Windo\^¢ Hdp

>>> answer-I a
.>>> far 1 =r- ranc!e(10);
anstger+a - I

>>> Fr=nt (answer)

b-:->?,
i
iLn: 35;Ccwh4!

87
Capitolul 12 - Bucle ECDL Computing

12.3 TIPURI DE BUCLE

I) Concepte

Am vazut ca buclele au o structur5 si un aspect particular in Python.


foriinrange( 10):

statement

Blocul de cod indentat, dup5 linia (for,, se considera c5 se afla tin interiorul bucleil.
. Codul aflat inainte de bucl5 se execut5 ;i apoi se executa bucla.
. Codul aflat in interiorul buclei este executat de mai multe ori.
. Codul aflat imediat dupa bucla este executat doar dupa ce bucla a flnalizat de
repetat codul aflat in blocul indentat.

Pan5 acum am studiat bucla de baz5, ins5 exista cateva variatii de bucle care se pot utiliza de
aSemenea.
Un alt tip de bucl5 utilizeaz5 un test logic in loc de range(). Aceasta poart5 numele de bucl5
winile.
O bucla while testeaza o expresie boolean5 si repet5 executia buclei atata timp cat (i.e. While)
expresia boolean5 este adevirata.

Cum functioneaz5 programul:


.' Exemplul urmator va initializa o variabi15 x la 3000 si o va imparti la 2 atata
timp cat x este mai mare ca 0.5.
. Apoisevaopri.

Exemplu: O bucld While

1. Deschideti Python.
2. Creati un nou fisier numit \hThile.py.
3. Tastati codul de maijos:

File Ed)i Format Run Options \lyiltdow-i Help


I 3,,,|rJQ
__i.- 5l a .a,5

rJ=i:tr_( X I
x t. s| I, 2

4. Rulati programul.

File Edit Shell Debug Options Wlndov/: Help

88
ECDL Computing Capitolul 12 - Bucle

intr-o buc15 lThile, dac5 testul logic este mereu adev5rat, bucla se va repeta la inflnit. Ca
urmare) va deveni o bucl5 inflnit5.
0 bucl5 infinit5 nu se opre;te niciodat5. Ea folose;te cuvintele cheie "while true", urmate de
semnu1 :
intrucat ne dorim de obicei un program care s5 se opreasca la un moment dat, buclele inflnite
indic5 de obicei o eroare.

Exemplu: O bucld infinitd

1. Deschideti flsierul While.py.


2. ModiflCati teStu1 logic astfel incat linia s5 contina textul lThile True:

Flle Edit Format Run Options Wlndows Help

x - SG,rJO

l=.==r;I( x )
* - x / 2

unul

l|n 5)Col fll

3. Rulatiprogramul.
4. Putefi opri programul prim apelarea meniului Shell, comanda Restart Shell.

Flle Edit Shell Debug Opt-tons Windows Help

'¢'lew Last Restart F6

i.e9721e-313
ulii
9.€e6rJ6e-S19
.T€3Cl3e-=i19
.STi5e-SIS
i.|a576e-3|9
5. =t29e-3=L|
2. 96i!4e-32,I
i.qL==e-S2l:I
i.4|e-3=|
7C,5e--32_i
. ,:i5Se-52=

12.4 RECAPITULARE

I) Concepte

Exemplu: Desenarea unui vdrf de sdgeatd


python poate fl utilizat pentru a scrie un program ce deseneaz5 un varf de s5geat5, precum cel
prezentat mai jos:

89
Capitolul 12 - Bucle ECDL Computing
r-_ _---_--_--_------_------ ---_--_---------_------- ----- -_-- --_----------___-_ ---y--- -------_--__- ----__ ------------_ -_LL--_-__
i7K",.

File Edit ShE!l Debug Options Wirldows Help

Pyction 3.2.3 (defau|eJ Apr 1£ 20&2, 0?:i5=24) !lusG v.15GD 32 bit; (Izlt;e1)3 on t_fin th
32
Tkpe "cap`J,'rignt:", "CredlCSn Or "|lCen9e() '' So-.r more informal.ic)I_.
RESTmT

pTn*tlVTqfl

ie*kseh9>*luV*tl"maT¢

uuxHfl?rfu¢m,HT{nrfudr theveV

~ | ~ ~ | | | * | | | ~ | | ~ « ~ ~ \|

__fr nd
Ln. 15,Col 4

Acest lucru ar putea fi realizat utilizand multe instructiuni print(). Cu toate acestea, poate fl
realizat cu mai putine instructiuni, prim utilizarea buclelor, finc[iilor ;i procedurilor.
Pentru desenarea sagetii, fleCare rind de Stele trebuie S5 fle centrat pe orizontal5 in loc s5 fie
aliniat la stanga. Exista o functie care face acest lucru. Se numeste center(). Dac5 variabila numit5
answer stocheaz5 un ;ir de stele, urmatoarea linie de cod adaug5 spatii inainte ;i dup5 stele pentru
a crea 30 de caractere in total.
answer-an swer. center( 3 0)

1. Descinideti flSierul Arrow.py creat la capitolul anterior.


2. ModiflCa[i Cddul duPa Cum urmeaZa Pentru a Centra Stelele.

7`-

Fi!r= Edit Frlmlai r,iI,ir C`ptlcns i/i-(lndrtv\c Llel;)

ie=- stars(number of st,arE)) :


en5We=- "
i-=i- i =l-- I,=!-r.l=+el number o£ scars ) :
answer+-I ,r I
Bgl'SWergan9Wer. =enCer (50)
rer'i_--_'=_ amgbver

j3r|nt( StarE!(1)
_t=.-tt3J':I ( Stars (2)
p=-i-rJt ( Stars (3)

3. Rulati codul pentru a obtine urm5torul rezultat.

i } > ===========--==-I------======-i- RE S TAFLT ===--===-------=-==-=t==+==-+==


>>> mm£
i

` _ -

4. Pentru a obtine o form5 similara unei s5geti, primul rand ar trebui s5 aib5 o stea, al
doilea 3 stele, al treilea 5 stele. Modificati valoarea parametrului din fleCare
instructiune print (), dupa cum urmeaza, pen:ru a remedia acest lucru:

90
ECDL Computing Capitolul 12 - Bucle

!7¥-/

Flle Edlt Fl.ll--3r F,lJr ,_=trC77= -EL-

==: Lit.ar_i (nunbe= Of 8t;arS) :


aT|3Wer=. I
-F=,I 1 i:-- i-.=f=I:,ref lqtiEbP_I af SCa=3 ) :
ai|sTderi-r I I
arJ=7,rer=arl37re,I. CE:nt;er I 3C( I
=== _ _-_-_ aitr.37rfe+-

B=,I_I.t i .5tarE! lll


pr|=Jt I gCar3lSI
I:i,irlt I Stars )'5:I

5. Rulati codul pentru a obtine urmatorul rezultat:

RESErmT -

Putem construi o expresie ;i scrie o subrutina care sa creeze varful de s5geat5 ;i sa reduc5
volumul de cod necesar. Avem nevoie de lO randuri de stele pentru a constmi varful de sageata.
Luati in considerare expresia:

i*2+1

Atunci cand i-0 valoarea expresiei este 1


Atunci cand i-I valoarea expresiei este 3
Atunci cand i-2 valoarea expresiei este 5
Atunci cand i-3 valoarea expresiei este 7
Atunci cand i-4 valoarea expresiei este 9
Atunci cand i-5 valoarea expresiei este 1 1
Atunci cand i-6 valoarea expresiei este 13
Atunci cand i-7 valoarea expresiei este 1 5
Atunci cand i-8 valoarea expresiei este 17
Atunci cand i-9 valoarea expresiei este 19

1. Atribuiti-i noii subrutine numele arrow_head().


2. Invocat'i arrow_head() ca ultima linie a programului.

-=tar3 la,:2nber Of SCa=--'l :


an.sttter- I I
==-- 1 -I- i,i-I"-I,=( n7Jrrfue= af Scar_. )
aLt.3tJ7erT= ` ' I
i-J3T/re==an3t,Je=. CeL-_Ce= l39 I
_ = I _ i___ aL-_3T/re=

=== ar,--,.J..,- ---i,irJ u =


--== i----- =a---,== t=l=l,"
r`__:-+I /Jta=3 (_i.2-i i '!

arra,,f heaal i

91
Capitolul 12 - Bucle ECDL Computing

Nota: Subrutina arrow_head() este o procedur5, intrucat nu returneaza nicio valoare.


Subrutina stars() este o functie, pentru c5 retumeaz5 o valoare.
1. Veriflcati modul de functionare al programului inainte de rularea codului:
. prograinul incepe prim :xecutarea procedurii arrow_head().
. Variabila i va avea 10 valori de la 0 la 9 si ca urmare procedura arrow_head() va
rula de 10 ori, de fleCare data aPeland fuLctia stars(). Acesta este un exemplu al
unei subrutine care apeleaza o alta subrutina.
. Functia stars() confine o variabi15 numit5 answer. Aceast5 variabi15 va stoca un sir
de st:le pentru flee,are inStruCtiune Print ().
. Subrutinele care apeleaza alte subrutine reprezinta una dintre cele mai importante
modalitafi prim care problemele complexe sunt descompuse in probleme mai mici,
flecare p5rticica mai mica executand o parte mica, bine deflnit5, a problemei
globale.
2. Rula[i fisierul Arrow.py pentru a vedea varful de s5geat5 pe care codul o deseneaz5.

> > > -----------._.---=--=-=---------- RESTZ!JiI ----------------a-a---==-------=--


>>>

12.5 EXERCITII RECAPITULATIVE


1. Care este scopul principal al unei bucle?
a. Pentru a preveni iesirea din program la fimalul acestuia.
b. Pentru a v5 deplasa inapoi la inceputul programului.
c. Pentru a conecta un computer la altu1.
d. Pentru a executa anumite instructiuni in mod repetat.

2. Cum se numeste o bucla care se repet5 1a nesfrsit?


a. Obuc15pixel.
b. O bucl5 sparta.
c. O bucl5 inflnita.
d. Obucl5 ciffy,.

3. Pentru a numara anumite elemente) folosim in mod normal:


a. obuc151oop
b. numere aleatorii
c. obuclawhile
d. obuclafor

4. Pentru a repeta anumite acfiuni de mai multe ori, far5 a numara repet5rile, folosim in mod
normal:
a. obuc15loop
b. numere aleatorii
c. obuc15while
d. obuclafor

92
CAPITOLUL 13 -
BIBLIOTECI

La finalul acestui capitol, veti putea s5:

. Intelegeti termenul de eveniment si scopul unui eveniment?n cadrul unui


Program.
. Utilizati evenimentele apatute la actionarea butoanelor mouse-ului, la ap5sarea
diverselor taste de pe tastatura, 1a ap5sarea unui buton de comanda, temporizator

. Utilizati bibliotecile generice disponibile, precum: math, random, time


Capito]ul 13 - Biblioteci ECDL Computing

13.1 UTILIZAREA BIBLIOTECILOR

I) Concepte

Functiile ;i procedurile ofera o modalitate de reutilizare a codului. Alte modalit5ti de reutilizare


a codului pe o scara mai larga sunt:

Biblioteci

O bibliotec5 reprezinta o colectie de proceduri si functii deja scrise in cadrul unui program, ce
pot fl reutiliZate. O biblioteca economiseste mull timp ;i mult5 munc5 de scriere a procedurilor si
func[iilor de la inceput.
. Codul sursa al functiilor bibliotecii nu este vizibil in program.
. O bibliotec5 este adfugat5 prim scrierea numelui acesteia in comanda cimport,.

Modulul ECDL Computing se bazeaza pe utilizarea urmatoarelor biblioteci:

Random, Math si Time


Biblioteci standard ce sunt incluse in Python si care fumizeaza functii pentru lucrul cu numere.

Pygame
O bibliotec5 op[iona15 pentru lucrul cu grafice si animatii.

Cod Boilerplate
Reprezinta codul utilizat in cadrul unui proiect fara modiflc5ri sau cu modiflCari minOre. De
exemplu, acest cod poate fumiza functii pentru aflsarea imaginilor pe mai multe pagini ale unui
document.
. Codul Boilerplate este un cod surs5 vizibil in program.
. Codul Boilerplate este utilizat prim includerea tuturor codurilor sale surs5 in programul
la care se lucreaz5.
La utilizarea unei biblioteci sau a unui cod Boilerplate, nu este necesar sa cunoasteti detaliile
legate de modul de functionare al algoritmilor din acestea.
Acest material include cod boilerplate pentru initializarea si utilizarea bibliotecilor.

13.2 BIBLIOTECI STANDARD

I) Concepte

Instrucfiuni de import

Python utilizeaz5 instructiunea de import pentru a putea utiliza codul din anumite biblioteci.
Exist5 2 versiuni ale instructiunii de import:
Prima versiune utilizeaz5 cuvantul cheie import urmat de numele bibliotecii.
Cand utiliza[i aceast5 versiune de import, functiile din biblioteca au intai numele bibliotecii,
apoi un punct ;i apoi numele functiei. Un exemplu este prezentat maijos.

94
ECDL Computing CapitoluI 13 - Biblioteci

File Edit Format RUT) Optlons t^''lnden,i HEIP

___t=,I __- raf.aem

Er'=lt = U`gL= , i-- `-I, L`---T--


) I.I-==t( raLaldSm.CIh.o=ce( fr7Jlit ] I

Exemplu de instruc[lune import ford denumirea func[iilor

Rularea acestui exemplu va retuma numele unui fruct aleator, asa cum este prezentat in
exemplul de mai jos:

Shell Debug Optian5 I.'\indo",a Help

6 ic ..-:;-I

O versiune alternativa de instructiune de import numeste flecare functie care trebuie importat5.
Ea utilizeaz5 cuvantul cheie from, apoi numele bibliotecii, apoi cuvantul cheie import, urmat de
numele functiilor care trebuie importate, separate prim virgula.
Cand utilizati aceast5 versiune de import, functiile din bibliotec5 nu trebuie sa aib5 inaintea lor
numele bibliotecii. Un exemplu este prezentat mat jog.

- I X I
File Edit Format Run Optlons _I.'lindaws Help

i-,--=--,, raJ1'da" i_i_€=_:--,-- Choice, _+a1-ii|r_t

f=uic . ",--I-+`,i- i :-I,i ,


p=i=-I( choicel fruac I I

_____ ______ ________________ ___________ ______ _ _______ __JtT+ SLCclLOJ


I
Exemplu de lnstruc[iune import cu denumirea specified a func[iilor

3 Biblioteci Standard

Exista 3 biblioteci standard predeflnite in Python:

BIBLIOTECA scop

time Functii legate de limp, Gum ar fl pentru ail;area datei, orei


curente sau zilei din sapt5mana.

random O bibliotec5 pentru generarea numerelor aleatorii.

m ath i O bibliotec5 pentm functii matematice.


Capitolul 13 - Biblioteci ECDL Computing

Biblioteca time

Exist5 2 functii extrem de utile in biblioteca time. im general, cele 2 functii sunt utilizate
impreuna:

FUNCTIE SCOP

strftim e Aceast5 functie preia un obiect al bibliotecii time ;i il


converteste intr-un ;ir de caractere. Aceast5 operatic poart5
numele de formatare. Exista mai multe optiuni de formatare
disponibile.

gmtime O functie care retumeaz5 un obiect de tip time pentru ora


curenta.

Functia strftime utilizeaz5 lspeciflcatori de formatl pentru a descrie exact cum ar trebui s5 arate
sirul rezultat. spre exemplu, 1iterele l%Yl sunt inlocuite cu anul si ca urmare sirul tin anul %Yl ar
putea fi modiflCat im Sirul tin anu1 2001l prim functia strftime.
Regasiti mai jos un label al formatelor disponibile pentru functia strftime:

SEMNIFICATIE EXEMPLU

Zi a sapt5manii (scurt) Mom

Zi a saptamanii (lung) Monday

Numele lunii (scurf) Sep

Numele lunii (lung) September

Data?i ora l5/09/76 17:22:56

D ata 15

Ora (format 24 ore) 17

Ora (format l2 ore) 5

Zi din an 350

Num5rul lunii 9

M inute 22

AM sau PM PM

S ecunde 56

Num5r s5pt5malla 15

15/09/76

17:22:56

96
ECDL Computing Capitolul 13 - Biblioteci

FORMAT SEMNIFICATIE EXEMPLU

An (2 cifre) 76

An (4 cifre) 1976

Zona Timp GMT Standard Time

Exemplu: Marcaj de limp


in acest exemplu, functia strftime este utilizat5 pentru aflSarea unui marCaj de limp. Acest
exemplu utilizeaza multe dintre optiunile de formatare din tabelul prezentat mai sus.
1. Creati un nou program numit Timestamp.py.
2. Scrieticoduldemaijos.

File Edit Fclrmat Run Options Windows Help

E=-.=r,- t.ime =rr,p.J=.I Strft.ime, gThtime

tJr|r?_I,( 'E\.=i1.rJ_i 3-_n.Ill ?f,'SiLa r|1n- rJrI: I, atrftime("%a, %d--=t-i-i- -=---::-I:.:", gmtine()) )

I_n_:ZTcb

3. Rulati programul pentru a ob[ine urmatorul rezultat. Data ;i ora af1;ate VOr fi Cele
curente, nu cele aflSate in imaginea de maijOS.

File Edit Shell Debug Options Wirldows

Biblioteca random

Cele 2 functii utile in biblioteca random sunt choice?i randint.

FUNCTIE SCOP

choice O functie care alege un element aleator dintr-a list5

randint O functie care alege un numar intreg aleator intre 2 numere


intregi. randint( I ,6), spre exemplu, alege un numat aleator intre
1 si 6, exactcasi cum ai arunca un zar.

Exemplu: Aruncarea zarurilor


in acest exemplu, functia randint este utilizat5 pentru a arunca un zar de lO ori.
1. Crea[i unnouprogram numit RollDice.py.
2. Scrieticoduldemaijos.

97
Capitolul 13 - Biblioteci ECDL Computing

File Edit Famlat Run Optlons Wlndo¢tws Help

_=__I,=r,I ranclom =r_-i= =_-I =arldi_r.t

I
l`/
I
-`rJ"r` )

i i:-- =c=-,.=t-I (0,iI=,I :


r:.--i-,I( rat,+cl=r'.I( i,6 ) I

3. Rulati programul.

Biblioteca math

Unele functii din biblioteca math sunt:

FUNCTIE SCOP

log10 Logaritm in baz5 10. log10( lOOOOO ) este 5. Num5r5 numarul


de zerouri.

POW Ridica la putere. pow(10,3) inmulte;te 10 cu 10 de 3 ori, asa


c5 rezultatul este 1000.

sqII REdacina patrat5. sqrt( l6 ) este 4. sqrt( 25 ) este 5.

sin Sinusul unui unghi masurat in radiant.

COS Cosinusul unui unghi m5surat in radiani.

tan Tangenta unui unghi masurat in radiani.

facto riaI Numatfactorial. factorial( 5 ) este 5 * 4 * 3 * 2 * 1 adica120

In plus, bibioteca math confine valoarea pentru constanta matematica pi.

Exemplu: utilizarea bibliotecii Math


I. Creati un nou program numit MathExample.py.
2. Scrieticoduldemaijos.

98
ECDL Computing Capitolul 13 - Biblioteci

File Edit Format Run Options Wmdows Help

ir==== mEth

prir_I ("i:.=iIP|e= ==== =ir_= ==3=i-_ i|ihr=__,I )


pr|-lt-( "=T=i=E i-=== == i ==-:'', mach.J3q=C(2) I
r'P1 1S aPP==:.:in3Ce|_J' :r', mach.Pi )

3. Rula!iprogramul.

Flle Edit Shell Debug Options Wlndow5 Help

13.3 EVENIMENTE

I) Concepte

Fluxul unui program poate depinde de desfasurarea anumitor actiuni. Utilizatorii pot declansa
aceste actiuni prim executarea unui click de mouse pe un graflc de pe ecran, prim apasarea unei taste
de pe tastatura sau prim accesarea unui link intr-un browser web. in python, aceste actiuni poarta
numele de evenimente.
Evenimentele sunt utilizate exclusiv in jocuri. Evenimentele care determin5 miscarea unui
personaj intr-unjoc sunt declansate de o actiune a utilizatorului, cum ar f1: utiliZarea S5ge[ilor de
directie pentru a muta personajul intr-o anumit5 directie, utilizarea unui buton al mouse-ului pentru
a face personajul s5 sar5, etc.
Anumite evenimente pot fl speciflce p5r!ii de hardware. in cadrul unui sistem de alarma ce
utilizeaz5 un computer pentru a monitoriza intru;ii, o persoana care se misca in apropierea unui
senzor poate cauza sau declansa un eveniment.
in uncle computere, atunci cand bateria atinge un nivel minim de incircare se poate declan;a
un eveniment si anume aflsarea unui mesaj de avertizare legal de inlocuirea bateriei.

Evenimente
Un handler de eveniment (event handler) reprezint5 o por[iune de cod proiectata sa execute o
actiune atunci cind se declanseaza un anumit eveniment. De exemplu, sage[ile de directie de pe
tastatur5 pot controla miscarea unuijucator in cadrul unui joe video. in functie de ce eveniment are
loo (sus, jos, stanga, dreapta), programul va executa codul lhandler-ului de e;enimentl adecvat, care
va realiza mutarea corecta a jucatorului.
Uncle limbaje de programare au un sistem de 'inregistrare' a func[iilor care sunt apelate atunci
cand se intampla diverse evenimente. Putem recunoa;te aceste func!ii dupa numele lor care incepe
cu cuvantul 'On' urmat de numele evenimentului. Spre exemplu, 'OnClick' este apelat5 atunci cand
utilizatorul genereaza un eveniment executand click oriunde pe ecran.

99
Capitolul 13 - Biblioteci ECDL Computing

Exemplu : Explorarea handler-elor de evenimente


Python are o biblioteca numita turtle. Este un simplu pachet inclus in instalarea aplicatiei
Python. Pentru a utiliza aceast5 biblioteca trebuie sa utilizati comanda de import.

7Z Tu* a-d'e I,mg py _ C P}¢hon3Zmrtle-d,.~mg py r#ifrtyRTEL\w/

rF.lc Edit i;inal Run Opt(om iA/lrldo\^c Help

F I:==t- turtle _-1=PO`=t the t`=rt;1p- ilb=ar.I.


screenr - curt,|e.Screenn ¥glve c!1e aC--eer! a re±e=e=.Ce
point;er a Curt,1e.Itlrt,1e()5g=\,i t!-.a ta==ie a =e=-e=,a-',I.=

-!r_-I h10

point,er.9eC,i.(POlnCer..i,CO=u+|O)€r-a,.,a -I:r,e p=,1r.Car i.a F,iXeiS uP


-=-- h20=

polnCe=.seCy(POlnCeZ.yCO= I)-1O)trotye crLe Pointer lC' plJ2eiS dO1`m.


___== h3().I

point.er.£o=ward(1O)*r.ova t-h-e F=lnter i,1 p=.v.tis r-. ..r,.e rig_.n.t


•J,I: h4():

point,ez.back(1O)crr®...e the polr-te-- 1.3 pixeLi to i--i--.a left


1,t±_ h5():

palncer.per.'i:p ( ) = -=c-JP ±=a'.y_=r_tj-


--I-_ h6():

pc)lncer.penclotrrn ( ) i=-a-La_rt Cl=a,.,rip.a


:,=L r1|0:
polnCe=.PenCO|Or("±|a=`J{n)*Ct2ar?"Je t-.-r-a Ci=a'-.-lr(a COL-_"J= [= black
I,,=i hSO:
polncer.pencoior("-I,JJ---en)Sc-I-ange t-`r= -Ira:,-lr,g cD=O-== tj -.r:+.=te.
I-I.=2i h9(x,y):

pointer.left,(leo) i ci--,==,c'e -I:`.e Pei--.rJ==. =ii=eCtler. CrJ. 1-JrJ deg-reeji.


==- hlOO:

point.er.color ("I ==") ,I-c_r'arT.ge POlr`Ce-r f=|i r=O|C"L2-r

9Creer)I.Onkey(h1, a-_-_=| ±-I+LTter- -.ne uP arrO',/ 1S PreSSC-i =l=r. I--i =,llELr,JL,-.-I-i


screenr.onkey(.n2, o£-=,.rrJ6) #'rhen -.|e drJ\`Tl ar=alV 13 Pros--ed rur- :`.-i S:=b=O.Lltir,-e
screenr.onkey(tis, nF,,i.=f-i ")a-I,,herl -I_r.e rig-I,I a==e--, == P--a-JSe| -.lr- =`-5 a-lib--a.r-=r.e
gcreenr.onkeylh4, nief'_") a,..i,ef. =:r`.a left =-ri--1,-7 i-a a--e5-qe'| --=r- i,)i Sl=brO,=r-lrle
screerlr.On±ey(h5, r':I") a:.---.=r- I.'r,€ ie-Lte= P i.j3 Pre3LaeCl -r-il--. ill_ Sub-reu`.1.r-e
screenr.onkey(h€, ''='')1:,---.er- tl'.a 1=.._uar a == P=eSileCl -I-i.¥; ;1-6 -=uL+reuCJ.ne
screcnr.on±ey(a?, nL,-n) Wit;-^-e=l I_n.e ie-.-+a-V I =3 I,-re-I,Sect I.`un E`.7 stAbr,.-uClr.e
gcreenr.onkey(h8, n--.-fl) nl-"2..er2 t_-ne lea-Le= b lS I,re93eC! I,Lan i..a 5t2b=-€uCjLr=e
screenr.onc||ck(h9)?wher. rcJLlge 2S CEick=cl or,. c!\e -pc=een rur. rI=, a,=lJrC,--LiC|r.e
9C-reenr.anClner(hiO,5OOO) #ir.hell tir-er CIF-a-I Out rur, I-¢L|LJ Sl:b=SLtCir.a
gcleenr.119ten()* Check CO _lee 1£ ari'J e`,erlt h_aS T±apper.e6

turc|e'zraln|oc)p()3keep |ceplr-a

LIL

Cum functioneaza programuI:

Comentariile din program explic5 ce face fleCare din Cele 10 subrutine. Programul contine o
I)ucl5 continua, veriflcand la fiecare trecere daca un eveniment a fost declansat. Atunci cand un
eveniment a fost declansat, programul apeleaz5 o subrutina atribuit5 respectivului eveniment. Cand
termina, revine la corpul principal al programului.
. Primele 4 handlere de evenimente onkey sunt utilizate pentru a determina dac5 este
ap5sat5 vreo tasta de directie de pe tastatur5. Subrutinele h1 -h4 sunt invocate imediat
ce este detectat5 o ap5sare a unei taste. Acestea sunt evenimente generate de tastatur5.
. Urm5toarele 4 handlere de evenimente onkey sunt utilizate pentru a detecta daca sunt
ap5sate tastele p'd,b sau w de pe tastatur5, apeland subrutinele h5-h8. Acestea sunt
evenimente generate de tastatura.
. Urmatorul handler de evenimente este utilizat pentru a detecta un click de mouse si
apoi a rula subrutina h9. Acesta este un eveniment general de mouse.
. Ultimul handler de evenimente este utilizat pentru a declansa un eveniment atunci cand
cronometrul se opre;te. Dupa scurgerea timpului) este rulat5 subrutina h1 0.
Not5: comanda ccscreenr.listen" este utilizata pentru veriflCarea altOr eVenimente.
. Introduceti codul din imaginea de mat sus, fara comentarii.
. Salva[i programul cu numele Turtle drawing.py.
. Rulati programul.
. Remarcati schimbarea cursorului din negru in rosu dup5 5 secunde. Acesta reprezinta
declansarea evenimentului din program de catre un temporizator.

loo
ECDL Computing Capitolul 13 - Biblioteci

. Remarcati c5 atunci cind apasa[i tastele de directie de pe tastatura, cursorul se


deplaseaz5 si traseaza linii. Acestea sunt evenimente declan;ate de ap5sarea fiec5rei
taste de directie de pe tastatura.
. Ap5sarea tastei p de pe tastatur5 dezactiveaza stilou1, acesta flind un alt eVeniment
generat de tastatura.
. Apasarea tastei d de pe tastatura activeaza stiloul, acesta flind un alt eVeniment generat
de tastatura.
. Apasarea tastei b sau w de pe tastatura modiflc5 culoarea cemelii stiloului, acesta flind
un alt eveniment generat de tastatur5.
. fn flnal, executati click pe mouse oriunde pe ecran. cursorul mouse-ului se va roti cu
1 80 de grade. Tocmai ati declansat un eveniment generat de mouse.

13.4 BIBLIOTECA PYGAME

I) Concepte

In Python, folosind Pygame, codul pentru gestionarea evenimentelor este scris astfel incat s5
se solicite in mod repetat informatii de veriflCare a eVenimentelOr Care au aVut lOC. Imaginea de
mai jos se refer5 1a exemplul legat de flrele de iarb5 descris mai tarziu in acest capitol. Pentru
moment, sa aruncam o privire pe cele 2 evenimente evidentiate mat jos.

File Edlt Format Run Options Windows Help

i A---1-- p±,galme =f Cr.a ,I-ael- :r-a-3 .=ilCkeCi tit-a X to clc)-a,a.


lief check for quito:
I e=en_i-- - pyqame.evet\,t.qecll
-- I_ event.t\pe -- pygame.QUIT: TLr I=_ ,cser =1lc1=ed ==-J3e

p|'gane.quit ()
. i-Li-_-

# Keep checking fLl= eTJerl-t=


# IF there 1-Jag a ClraU fu--Cti.I" h-=eEJ =ed=a`-=lr,Cr tr!e -aC:=een.
jef do evenc|oop( dra= ftlnction )
click - pygane.tim=.clock( )

i This ill_-Llt=- the I..I.r.lie loop to a max of iO t|Ee3 Per SeCOr_3.


i 1=aTJe th1=- a-Ct anCi I-re 1-:lil `ase all CPU \`..a t`aE)_.
i
c|oc,k.C|Ck(10)
=J: Check fC)I quit()
i_ECTL_i_T`_

=f( draw functic)n )


+ Clear th_a 3C.reen tO grelJ,
screen.fill (GREY)
draw function ()
i Sho,-/ ?_-I:n_Stet.7e= I.Je I-.,a i,a5t drat.m.
pygame. display. update ( )

..,._.-i

Gestionarea evenimentelor eviden[iate tn fiiierul BoilerPlate.py

in func[ia check_for_quit(), o bucl5 for verifica in mod repetat dac5 evenimentul Quit a avut
loo in Pygame. Evenimentul QUIT este declan;at atunci cand utilizatorul apas5 pe butonul X aflat
in coltul din dreapta sus al ferestrei Pygame. Dac5 acel eveniment este detectat, functia
check_for_quit() retumeaz5 valoarea True. Dac5 evenimentul nu este detectat, func[ia
check_for_quit() retumeaz5 valoarea False.
A doua portiune evidentiata de cod, apelarea func!iei clock.tick(), este relationata de asemenea
cu gestionarea evenimentelor; ea stabile?te frecven[a de rulare a buclei while, care la randul ei
stabileste frecventa de actualizare a ecranului.

101
Capitolul 13 - Biblioteci ECDL Computing

Flle Ec]it For-i Run Optlons \J\/indOWS Help

tit -J=aTr biaC.e O= =ra=-I-.


- i i=- I:-_a I.-J=±E= =f I:-_= b=a1= 5-I r====-

= I- =r-i I ii~e -=cr.t==,|== I-- I.-= r==[=s= a-l=it==,=`,


(i,=__ d=a',r ±|=cle( I, a, I )
x = i . iO + 5O
i ix ,-T=1i r_I,-e -Ll-_i I_T=l= Elf i:I.a C3=-a_-5 iefC -_I ri'.-I,_I,
iTT ?I--a =a=.Cllr--l, U C:r-3r.`lf=-= CL:I br a i-a-rJClar- I-1T,--JJ== -J] tL,-i l==a==- '=-7Ta-_-L= ==-
= trl_= I-TIE_±l.

I_r\-a 2+Ill-15) =1-i.kE:= T=:r= I-jJEl=- -=f:=eai =Pa=t.


dx - ran_dirtt( -1O, 1C, )/1.i + J2.I.li-1S)
shape = i(x-2,loo), (x+2,1C,0), lx+dx-a,5C.), (I-d!t-3,5'_1)i
pygame.gfxdraT+.aaPO|ygC.a( 3C=ee=-, SF-ape , G-BEE:Nt
pygane.crfxd=at*T.f=|ied Pa|Ygen( 3C=ee=:, B:A_ape , GREEN)

FFF |t=--3C,i I-i,-- I-: t=aCL== I-= I-====


L=J= ±=-,=r"rr,a__-_I 0
POj! = I_J'.=arr.e,m3'j=E.get POii[ )
-==-- i -:- rc=:--.=e(3C/) :

draw blade(i, pos[0]/200, po3[1]/5OO )

draw repeatedly( clraw c]raJ3_EI )

Gestionarea eveninentelor eviden[iate tn fi[ierul Grass.py

Un all exemplu de eveniment evidentiat mai sus este procedura draw_grass(). Este apelat5
mouse.get_pos() pentru a determina pozi[ia mouse-ului, care la randul sau este folosit5 pentru a
determina pozitia flrelor de iarba.

13.5 COD BOILERPLATE

I) Concepte

Pentru utilizarea bibliotecii Pygame, un program trebuie sa adauge aceast5 biblioteca, s5 o


initializeze, s5 deflneasca culorile si sa execute o serie de alte actiuni. Codul Boilerplate este oferit
?n acest material tocmai pentru a executa aceste actiuni.
Nu este necesar sa cunoastem Gum functioneaz5 in detaliu codul boilerplate. Trebuie s5 slim
doarca:
. Tuplurile sunt utilizate pentru a deflni o serie de culori folosite la pictarea ecranului.
. Codul boilexplate import5 din biblioteca random pentru a obtine functia randint.
. Are un eveniment bucla.
. Utilizeaza randint pentru a genera un numat intreg aleator.

Exemplu: Explorarea filSierului BoilerPlate.py

1. Localizati si deschideti flSierul BoilerPlate.py fumizat impreuna cu acest material.


(Fisiere1; de lucru se pot aescarca de pe site-ul www.ecdl.ro)

102
ECDL Computing Capito]uL 13 - BibLioteci

[ ,:. Boifcrf)late.py - C:\P)^hon32\Boiiemate,py


- I X
File Edit Format Run Options Windows Help

r _-Txp=_,_-==LiT:.i...6i:,lei
|=_-I =i- ,i Pygame
l=,-l= -i -- I:- pygame. gfxdra`+
i_i_b_r_a__a_i: _ _- _--
i
f:I,=,I__ randOITl lT,1l:,==-I ra.I)Ci|nC

Tr= If-=tiaii== IF±-g3J-I-I '


pygame.|n|t, ( )

a Defi_|e I-I.e cLl|Ct=_i ire i-rill -IL2SE lr- T|==E I-a=r-_=t


GEE:Y = (23O, 23O, 2SO)
GREEN = ( rJ, leo, a)

ii Sreat-a a =l==een_ 1=l|aC |= £L|l_i I_\1i±e ar_i _=JLIL`, i-,iC.2-I

screen = pygame.d|spiay.E!et made( [4OO,300] )

Lm 1(Col:0
I_ _____

2. Priviti liniile aflate dupa comentariu1 # Import the {pygame' library. Toate cele 3 linii
continand cuvantul {import, se refer5 la utilizarea bibliotecilor:
. {import pygame' permite accesul la biblioteca pygame astfel incat aceasta s5 devin5
disponibil5 spre a fi utilizat5.
. 6import pygame.gfxdraw' permite accesul la o extensie op[ionala a pygame care
deseneaz5 diverse forme mai netede.
. biblioteca crandom, furnizeaz5 numere aleatorii. Comanda de import permite
accesarea functiei randint pentru a genera numere intregi aleatorii.
Restul de cod:
. initializeaz5 biblioteca Pygame. Aceasta contine multe variabile care trebuie sa aib5
valori initiate.
. deflne'ste si initializeaza 2 culori, gri ;i verde. Parantezele rotunde indica faptul ca
aceste culori sunt deflnite ca tupluri cu 3 valori intregi.
. creaz5 o variabi15 numit5 screen ce reprezint5 o fereastr5 de 400 de pixeli l5time si
300 de pixeli in5ltime.
3. Derulati - codul boilerplate defineste uncle proceduri pentru reprezentarea grafica a
puncteior?i pensulelor. Cititi comeitariile care descriu flecare subrutina.
Subrutinele sunt explicate mai jos mai detaliat decat in comentarii. Aceast5 sectiune de cod
fumizeaz5 functii ;i proceduri utilitare.
. plotpoint va reprezenta graflC un PunCt Pe eCran. Utilizeaz5 numerele 400 si 300,
reprezentand l5timea si inaltimea ecranului, pentru a scala punctul in pozitia
corecta pe ecran.
. draw blob va desena pe ecran o pensu15 verde circular5. De asemenea, va aflSa
coord_onatele pensulei.
. apply_transform va aplica punctului o ctransformare afflne (POlinomia15 de ordinul
I),. Aceasta este utilizat5 pentru distorsionarea formelor. Poate marl/micsora, roti,
reflecta o form5, o poate muta la stanga sau la dreapta, sus sau jos. Pentru acest
modu1, este suflcient s5 slim faptul ca transformarea affine preia anumite
coordonate si retumeaz5 altele ca si rezultat.
Imaginea de mai jos este prezentat5 ca exemplu al comentariilor ;i structurii codului din
sectiunea anterioara.

103
Capitolul l3 - Biblioteci ECDL Computing

Flle Edit Format Run Options Wlndows

i Ib-lE P=CIC==du=E Plots dot 3r\ tI._a sc=eE±rJ


a IIt'e rlaCZh.g fo=^ x art_rJ `7 1= tCJ 3CF-1= I::-ie pc.L==ti=rJ= ef FC,==J1=-a
il 30 t--halt tI.e``' fit _--LCe|\,I a)I-- tile 5==eer`_.
=L-==_ Plot pc`lnt(
x -Tp[o]+3.6)/iO I
" - (9.a-pe1])/10 .
I a
p ):
eC,a
Sod
pygame,draw.rect(E!Creen,GREERT, lx,y,2,2) )
i
pI'gaIT'e. display. update ( I)

i This? PrOCed-.re Clra"a a r'JR€I!? =lrr=,=1a= BIG,I er- tT.--e 5C=eer-


rJE,-i draw blob( I/ size ):
x = I_-+I-lpm)
I = lit_(pl|U
pygame. gfxdraw. filled c.ircie (BCreen,X, y, elZe'`2+2, GREEN)
pygane. d|3P|ay. uPdate|)
pr|!1t( rlI,'',Xr",'n,y/I-/ -=i=ei "rS|Z.e I
pygame.time.walt( '±`O )

a EiFP|,i, trarl=fC,r1,i(/ == a I-,i-l===C3=- tI--El1= I-ake-Q a POLE-I


i ECj=lt=Cl=' Elf-i C7=Yej Llal=l= a r-E.7.-I FCJ=1t=CJr=.

a I i3 Or.a ,=lf the laf=1r|e C=EL-i_Oj:CIrm_a'.


¥ p i-p a polrlt that trle trE[r`-3fOrm I..71il be EiPPile± tC/
a I_-I,.is -I)±nctioll recuiL~n3 trT.a POSltiOr. Jf t!-,e POir-I alFte=
I: tl1-a trEmgfO=m has I,ee=- applied.
_+ef apply transform( C, P ):
i-Et,I_-:= I tic.I-p"+ct|:.p[|:-t:4!,I;l2]-plo:+tiS!.p[1l+tr5!)

4. Derulati - urm5toarea partea a codului boilexplate se refer5 la evenimente.


. Cititi comentariile din codul de procesare a evenimentelor.
. Reriarcati faptul ca check_for_quit() este o functie. Ea retumeaza o valoare
booleana.
. Remarca[i faptul c5 do eventloop() este o procedura. Nu comtine cuvantul cheie
retum, dar comanda ret=m nu retumeaza o valoare.

Codul de procesare a evenimentelor este:


. check_for_quit() veriflC5 un eveniment. El interogheaz5 Pygame daca utilizatorul
a ap5sat pe butonul 6X, din partea din dreapta sus a ferestrei. Daca da) este
momentul ca acea fereastra s5 fle inchis5.
. do eventloop() are o bucl5 inflnita, 6while True,, care veriflca in mod continuu
coinanda de inchidere a ferestrei si redeseneaza ecranul graflc. Desenarea repetat5
este relevant5 pentru animatie.
. do eventloop() utilizeaza ' o tehnic5 neobisnuit5. Parametrul transferat in
do_eventloop() poate fl O funCtie. Daca e;te intr-adevar o functie, atunci
do]eventloop va apela aceast5 functie de flecare data cand va desena ecranul
grafic.

104
ECDL Computing CapitoLul 13 - Biblioteci

( File Edfi Fc`-3& Rbm ep2zcns ,.?indc,JAS H±!-y __________ _ _____ _____ __ A

+ jiL>L' tJT,iTE=E =f ti-_a -I_ee= :-_a_C, cilC=ETed -Li-_= :.: I-I ====-a
===- crleL-k fC,I a-==tn=
i== e=e=c_--- I:rga==-eTe=C..=ee W i
-i eire=C`t--3i:a - I:rg-a_|JI== I =f ===-== --i=cLr=d c1=sE
E3rg-`q+-r- l :B
==t__I__ __rue

a Keep ,=:t.eck==_l= f=,I a-e=t=-


± IF I__-Je=E i.iLa3 a drat--f f=--i-t=C=. i-E=P =e5==----==-i I_=e -=c-=E=-I.
==-ill da ever?,t|OOP\ draur f=J=.TC=a= ) I
==ccE: - g:`±-gens- I-=n=. =l=ck l,:i

a r===- ==r+=t,a I.== --_-:-==± i=== I= a =J=± i-I ==) I-i=== E'er _seCC,I_Cl.
i _ieaTe ti-_i5 I-=t E£=-I i,=e T=-ii= -I-=E ±|i =EI 7Li-a ===.
clz}ck-tlCE: IT1=l t
==_ c=e=± Ier q==it-I) a

==a draw I-c=la= ) =


i =1ear tie _==ree= t= ,==e.,,
9l=eeLn_.f=|| lGi£¥!
a=aTJJ` ±==C=iu`= I +
i =1±=-I.= -I-fate---e= -JL-='Te --I_a,I_ a==-J7=_.
g±,gaz|= - d|JEia7J_,. xpdaCe I ;
_____ _±
Ln: B|i;-Col. T1

5. Derulati
Restul de cod ofer5 2 modalitati de desenare a ecranului.
cititi comentariile pentru proc;duri.
Aceste 2 proceduri ofera 2 op[iuni de utilizare a unui bucl5 eveniment.
. draw_once() va rula codul de desenare o singur5 data, apoi va a;tepta ca
utilizatorul s5 pat5seasc5 ecranul grafic.
. draw_repeatedly() va rula codul de desenare la nesfar;it, veriflcand de fleCare data
dac5 utilizatorul a p5rasit sau nu ecranul graflc. Aceast5 procedur5 este potrivit5
pentru animatii.
Functia draw_once() confine o secvent5 de ac[iuni. Aceasta include af1;area meSajelOr
Starting' ;i Tinished' si a;teptarea comenzii de inchidere in bucla eveniment.

( File Edfi Fc-at Run Opticns llJintlaus Help

i _-ii= a ±=aTJr I-i==,=tLCl=J i-==lt ±=-C=, i-_i I_=e= -.-i-==- f== I---= ==±= t--=
Tit ,==i,=3I :.: tC C==LJl-9e.
==i= drat.T C3ll=e i f`:==.=t--l== 'S i
p=-if-I F=-===-=i=-= I j
i I-=ea= tie =L-=EE= ti /=--a.I-
_acree=. fill I ERE¥-i

i
a ==-_I-I, I:-_e I-=e,, ±aei-,===-i-_i_
p¥t='am= - disF|aI-. Igaate t; -:
f=-.cc|t]n I)
+ =+---- i.-:-_=telJe= I.TiE"TE T=5t d=±tv.T=.

E:'J'gane. dijrir|a|.. I-T=date i :S


p=l=J: ) _-=--I-i=----I--i.:
± _I.-L2=_ f=-_i: eT-=r+I =El=,a,- I-=t ==r- ±==:-7==-I i--it-===-.= == =t-
1=a,/I ==t2iTug = i
ac =T===tlcc!g= ( drJTaW =Jat.±==g 'l

i ==== ±cJe3 -Li-_a SaLE E== d=, ETe=_t====.


+ =t '=-e±p-i ±rEST.-==-.I tL-Je =C=ei==+ =eP±a[te±ir -i--I-== ==E= ===,=i-i- :,:
i i-I ==C,==.I
=== draw repeat.e±|i,'i aL-a`JT I--I-t-iL-a ) a
dc a-=aLat,1acg ( d=a7,I f`=Ct-i- a

lO5
Capitolu] 13 - Biblioteci ECDL Computing

Exemplu: Realizarea unei copii a fifieralui BoilerPlate.py

Pentru a utiliza Pygame, realizati o copie a codului boilerplate ;i apoi adfugati codul dvs.
1. Deschideti flsierul BoileiPlate.py.
2. Utilizati pa;ii de la exemplul lCrearea ;i salvarea unui programl. Utilizati pa?ii de la
Save As incolo pentru a salva flsierul BoilerPlate.py cu un nou nume ales de dvs.
3. Veriflcati c5 ati realizat copia dorita deschizand documentul salvat la pasul anterior.

13.6 DESENAREA UTILIZAND BIBLIOTECILE

E Concepte

Pentru jocurile 3D profesionale, graflCienii CreaZa arta PerSOnaliZat5 pentru majoritatea


caracteristicilor lumilor si monstrilor dinjoc. Cu toate acestea, foarte multe detalii sunt generate pe
baza codului de programare. Spre exemplu, graflcienii nu deseneaza fleCare fir de iarb5 si nu creaza
anima[ie pentru flecare flr de iarb5 care se mi;ca in bataia vintului. Ei creaz5 in loo una sau mai
multe tipuri de flre de iarb5 ;i apoi utilizeaza proceduri si bucle pentru a desena si anima mai multe
fire de iarb5.
Pygame are o bibliotec5 grafic5 2D. Codul Pygame poate utiliza o bucl5 si numere aleatoare
pentru a demonstra faptul c5 un computer poate executa instructiuni repetitive. Codul poate desena
si anima un singur flr de iarba, dupa care codul poate fl introdus intr-o bucl5 pentru a desena si
anima multe fire de iarb5.
in urmatorul exemplu pygame 6firele de iarba, sunt doar niste linii verzi.

Exemplu: Fire de iarbd


1. Realizati o copie a codului boilexplate.py
2. Denumiti flSierul COPie Grass.py
3. Ad5ugati la flnal urmatorul cod:

ffil± Ed'fr Fcfmat fllum rulgivtioans unndloue ENalp


rE
( i- djfar,-I bla,1e r=f g=r.=ss.
(

= i 1S =1-1,= I-iLr|-rig.= ,=f I:._= L==adc== =f r=,=S==

+ _i ,-==,i I ,-=r,-I_-L9r -J23e±


:F 1:.: i-q ,=i-:,a-J=- i 3r= rf-E!-l=E.a =l(I rJlffE.=l=rtr=e
i-=L= t:1=-FLIT,,T b|arJr=1 I.. gJ t.~ I; :

J{ I 1 * 1J + 5J
ck - I__I
p-J'gaseLP_.tlgg-,7'|iZ+a_Lpc:reef+, GREEN, !x, 10£] , Zj£+dSE, 5rJJ , 3)

-i ICe±-ar-e frJ± :i, LiE±E-a ,:i ,==a-.i


-Li=L= cJraT...I lr+rHi-a:-I U =

glOg = =grygami=.8L3'Ji=€. 3;Er, g=jE; a )


-==- i i-,-- i-,=l=-JC,ye(3D) s
rLIZjso¢ ELaae(i, grJgI+:/I/2:lO, pcgZlj/3:l3 )

£lga'rf r€g€Jg-,€rJ1'J- I r-J=ai'7 grEigg ;, i

ir!
"dnd
Ln: 181 Col:32

4. Reverificati urmatoarele puncte cu privire la acest cod. Verificati dac5 informatiile de


mai jos sunt relationate cu codul actual.

106
ECDL Computing Capitolul 13 - Biblioteci

draw_grass() confine o bucla ;i apeleaz5 draw blade() de 30 de ori.


draw blade() 1a r£ndul sin apeleaz5 draw_linei) in biblioteca pygame si deseneaza
o liniE verde de grosime 3.
Modiflcand verde s5 fie tuPlul (0,0,255) ar fl general iarba albastra.
. draw blade() confine 3 parametri, i, s si t, dar in aceast5 etapa este utilizat doar
un singur parametru, i.
. i reprezinta num5rul de flre de iarba. i Stabile;te POZitia flrelOr de iarb5, x.
. cx - i * lO + 50, deriv5 x din i. Formulapreianum5rul flrelOr de iarb5, ce arputea
f1 0, 1, 2, 3... si il modiflCa intr-O COOrdOnata X, 50, 60, 70, 80... *10 dep5rteaz5
flrele de iarb5'la 10 pixeli distanta ;i +50 pomeste secventa la x-50. Modiflcati
pu[in aceste valori si rulati programul pentru a vedea diverse spatieri ;i pozitii de
start.
• draw_grass() invoc5 functia mouse.getJ)OS().
. mouse.getpos() obtine p;zitia mouse-ului sub forma unui tuplu. Acesta confine
pozi[ia x ;i y a mouse-ului. Codul imparte x la 200 ;i y la 300 pentru a obtine
valorile parametrilor s ;i t pentru draw_blade.
5. Rulati programul pentru a vedea flrele de iarb5:

l*i . ``m _ _

in prezent, imaginea cu flrele de iarba confine linii drepte. pentru a face flrele de iarb5 mat
ascutite, inlocuiti codul draw_line().
6. Efectuati urmatoarele modiflC5ri codului:

Ful(e Edft ifermal Run 63fffu-TE J.'ininL< "±lP

i ==E_I_-_ +__=== =I l====_I-.


i i ==- t== _-_-:I_=±= == -_I-_ _-_=== == f===_-
I _I i==± = i_-±= = _-===
t +._ _I I__.I I -I == =LEl-TEE == _L==I==-==-=i=
ll ill-_-7 I_-_E ==E1=-_I i=` i ==T I_l== I_'==_I--

i-== d==_I-- i=ia5e =7 a- I i


I = i - == - ==
E5i E= I
==z=± - TTx-2,1=\3T. ,-x-JS.===] ,Ix-ri-3,S1:. :a-fa-a.E=
=-_-ranLa. ig±Xi==ZT_====1=_g=- I; =`=L=e==__ =`=aree __ -¥L=Lar I
I=.gE==_ }Ex===1_-_I_i=JL=-I I-===-±-==- , ======. =

i =tE==te f==. i):I ±=fi±=-i =f L=E-I_a


==-_ ±=-,-=r-. ,I-_-==`_q,, 1 i

E=3 = =|-I-3E=_EL==23E.±_EI === I

dL=ZE,ch- £ia±e 1/ ==S:I,I I==' --==-i_ ===

a==?i =======±i=. , ±==-.i =a== `l


|-I
___ Jal
|ln[ r3J £=lb I,

7. Relationati descrierea de mai jos cu modiflCatile din cod.

107
Capitolul 13 - Biblioteci ECDL Computing

Cea mai mare modiflcare este crearea unei noi variabile shape.
. Noua variabil5 lista cshape, stocheaz5 coordonatele celor 4 colturi ale flrelOr
deiarba.
. S-a renun[at la draw.line. Cele 2 comenzi gfxdraw deseneaz5 conturul
exterior al formei ;i apoi interiorul. ModiflCati CulOarea liniei de COntur in
verde.
8. Rulati codul pentru a vedea flrele mai aSCutite de iarba.

imiliiiillliliiiillliillllii

9. Urmatorul pas realizeaz5 2 modiflc5ri suplimentare in program:


® Face iarbamai distantat5
® Face iarba s5 se v5lureasca
Exista o singura modiflcare majora a codului. Ea afecteaz5 variabila dx. dx deplaseaz5 varful
iert)ii spre stanga sau dreapta. 0 inseamna ca nu exist5 nicio deplasare spre stanga sau dreapta. Un
dx negativ mut5 varful spre stanga. Un dx pozitiv muta varful spre dreapta. Modiflcarea din cod
modiflCa inStruCtiunea dX - 0 pentru a avea o calculatie pentru dx.

1 0. ModiflCati COdul duP5 Gum urmeaz5:

Effi Frma& Rum Cpelons thrmdsus 7teS

i-a a;~.c- nunber rJf r-i-.a blade -Jf g=aS3


:_'€: arid I are cozt-L=O|ed by the mouse Pa=itlOn
ciraw b|acic-( i, a, I, ) =
a-=*|D+50
i a..-. I.-/ill mLOVe tr.a tips Of tie gi-ass ief= OZ: =iCI:r+t.
a Tr£e =ai'-dirlcO c.1ar"-eS aX S-.,. a i-air.dC..i .--\iIlbEr aO I.he grass '3WayS ln
a tr|e '|-.1r.C1'.
i I:r-a 2Ht;*l=-i5) na|=es chp- tops spread apart.
dr = randint( -10, 10 )/3_a + 2't;*(i-i5)
921aPe = I lx-2,loo) , (x+2,loo? , (I+dr+a,50) , (I+dx-9,503 I
pygrme.gfxdIBW_aaPClygc.a ( sc:reea, 3hE±Pt± , EEL)
pygame- gfldrE_J7- filled PE|}7gC}n ( 9C:Ieelt, Shape , GRIN)

t lterate fcJi, 3,=\ blades Gf grass


--r--_ are.+- grass()=

poe = pygame-mouse-get po9()


f==, i 1=- rant(a(3O)I
drEN blaie(1' PO9ID]/2", pc9[1]/3D£l )

Eiljiu lePeati=d|'J( draw grEIS9 )


i5+
-- --._--I
Lm: 2RE Col: 0)

1 I. Relationati descrierea de
I. dx deplaseaza maijos ierbii
varfurile cu modiflCatile
spre stangadin
saucod.
dreapta.

. randint( -10, 10 ) este o functie din biblioteca random care genereaza un


numar intreg aleator intre -10 si +10, Apoi, acesta este impapit la 10 pentru
a obtine un num5r cu virgula mobila intre -1 si +1. Asadar, randint()
deplaseaz5 varfurile ierbii cu I pixel aleator spre stanga sau dreapta.
. 2*t*(i-15) nu este aleator. Face cavarfurile ierbii s5 se impastie. Dac5 aceasta
por!iune a expresiei este omisa din cod, firele doar se deplaseaz5 aleator, ins5
nu se impr5;tie.
1 2. Rulati programul pentru a obtine urmatoarea imagine:

108
ECDL Computing Capitolul 13 - Biblioteci

y#FNENNtREREENENEN!NENINAI! 1 i i i i i ffff

Imaginea aflSata nu arat5 c5 iarba se mi?ca acum, ins5 este vizibil faptul ca iarba este acum mai
distantata.

13.7 EXERCITII RECAPITULATIVE


9

I. Un eveniment este:
a. Atunci cand un program ruleaza ;i se deplaseaz5 din codul scris de programator in
codul unei biblioteci.
b. Un lucru care se intampla ;i la care programul ar trebui s5 reactioneze.
c. Atunci cand un program contine prea multe date si trebuie s5 renunte la o anumita
parte din aceste date.
d. Un tip de date special ln Python utilizat pentm a urmari date importante, Gum ar fl
aplica[iile de tip calendar.

2. in ce biblioteca se g5se;te ,randint,?


a. math.
b. randint.
c. monster.
d. random.

3. Sirul numit greeting are valoarea cGood'. Ce comand5 ii stabile;te valoarea la cGood
Moming'?
a. greeting - 6Good' + greeting
b. greeting - greeting + c6 Moming"
c. greeting - 6Good, + "oming,
d. greeting - rGood', 6Moming']

4. Tuplul numit colour are valoarea (0,0,255). Ce comanda ii stabile;te valoarea (255,0,255)?
a. colour[0] -255
b. colour[l] -255
c. colour-(255,0+0,255)
d. colour - 255,0,255

5. Care dintre umlatOarele nu genereaZa eVenimente in Python cu Pygame?


a. Executarea unui click pe mouse.
b. Un temporizator.
c. Introducerea unor date de la tastatura.
d. Descarcarea bateriei.

lO9
CAPITOLUL 14 -
RECURSIVITATE

La flnalul aCeStui Capitol, Veti Putea S5..

. fntelegeti termenul de recursivitate

Aceast5 lectie consolideaz5, de asemenea, conceptele din lectiile anterioare,


cumarf1:

® Bucla

® Procedura

a Functie

I Variabila

. Parametru
ECDL Computing Capitolul l4 - Recursivitate

14.1 RECURSIVITATE

B Concepte

Exemplul cu iarba mi;catoare din capitolul 13 ;i exemplul cu s5geata din capitolul 12 implic5
subrutine care apeleaza alte sut)rutine. Aceasta este una dintre metodele de descompunere a unei
probleme in programare. Tine[i minte ca descompunerea se refera la divizarea unei probleme
complexe in probleme mai mici. Apoi, subrutinele sunt apelate ;i executate pan5 cand problema
globala este rezolvata.
Este posibil de asemenea ca o subrutina sa se apeleze singur5 o data sau de mai multe ori. Cu
conditia s5 existe o protectie impotriva unei subrutine care se va apela singur5 la nesfar;it,
subrutinele care se apeleaza singure pot reprezenta o tehnic5 putemic5 pentru descompunerea
anumitor probleme.
O subrutina care se apeleaz5 singur5 este cunoscut5 sub numele de Recursivitate.
Recursivitatea reprezint5 procesul prim care o subrutin5 divizeaz5 o problema complex5 in
p5rti mai simple ;i apoi se apeleaza singura pentru rezolvarea papilor simple. O functie recursiv5
se apeleaza singur5 in cadrul functiei.

Atunci cand o functie recursiva se invoc5 pe ea insasi, se spume c5 functia se repet5 in mod
ne]imitat.
Tehnica recursivit5tii este cea mai util5 atunci cand o problema poate fl deSCOmPuS5 in 2
probleme mai mici, dar care sunt totusi extrem de asem5natoare cu problema originala.

Exemplu: Cdutare

Un exemplu de rezolvare a unei probleme utilizand recursivitatea o reprezinta cautarea. O


subrutina de cautare ar putea separa posibilitatile de cautare in 2 zone. Subrutina s-ar putea invoca
singur5 pentru a cauta in flecare zon5, apoi s5 o impart5 ;i pe aceea si tot asa.
Imaginati-va veriflCarea unei Case. Algoritmul ar imparti probleina in ;eriflCarea CamerelOr Si
apoi ar impapi veriflcarea camerelor in veriflcarea anumitor zone din camere. Eventual zona d'e
veriflcat ar deveni atat de mica incat poate fi flnaliZat5 dintr-un singur pas. Nu este nevoie de o alt5
subdivizare.

Exemplu: Desenarea unei linii curbe

Un alt exemplu al unei probleme ce poate fl rezolvata prim recursivitate ar fl desenarea unei
liniicurbe:
Un algoritm alege un punct aflat lajumatatea liniei. Acest lucru a impartit linia curb5 in partea
stanga ;i in partea dreapta.
fmp5rtirea curbei a descompus problema originala in 2 probleme mat mici. O problem5
deseneaz5 partea din stanga a liniei curbe, iar cealalta problema deseneaz5 partea din dreapta.
Aceasta ar putea sa nu para o imbunatatire a eflcientei, dar poate fi, dac5 impartim fleCare
jumatate din linia curb5 in doua probleme mai mici ;i asa mat departe.
Prim divizarea repetata a problemei, partea liniei curbate care trebuie desenat5 va deveni
eventual suflCient de mica inCat S5 incap5 intr-un singur punct, un pixel pe ecran.

Ill
CapitoluL 14 - Recursivitate ECDL Computing

Problema din partea stanga

Problema din partea dreapt5

Cum funcfioneaz5 programul:

. O subrutin5 recursiv5 pentru desenarea unei linii curbe se poate apela singura pentru
desenarea j umatatilor din stanga ;i dreapta.
. Poate contine un test logic care detecteaza atunci cand o problema ajunge la dimensiunea
unui pixel sau chiar mai mica in dimensiune.
. Atunci cand o problem5 a fost redus5 la o dimensiune atat de mica, subrutina poate
desena punctul respectiv in loo s5 mai fac5 alte subdiviz5ri.
. Rezultatul combinat al tuturor punctelor formeaz5 linia curba.

14.2 DESEN RECURSIV

E3 Concepte
Algoritmul de desenare a liniei curbe deseneaz5 o data partea stanga, o data partea dreapt5.
Recursivitatea nu trebuie intotdeauna s5 impart5 o problem5 in 2, ea poate impapi problema in mai
multe parti. Exemplul urmator de desenare a unei frunze de ferig5 divizeaz5 problema in 4 alte
probleme la flecare etap5.
Sa analiz5m mai intai un fractal inainte de a continua.
Un fractal reprezinta o form5 care este similar5 cu ea ins5;i, la diferite scale. Dac5 matesti un
fractal, poti gasi ;abloane similare cu sabloanele formei intregi.
Mai jos sunt prezentate cateva exemple ale modului in care un fractal se dezvolt5:

112
ECDLCompin #

ife- Recurslvltate

•;
:`:)i -;ii,
i!il] i::T`
IiB]!-
i,r
\,,, \.1(J/,`` ` (Jnv`

i!IiH
i;:,;
/--., J f,-' |^|r
( r`,

Urmatorul exemplu utilizeaz5 recursivitatea pentru a desena un fractal care este o frunza de
feriga.

Cum functioneaz5 programul:

. Algoritmul de desenare a fractalului din exemplul de mat jos recurge la desenarea a 4


p5rti diferite.
. Cele patru optiuni diferite creaza versiuni mai mici, distorsionate ale intregului model
in patru locuri diferite. La randul sau, patru versiuni mai mici, distorsionate sunt create
in flecare dintre aceste locuri
. Detaliile celor 4 distorsiuni sunt stocate in variabilele list5 numite f1, f2, f3) si f4.
. Codul recursiv, de obicei, contine un parametm care stabile;te cat de departe are loo
recursivitatea. fn acest exemplu acest parametru poarta numele ,level,. De fleCare data
cand functia revine, scade valoarea nivelului. Atunci cand nivelul ajunge la 0,
algoritmul deseneaz5 un punct ;i opre;te subdivizarea mai departe a problemei.

113
Capitolul 14 - Recursivitate ECDL Computing

Exemplu: Recursivitatea pentru o frunzd de ferigd


1. Realizati o copie de codului boilexplate
2. Denumiti-o Fem.py
3. Ad5ugati urmatorul cod:

I File Edit Ferrnat Run 4Jt|`til`ItS I.``.lirldOl\S He!L`

I a i,,-_-I==e Ill-== '===i_-_i t===__=====-=====_='

t= ` _._',3,I,C.ii,i,.ti
f€ I :_i.='`5,.i..`i!,-:I.,:'|,='.i_i,-_I,i.€l
5=. I :.I.2,-|l.26,+1.2`3,||.i:2,,I,.1.6]
fi I +,_1.i5,_`'2€,``.36,,,.:,`34,,|`.I.I.|t?

: i,i I:,_-_a i-e|`==,_==,-te _--_I.`-I_ I_,_ i-i_-_=u`:._ |`=__i _t==_I.

I.i =c +-ill=l it===-i f=,-i ==----==


:,a =a,I_. l=_ -I:-{=l=-a i=- I-==- ==i=-= =t=-=i± -==-I =i=e=-
=---_ I-,i,-. fr==r.i let.e|, a I:
--_ let,e| i i :
$1c+t g-`=n.¢\ a \

d=.\v_tea,Z\. i -1e`reL-L' xpxplLt--a.`._+£l+=t= I


a-y."=€eex. I Let,e= -L..sg1\,_-==a=-=-Ee=T, I
d=any-ie`==, I ie`,e`-- i , apg`.,.._==a=.`.ici,rJ
a+Jaw-fe`.,a, i let.ei- 1. a¥pl\,_tsa=``. El`l,I:. I

Lt'=I-L\l S

d=al.I_ee`1.;'l L\ I,:I"1\ \

la=aw en,cel d|,ab, c>'e fe=n i

4. Rula[i programul pentru a obtine rezultatul de mai jos.

5. VeriflCati faPtul C5 rularea programului s-a incheiat.

^ '`+\- |=-+±±-|±± i=_3=.-?_L* I

+_I_ I I ccl d___

I _-|L`'L-a

114
ECDL Computing Capito]ul 14 - Recursivitate

Exemplu : Modificarea codului de recursivitate pentru frunza de ferigiv

Putem modiflCa fOrma ferigii Prim SChimbarea unOr Parametri in COdul de reCurSiVitate.

=i=f d=-ELW I.:1E: fe1-riO :


draw_fer=( 9, (a,a) )

Daca reducem valoarea 9 din draw_fem( 9, (0,0) ) la 3, programul va desena mult mai putine
puncte.
Dac5 crestem valoarea 69' chiar si un pie, timpul de rulare al programului va creste simtitor.
Daca moaificati valoarea 9 in 30, executia programului va dura mai mutt de 1 milion d: ani.
Sfat: Pentm a opri programul inainte de flnalizarea lui, utilizati aceeasi tehnic5 ca la bucla
inflnita. Mergeti in fereastra Python Shell ;i apelati meniul 6Shell,, optiunea '(Restart Shell,.

14.3 EXERCITII RECAPITULATIVE


9

1. Un algoritm recursiv este unul care:


a. Deseneaz5 o ferig5.
b. Deseneaz5 o linie curba.
c. Utilizeaz5 numere aleatorii pentru rezolvarea unei probleme.
d. Descompune o problema in papi mai mici si apoi aplic5 aceea;i abordare ;i acelor
p5rti mai mici.

2. O functie care se apeleaz5 singur5:


a. ,Este o eroare de secvent5 incorect5 in Python.
b. Ar putea fi un exemplu de recursivitate.
c. Va cauza intotdeauna o buc15 inflnit5.
d. Poart5 numele de distorsiune.

3. O bucla infinit5 este:


a. Un exemlu de recursivitate.
b. Un exemplu de distorsiune.
c. O bucl5 care ruleaz5 la nesftrsit.
d. O functie recursiv5 care deseneaz5 cercuri.

ll5
CAPITOLUL 15 -
TESTARE SI fMBUNATATIRE

La finalul acestui capitol, veti putea sa:

. Intelegeti tipurile de erori din cadrul unui program precum: erori de sintaxa)
erori logice

. In[elege[i beneflCiile teStatii ;i dePan5rii unei probleme pentru remedierea


erorilor

. IdentiflCa[i ;i remediati O erOare de SintaX5 intr-un program precum: ortografle


incorect5, punctuatie lipsa

. IdentiflCati ;i remediati O erOare lOgiC5 Intr-un program precum: expresie


Booleana incorect5, tip de date incorect

. VeriflCati daC5 programul respect5 cerintele din descrierea initial5

. IdentiflCa[i POSibilitati de imbunatatire ale programului astfel incat s5 satisfaca


eventuale nevoi suplimentare

. Descrieti programul complet, comunicand scopul ;i valoarea


ECDL Computing CapitoluI 15 - Testare?i imbunatafire

15.1 TIPURI DE ERORI

D Concepte
O schema logica sau un program poate contine erori. Erorile care cauzeaza functionarea
incorect5 a unui algoritm sau program poart5 numele de bug-uri. Spre exemplu:
. Daca unul din blocurile de decizie din cadrul unei scheme logice a fost etichetat
incorect, cu 6Da si GNU, in locuri incorecte, algoritmul va avea in rezultat incorect.
Acest tip de eroare poart5 numele de bug.
. Dac5 in programul cu trucul magic am fl imP5rtit la 15 in loo de 13, nu am fl obtinut
rezultatul dorit. Pasul de imp5rtire la 1 5 ar fl fOSt denumit un bug in Program.
Bug-urile serioase determin5 oprirea function5rii programului denumita?i crash.
Un crash reprezinta momentul in care are loo oprirea complet5 a functionarii programului.
Utilizatorii i;i pot pierde datele ca urmare a unui crash.

in programare, exist5 3 tipuri de erori frecvente:


O eroare de sintax5 are loc atunci cand un construct din limbajul de programare este scris
incorect. Este o eroare in cod cauzat5 de utilizarea incorecta a limbajului, Gum ar f1: erOri de
ortografle, erOri de PunCtuatie, utiliZarea inCOreCta a numelOr ;i referintelor. Spre exemplu, (A+3
este o eroare de sintaxa intrucat lipse;te paranteza de inchidere.

O eroare logic5 are loc atunci cand intructiunea din program se refera la o actiune incorect5.
Programul pare a fl corect din punct de vedere al sintaxei, (i.e. este scris corect), insa logica este
eronata si ca urmare, atunci cand este rulat, nu executa ceea ce se presupune ca ar trebui. Cu alte
cuvinte, un program poate functiona corect, ins5 nu respect5 cerintele de functionare.
De exemplu:

if test tube is full :


pour_more_aci d_into_it( ).

O eroare de tip de date incorect sau o eroare de scriere are loc atunci cand se illCearC5
utilizarea unui operator sau unei functii pe un tip gre;it de obiect. De exemplu, dac5 incerc5m s5
inmultim un sir de caractere cu un numir intreg 3*mere.

15.2 IDENTIFICAREA ERORILOR

I) Concepte

Erori de sintax5

Erorile de sintaxa, cunoscute si sub numele de erori de parcurgere cod, sunt detectate imediat
de python la rularea unui prograri. Erorile de sintaxa nu sunt considerate bug-urn intrucat Python
nu permite rularea programului atunci cand identiflC5 o eroare de sintaxa.
Exemple de erori de sintax5 includ sintax5 incorecta, omisiunea unei paranteze sau simbolului
:, scrierea gre;it5 a unui cuvind cheie, format incorect al numerelor, etc. Analizorul sintactic, numit
;i parser, evidentiaza primul punct din linie unde este detectata eroarea.

117
CapitoluL 15 - Testare?i lmbun5t5(ire ECDL Computing

7+1 r\ ntzfup,' - C;.fi 'then3.i sly.nt3X.P:,,

File Ed*, Format i,ur\ GptJCrL= lv'.-'!n,dur,"/S Help

I =.`.-y_~ I _ \,-

i
I .

® in\,al!i5 i-a.n!a:(

NM

Exist5 semnul : la flnalul liniei care este incorect. Corectati aceasta eroare prim ;tergerea
semnului : si rulati inca o data programul.

?41 s}nta31,P;,, - €:'-.P+thon33,., a., nta.i.p} - ffl X

File Edit Form-a3 Run Op'L!cns '.\.indct..,a 3ie.!p

il )

i
I
.

Ln: i Cot:2C!:

?i.€ P.z|h+-rl 5hei! I


Fj!e EEit Shei! Deb.Jg Cptlcr)5 •l,mdc',,,s Help
E=-=i^-=--- 3.2.3 def=-Lil--, i3== i1 2_||2, I.T=.i5=H£-4) ;|L¥L_ ,,.i5L1 32 _Sit.I !=_--lei)-i
j<
?__T=i= "CJ=P`J=igIJ-_", "=-"edlr_-at" =L- Yl|=.-a_-.3e (`: " f_-I -Tr.==e ==_f===La-_===.
Li 3=-`-i:t=

c::a i_..i:;

Erori logice

Erorile logice nu sunt intotdeauna u;or de gasit. Analizati logica din acest program penrfu a
aflSa 0 inStruCtiune de intrOduCere a unei Prajituri in CuPtOr atunCi Cand CuPtOrul atinge temPeratura
corecta.

Tin C\ er_Temp¥J - I: ,Pfythcn3.2J-#S.gn_Temp-pJ, - H X


File Edit Fc;rmat P.un L|pticns .i.,inc!c,./a Hei=

Cc==ecrJ =±xp=__?. __ I
C'J.==e=.= Tezc=- _ - _: -_
- -_ I,J}=--i=r.I =4LnJ- : - I.=C=-'e._-`L- TE:3t= i :
_i,_ _._I _-__ __ _i i,_ :'- E::":

L=.,l_'~:`^C\' i-uns _i __, i -_= I--=- _-.-- i--_ === ==__-_==- T=_====-_iT._== `+
_-:_-:::

118
ECDL Computing Capitolu] 15 - Testare?i imbun5tatire

f# Pytfroori Shell - I X
FWe Edit Sh€i! Debug Options Window,i Help
i P¥tfrcrJ 3.2.3 (defau1-~, Apr 1£ 2rL/12, @7:£5:24) ilLrZSC .,I.15®rJ 32 bit (In~L.ei)] a)n .Jtyin
iS2
I I:npe ®ccp:f.rlgh_r_tr, "C£ed2.+-S" er "llCen9e " " £a_- mr,re =riC-asian.
) >>> ===-==--==============-==Ji==--==== F€§TART ==============-==============-
\>.\
P'Jit. Cake ir_ Clre_r.
i
+\>>

Logica este gre;ita. Pentru corectarea erorii, trebuie s5 modiflC5m simbolul


!- (Diferit) in -- (Egal).

7-,1

?~l!'_ v:,Jjli f-r~fl P)i+it |f". c,". I *+-.

Col:reCt;_ffexpP=" i ,± i I"
Current lexpgR 'J?E.::H
I. curr=n-u Temp==(Correct Texpj :
E=-.==.I !==,r_ i.5,,:= _I,1.:/F?u=")
-- i =\

l=,._,==:I-_F'--'±== +:-,|=.-I_ i:,'lJ= I--9i=r: i:-..? a= _=rL,-_-. ,-I:,=Tl:±=-i =.-=r.(+r-.=='::~-1L1='e")

7€ ftython SheW - I X
File Edit Shell Debug Options Windows Help

Pytn.+n 3.2.3 (aefau|cv i;pr ll 2O12, O7:1S:2£j irsC `y.15OO__52_i_1_-: TIncelH a-r}.rflri
32
T]xpe "cepy=igr?.-_", "c=edicsl' er "license () " for more info2arlaCiOn.
>>p =======JH=-:r===-==-a-=====-===== RESTfiELT 8iLJ===S==-a.==-JZee==t==
>'}-I
iliait .iinc|i I:y.ae ova_i ig: ar, t:ne /=c:yiri-ect _Lelr_eel,a_tLi=e
>>>

Analizati exemplul de mai jos ;i veriflcati daca puteti corecta eroarea logic5:

Age,pr - C:rtyrfhon32/Age.py - I
File Edit Fcrmae Run Ogiven£ Windows Help
Age e i--lFLlt ("H.=n,: .I-i/=l
Z}ge = |rlC-(age)
==- Age > 13 i----,i- jlge < 19:
p===t(":ir=J' _i i_- ===r=T.,=T,=r")

E.=|r_I ('',_+-: = _I.:-i-r.=l£J.i--i' )


.,_;:;

119
Capitolul 15 - Testare gi imbunatatire ECDL Computing

Exista o problema cu testul logic din acest program.


Testul logic va functiona corect pentru varstele 14, 15, 16, 17 si 18 intrucat programul va aflSa
in mod corect mesajul "He,s a teenager" pentru fleCare Valoare introdus5.
ins5 pentru varstele 13 si 19 el va aflSa meSajul CCHe,s not a teenager"
Pentru a remedia eroarea:
1. Deschideti Python.
2. Introduceti codul corect de mai sus pentru a remedia eroarea prim modiflCarea liniei
de cod care incepe cu cif?.
3. Veriflcati solutia prim rularea programului modiflCat de dVS.
4. Testati valorile de varst5 12, 13, 14, 18, 19 si 20 pentru a veriflCa daC5 primiti mesajul
corect.

Exemplu: Identificarea?i remedierea erorilor logice fi de sintaxd

Umatorul program contine 2 erori de sintaxa si o eroare logic5.


1. Tasta[i programul de maijos.

File Edit Fc'rmat Run Optiaus "'indomns Help


Age = i_r|p|2t- FIT_=i=-rr =ii === -,-I-i.:-T,i

Rge _- ii"Jt-_ lflge)


i-t_ ZLge i 65 _=r-i J£ge < 7a
p=i_rt F'_i-I-=' I-i i I-===s,=±_-1")
EiLg'E

p=lrli ]rri-=='=E, I-== -a ======±i-_':I

i
2. Remediati erorile de sintaxa.
3. Remedati de asemenea si eroarea logic5
4. Rulati programul.

Exemplu: Identificarea si remedierea unei erori de tip incorect de date

?&,, /_,,,
F,,;a c=±i`|. a /n l3LT7Ju-nC

si=ualent.s=|2
pr|rlr_ F'= :-.i'-tr= +st:'J3def_£iR + r ci='-.±=_i.=== ==_ =,~- uit-=±La_tp '' )

in acest exemplu nu putem asocia la un loc diferite tipuri de date. Nu putem asocia simri de
caractere cu variabile numerice. Cu toate acestea, putem converti o variabila numeric5 intr-un sir
de caractere. Mai jos, prim utilizarea functiei str() putem converti variabila numerica students inir-
un sir de caractere.

120
ECDL Computing CapitoluI 15 - Testare?i imbun5tatire

7a,: Python Shell - I X


File Edit Shell Debug Optlor\s I.A,1ndous Help

Pyt;hah 3.2.3 [ae£a'ait, ap= i= 2.312, ¢1:=5:2£] n|SC y.=SOO 32 blC (Ince|)a c)=_.Jay-1_-;
32
I.ape nCeP}.r=g±_Cm, nCredlCS» Cr qlice--.se () n fez n.LJ-re i+-_fC`rnaC=C!J-_.
>>> -==-==-==----a-==-a---=-- RE5T3l£E ===---=======-+-+---==---
>>>
I_I.z=JCeH_.aclr i.i,.=|Dr- =±=er_I ._:2ii i.i_>=i :
File "S:/-Eg,,rJ:-_=+r_L£,41...-€-==,-._a±r-=--a.g:I", i==-i i,I i--. ..,-=c--=,st==e:+
z==-=rJ_ I"I :I-.aT_=E I_a i_SI,a-,.=r?user_I;_q, - " El=rJ:±e=-.=- i:-. --_:.- I_=u_==-"i
I._,a-e=_-===-: =i_='_a =,I,r-,fe=.a '|=.t' I,b-e,,=r, rap=, _=-c=- i=_T=====,=i-,
>>>

Lm9CoL:4

7# ftython Shell - I X
File Edit Shell Debug Options Wmdous Help

pgrcho=: 3.2.3 (defa.Ill, a,pr ll z-Oi2, a?;_iS::-£) ;I.!sc v.|5.3O 32 BIG (==.I.e1)I cn',;i-a:
32
¥`±-pe bcoplJrag?_t», wCredir_9" er tt|iCer.gel) fl fe-- n=re i_n.fa=nat.=cr..
RESTART

15.3 TESTAREA SI DEPANAREA UNUI PROGRAM

I) Concepte

VerifICarea erOrilor
Un programator ar putea remarca sau nu faptul c5 programul contine o eroare logica. Este
important s5 se detecteze erorile logice. O modalitate de a realiza acest lucru sistematic este prim
testare.

Testare
Rularea unui program utilizand diferite date de intrare pentru a identiflca existenta unor
eventuale erori logice.

fn etapa de testare, tester-ul are nevoie sa stie care ar trebui sa fie rezultatele obtinute. Acestea
s-ar putea referi la cerintele din specifica!iile programului pentru a veriflca functionarea corect5 a
programului, conform scopului s5u initial.
Dupa remedierea erorilor, programul va fl retestat pentru asigurarea faptului ca acel bug a fost
cu adev5rat remediat.

Testarea conform cerintelor


Regula de bun5 practic5 este ca testarea unui program s5 se faca pe baza unui document
continand speciflcatiile scrise?n etapa de proiectare a programului. Speciflcatiile ofera claritate cu
privire la functionaiitatile programului. Ele contin cerintele programului.

l21
Capitolul 15 - Testare si lmbun5tatire ECDL Computing

O specificatie pentru un program va contine de cele mai multe ori o lista numerotata a
cerintelor. Acesta ar fl un posibil exemplu:

1.3.1: Programul va stinge ecranul monitorului dac5 computerul nu este folosit timp de 1
minut.

Un plan de testare ar trebui s5 includ5 ;i un pas de testare a acestei cerinte. Planul ar prevede
functionarea programului pentru 1 minut, timp in care computerul nu este folosit si veriflCarea
inchiderii monitorului dup5 1 minut. Fiecare cerint5 ar trebui sa aiba teste corespunzatoare.
in acest exemplu, daca dup5 1 minut programul cedeaza, atunci exista un bug in program. Cu
toate acestea, dac5 nu se intampl5 mimic dup5 1 minut, nu se poate spume cu sigurant5 c5 programul
nu confine erori.
Acest lucru demonstreaza faptul c5 testarea sistematic5 a conformitatii cu cerintele
programului este extrem de valoroasa. Testarea ar fl identiflCat O Cerint5 care nu a fost
implementat5. Testarea conformit5[ii cu cerintele ajut5 de asemenea la identificarea problemelor
care apar doar atunci cand anumite papi ale programului sunt utilizate. Testarea in acest mod ar
putea identiflca anumite probele care altfel nu ar fl putut fl g5site.

Identificarea Bug-urilor
Atunci cand un program retumeaza un rezultat gre;it sau nea;teptat sau daca programul
cedeaz5 in mod nea;teptat datorit5 unei erori, nu este intotdeauna evident5 cauza.
Atunci cand un program retumeaz5 un raspuns gre;it, este posibil s5 nu fie SufiCienta dOar
studierea codului pentru identiflCarea PrOblemei.
O modalitate de a afla mai multe despre bug-ul respectiv este sa se includa o serie de
diagnostic5ri suplimentare in cadrul codului. Acestea ar putea consta in instructiuni suplimentare
print() pentru a aflSa ValOrile variabilelor in diferite puncte ale programului. Aceste instructiuni
suplimentare de aflSare arat5 modul de modiflCare al valorilor.
Efortul depus pentru identiflCarea CauZei unui bug POarta denumirea de debugging.

Debugging
Reprezinta rularea unui program defect folosind informatii suplimentare de diagnosticare
pentru a determina unde anume in cadrul codului exist5 gre;eli ;i pentru a le remedia.
O alt5 metoda de diagnosticare a unui program este prim rularea lui 6sub un depanator,. Acesta
reprezinta un instrument ce poate fi utilizat pentru rularea unui program linie cu linie. Python
confine un debugger ce poate fl aCtiVat din fereaStra Python shell.
Debugging-ul (depanarea de cod) poate identiflca bug-ul si locul primei sale apari[ii in cadrul
programului. Fir5 debugging' este posibil s5 nu fie clar unde anume este problema in interiorul
codului.

15.4 fMBUNATATIREA UNUI PROGRAM

I) Concepte

Odat5 ce un program este scris, lansat ;i se bucura de succes, exist5 destul de frecvent presiunea
cre5rii unei noi versiuni imbunatatite a acestuia.
Din punct de vedere comercial, rescrierea complet5 a programului nu este o idee bun5. Un plan
mai bun este sa se efectueze mici imbunatatiri care sa fac5 programul mai util pentru mai multe
persoane. Astfel de modiflc5ri ajuta codul sa rezolve o problem5 mull mai genera15 decat versiunea
initiala.

122
ECDL Computing Capitolul 15 - Testare ii imbunat5tire

Capacitatea de utilizare in diverse t5ri

Daca v5 amintiti, in capitolul despre gandirea computationa15, am discutat despre generalizare.


Am v5zut ca design-ul unei ma;imi de sp51at poate fi generalizat astfel incat s5 fie POtriVit Pentm
mai multe tari. Acest lucru se intampla frecvent si in cazul aplicatiilor software.
Aplicatiile pot beneflCia de traduCerea ;irurilor de caractere in alte limbi. De obicei,
programatorii incearc5 sa utilizeze acelasi cod sursa, ins5 fac codul mai flexibil astfel incat acesta
s5 utilizeze diferite sinlri de caractere pentru diferite limbi, asa Gum este indicat printr-un
parametru.
Generalizarea codului pentru a-I face potrivit pentru diferite tiri poart5 uneori numele de
localizare. Aceasta poate merge dincolo de o simpla traducere. Un program cu refete poate suporta
diferite tipuri de masuratori. De exemplu, poate suporta m5surarea tenperaturii in grade Fahrenheit
sau Celsius. Acest lucru ar face programul util mai multor tati.
Localizarea poate, de asemenea, s5 atraga atentia asupra altor oportunit5!i legate de
generalizare.
Localizarea privind fumizarea cantita[ilor de ingrediente in diferite unit5[i de masura, dup5
cum este necesar in diferite tari, ar putea conduce la alte generaliz5ri utile. Un program imbunatatit
ar putea calcula cantitatile din diferite unita!i. Acesta ar putea permite utilizatorului programului sa
solicite ajustati ale dimensiunii por!iei ;i num5rului de portii, programul recalculand cantit5tile.

Rezolvarea unei probLeme mai marl

in capitolul privind gandirea computationa15, am vazut ca solutia problemei de organizare a


unui festival de muzic5 ar putea fl generalizata. Experienta in organizarea unui festival de muzic5
ar putea contribui la rezolvarea unor probleme mai ambi[ioase legate de organizarea unui tumeu
muzica1.
fn cintarea unor oportunitati de imbun5tatire a unui program de retete, micile ad5ugiri care, de
exemplu, numara calorii sau aduna informatii nutritionale, ar putea generaliza programul de retete
si I-ar putea include intr-un program mai amplu pentru sanatate ;i nutritie.
fmbunat5tirea reusit5 a unui program trebuie sa echilibreze ambitia cu caracterul practic. O
schimbare mare a functionalitatii unui program poate necesita o rescriere a acestuia sau poate
necesita o nou5 bibliotec5 pentru a aduce noi funcjionalitaJi. ModiflCirile majore, cum ar fl
adfugarea recunoasterii vocale intr-un program, depa;esc ceea ce se poate obtine cu imbunat5tiri
incrementale mici.

Prezentarea unui program

Viziunea unui programator asupra unui program este foarte diferit5 de viziunea asupra
programului pe care trebuie s5 o aib5 un utilizator sau un manager. Atunci cand prezenta!i un
program, acordati atentie publicului ;i aspectelor relevante pentru ace?tia. Acest lucru este deosebit
de important atunci cand se comunica imbunatatirile propuse. Pseudocodu1 ;i schemele logice pot
fi relevante pentru a demonstra modul de functionare al unui algoritm. insa nu comunic5 scopu1 ;i
valoarea.

Comunicarea scopului

Atunci cand comunicati scopul unui program, explica[i ce problem5 rezolv5 programu1. in
general, programele sunt utile in anumite aspecte ale unei probleme repetitive. Computerele sunt
bune la automatizare. fn comunicarea scopului, poate fl util Sa COmuniCati de aSemenea?i Ce Parti
ale problemei #ov rezolv5 programul.

123
CapitoluI 15 - Testare si imbunatatire ECDL Computing

Un program de procesare de text salveaza un autor de la tastarea aceluiasi text de multe ori pe
masur5 ce lucreaza prim diferite versiuni ale unui document. Un program de procesare de text nu
ajut5 ins5 foarte mull un autor sa gaseasc5 cuvintele potrivite ;i sa identiflCe idei Pentru PerSOnaje
si intriga.

Comunicarea valorii

Valoarea unui program sau a imbunatatirilor acestuia depinde de cine il va folosi pe pia[a ;i de
concurenta. Managerii ar putea dori sa stie dac5 exista deja un program similar sau dac5 noul
program poate fl uSOr COPiat de altii. Daca algoritmii sunt noi, creativi ;i inovativi, este posibil sa
le patenti si astfel s5 le protejati impotriva copierii.
Daca programul foloseste un format de f1;ier PrOPrietate, Care StOCheaZ5 datele intr-un mod in
care alte programe nu il pot citi cu usurint5, acest lucru poate impiedica alte companii sa-;i creeze
propria versiune.
fn comunicarea valorii unui program, evidentiati ceea ce este unic in privinta acestuia. Arata!i
c5 aspectele unice sunt de valoare pentru utilizatorii flnali. Un program valoros este eel care
economiseste timpu1 ;i I)anii utilizatorului final. Acolo unde este posibi1, sustineti aflrmatiile dvs.
cu privire la valoarea unui program cu numere.

124
ECDL Computing Capitolul l5 - Testare ;i imbunat5tire

15.5 EXERCITII RECAPITULATIVE


9

1. Care dintre urmatoarele expresii contine o eroare de sintax5?


a. 2+4+8
b. (2+4)*8
c. 214/8
d. 2+(4*8))

2. Un test logic a fost proiectat pentru a veriflCa daCa Variabilele c, d si e sunt puse in ordine,
cu c eel mai mic si e eel mai mare. Care dintre urmatoarele contine'o eroare logic5?
a. if(c<d) aid(d<e) :
b. if(e=d) and(d>c) :
c. if(c#d)and(d#e) :
d. if(e=d)and(d<c) :

3. Testarea programului reprezint5:


a. Chestionarea clientului daca specificatiile reprezinta exact ce isi doreste el de la
Program.
b. Remedierea unui bug atunci cand un utilizator raporteaz5 o eroare.
c. Situa!ia in care o persoana cu mai multa experienta veriflCa COdul SurS5 al
programului si ajut5 1a imbunata[irea lui.
d. O abordare speciala de identiflcare a bug-urilor din program prim rularea
programului folosind diverse date de intrare.

4. Depanarea (Debugging) reprezint5:


a. Veriflcarea conformita!ii programului cu cerintele pentru a vedea daca acesta
functioneaz5 asa Gum ar trebui. imbun5t5tirea programului prim ad5ugarea de noi
caracteristici.
b. Efortul depus pentru identiflcarea cauzei unei probleme si remedierea acesteia.
c. imbunatatirea unui program prim eliminarea caracterisiticilor care nu mai sunt
neCeSare.

5. Una dintre cerintele inifiale pentru un anumit program este sa solicite numele dvs. ;i apoi
sa il retina. care 'dintre urmatoarele lucruri v-ati a;tepta sa le vedeti in cadrul codului pentru
a respecta aceast5 cerint5?
a. O functie recursiva
b. O instructiune input()
c. Unbug
d. Un cod pentru a converti un sir de caractere intr-un numir intreg.

6. O companie de software vrea sa faca imbunatatiri la versiunea 1 a programului sau de


gestionare a retetelor. care dintre urmatoarele est: o modalitate buns de a identiflca posibile
imbunatatiri?
a. Adaugarea unui cod pentru desenarea unei ferigi in mod recursiv.
b. Utilizarea motorului de cautare Google pentru cautarea expresiei "robots AND
cooking"
c. C5utarea unor mici modiflcari care ar putea face programul mai util pentru mai
multe persoane.

125
Capi¢olul l5 - Testare si imbun5tatire ECDL Computing

7. in descrierea valorii comerciale a unui nou program, cea mai buna metod5 este:
a. Prezentarea unei scheme logice extrem de detaliate pentru a evidentia complexitatea
programului.
b. Descrierea beneflciilor pentru utilizatori si sustinerea acestui lucru cu date
numerice, dac5 este posibi1.
c. Explicarea faptului c5 programul este nou ;i) ca urmare, trebuie sa fle de valoare.
d. Explicarea faptului ca programul utilizeaza doar algoritmi cunoscuti, utilizati la
scara larga si extrem de sigur

126

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