Sunteți pe pagina 1din 58

nvmntul profesional i tehnic n domeniul TIC

Proiect cofinanat din Fondul Social European n cadrul POS DRU 2007-2013
Beneficiar Centrul Naional de Dezvoltare a nvmntului Profesional i Tehnic
str. Spiru Haret nr. 10-12, sector 1, Bucureti-010176, tel. 021-3111162, fax. 021-3125498, vet@tvet.ro

Proiectarea algoritmilor
Material de predare

Domeniul: informatic
Calificarea: Analist Programator
Nivel 3 avansat

2009

AUTOR:
MARIANA VIOLETA CIOBANU profesor grad didactic I
CLAUDIA DANIELA MOLNAR profesor, grad didactic II

COORDONATOR:

STNIC GIOVANNA Profesor grad didactic I

CONSULTAN:
IOANA CRSTEA expert CNDIPT
ZOICA VLDU expert CNDIPT
ANGELA POPESCU expert CNDIPT
DANA STROIE expert CNDIPT

Acest material a fost elaborat n cadrul proiectului nvmntul profesional i tehnic n


domeniul TIC, proiect cofinanat din Fondul Social European n cadrul POS DRU 20072013

Cuprins
I. Introducere...................................................................................................................................4
II. Documente necesare pentru activitatea de predare.....................................................................5
III. Resurse.......................................................................................................................................6
Tema 1. Medii de dezvoltare integrate........................................................................................6
Fia suport 1 Medii de dezvoltare integrate.............................................................................6
Tema 2. Limbaje de programare................................................................................................11
Fia suport 2.1. Noiuni de baz ale limbajelor de programare.............................................11
Fia suport 2.2. Date, variabile, constante.............................................................................14
Tema 3. Programarea structurat...............................................................................................19
Fia suport 3.1. Instruciuni...................................................................................................19
Fia suport 3.2. Echivalena structurilor repetitive................................................................34
Fia suport 3.3. Corectitudinea programelor.........................................................................35
Tema 4. Programarea structurat...............................................................................................41
Fia suport 4.1 Tablouri.........................................................................................................41
Fia suport 3.2. iruri de caractere........................................................................................43
Fia suport 4.3. Articolul.......................................................................................................44
Fia suport 4.3. Fiiere...........................................................................................................45
Fia suport 2.3. Programarea structurat: structuri liniare, structuri alternative, structuri
repetitive (cu test final, cu test iniial, cu numr cunoscut de pai), teorema de structur
Bohm-Jacopini.......................................................................Error! Bookmark not defined.
Fia suport 2.4. Proiectarea algoritmilor: top-down, bottom-up, modular, structurat Error!
Bookmark not defined.
Fia suport 2.5. Algoritmi elementari ce folosesc structuri fundamentale. Error! Bookmark
not defined.
Tema 3. Corectitudinea algoritmilor..........................................Error! Bookmark not defined.
Fia suport 3.1. Surse de erori n elaborarea algoritmilor (erori n datele iniiale, erori de
rotunjire, erori de metod, erori reziduale, erori de sintax). Error! Bookmark not defined.
Fia suport 3.2. Verificarea corectitudinii algoritmilor (numr finit de pai, definirea corect
a datelor, asigurarea valorilor pentru toate variabilele utilizate n operaii)Error! Bookmark
not defined.
Fia suport 3.3. Analiza algoritmilor. Complexitatea algoritmilor (necesar de memorie,
timpul de execuie al algoritmului, optimalitatea algoritmului, numr de operaii)......Error!
Bookmark not defined.
IV. Fia rezumat.............................................................................................................................46
V. Bibliografie................................................................................................................................47

I. Introducere
Materialele de predare reprezint o resurs suport pentru activitatea de predare,
instrumente auxiliare care includ un mesaj sau o informaie didactic.
Prezentul material de predare se adreseaz cadrelor didactice care predau n cadrul
colilor postliceale, domeniul Informatic, calificarea Analist - programator.
Modulul Limbaje de programare pentru care a fost elaborat materialul are alocate un
numr de 72 ore, din care laborator tehnologic 36 de ore.
Competena / Rezultatul
nvrii
1. Se familiarizeaz cu
elementele de interfa
ale unui mediu de
dezvoltare integrat.
2. Lucreaz cu elementele
de baz ale limbajului
de programare.

Teme

Fie suport

Tema 1. Medii de
dezvoltare integrate

Fia suport 1. Medii de


dezvoltare integrate

Tema 2. Limbaje de
programare

Fia suport 2.1 Program.


Limbaje de programare
categorii de limbaje de
programare
Fia suport 2.2. Noiuni de baz
ale
limbajelor
de
programare
Fia suport 3.1. Instruciuni
Fia suport 3.2. Echivalena
structurilor repetitive
Fia suport 3.3. Corectitudinea
programelor
Fia suport 4.1 Tablouri
Fia suport 4.2. iruri de
caractere
Fia suport 4.3. Articolul
Fia suport 4.4. Fiiere

3.Folosete structurile de
baz ale limbajului de
programare.

Tema 3. Programarea
structurat

4.Implementeaz tipurile
structurate de date n
rezolvarea problemelor.

Tema 4. Tipuri
structurate de date

Absolventul nvmntului postliceal cu specialitatea Analist-programator trebuie s


fie capabil s utilizeze tehnologiile informatice i ale comunicrii pentru conceperea,
proiectarea, elaborarea, testarea, implementarea i dezvoltarea sistemelor informatice,
a programelor i a documentaiei tehnice aferente.

II. Documente necesare pentru activitatea de predare


Pentru predarea coninuturilor abordate n cadrul materialului de predare cadrul
didactic are obligaia de a studia urmtoarele documente:

Standardul de Pregtire Profesional pentru calificarea Analist - programator,


nivelul 3 avansat www.tvet.ro, seciunea SPP sau www.edu.ro, seciunea
nvmnt preuniversitar

Curriculum pentru calificarea Analist - programator, nivelul 3 avansat


www.tvet.ro, seciunea Curriculum sau www.edu.ro, seciunea nvmnt
preuniversitar

III. Resurse
Tema 1. Medii de dezvoltare integrate
Fia suport 1 Mediu de dezvoltare integrat
Mediu de dezvoltare integrat (software development environment, sau integrated
development environment) reprezint un mediu de programare creat ca program de
aplicaie avnd ca scop scrierea programelor.
Un mediu de dezvoltare pune la dispoziia programatorilor, ntr-un singur software toi
paii necesari crerii unui program:
- editarea codului surs,
- compilarea,
- depanarea, testarea
- generarea de documentaie
Principalele componente ale unui mediu de dezvoltare sunt: editorul de cod surs i
depanatorul. Mediile de dezvoltare apeleaz compilatoare, sau interpretoare, care pot
veni n acelai pachet cu mediul nsui, sau pot fi instalate separat de ctre
programator. Printre facilitile prezente n mediile de dezvoltare mai sofisticate se
numr: exploratoare de cod surs, sisteme de control al versiunilor, designere de
interfee grafice, sau unelte de ingineria programrii (ex. generarea de diagrame UML).
Mediul de dezvoltare integrat poate fi o aplicaie de sine stttoare sau poate fi inclus
ca parte a uneia sau mai multor aplicaii compatibile. n acest sens putem exemplifica
limbajul de programare BASIC care poate fi utilizat n cadrul aplicaiilor Microsoft Office,
ceea ce face posibil s scrii un program WordBasic n cadrul Microsoft Word.
De obicei un mediu de dezvoltare integrat este specific unui anumit limbaj de
programare, ns exist i medii de dezvoltare care pot lucra cu mai multe limbaje
(Eclipse, Microsoft Visual Studio).
Exemple de MDI:

Turbo Pascal, primul mediu de dezvoltare creat


Delphi - bazat pe limbajul de programare Pascal
Borland C++
Borland C++ Bilder, Visual C++ - bazete pe limbajul de programare C/C++
Microsoft Visual Basic, Visual J++, Visual InterDev
Microsoft Visual Studio (numit i Visual Studio.NET. Reunete mediile de
dezvoltare precum Visual Basic, Visual C++, Visual J++, Visual InterDev)
Eclipse

Elemente de interfa

n general interfaa unui mediu de dezvoltare integrat pune la dispoziia programatorului


o serie de comenzi i unelte de programare, testare i depanare a programelor
organizate ca: bara de meniuri, meniuri contextuale, bare de instrumente, ferestre.
Bara de meniuri conine articole generale i specifice mediului de dezvoltare n care se
regsesc comenzi ce permit: operaii cu fiiere (creare, memorare, tiprire), creare de
interfee pentru formulare, editarea programelor, codului, compilarea/interpretare,
executarea i depanarea programelor, accesarea sistemelor de help (on i off line),
crearea documentaiilor, laccesarea componentelor din bibliotecile MDI-ului.
Meniurile contextuale conin comenzi rapide ctre aciuni efectuate frecvent. Pentru a
accesa meniuri contextuale se utilizeaz butonul din dreapta al mouse-ului pe obiectul
utilizat.
Bara de instrumente furnizeaz acces rapid la comenzile din meniurile des folosite n
mediul de programare. Bara cu instrumente standard va fi afiat automat dup
instalarea MDI-ului, aceasta putnd fi personalizat adugnd sau elimind noi
instrumente n funcie de opiunea programatorului. Unele medii dau posibilitatea
aranjrii / ancorrii barei de instrumente sub bara de meniuri sau amplasrii n cadrul
ferestrei.
Ferestre sunt utilizate fie pentru a edita codul, pentru a crea design-ul unui formular,
pentru a vizualiza rezultatul sau mesajele transmise de compilator sau de ctre
depanator , fie ca o extindere a barelor de instrumente (fereastra cu unelte), iar n acest
caz ele pot fi personalizate adugnd sau eliminnd anumite unelte.
Bare de navigare sunt utile n situaia n care informaia prezentat nu poate fi
vizualizat n totalitate pe ecran, ele permitnd deplasarea n cadrul ferestrelor. Barele
de navigare pot fi orizontale sau verticale i permit deplasarea total (n punctul de mai
de sus/jos sau n cel mai din dreapta/stnga) sau parial prin intermediul mouse-ului i
a tastaturii.

Tipuri de fiiere specifice unui MDI


Mediul de dezvoltare integrat creeaz automat anumite fiiere. Exist fiiere care sunt
create cnd aplicaia este compilat. Fiierele create prin intermediul unui MDI pot fi:
fiiere principale i fiierele formularului.
Fiierele principale sunt create automat fiierul proiectului, fiierul surs i fiierul
resurs. Fiierul proiectului este un fiier text care conine setrile i regulile de
construire a proiectului. Fiierul surs conine codul surs. Fiierul resurs conine
pictograma aplicaiei, numrul versiunii aplicaiei i alte informaii. Nu toate tipurile de
aplicaii au un fiier resurs.
Fiierele formularului descriu formularul, acestea conin informaii cu privire la design i
la cod.
Spre exemplu o aplicaie creat cu C++ Bilder conine:
7

fiierul proiect cu extensia .mak , creat automat de MDI, ce poate fi vizualizat prin
meniul View, comanda MakeFile; conine informaii despre fiierele care
alctuiesc proiectul, progrmatorul nu va modifica datele din acest fiier ele se
creeaz i se modific automat de ctre mediu.

fiierul surs cu extensia .cpp, conine secvena C++ care alctuiete programul;
pentru ca programul s fie rulat se utilizeaz alte fiiere; fiierul poate fi vizualizat
prin mediul View, comanda Project Source; programatorul nu lucreaz cu acest
fiier, el este gestionat automat de ctre mediu

fiiere care conin descrierea formularului:


o fiierul antet, extensia .h, conine clasa care definete formularul
o fiierul care conine funciile create de utilizator, extensia .cpp, creat
automat de mediu, dar scrierea coninutului funciilor este realizat de
ctre programator
o fiierul care reine aspectul formularului, extensia .dfm, creat automat de
mediu, date pot fi vizualizate n mod text, ele se refer la atributele
(dimensiunea formularului, aspectul su, poziia) i evenimente
formularului.

O aplicaie creat cu Visual Basic se memoreaz ntr-un fiier proiect cu extensia


.vbp, i poate conine fiiere i obiecte precum:
-

module formular, fiier cu extensia .frm, care descrie pentru fiecare formular al
proiectului controalele sale (atribute i evenimente), precum i descrierea
formularului (atributele i evenimentele). Pot fi declarate constante, variabile,
proceduri externe, proceduri eveniment i proceduri generale, toate la nivelul
formularului pentru care au fost declarate.

modulele clas, extensia .cls, analoage modulelor formular, doar c ele sunt
folosite pentru a crea obiecte proprii cu proprieti i metode.

modulele standard, extensia .bas, utilizate pentru a crea tipuri, constante,


variabile, proceduri cu vizibilitate la nivelul proiectului (publice, pentru toate
formularele) sau doar la nivelul modului.

fiiere de resurse, extensie .res, utilizate cu scopul de a memora imagini bitmap,


iruri de caractere, n general date care se pot schimba fr a afecta codul. Acest
fiier este singular, un proiect nu poate avea mai multe fiiere de resurse.

documente ActiveX, extensia .dob, un fel de formulare ce pot fi afiate prin


intermediul unui browser de Internet (Ex: Internet Explorer)

module cu controale ale utilizatorului (extensie .ctl) i module cu proprieti de


pagin (extensie .pag) folosite pentru a crea controale ActiveX i proprietile lor
de pagin ce specific proprietile de afiare n paginile de Web.

alte componente precum: controale ActiveX (extensie .ocx), obiecte inserabile


(Ex: imagini bitmap, foi de calcul tabelar, text create cu diverse alte aplicaii),
referine.

Instalarea unui MDI


Pentru a utiliza facilitile oferite de mediile de dezvoltare integrate este necesar
instalarea acestora. Atunci cnd se dorete utilizarea unui MDI se vor studia
facilitile oferite de mai multe medii, avantajele i dezavantajele, precum i ediiile
existente pe pia. Este posibil ca MDI-urile s fie disponibile n mai multe ediii:
pentru nceptori (de tip Learning), pentru cunosctori (de tip Proffesional) i
pentru avansai (de tip Enterprise).
Dup ce sa ales un mediu de dezvoltare accesibil se vor verifica cerinele minime
necesare instalrii distribuite odat cu pachetul de programe i totodat se va citi
documentaia de instalare. n general, exist fiiere de tip readme prin care se
furnizeaz informaii cu privire la instalare.
Instalarea se va face de pe un mediu de stocare ce conine fiierele necesare
CD/DVD:
- Introducerea CD-ului sau DVD-ului n unitatea de citire
- Utilizarea comenzilor sistemului de operare pentru a lansa n execuie programul
de instalare: Setup sau Install, n cazul n care instalarea nu pornete automat la
introducerea CD/DVD-ului n unitate
- n funcie de mediul pentru care s-a optat se vor urma instruciunile care sunt
disponibile pe ecran.
Anumite medii de dezvoltare integrat pun la dispoziie chiar pe parcursul instalrii
opiuni cu privire la componentele ce pot fi instalate. n general sunt prezentate dou
versiune instalare: standard i personalizat. Dac n cazul instalrii s-a optat pentru
varianta standard, dup ce s-a finalizat procesul de instalare se pot aduga sau elimina
anumite componente ale mediului, n funcie de mediu pot fi instalate: compilatoare,
interpretoare, instrumente pentru vizualizare, generatoare de documentaii, instrumente
pentru arhive, interfee pentru acces la baze de date, biblioteci de clase.
Bibliotecile de clase: ofer o interfa comun i consistent de dezvoltare pentru
toate mediile de dezvoltare integrate.
O biblioteca este o colecie de rutine stocate ntr-un singur fiier (module, programe,
texte etc.), rutine care sunt obinute prin compilri sau asamblri separate. Fiecare set
de instruciuni dintr-o biblioteca are un nume i execut o anumit sarcin specific.
Rutina de bibliotec este o procedur memorat ntr-o biblioteca a sistemului, putnd fi
apelat din programe scrise n limbaje de nivel nalt.
Astfel de rutine simplific munca i mpiedic multiplicarea efortului atunci cnd este
nevoie s se execute de mai multe ori o aceeai sarcin. Programatorul poate identifica
biblioteca programului (fiier care poart un nume), apoi se poate referi la rutina dorit
9

iar programul va ngloba n execuie toate instruciunile pe care le conine rutina prin
simpla apelare a numelui acesteia.
Principalele avantaje pe care le prezint un astfel de utilitar:
- sigurana n lucru, oferit prin gestionarea automat a tuturor modificrilor asupra
fiierelor pe care le conine o bibliotec;
- simplificarea activitii de programare, prin apelarea din biblioteca a rutinei de
care este nevoie;
- utilizare simpl, cu ajutorul unei linii de comanda, n mod conversaional sau
utiliznd un fiier de rspunsuri;
- creterea gradului de portabilitate.
Interfee pentru acces la baze de date. Baza de date reprezint o modalitate de
stocare a unor informaii (date) pe un suport extern, cu posibilitatea regsirii acestora.
Uzual, o baz de date este memorat ntr-unul sau mai multe fiiere. Modelul clasic de
baz de date este cel relaional, n care datele sunt memorate n tabele.
Crearea unei baze de date: se face cu aplicaii specializate oferite de productorul
tipului respectiv de baz de date.
Prelucrarea datelor din bazele de date prin intermediul limbajelor de programare
presupune accesul la baza de date care se face prin intermediul unui driver specific
tipului respectiv de baz de date. Acesta este responsabil cu accesul efectiv la datele
stocate, fiind legtura ntre aplicaie i baza de date.
ODBC, JDBC sunt interfae standard SQL de acces la baze de date. Cu alte cuvinte, nu
este necesar scrierea un program pentru a accesa o baz de date Oracle, alt program
pentru a accesa o baz de date Acces sau SQL Server. Este de ajuns scrierea un
singur program folosind JDBC i acesta va fi capabil s trimit secvene SQL bazei de
date dorite. Bineneles, scriind codul sursa n Java, ne este asigurat portabilitatea
programului.
O dat ncheiat etapa de instalare mediul poate fi lansat n execuie prin facilitile
sistemului de operare. Dac se utilizeaz un sistem de operare din generaia Windows
lansarea mediului de programare se face accesndu-l din Opiunea Programs a
butonului Start.
Pentru a utiliza ct mai uor mediile de programre (MDI) acestea sunt n general dotate
cu documentaie de tip Help. Majoritatea pun la dispoziia programatorului i
asisten online pe site-urile oficiale ale furnizorilor sau pe alte surse de informaii
din Web.
De obicei sistemele Help sunt structurate de aa natur nct s permit regsirea
rapid a informaiei (informaii despre depanarea programelor, structurile de control,
cuvinte cheie), subiecte generale (structurate pe capitole i domenii de interes), legturi
de tipul See also, exemple de utilizare.
Majoritatea mediilor de programare moderne pun la dispoziie i asisten contextual,
adic se pot obine informaii despre un anumit cuvnt cheie (funcii, proprieti,
metode, declaraii, metode etc.), comand din meniuri, instrumente, controale etc.
selectndu-l i invocand tasta F1, fr a mai trece prin mediul Help.

Sugestii metodologice
UNDE PREDM? Coninutul va fi predat n laboratorul de informatic dotat cu
videoproiector, fiecare elev va ocupa un loc la o sta ie de lucru.
CUM PREDM?
10

Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor


cunotine. Pe fiecare staie de lucru va fi instalat un mediu de dezvoltare integrat astfel
nct fiecare elev s poat avea acces la elementele de interfa pe durata expunerii
coninuturilor.

Clasa poate fi organizat frontal sau pe grupe de 2-3 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.

Activiti interactive, de genul urmator:


o Rezolvare de probleme simple: instalarea unor componente, accesarea
anumitor comenzi din meniuri sau din barele de instrumente
o Activiti de mperechere, completare, asociere ntre noiunile prezentate
o Exerciii cu ntrebri structurate (de la simplu la complex)
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise

11

Tema 2. Limbaje de programare


Fia suport 2.1. Program. Limbaj de programare categorii de limbaje de
programare
Programul reprezint un set de instruciuni, scrise ntr-un limbaj de programare, care
comunic unui calculator cum s efectueze un anumit grup de operaii. Aceast
succesiune de instruciuni se numete cod sau 'surs'.
Programul reprezint transcrierea unui algoritm ntr-un limbaj de programare. Acesta
descrie att datele (de intrare i ieire) precum i secvena logic de operaii ale
algoritmului conform regulilor limbajului de programare folosit.
n general scrierea programului de face de ctre un programator cu ajutorul unui editor
de text inclus n mediul de dezvolare integrat. Astfel programul este un produs finit al
activitii de programare.
Etapele realizrii unui program
1. Editarea (crearea, scrierea) programului
2. Stocarea ntr-un fiier surs (Ex: nume_fisier.cpp n Borland C++,
nume_fisier.pas, n Pascal)
3. Compilare/Interpretare
4. Rezult fiierul obiect (nume_fisier.OBJ)
5. Editare de legturi (link edit)
6. Rezult fiierul executabil (nume_fisier.exe)
7. Etapa de depanare (debug), prin execuii repetate ale fiierului executabil, n
diverse condiii sau cu diverse alte date de intrare
Pentru executarea unui program scris ntr-un limbaj oarecare, exist, n principiu, dou
abordri: compilare sau interpretare. Compilatorul transform programul-surs n
totalitatea sa ntr-un program echivalent scris n limbaj main, care apoi este executat.
Interpretorul ia prima instruciune din programul-surs, o transform n limbaj main i
o execut; apoi trece la instruciunea doua i repet aceleai aciuni pn la ultima.
Unele limbaje se preteaz bine la compilare (Pascal, C/C++), altele sunt cu predilecie
interpretate (BASIC, PHP, SQL). Multe limbaje combin compilarea cu interpretarea:
codul surs este compilat ntr-un limbaj binar numit bytecode, care la rulare este
interpretat de ctre o main virtual. De remarcat faptul c unele interpretoare de
limbaje pot folosi compilatoare aa-numite just-in-time, care transform codul n limbaj
main chiar naintea executrii.

Proiect
Noiunea de proiect este strns legat de mediu de dezvolatare integrat. MDI-ul fiind un
set de aplicaii cu rol n realizarea aplicaiilor/programelor fi ierul surs nu mai este un
simplu fiier ci el este organizat sub forma unui proiect fiind alctuit din mai multe f iiere
fiecare avnd un rol bine definit n cadrul proiectului.

12

Limbaje de programare. Categorii de limbaje de programare


Limbajul de programare reprezint un set bine definit de expresii i reguli sau tehnici
valide de scriere a instruciunilor pentru un computer. Un limbaj de programare are
definite un set de reguli sintactice i semantice dnd astfel posibilitatea programatorului
s specifice exact aciunile pe care trebuie s le execute calculatorul, n ce ordine i cu
ce date.
Limbajele de programare pot fi clasificate dup:
I. Nivelul de abstractizare
Nivel 1: limbajul cod main
Nivel 2: limbaj de asamblare
Nivel 3: limbaje procedurale precum C/C++, Pascal, Basic
Nivel 4: neprocedurale, orientate pe rezolvarea unei anumite clase de probleme
(SQL).
Nivel 5: limbaje utilizate pe diferite domenii inteligen artificial, reele
neuronale (LISP, PROLOG)
Cu ct limbajele au un nivel mai sczut sunt mai apropiate de limbajul calculatorului i
sunt mai rapide, cu ct nivelul este mai nalt cu att sunt mai apropiate de limbajul
natural.

Un limbaj de nivel scazut lucreaz cu concepte i elemente de nivel hardware precum:


registru, microprocesor, locatie de memorie, port de intrare / iesire etc.
Un limbaj de nivel nalt lucreaz cu concepte apropiate de limbajul natural, concepte de
nivel logic precum: colecie de date, variabile, constante, expresii, operaii, operatori,
instruciuni.
II. Paradigma de programare
limbaje procedurale: C/C++, Pascal, Java
limbaje functionale: ML, Haskell
limbaje pentru programarea logic: Prolog, DATALOG
limbaje mixte: LISP (amestec ntre limbaje funcionale i cele impertive)
III.Utilizare
generale utilizate pentru rezolvarea oricrui tip de problem: Pascal, C/C++,
Java, Basic, PHP, CSS etc.
specifice limbaje cu un scop bine definit, interaciunea cu un anumit program
sau sistem: SQL, ActionScript (limbajul de scripting folosit de Macromedia Flash),
ASP / ASP.NET (pentru scripting web), FoxPro, SQL (pentru interaciunea cu
bazele de date relaionale).
13

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic dotat cu
videoproiector.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.

Activiti interactive, de genul urmator:


o Activiti de mperechere, completare, asociere ntre noiunile prezentate
o Activiti de urmrire a execuiei unui algoritm pas cu pas i notarea
valorilor variabilelor la fiecare pas
o Exerciii cu ntrebri structurate (de la simplu la complex)
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise

14

Fia suport 2.2. Noiuni de baz ale limbajului de programare

Vocabularul oricrui limbajul de programare conine: setul de caractere cu care


lucreaz, identificatorii, separatorii, comentariile,carectere speciale, cuvintele cheie.
Setul de caractere reprezint mulimea de caractere cu ajutorul crora se poate scrie
un program ntr-un limbaj de programare. n general limbajele de programare utilizeaz
un set de caractere care cuprinde:
-

literele mari i mici ale alfabetului englez

cifrele sistemului de numeraie zecimal: 0-9

caractere speciale: +, -, /, *, =,<, >, ( ,), [, ], {, }, !, #, %, /, $, _, @, blank (spaiu),


, , .

Identificatori: reprezint o succesiune de litere i cifre i caracterul special _ prin


care
se
asociaz
nume
tipurilor,
variabilelor,
constantelor,
obiectelor,
funciilor/procedurilor, metodelor etc. Primul caracter al identificatorului va fi obligatoriu
o liter.
Exemplu: x, x1, data_nasterii.
Separatori: sunt utilizai pentru a separa unitile lexicale (cele mai simple elemente
alctuite din caracterele limbajului) ale unui program. n general, pentru separarea
unitilor lexicale limbajele de programare folosesc: spaiul, virgula, sfritul de linie,
punctul i virgula (;).
Comentarii sunt utilizate n cadrul programelor pentru a da anumite detalii facilitnd
nelegearea codului de ctre programatori. Adeseori, cnd se lucreaz n echip,
comentariile sunt foarte necesare. Sunt mai multe variante n care putem s scriem
comentarii. n general, fiecare programator va folosi ceea ce crede c este mai uor de
nteles sau mai rapid de scris.
Ele pot fi inserate oriunde n cadrul programelor, pot fi scrise pe un rnd sau pe mai
multe rnduri i nu sunt luate n considerare la compilare i execuia programului.
Exemple de caractere utilizate pentru comentarii:
-

Limbajul Pascal folosete acoladele { }, pentru comentarea liniilor de cod:


o {Acesta este un comentariu n Pascal}

Limbajul C/C++ folosete /* ...... */ n cazul n care comentariul se ntinde pe mai


multe linii, iar dac comentariul este scris pe o singur linie se folosete //:
o /* Acesta este un comentariu n limbajul C/C++ scris pe mai multe rnduri
n cadrul unui program*/
o //Acesta este un comentariu n C scris pe un rnd
15

Limbajul Visual Basic folosete apostroful


o Acesta este un comentariu n limbajul Basic.

Cuvinte cheie reperezint cuvinte n limba englez utilizate de ntr-un anumit context i
cu un neles bine definit. Ele nu pot fi utilizate n alt scop dect ce pentru care au fost
definite.
Exemple de cuvinte cheie:
Pascal

n C/C++ cuvintele cheie


sunt scrise cu litere mici.

Visual Basic

and, assign, array, break,


begin, case, const, div, do,
downto, else, end, file, for,
function, goto, if, in, label,
mod, nill, not, precedure,
program, read, record,
repeat, set, of, or, origin,
otherwise, packet, then, to,
type, until, var, while, write,
with etc.

break, class, cont, include,


define,
char,
switch,
continue, do, else, for, if,
then, void, main, scanf,
printf, cin, cout, while, int,
double, float, return, struct,
typedef,
static,
public,
sizeof, new, ifndef, endif
etc.

as, empty, dim, private, sub,


if, end, public, static, call,
where, function, while, do,
select, then, true, false,
variant, case, else, msgbox,
const, loop, string, double,
integer, null, variant, print,
next, for, each, step, to,
exit, until etc.

Structura general a unui program


Prile principale ale unui program sunt:
- antetul (header-ul) programului,
- declaraiile n care se descriu obiectele asupra crora vor avea loc prelucrrile
- funcii / proceduri definite de programator
- partea principal a programului n care se scriu instruciunile (ansamblul
operaiilor ce urmeaz a fi executate).
Structura unui program n Pascal
program <nume_program>;
uses <biblioteci cu funcii i proceduri
folosite n program>
type <tipuri de date definite de
utilizator>
const <constante folosite n program>
var <variabile globale folosite n
program>
Funcii utilizator
Programul principal
begin
<aici se scrie programul principal>
end.

Structura unui program n C/C++


Preprocesare:
- includeri de fiiere cu texte surs
(#include specificator_de_fiier sau
#include <specificator_de_fiier>),
- definiii i apeluri de macrouri (#define
nume succesiune_de_caractere),
- compilare condiionat.
Declaraii de tipuri, variabile i constante
globale.
Funcii utilizator
Funcia principal
main()
{
declaratii
instructiuni
}

16

Includeri de fiiere
Toate funciile folosite n program trebuie descrise n fiierele surs (cele scrise de ctre
programator), n fiiere header (funciile predefinite, existente n limbaj), sau n biblioteci
de funcii.
Un fiier header este un fiier aflat n sistem sau creat de ctre programator, care
conine declaraii i definiii de funcii i variabile.
Tipuri de date
Prin tip de date se intelege o mulime finit de valori mpreun cu o regul de codificare
n vederea memorrii datelor, precum i o mul ime de opera ii definite pe mul imea
valorilor.
Limbajele de programare utilizeaz tipuri de date numerice i alfanumerice. Tipurile
numerice sunt submulimi ale numerelor naturale, ntregi i reale. n func ie de tipul lor
mulimea de operaii definete operatorii cu care lucreaz datele precum i anumite
restricii.
Tipurile de date pot fi predefinite (tipuri fundamentale) i definite de programator.
n funcie de limbajul folosit, tipurile fundamentale de date au alte denumiri, ns
conceptual ele vizeaz aceleai domenii de valori.
Tipurile ntregi exist mai multe tipuri ntregi predefinite, iar fiecare tip desemneaz o
submulime a mulimii numerelor ntregi.
Exemple n Pascal:

Exemple in C/C++

Tip

Valoare
minim

Valoare
maxim

Tip

Valoare
minim

Valoare
maxim

Shortint

-128

127

unsigned

65535

Byte

255

unsigned long

4294967295

Integer

-32768

32767

int

-32768

32767

Word

65535

short

-32768

32767

Longint

-2147483648

2147483647

long

-2147483648 2147483647

Tipurile reale sunt reprezentate de o submulime a mulimii numerelor reale, care poate
fi reprezentat n calculator.
Exemple n Pascal:

Exemple n C/C++
Tip
float

17

Valoare
minima

maxima

Valoare

3.4E-38

3.4E38

double 1.7E-308

1.7E308

long
3,4E-4932
double

1,1E4932

Tip

Valoare
minima

Valoare
maxima

Single

1.5E-45

3.4E38

Real

2.9E-39

1.7E38

Double

5.0E-324

1.7E308

Extended

3.4E-4932

1.1E4932

Comp

-263+1

263-1

Tipul caracter reprezint mulimea caracterelor reprezentate n codul ASCII extins.


Fiecare din aceste caractere se reprezint pe un octet. Relaia de ordine ntre aceste
caractere este dat de ordinea lexicografic, relaie dat de ordinea stabilit de codurile
ASCII asociate caracterelor.
Exemple n Pascal:

Exemple in C/C++

Tip

Valoare
minim

Valoare
maxim

Tip

Valoare
minim

char

#0

#255

unsigned char 0

255

char

127

-128

Valoare
maxim

Tipul logic cunoscut i sub denumirea de tip boolean este un tip enumerativ format din
dou valori: true i false. Exist limbaje precum C/C++ care nu au acest tip, pentru
reprezentarea celor dou valori se fac diverse articicii precum utilizarea valorii 0 i diferit
de 0.
Tipurile ntregi, caracter i tipul logic sunt tipuri ordinale, mulimi finite i ordonate
de valori discrete.n acest sens putem spune c unui element i se asociaz un numr
de ordine n cadrul mulimii, obinut implicit sau prin intermediul funciilor specifice
limbajelor de programare. Elementele unui astfel de tip pot fi puse n relaie (<, >, <=,
>=, diferit, egal).
n funcie de limbajul de programare studiat, profesorul va puncta toate tipurile existente
n limbajul respectiv: enumerativ, mulime, subdomeniul etc.
Date care intervin n prelucrri din cadrul unui program pot fi clasificate n constante i
variabile.
Variabilele sunt date care i modific valoarea pe parcursul execuiei programului.
O variabil este definit de patru entiti:
- nume (cu ajutorul cruia ne putem referi pe parcursul execuiei programului),
- valoare (care variaz la momente de timp diferite),

18

tip (care arat crei mulimi de valori apar ine variabila i specific ce operatori
pot fi utilizai)
- adresa (care specific locaia unde aceasta este stoca n memorie).
Pentru a utiliza variabile n cadrul unui program acestea vor fi declarate nainte de
utilizare. n acest fel li se atribuie un identificator, o adres de memorie, iar n tipul
execuiei programului la acea adres vor fi memorate diferite valori, toate avnd acela i
tip, cel specificat la declarare.
-

Exemplu: Se dau dou numere ntregi a i b mai mici dect 100. S se afi eze
media aritmetic.
Analiznd situaia problem se deduce c este nevoie de 3 variabile al cror tip este
diferit: cele dou numere vor fi declarate de tip ntreg, iar media aritmetic va fi de tip
real.
n funcie de limbajul de programare utilizat modalitatea de declarare este diferit:
Varianta C++

Varianta PASCAL

tip_de_date identificator_variabil;

var identificator_variabil: tip_de_date;

Pot fi declarate i mai multe variabile de acela i tip n cadrul aceleia i declara ii: n
acest caz se va folosi virgula.
tip_de_date identificator_variabila_1,
var identificator_variabila_1,
identificator_variabila_2,
identificator_variabila_2,
identificator_variabil_n;
identificator_variabil_n: tip_de_date;
Pentru exemplul dat vom avea urmtoarele declara ii:
int a,b;
float medie;

var a,b: integer;


var m:real;

Constantele sunt date care nu i modific valoarea. Aceste valori fixe reprezint
caractere, iruri de caractere, numere ntregi sau raionale.
Ca i n cazul variabilelor, constantele au un nume, o valoare (dar care nu se poate
modifica), un tip i o adres de memorie. Este necesar, ca i la variabile, o declarare
pentru a specifica tipul, numele i valoarea constantei.
Varianta C/C++

Varianta PASCAL

const identificator_variabil = valoare;


const tip_de_date identificator_variabil =
valoare;
Exemplu:
const varsta=25;
const double PI = 3.14;

const identificator_variabil = valoare;


const identificator_variabil: tip_de_date =
valoare;
Exemplu:
const varsta=25;
const PI : real =3.14;

Operanzi, operatori, expresii, operaii


I.

Operanzii sunt fie identificatori de variabile, fie constante.


19

II.

Operatorii pot fi: unari, se aplic unui singur operand sau binari, situai n
care sunt implicai doi operanzi. n limbajele de programare operatorii sunt
grupai n clase de operatori: aritmetici, relaionali, logici, pe iruri de
caractere (limbajul C nu are operatori definii pe iruri de caractere).

Operatori aritmetici
Operator
Adunare
Scdere
nmulire
mprire ntreag
mprirea
numerelor reale

Pascal
+
*
Ctul mpririi: div
Restul mpririi: mod
/

C/C++
+
*
Ctul mpririi: /
Restul mpririi: %
/

Ordinea de efectuare a operaiilor este dat de prioritatea operatorilor aritmetici (cea


cunoscut n matematic: nmuliri i mpriri i apoi adunri i scderi). Acetia sunt
operatori binari adic acioneaz asupra a doi operanzi. Sunt mai prioritari operatorii
multiplicativi (nmulire, mprire), ei se asociaz de la stnga la dreapta.
n plus exist i operatorii unari plus i minus (+, -), care acioneaz asupra unui singur
operand i au sensul de semn al numrului (pozitiv sau negativ). Operatorii unari sunt
mai prioritari dect cei binari. Operatorii unari au aceeai prioritate i se asociaz de la
dreapta la stnga.
Operatori relaionali sunt cei folositi i n matematic:
-

> (mai mare), >= (mai mare sau egal),


< (mai mic), <= (mai mic sau egal),
Egalitatea =(Pascal), respectiv == (C/C++),
Diferit <> (Pascal), respectiv != (C/C++).

Ei precizeaz o relaie de ordine sau de egalitate ntre date, care poate fi ndeplinit sau
nu. Expresiile construite cu operatorii relaionali pot fi evaluate la o valoare de adevar:
adevarat (diferit de zero dac se lucreaz cu C/C++) sau fals (egal cu 0 pentru
varianta C/C++), dup cum este ndeplinit relaia sau nu.
Operatorii relaionali sunt operatori binari i se pot aplica numai operanzilor numerici,
logici i doar pentru varianta Pascal i pe tipul caracter (ordinea caracterelor fiind cea
data de codul ASCII).
Nu exist o ordine specific a operaiilor atunci cnd folosim operatorii relaionali.
Operaiile se efectueaz n ordinea apariiei operatorilor, de la stanga la dreapta.
Operatori logici
Operatorii logici sunt folosii pentru determinarea valorii de adevr a propoziiilor logice
i anume adevarat sau fals, pentru varianta Pascal, respectiv 0 i orice valoare
diferit de zero pentru varianta C/C++.
20

Operatorii logici sunt:


- negatia logic: not (Pascal), respectiv ! (C/C++)
- i logic: and (Pascal), respectiv && (C/C++)
- sau logic: or (Pascal), respectiv II (C/C++)
Operatorul not / ! este unar, n timp ce and / && i or / II sunt binari.
Rezultatul expresiilor ce conin operatori logici este cel prezentat n logic matematic i
descris n tabelul urmator:
P
0
0
1
1
III.

q
0
1
0
1

not p / !p
1
1
0
0

p or q / pIIq
0
1
1
1

p and q / p &&q
0
0
0
1

O expresie este format dintr-unul sau mai muli operanzi asupra crora
acioneaz operatori. La scrierea unei expresii se folosesc operatori din
aceeai clas sau din clase diferite. La evaluarea unei expresii se va ine cont
de prioritatea operatorilor (care poate fi modificat prin utilizarea parantezelor
rotunde), de asociativitatea lor, precum i de regula conversiei implicite.

De exemplu, n expresia 2 * a b + c / 2 avem:


- a, b, c sunt operanzii
- *, -, +, / sunt operatorii
n funcie de operanzii i operatorii folosii n cadrul expresiilor acestea pot fi: naturale,
nregi, reale, logice.
Evaluarea unei expresii
O expresie se evalueaz respectand regulile nvaate la matematic: n primul rand se
evalueaz expresiile din parantezele rotunde, apoi se efectueaz operaiile n ordinea
prioriatii lor. Tabelul urmator prezint prioritatea operatorilor, n ansamblul lor:
Prioritate*
Operatori
1
Negatia logic
Aritmetici
2
multiplicativi
3
Aritmetici aditivi
4
Relationali
5
Conjunctia logic
6
Disjunctia logic

Asociativitate*
De la drepta la stanga
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta

Greeli frecvente n scrierea expresiilor


Sunt cteva greeli care se fac n mod frecvent atunci cnd se scriu expresii
matematice pentru a fi evaluate de calculator.
-

Se omite semnul de nmulire. De exemplu se scrie 18a+3 (greit) n loc de


18*a+3 (corect)

21

Se omit parantezele, de exemplu la scrierea unor fracii sau la calcularea mediei


aritmetice: x+y/2 (greit) n loc de (x+y)/2 (corect)
- O alta greeal este utilizarea nlanuit a operatorilor relaionali. De exemplu se
scrie a<b<c (greit) n loc de a<b and b<c (corect), respectiv a<b && b<c
(corect),
IV.
Operaii de intrare / ieire permit introducerea datelor n memoria
calculatorului, respectiv afiarea rezultatelor la monitor, ntr-un fiier pe disc
sau pe suport de hrtie.
Operaiile de intrare / ieire se realizeaz cu conversie ntre reprezentarea intern a
datelor (binar: virgul fix, virgul mobil etc.) i cea extern (ASCII). Operaia de
ieire / scrierea pe ecran se desfoar n doi pai: datele din memoria principal sunt
convertite n formatul extern de reprezentare (ASCII) i transferate ntr-o zon tampon
(pasul 1). De aici sunt preluate i afiate pe ecran (pasul 2). La operaia de intrare /
citire datele sunt preluate de la tastatur i depuse ntr-o zona tampon n format ASCII
(pasul 1). De aici se preiau datele necesare, se convertesc n formatul intern i se
depun n memoria principal, n zonele corespunztoare parametrilor funciilor de citire.
Pascal se realizeaz prin procedurile
standard din biblioteca standard a
limbajului
read(identificator_variabil);
readln(identificator_variabil);
Utilizarea lui readln are ca efect dup citirea
variabilei trecerea cursorului la urmtorul rnd.
Se pot citi mai multe variabile odat, acestea sunt
specificate n parantez, desprite prin vigul.
Exemple:
var a,b: integer;
c:real;
......
Read(a,b); {se vor citi dou variabile: a i b, dup
citire cursorul va rmne pe aceeai linie}
Readln(c); {se va citi variabila c, dup citire
cursorul sare pe linia urmtoare}

write(ir_de_caractere);
write (ir_de_caractere,
identificator_variabila);
writeln(identificator_variabila);
Utilizarea lui writeln are ca efect dup scriere
trecerea cursorului la urmtorul rnd.
Se pot scrie mai multe variabile odat, acestea
sunt specificate n parantez, desprite prin
vigul.
Exemple:
var a,b: integer;
c:real;
......
write(a,b); {se va afia coninutul celor dou
variabile: a i b, dup scriere cursorul va rmne
pe aceeai linie};
writeln(c); {se va afia coninutul variabilei c, dup
scriere cursorul sare pe linia urmtoare};

C++ - se realizeaz prin intermediul


unor funcii din biblioteca
standard a limbajului
Intrrile standard se realizeaz cu obiectul cin i
operatorul >>. Pentru utilizarea acestora
este necesar includerea fiierului
iostream.h.

cin>> identificator_variabil;
Exemplu:
int i;
.....
cin>>i; //are ca efect citirea variabilei i
Se pot citi mai multe variabile utiliznd formatul:
cin>>var1>>var2.....>>varn;
Ieirile standard se realizeaz cu obiectul cout i
operatorul <<. Pentru utilizarea acestora
este necesar includerea fiierului
iostream.h.

cout<< identificator_variabila;
cout<<Sir de caractere;
Exemplu:
int i;
.....
cout<<i; //are ca efect afiarea valorii lui i
cout<<\n; //afieaz newline
cout<<a=<<a; //are ca efect afisarea sirului
dintre ghilimele dup care se va afia valoarea
variabilei a.
Se pot afia mai multe variabile utiliznd
formatul:
cout<<var1<<var2.....<<varn;

Sugestii metodologice
22

UNDE PREDM?
videoproiector.
CUM PREDM?

Coninutul va fi predat n laboratorul de informatic dotat cu

Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor


cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.

Activiti interactive, de genul urmator:


o Rezolvare de probleme simple
o Activiti de mperechere, completare, asociere ntre noiunile prezentate
o Activiti de urmrire a execuiei unui algoritm pas cu pas i notarea
valorilor variabilelor la fiecare pas
o Exerciii cu ntrebri structurate (de la simplu la complex)
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise

23

Tema 3. Programarea structurat


Fia suport 3.1. Instruciuni
n conformitate cu teorema lui Bohm-Jacopini care afirm c orice algoritm se poate
reprezenta folosind trei tipuri de structuri fundamentale: structur liniar, structur
alternativ i structur repetitiv orice limbaj de programare are definite instruciuni care
s permit codificarea acestora.
Structura liniar
Structura liniar (numit i secvenial) este alcatuit din urmatoarele instruciuni:
-

comentarii
declararea variabilelor
operaii de intrare/ieire
instruciunea de atribuire
instruciunea compus (sau blocul de instruciuni)

Comentariile, declararea variabilelor i operaiile de intrare-ieire au fost prezentate n


fia suport 2.2
Instruciunea de atribuire
Efectul instruciunii este acela de a atribui valoarea din dreapta, variabilei specificat n
stnga. n cazul n care n dreapta avem o expresie, aceasta se va evalua i apoi
valoarea va fi atribuit variabilei din stanga.
Pascal
variabila:=valoare;
variabila:=expresie;

C/C++
variabila=valoare;
variabila=expresie;

Exemplu:
a := 56;
b := a-2*a;
c := c+1;
b :=b-1;

Exemplu:
a = 56;
b = a-2*a;
c = c+1;
b =b-1;

Ultimele atribuiri au un sens deosebit:


-

variabila c va lua valoarea avut la pasul anterior al algoritmului mrit cu 1,


aceast operaie se mai numete i incrementare i poate fi rescris astfel:
Pascal
Inc(i);

C/C++
i++;

variabila b va lua valoarea avut la pasul anterior al algoritmului micorat cu 1,


aceast operaie se mai numete i decrementare i poate fi rescris astfel:
Pascal
dec(i);

C/C++
i--;
24

Instruciunea compus
Este folosit pentru a grupa mai multe instruciuni ce urmeaz a fi efectuate n ordinea
n care sunt scrise.
Parianta Pascal
Begin
Instructiune1;
Instructiune2;
..............
Instructiunen;
End

Varianta C/C++

Instructiune1;
Instructiune2;
..............
Instructiunen;

Interschimbarea a dou valori (numit i regula celor trei pahare)


Fie dou variabile ntregi a i b. Valorile lor se citesc de la tastatur. S se interschimbe
valorile celor dou variabile apoi s se afieze noile valori, pe acelai rnd cu un spaiu
ntre ele.
Exemplu: dac pentru variabilele a i b se citesc valorile 5 i 8, se va afia: 8 5
Parianta Pascal
Program Interschimbare;
Var a, b, aux: integer;
Begin
Writeln(a=);Readln(a);
Writeln(b=);Readln(b);
aux:=a;
a:=b;
b:=aux;
Writeln(a=,a);
Writeln(b=,b);
End.

Varianta C/C++
main()
{
int a,b,aux;
cout<<a=;cin>>a;
cout<<b=;cin>>b;
aux=a;
a=b;
b=aux;
cout<<a<<endl<<b<<endl;
}

Cifrele unui numr


Fie x un numr ntreg format din exact 5 cifre. S se afieze cifra unitilor i cea a
sutelor, pe acelai rnd, cu un spaiu ntre ele.
Exemplu: dac pentru x se citete valoarea 12345 se va afia 5 3.
Parianta Pascal
Program cifre;
Var x, c1,c2: integer;
Begin
Writeln(x=);Readln(x);
c1:= x mod 10;
x:=x div 100
c2:= x mod 10;
Writeln(c1=,c1);
Writeln(c2=,c2);
End.

Varianta C/C++
main()
{
int c1,c2,x;
cout<<x=;cin>>x;
c1= x%10;
x=x/100
c2= x%10;
cout<<c1<<endl;
cout<<c2<<endl;
}

25

Structura alternativ
Structura alternativ permite rezolvarea situaiilor n care trebuie s executm o
anumit secven de instruciuni care depinde de o condiie. n acest sens putem avea
una sau dou alternative:
I.

situaia n care condiia este ndeplinit se va executa o secven, iar n


situaia cnd condiia nu este ndeplinit se va executa alt secven

II.

n situaia cnd condiia este ndeplinit se va executa o secven, iar n


situaia cnd condiia nu este ndeplinit nu se va mai executa nicio secven

Varianta Pascal
Situaia I
if exp_logic then secve1
else secven2;
Situaia II
if exp_logic then secve;

Varianta C/C++
Situaia I
if (exp_logic) secve1;
else secven2;
Situaia II
if (exp_logic) secve;

Observaii
1. Exist cazuri n care expresia logic poate fi mai complex, s lum cazul cnd
aceasta este alctuit din dou condiii. Notnd prima condiie cu c1 i pe a doua
cu c2 Dac secvaa1 necesit ca ambele condiii s fie ndeplinite atunci se va
folosi operatorul logic i iar condiia va fi compus:
o Varianta Pascal: c1 and c2
o Varianta C/C++: c1&&c2
Dac secva1 necesit ca cel puin una dintre condiii s fie ndeplinit atunci se va
folosi operatorul logic sau iar condiia va fi compus:
- Varianta Pascal: c1 or c2
- Varianta C/C++: c1||c2
2. Ambele variante (att pentru cazul ct exresia logic este ndeplinit ct i cea n
care nu este ndeplinit) permit executarea unei singure instruciuni. n cazul n
care este necesar efectuarea mai multor instruciuni, acestea se grupeaz ntr-o
singur instruciune compus: begin...end pentru varianta Pascal, respectiv ntre
acolade pentru varianta C/C++ .
3. Uneori avem o instruciune de decizie subordonat unei alte instruciuni de
decizie. Este important ca instruciunea subordonat s fie scris identat fa de
instruciunea care o subordoneaz. Acest mod de scriere nu este obligatoriu
pentru funcionarea programului ns l face mai uor de urmrit i de actualizat.
Paritatea unui numr
Se introduce de la tastatur un numr ntreg a, mai mic dect 100. S se testeze dac
numrul este par sau nu i s se afieze un mesaj corespunztor.
26

Varianta Pascal
Var a: integer;
Begin
Write(a=);
Readln(a);
If a mod 2 = 0 then
Writeln (Este par)
Else
Writeln (Nu este par);
End.

Varianta C/C++
#include <iostream.h>
main()
{
int a;
cout<<a=;cin>>a;
if(a%2==0)
cout<< Este par;
else
cout<< Nu este par;
}

Maximul intre dou numere


Se introduc de la tastatura dou numere ntregi, mai mici dect 10000 x i y. S se
afiseze maximul dintre cele dou numere. n caz ca sunt egale, se va afia un mesaj
corespunzator.
Exemplu: dac pentru x i y se citesc valoarile 612 i 3129 se va afia 3129 iar
pentru valoarile 58 i 58 se va afia Numerele sunt egale.
Varianta Pascal
Var x,y: integer;
Begin
Write(x=);
Readln(x);
Write(y=);
Readln(y);
If x=y then
Writeln (Numerele sunt egale);
Else
If x>y then
Writeln(Maximul este, x)
Else
Writeln(Maximul este, y);
End.

Varianta C/C++
#include<iostream.h>
main()
{
int x,y;
cout<<x=;cin>>x;
cout<<y=;cin>>y;
if(x==y)
cout<<Numerele sunt egale;
else
if (x>y)
cout<<Maximul este<<x;
else
cout<<Maximul este<<y;
}

Structura repetitiv
O structur repetitiv se caracterizeaz prin posibilitatea efecturii repetitive a unei
secvene de instruciuni, ct timp este ndeplinit o anumit condiie sau pna cnd se
ndeplinete o anumit condiie. Repetiia secvenei de instruciuni se numete
iteraie.
Structurile repetitive se mai ntlnesc sub numele de structuri ciclice sau cicluri.
Exist trei tipuri de structuri repetitive:
- Structura cu numr necunoscut de repetiii cu test iniial.
- Structura cu numr necunoscut de repetiii cu test final
- Structura cu numr cunoscut de repetiii
27

Structura repetitiv cu test iniial


Structura repetitiv cu test iniial are dou componente:

conditia, o expresie logic pe care o notm cu C;

actiune, o secven de instruciuni ce se vor execut repetat, notat cu S,

Folosind notaiile fcute, structur repetitiv cu test iniial se poate scrie astfel:
Varianta Pascal
while C do S;

Varianta C/C++
while(C) do S;

Principiul de executre este urmtorul:


Ct timp condiia C este adevarat, se
execut secvena de instruciuni S.
Execuia se oprete cnd condiia C
nu mai este adevarat.

Ct timp condiia C este diferit de 0 ,


se execut secvena de instruciuni S.
Execuia se oprete cnd condiia C
este egal cu 0.

Observaii:
1. Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca secvena
de instruciuni s modifice cel puin una din variabilele care intervin n condiie
astfel nct aceasta s poat deveni fals (Pascal), respectiv 0 (C/C++) la un
moment dat.
2. Dac de la bun nceput condiia are valoarea fals/0, secvena de instruciuni nu
se execut nici mcar o data.
Exemplu: numrul de numere pare Varianta I
S considerm urmatoarea problem: Se citesc numere ntregi mai mici dect
10000, pn la citirea lui zero. Se cere s se afi eze numrul de numere pare
citite.
Varianta Pascal
Var x, nr:integer;
Begin
Write(x=);readln(x);
While (x<>0)do
Begin
If x mod 2 = 0 then inc(nr);
Write(x=);readln(x);
End;
Write(Au fost citite , nr, numere pare);
End.

Varianta C/C++
#include<iostream.h>
main()
{
int x,nr=0;
cout<<"x="; cin>>x;
while (x!=0)
{if (x % 2 == 0) nr++;
cout<<"x="; cin>>x;}
cout<<"Au fost citite "<<nr<<"
numere pare";
}

28

Structura repetitiv cu test final


Ca i structura repetitiv cu test iniial, structur repetitiv cu test final are aceleai dou
componente:

conditia, o expresie logic pe care o notm cu C;

actiune, o secven de instruciuni ce se vor execut repetat, notat cu S,

n structur repetitiv cu test final mai nti se execut secvena de instruciuni S i apoi
se evalueaz condiia C. De aici i numele de structur cu test final.
Varianta Pascal
repeat S until C;

Varianta C/C++
do {S} while C;

Principiul de executre este urmtorul:


1. Se
execut
secvena
de
instruciuni dup care se verific
condiia. Dac aceasta este fals
se reia execuia secvenei.
2. Algoritmul se repet pn cnd
condiia devine adevrat.

1. Se
execut
secvena
de
instruciuni dup care se verific
condiia. Dac aceasta este
diferit de zero se reia execuia
secvenei.
2. Algoritmul se repet pn cnd
condiia devine zero.

Observaii:
1. Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca secvena
de instruciuni s modifice cel puin una din variabilele care intervin n condiie
astfel nct aceasta s poat deveni adevrat (Pascal), respectiv 0 (C/C++) la
un moment dat.
2. Spre deosebire de structur repetitiv cu test iniial, structur repetitiv cu test
final efectueaz o dat secvena de instruciuni nainte de a testa condiia.

Exemplu: numrul de numere pare Varianta II


S considerm urmatoarea problem: Se citesc numere ntregi mai mici dect
10000, pn la citirea lui zero. Se cere s se afi eze numrul de numere pare
citite.
Varianta Pascal
Var x, nr:integer;
Begin
Write(x=);readln(x);
repeat
If x mod 2 = 0 then inc(nr);
Write(x=);readln(x);
Until x=0;
Write(Au fost citite , nr, numere pare);

Varianta C/C++
#include<iostream.h>
main()
{
int x,nr=0;
cout<<"x="; cin>>x;
do
{if (x % 2 == 0) nr++;
cout<<"x="; cin>>x;
29

End.

}
while (x);
cout<<"Au fost citite "<<nr<<"
numere pare";
}

Structura repetitiv cu numr cunoscut de repetiii


Varianta Pascal
Varianta C/C++
for contor:= exp_i to exp_f do S; for (contor= exp_i; contor< exp_f;
contor++) S;
unde:

exp_i i exp_f (am fcut presupunerea c exp_i <= exp_f) sunt expresii
ale cror valori sunt evaluate n cadrul repetiiilor;

contor este o variabil ce va lua prima dat valoarea expresiei iniiale


exp_i, urmnd apoi s se modifice pn la valoarea expresiei finale exp_f;

S este secven de instruciuni ce se va executa repetat;


Principiul de funcionare
Pasul 1: Se evalueaz exp_i (expresia iniial);
Pasul 2: Se atribuie variabilei contor valoarea expresiei exp_i;
Pasul 3: Se evalueaz exp_f (expresia final);
Pasul 4: Dac valoarea variabilei contor este mai mare dect valoarea expresiei
exp_f, atunci se iese din structur repetitiv. Dac valoarea varibilei contor este
mai mic sau egal cu valoarea expresiei exp_f, atunci se execut secvena de
instruciuni S i se incrementeaz (i mrete valoarea cu 1) valoarea variabilei
contor, dup care se reia pasul 3.
Observaii:
1. De regul folosim structuri repetitive cu numr cunoscut de repetiii n care dorim
ca variabila contor s creasca de la exp_i la exp_f, caz n care evident
valoarea exp_i trebuie s fie mai mic dect exp_f.
2. Secvena de instruciuni se execut de (exp_f exp_i +1) ori.
3. Dac valoarea iniial a lui exp_i este mai mare dect exp_f, atunci secvena de
instruciuni S nu se execut niciodat.
4. Limbajul de programare pune d posibilitatea utilizrii instruciunii i pornind de la
valoarea final ctre valoarea iniial. n acest caz forma structurii este:
Varianta Pascal
for contor:= exp_f downto exp_i
do S;

Varianta C/C++
for (contor= exp_f; contor>=exp_i;
contor--) S;

30

Exemplu: Suma primelor n numere naturale


Se consider urmatoarea problem: Se citete un numr natural n, mai mic dect
100. S se afieze suma primelor n numere naturale.
De exemplu dac n =10 atunci algoritmul va afia 55, deoarece
S=1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.
Varianta Pascal
Var n,s,i:integer;
Begin
Write(n=);readln(n);
s := 0;
for i := 1 to n do
s=s+i;
Write(Suma este: , s);
End.

Varianta C/C++
#include<iostream.h>
main()
{
int n, i, s=0;
cout<<"n="; cin>>n;
for(i=1; i<=n; i++)
s=s+i;// se mai poate scrie i s+=i;
cout<<Suma este: <<s;
}

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic dotat cu
videoproiector.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.

Activiti interactive, de genul urmator:


o Exerciii de recunoatere a structurilor
o Rezolvare de probleme simple
o Activiti de mperechere, completare, asociere ntre noiunile prezentate
o Activiti de urmrire a execuiei unui algoritm pas cu pas i notarea
valorilor variabilelor la fiecare pas
o Exerciii cu ntrebri structurate (de la simplu la complex)
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise

31

Fia suport 3.2. Echivalena structurilor repetitive


Simularea structurii repetitive cu test iniial prin cea cu test final se face astfel:
Pascal
while c do
S;

C/C++
while (c) do
S;

if c then
repeat
S;
until not c;
if (c)
do
{ S;}
While (c);

Se observ c este necesar testarea iniial a condiiei deoarece, spre


deosebire de structur cu test iniial, structur cu test final efectueaz cel puin o
dat secvena nainte de a testa condiia.

Simularea structurii repetitive cu test final prin cea cu test iniial se face astfel:
Pascal
repeat
S;
until c;

S; {se execut secvena S}


While not c do
S;

C/C++
do
{S }
While (c)

S;
while c do
S;

Se observ c n acest caz este necesar s executm o dat secvena de


intruciuni n afara ciclului.
Cele dou structuri sunt echivalente (nefiind necesar existena ambelor), ns n
funcie de problem, vom alege structur repetitiv adecvat, care este mai potrivit
pentru descrierea clar a algoritmului.

Simularea structurii repetitive cu numr cunoscut de pai prin structura


repetitiv cu test iniial se face astfel:
Pascal

32

for contor:=vi
vf do S;

to

C/C++
for(contor=vi;contor
<=vf;contor++)
S;

Contor:=vi;
while contor<=vf do
begin
S;
contor:=contor + 1;
end;
contor=vi;
while (contor<=vf) do
{S;
contor=contor + 1;
}

Se observ c n acest caz este necesar s scriem explicit instruciunea care


crete contorul cu 1.

Simularea structurii repetitive FOR cu DO - WHILE se face astfel:


pentru contor vi,vf execut
|
a;
|

Pascal
for contor:=vi
vf do S;

to

C/C++
for(contor=vi;contor
<=vf;contor++)
S;

Contor vi
Dac contor<=vf atunci
| execut
| |
a;
| |
contor contor + 1;
| ct timp contor<=vf
|
Contor:=vi;
if contor<=vf then
repeat
S;
contor:=contor + 1;
until contor>vf;
contor=vi;
if (contor<=vf)
do
{S;
contor=contor + 1;
}
while (contor<=vf);

Dintre toate aceste structuri repetitive, singura indispensabil este cea cu


test iniial (WHILE), celelalte putnd fi obinute din aceasta, dup cum am vzut
mai sus.

Sugestii metodologice
UNDE PREDM?
videoproiector.

Coninutul poate fi predat n laboratorul de informatic dotat cu

33

CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
Ca materiale suport se pot folosi:

O prezentare multimedia care s cuprind noiunile de mai sus.

Activiti interactive, de genul urmator:


o Exerciii de transformare a structurilor repetitive n structuri echivalente
o Rezolvare de probleme simple
o Activiti de urmrire a execuiei unui algoritm pas cu pas i notarea
valorilor variabilelor la fiecare pas
o Exerciii cu ntrebri structurate (de la simplu la complex)

Ca materiale de evaluare se pot folosi:


o Probe practice i scrise

34

Fia suport 3.3. Corectitudinea programelor


Pentru a rezolva o problem cu ajutorul calculatorului este necesar a se identifica un
algoritm pentru rezolvarea ei. Acest algoritm este tradus utiliznd un limbaj de
programare i este dat spre executare calculatorului sub forma unui program. Deoarece
majoritatea problemelor practice pe care le ntlnim se pot rezolva cu ajutorul
calculatorului, s-ar putea crede c orice problem este rezolvabil. n practic ns chiar
si problemele pentru care exist algoritmi corespunztori nu sunt neaprat rezolvabile
cu calculatorul. Este posibil ca timpul necesar execu iei acestor algoritmi, sau cantitatea
de memorie necesar, s nu permit folosirea lor n practic.
Dac spaiul de memorie necesar programului este mai mare dect cantitatea de
memorie disponibil programul nu poate fi executat, precum i dac numrul calculelor
ce trebuie efectuat este foarte mare, programul poate fi inutil.
Din aceste motive este necesar s analizm algoritmii pe care-i concepem pentru
rezolvarea unei probleme.
Un program poate fi analizat din mai multe puncte de vedere:
o Corectitudine;
o Eficien
o Posibilitate de optimizare
n ceea ce privete corectitudinea, un program este corect dac satisface specificaiile
problemei. Acum nu ne intereseaz ct memorie folosete acest program, din cte
instruciuni este compus, sau ct timp de execuie necesit. Astfel spus un program
este corect dac pentru acele date de intrare care satisfac specificaiile problemei
rezultatele obinute n urma execuiei sunt corecte. Atunci cnd scriem programe pot
apare erori n datele iniiale, erori de sintax, erori provenite din calcule (rotunjire,
trunchere), erori de semantic.
Pentru identificarea i nlturarea erorilor se va observa comportarea programului n
urma execuiei lui cu date de test dup care se va trece la depanarea lui. Primul lucru
urmrit este corectitudinea rezultatelor obinute n urma execuiei programului cu datele
de test folosite, dar se va urmri i dac programul are alte caracteristici ca: utilitate,
siguran n funcionare, robustee, performan.
Succesul activitii de testare const deci n conceperea unor date de intrare prin
prelucrarea crora defectele programului s fie puse n eviden prin observarea i
analiza rezultatelor obinute.
De aceea el este n mare msura dependent de experiena i ndemnarea
programatorului, de abilitatea lui de a-i construi datele de test ct mai complete,
complexe, cuprinztoare din punct de vedere al situaiilor sau valorilor de excepie ce
pot apare n execuia corect a programului.
n cazul n care rezultatele obinute n urma execuiei nu sunt cele ateptate se vor
cauta i elimina erorile. Activitatea care urmrete descoperirea cauzelor erorilor i
nlturarea lor se numete depanarea programelor.
35

Testarea programelor
Datele de test sunt date de intrare alese pentru variabilele de intrare pentru care se
cunosc rezultatele, sau avem unele informaii despre rezultate. Executnd programul cu
aceste date ar trebui s se ajung la rezultate cunoscute.
Corectitudinea rezultatelor n aceste execuii nu demonstreaz ns corectitudinea
programului n general. Testarea nsa pune adeseori n evidenta erori fcute n diferite
faze ale programrii. Scopul testrii programelor este depistarea i eliminarea erorilor.
Acest lucru este fcut prin execuia programului cu date de test pentru care se cunosc
dinainte rezultatele (sau cel putin se tie ceva despre ele) i se observ rezultatele
obinute n urma execuiei. n cazul n care rezultatele obinute n urma execuiei nu sunt
cele ateptate se vor cauta i elimina erorile.
Este foarte important problema alegerii datelor de test i a numrului de execuii ce
trebuie fcute pentru a putea considera c programul nu are erori. Numrul tuturor
seturilor de date de intrare posibile este teoretic infinit chiar i pentru probleme simple.
Stabilirea datelor de test se poate face:
-

n funcie de specificaia problemei;


n funcie de textul programului.

Cea mai bun cale este ns una mixt, in care sunt combinate aceste dou posibiliti.
La testarea dup specificaia problemei, stabilirea datelor de test se face analiznd
specificaia problemei. Se recomand stabilirea datelor de test tinnd seama de
specificaia asupra datelor de intrare i de specificaia asupra datelor de ieire. Aceasta
metoda de testare este adecvat problemelor simple. n cazul unei probleme complexe
aplicarea ei este imposibil datorit numrului foarte mare de cazuri posibile, care ar
trebui testate. ns problema poate fi descompus n subprobleme mai mici, invizibile n
specificaie si a caror testare este mai simpl. Privind programul ca o cutie neagr nu se
va mai ine seama de aceste subprobleme. Totui, testarea dup specificaia problemei
ramane o metoda util n testarea modulelor.
Testarea dup textul programului ine seama, pentru a stabili datele de test, de
instruciunile care trebuie executate. Considernd ca algoritmul este descris printr-o
schema logic, o execuie a programului nseamn parcurgerea unui drum de la START
la STOP n aceast schem. Dac la aceast execuie rezultatele obinute sunt corecte
probabil c textul algoritmului pe acest drum este corect. Ar trebui s verificm toate
blocurile schemei logice i mai ales toate drumurile de la START la STOP posibile. Cu
observaia c n cazul a dou drumuri ce difer doar prin faptul c o anumit bucl se
execut de n1, respectiv n2 ori le vom considera echivalente ntre ele. Dintre toate
drumurile echivalente ntre ele vom testa un singur drum, altfel am avea o infinitate de
drumuri de testat.
n concluzie vom alege pentru fiecare drum un set de date de test, numrul execuiilor
fiind egal cu numrul acestor drumuri. Dac toate execuiile au dat rezultate corecte
programul se consider testat. Dac ns la o singur execuie am depistat erori,
36

corectarea lor a modificat textul algoritmului i testarea trebuie reluat pe toate


drumurile afectate de aceast schimbare.
Pentru un program complex testarea ar fi o activitate complex, constnd dintr-un
numr foarte mare de execuii, deci un motiv pentru a practica programarea modular,
caz n care testarea se face asupra unor module mai mici i asupra interfe ei dintre ele,
aa cum se va meniona mai jos.
Stabilirea datelor de test dup textul programului are i unele dezavantaje. n primul
rnd, programul poate fi incomplet i deci s nu corespund specifica iilor. Pe drumurile
existente el este corect, dar lipsesc drumuri care, conform specifica iilor, ar trebui s
existe. Lipsa acestor drumuri este o gre eal grav care nu va fi descoperit de datele
de test ce conduc doar pe drumurile existente. Din aceast cauz se recomand o
testare mixt.
n textul unui program exist i drumuri moarte, pe care nu se poate merge oricare ar fi
datele de intrare, deci nu putem gsi date de test corespunzatoare acestor drumuri.
Adeseori aceste drumuri scot n eviden erori prin simpla analiza a textului.
Exist i cazul n care este imposibil s se execute programul cu toate datele de test
stabilite. n acest caz apare problema alegerii acelei submul imi din aceste date care s
aib ansa maxim de a depista erorile prezente n program. Testarea minim care
trebuie facut const ntr-un numr de execu ii a programului care s ne asigure c
fiecare instruciune din program a fost executat cel pu in odata. Ea nseamn mult mai
puine execuii dect toate drumurile START-STOP.
Exist date de test care conduc pe un anumit drum fr a depista erori existente n
instruciunile ntlnite i alte date de test care depisteaz aceste erori. nca un motiv
pentru care se recomand o testare mixt.
Ca ordine de folosire a datelor de test n timpul testrii, se recomand mai nti testarea
dup specificaii i apoi testarea dup textul programului.

Depanarea unui program


Dar chiar i la execuia normal a programului putem avea erori, unele foarte grave,
obinnd rezultate greite. n aceast situa ia se va recurge la depanarea programului,
adic descoperirea cauzei erorilor i nlturarea lor. n etapa de depanare
programatorul poate recurge la mai multe metode.
O metoda util n depanarea programelor, este inserarea n program a unor tipriri
auxiliare. Mai ales n locurile vecine cu instruciunile care au provocat eroarea i pentru
variabilele implicate n producerea ei. Observarea valorilor unei variabile, a schimbrilor
fcute n timpul execuiei, pot dezvlui programatorului cauza erorii. Cu siguran i va
arata c o anumit variabil ia alte valori dect cele la care se ateapt el. De altfel, pe
timpul testrii unui program, sunt utile semnalrile oricror semne de eroare.

37

O alt metod este utilizarea comentariilor. Pentru a ne crea primele reflexe de


programare este bine s inserm ct mai multe comentarii n program.Pentru a elimina
anumite poriuni din algoritm (pn la eliminarea erorilor) se utilizeaz comentariile
conform procedurii de mai jos:
se transform n comentariu una sau mai multe linii ale programului;
se salveaz programul;
se ruleaz programul
se analizeaz rezultatul (efectul);
se modific codul surs sau se transform n comentariu mai multe linii de cod;
se repet aceast procedur pn cnd se elimin eroarea.
Descompunerea programelor complexe n mai multe module
Pentru a mri gradul de localizare a erorilor dar i de reutilizare a codului este bine s
limitm dimensiunea funciilor pe care urmeaz s le crem. Cu ct dimensiunile unei
funcii sunt mai mici cu att mai mult cresc ansele de identificare a erorilor sau de
reutilizare a acesteia n diferite zone ale programului.

Depanarea propriu-zis a unui program se poate face:

static, dup executarea programului

dinamic, n timpul execuiei acestuia

Limbajele de programare ofer, n ultimile lor versiuni, un depanator simbolic integrat,


care permite depanarea uoar, plcut i eficient a programelor prin urmtoarele
operaii:
- executarea pas cu pas a programului (un pas nseamn de fapt o instruciune
executbil);
- observarea, n timpul execuiei, a valorilor unor variabile sau expresii specificate
de programator (care apar ntr-o fereastr special - Watch Window);
- specificarea unor puncte de suspendare a execuiei programului;
- modificarea valorilor unor variabile.
n activitatea de testare i depanare a programelor, erorile datorate variabilelor
neiniializate sunt greu de semnalat i de localizat, mai ales atunci cnd aparent totul
funcioneaz corect.
n acest sens amintim variabila cu rol de contor. Aceasta trebuie iniializat (de regul
cu 0).
De asemenea, expresia care stabilete dac un ciclu se execut sau nu trebuie astfel
formulat sau iniializat nct s asigure sau nu prima execuie, aa cum necesit
algoritmul de prelucrare descris. n acest sens, trebuie s facem precizarea c
adeseori, suntem nevoii s facem noi, prin program, iniializarea variabilei care
controleaz execuia ciclului, pentru a asigura execuia lui pentru prima dat. Deci, ciclul
cu testarea iniial a condiiei trebuie s fie bine analizat, verificat i testat din punctul de
38

vedere al expresiei care-i controleaz reluarea.


Practica a dovedit, n timp, c orict de numeroase ar fi testele efectuate asupra unor
programe foarte complexe, ele nu pot garanta funcionarea corect a acestora. Ele
rmn deosebit de utile pentru semnalarea multora dintre erori i de asemenea pentru
familiarizarea programatorului cu algoritmul, cu modul su de lucru.

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.
Activiti interactive, de genul urmator:
o Activiti de recunoatere a tipurilor de erori (de ex. Se d un program i
se cere s se identifice i s se corecteze eroarea)
o Activiti de identificare a datelor de test.
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise.

39

Tema 4. Tipuri structurate de date


Fia suport 4.1 Tablouri
Exist mai multe situatii cnd sunt necesare mai multe date de prelucrat n cadrul unei
probleme.
Iat un exemplu: Se cunosc mediile generale ale celor 250 de elevi ai unei coli.
S se precizeze numrul elevilor cu medii peste 9.
S se afieze mediile acestora n ordine descresctoare.
Pentru rezolvare este necesar s reinem 250 de variabile de tip real pentru memorarea
mediilor elevilor. Denumirea acestora prin nume diferite ar fi greu de realizat. Cea mai
bun soluie este de a da un nume unic tuturor acestor valori i de a ne referi la grupul
lor prin acest nume, specificand numrul de elemente din grup.
Fiecare element va fi adresat printr-un numr de ordine, numit indice. Dac adresarea
unui element din tablou se face dup un singur indice, atunci tabloul se numete
unidimensional (mai pe scurt vector); dac adresarea se face dup doi indici (linia i
coloana), atunci tabloul se numeste bidimensional (matrice).
Un tablou este deci o structur omogen de date indexat, care cuprinde un
numr finit de componente, toate avnd acelai tip, pe care l numim tip de baz.
Structura de tip tablou impune ca elementele s fie asezate n memorie n succesiune
continu de octei, fiecare component ocupnd acelai numr de octei ct specific
tipul de baza.
Indicele este o valoare ordinal care identific n mod unic o componet (un element) a
tabloului.
Prelucrarea unui tablou se bazeaz, n general, pe execuia unor operaii asupra
componentelor sale. Operaiile sunt cele permise de tipul de baz al tabloului.
Pentru definirea unui tablou este necesar s se tie numrul maxim de componente
care pot aprea n prelucrarile din cadrul problemei, n scopul declarrii corecte a
spaiului pe care l va ocupa acesta.

Declararea tablourilor
I.

Variana C/C++

Pentru a declara un vector n C++ se va utiliza urmatoarea defini ie:


tip nume[numar_natural];
Exemplu:
int a[100];
40

a[0
]

a[1
]

----------------------------------------------------------------------------------------

a[98
]

a[99
]

Am declarat o variabil vector cu numele a ce are 100 de componente numere ntregi.


Adresarea unei componente se face prin indice, specificat ntre paranteze ptrate, a a
cum este specificat n figur. Prima valoare este a[0], a doua este a[1], a i-a este a[i-1],
ultima este a[99].
Pentru a declara o matrice n C++ se va utiliza urmatoarea defini ie:
tip nume[numar_natural1] [numar_natural2];
Exemplu:
float a[10] [20];
a[0]
a[0][1] -------------------------------------------------------------------[0]
a[1]
a[1] [1] --------------------------------------------------------------------[0]

--------- --------a[9]
[0]

a[9] [1]

-----------------------------------------------------------------------------------------------------------------------------------------

a[0][18]

a[0][19]

a[1] [18]

a[1] [19]

---------

----------

a[9] [18]

a[9] [19]

Am declarat o matrice cu numele a ce are 10 linii i 20 de coloane n total 200 de


componente numere reale. Adresarea unei componente se face prin indici (primul
reprezint numrul liniei, cel de-al doilea numrul coloanei), specifica i ntre paranteze
ptrate, aa cum este specificat n figur.
Pentru a ne referi la componenta de pe linia 3 i coloana 4 vom folosi urmtoarea
specificaie: a[2][3].
Observaie: Limbajul C/C++ nu ne permite s declarm variabile de tip tablou cu
numr variabil de componente.
II.
Varianta Pascal
Pentru a declara un vector n limbajul Pascal se va declara un tip de date structurat
dup care se va declara o variabil de acest tip, astfel:
type nume_tip=array[numar_natural1..numar_natural2] of tip_de_baza;
var nume_variabila_vector:nume_tip;
Exemplu:
type vector=array[1..100] of integer;
var a:vector;
a[1
]

a[2
]

---------------------------------------------------------------------------------------41

a[99
]

a[100
]

Am declarat un nou tip structurat numit vector ale crui elemente sunt vectori cu 100 de
componente de tip ntreg i o variabil de tip vector cu numele a ce are 100 de
componente numere ntregi. Adresarea unei componente se face prin indice, specificat
ntre paranteze ptrate, aa cum este specificat n figur. Prima valoare este a[1], a
doua este a[2], a i-a valoarea este a[i], ultima este a[100].
Limbajul Pascal permite, cu excepia situaiei cnd o variabil de tip vector
face obiectul unui parametru al unei proceduri sau func ii, declararea direct a
variabilei fr a fi necesar declararea tipului vector.
Exemplu:
var v: array[1..100] of integer;
Am declarat o variabil de tip vector cu numele a ce are 100 de componente numere
ntregi.
Pentru a declara o matrice n Pascal se va utiliza urmatoarea defini ie:
type
nume_tip=array[numar_natural1..numar_natural2,
numar_natural3 .. numar_natural4] of tip_de_baza;
var nume_variabila_matrice:nume_tip;
Exemplu:
type matrice=array[1..10, 1..20] of integer;
var a:matrice;
a[1] [1]

a[1][2]

a[1][19]

a[1][20]

a[2] [1]

a[2] [2]

a[2] [19]

a[2] [20]

a[10]
[1]

a[10] [2]

a[10] [19]

a[10] [20]

Am declarat un nou tip de date structurat ale crui elemente sunt tablouri
bidimensionale cu 10 linii i 20 de coloane i o variabil de tip matrice cu numele a ce
are 10 linii i 20 de coloane n total 200 de componente numere ntregi. Adresarea unei
componente se face prin indici (primul reprezint numrul liniei, cel de-al doilea
numrul coloanei), specificate ntre paranteze ptrate, a a cum este specificat n figur.
Pentru a ne referi la componenta de pe linia 2 i coloana 3 vom folosi urmtoarea
specificaie: a[2][3].

42

Limbajul Pascal permite, cu excepia situaiei cnd o variabil de tip matrice


face obiectul unui parametru al unei proceduri sau func ii, declararea direct a
variabilei fr a fi necesar declararea tipului matrice.
Exemplu:
var mat: array[1..10, 1..10] of integer;
Am declarat o variabil de tip vector cu numele mat ce are 10 linii i 10 coloane, n total
100 de componente numere ntregi.
Observaie: Limbajul Pascal nu ne permite s declarm variabile de tip tablou cu
numr variabil de componente.

Citirea tablourilor
Presupune introducerea de valori n componentele tabloului citirea sau atribuirea unei
valori fiecrei componente a tabloului. Pentru introducerea datelor se vor folosi
structurile repetitive. Deoarece se cunoate de regul numrul de componente
ale unui tablou se utilizeaz stuctura cu numr cunoscut de pai.
Exemplu:
Fie declaraiile:
Varianta Pascal
var a: array [1..10] of integer;
mat: array[1..10, 1..10] of integer;
i, j,col, lin,n:integer;

Varianta C/C++
int a[10];
int mat[10] [10];
i,n, col, lin:integer;

Citirea vectorului, a respectiv a matricei mat se realizeaz astfel:


Se vor citi iniial numrul de componente ale vectorului (memorate n variabila n),
respectiv numrul de linii (memorate n variabila lin) i coloane (memorate n
variabila col) ale matricei;
- Se vor citi componetele vectorului, respectiv ale matricei.
Varianta Pascal
Varianta C/C++
..................
..................................
vectorului
a
cu
n
writeln(Citirea
vectorului
a
cu
n cout<<Citirea
elemente<<endl;
elemente);
write(Dati numarul de componente ale cout<<Dati numarul de componente ale
vectorului:; cin>>n;
vectorului: ); Readln(n);
for(i=0;i<n;i++)
for i:=1 to n do
{
begin
cout<<a[<<i<< ]=;
write(a[,i,]=);
cin>>a[i];
readln(a[i]);
}
end;
cout<<endl;
writeln();
cout<<Citirea matricei mat<<endl;
writeln(Citirea matricei mat);
-

43

write(Dati numarul de linii: ); readln(lin);


write(Dati
numarul
de
coloane:);
readln(col);
for i:=1 to lin do
for j:=1 to col do
begin
write(a[,i,,,j,]=);
readln(a[i, j]);
end;

cout<<Dati numarul de linii: ;


cin<<lin;
cout<<Dati numarul de coloane;
cin<<col;
for(i=0;i<lin;i++)
for(j=0;j<col;j++)
{
cout<<a[<<i<<,<<j<< ]=;
cin>>a[i][j];
}

Afiarea tablourilor
Presupune tiprirea valorilor reinute n componentele tabloului Pentru afiarea datelor
se vor folosi structurile repetitive. Deoarece se cunoate de regul numrul de
componente ale unui tablou se utilizeaz stuctura cu numr cunoscut de pai.
Exemplu:
Fie declaraiile:
Varianta Pascal
var a: array [1..10] of integer;
mat: array[1..10, 1..10] of integer;
i, j,col, lin,n:integer;

Varianta C/C++
int a[10];
int mat[10] [10];
i,n, col, lin:integer;

Presupunnd c n vectorul a sunt memorate n valori, iar matricea mat are un numr
de lin linii, respectiv un numr de col coloane afiarea la monitor vectorului,
respectiv a matricei se realizeaz astfel:
Varianta Pascal
..................
writeln(Vectorul a conine:);
for i:=1 to n do
write(a[,i,]=, a[i]);
writeln();
writeln(Matricea mat contine:);
for i:=1 to lin do
begin
for j:=1 to col do write(a[i,j]);
writeln();
end;

Varianta C/C++
..................................
cout<<Vectorul a contine:<<endl;
for(i=0;i<n;i++)
cout<<a[<<i<< ]=<<a[i];
cout<<endl;
cout<< Matricei mat contine:<<endl;
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++) cout<<a[i][j];
cout<<endl;
}

44

Prelucrarea i utilizarea tablourilor


Tablouri unidimensionale vectori
Parcurgerea vectorilor n scopul prelucrrii/utilizrii tuturor valorilor presupune
vizitarea fiecrei componente a vectorului de la prima pn la ultima
component. n acest sens se va folosi o structur repetitiv de preferat cea
cu test cunoscut de pai.
Cutarea unei componente se poate face n dou feluri:
o cutarea secvenial cu compararea componentelor cu valoarea ce
trebuie gsit i reinerea poziiei
o cutarea binar caz ce necesit ca tablourl s fie ordonat (cresctor
sau descresctor)
rearanjarea componentelor, presupune mutarea valorilor gsite dup diferite
criterii specificate n cadrul problemei
sortarea vectorului presupune ordonarea cresctoare sau descresctoare.
Pentru sortare se cunosc mai muli algoritmi: sortare prin selecie, sortare prin
inserie, sortare prin interschimbare, prin interclasare, prin numrare.
Tablourile unidimensionale se pot folosi n aplicaii pentru simularea operaiilor
aritmetice cu numere mare i simularea operaiilor cu mulimi.
-

Tablouri bidimensionale - matrice


Pentru o matrice oarecare cu un numr de n linii i m coloane elementele putem
determina elementele care aparin unei linii sau unei coloane. Astfel:
elemenetele liniei l sunt alj cu j=1..m: al1 al2 al3 ....... alm
elementele coloanei c sunt aic cu i=1..n: a1c a2c a3c ....... anc.
Un caz special foarte utilizat n cadrul aplicaiilor l reprezint matricea biptratic, care
are acelai numr de linii i de coloane: aij, unde i=1..n i j=1..n.
A=

a11 a12 a13 ....... a1n


a21 a22 a23 ....... a2n
.............................................

an1 an2 an3 ....... ann


Pentru o astfel de matrice:
elemetele aij cu i=j formeaz diagonala principal: a11, a22, a33,....... ann
elementele aflate deasupra diagonalei principale sunt cele a ij cu proprietatea
c i<j
elementele aflate sub diagonala principal sunt cele a ij cu proprietatea c i>j
Una dintre cele mai importante aplicaii ale tablourilor bidimensionale este utilizarea
acestora n teoria grafurilor (matricea de adiacen, matricea drumurilor).

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
45

Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor


cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.
Activiti interactive, de genul urmator:
o Aplicaii de prelucrare a elementelor tablourilor.
o Aplicaii de recunoatere a metodelor de sortare (de ex. Se d un program
incomplet i se cere s se completeze cu metoda de sortare potrivit).
o Aplicaii cu matrice ptratice: interschimbarea de linii, de coloane, sortarea
elemetelor de pe linii, coloane diagonale.
Ca materiale de evaluare se pot folosi:
o Probe practice i scrise

46

Fia suport 3.2. iruri de caractere


irul de caractere, dup cum i spune i numele, reunete mai multe caractere sub "un
nume comun". Putem nelege irul de caractere ca fiind un cuvnt, o propoziie sau o
fraz, adic orice formulare scris ce conine semne (litere, cifre, semne de punctuaie,
semne speciale). Un ir de caractere se pstreaz ntr-o zon de memorie organizat
ca tablou unidimensional.
Declararea irurilor de caractere
Varianta Borland Pascal
var nume:string[constanta_intreaga];

Varianta C/C++
char nume[constanta_intreaga];

Exemplu:
var ch:string[10]; {am declarat un ir de
caractere cu numele ch care poate
memora un ir de maxim 10 caractare}

Exemplu:
char ch[10]; /*am declarat un ir de
caractere cu numele ch care poate
memora un ir de maxim 9 caractare*/

Observaie:irurile de caractere pot fi iniializate la declaraie.


var nume:string[constanta_intreaga]=Sir char nume[constanta_intreaga]=Sir de
de caractere;
caractere;
Exemplu:
var ch:string=caractere;
Observaie:
n exemplul de mai sus nu s-a mai
specificat numrul maxim de caractere,
acesta este calculat automat de ctre
compilator, dar nu poate fi mai mare de
255. Primul element, ch[1] reine codul
ASCII al caracterului c, ch[2] reine codul
ASCII al lui a, ch[9] va reine codul ASCII
al ultimului caracter (e), elementul ch[0] al
irului reine lungimea irului de caractere.
Deci numrul de octei pentru
memorarea unui ir de caractere este
cu unu mai mare dect numrul real de
caractere, primul fiind folosit pentru
memorarea lungimii.

Exemplu:
char ch[ ]=caractere;
Observaie:
n exemplul de mai sus nu s-a mai
specificat numrul maxim de caractere,
acesta este calculat automat de ctre
compilator. Primul element, ch[0] reine
codul ASCII al caracterului c, ch[1] reine
codul ASCII al lui a, ch[8] va reine codul
ASCII al ultimului caracter (e), ultimul
element al irului ch[9] reine 0 adic
codul ASCII
al
caracterului
nul.
ntotdeauna ultimul caracter va reine
0. Deci se va ine cont ca la declaraie s
se menioneze un caracter n plus fa de
lungimea dorit.

Citirea/scrierea irurilor de caractere


Varianta Borland Pascal
Varianta C/C++
Fie declaraia: var ch:string;
Fie declaraia: char ch[20 ];
Limbajul Borland Pascal permite citirea Limbajul C++ permite citirea unui cuvnt
unui ir de caractere (unul sau mai multe 19 caractere prin: cin<<ch;
cuvinte separate prin spaii) prin:
- Caracterul nul este adugat
readln(ch);
automat;
Astfel se pot citi maxim 255 de caractere.
- Prin aceast metod nu putem citi
Se pot adresa i caractere ale irului
un ir de caractere desprite prin
utiliznd o definiie de tipul ch[i] care
spaii.
reine caracterul al i-lea al irului.
Citirea unui ir de mai multe cuvinte
47

desprite prin spaiu se va face cu


funcia cin.get, astfel:
cin.get (vector _de caractere, int nr,
char = \n);
funcia permite citirea unui ir pn cnd
este ntlnit una din condiiile:
- Au fost citite nr-1 caractere
- A fost ntlnit caracterul transmis
ca ultim parametru, implicit \n.
Astfel:
- Sunt citite caractere albe;
- Este inserat caracterul nul;
- Caracterul transmis ca ultim
parametru nu este inserat n ir
- Ultimul caracter este trecut n mod
facultativ, dac nu este menionat
se va pune \n.
Se pot adresa i caractere ale irului
utiliznd o definiie de tipul ch[i] care
reine caracterul al i+1-lea al irului.
Exemplu:
1. char ch[20 ];
cin.get(ch,16); /*s-a citit un ir de
maxim 15 caractere*/
2. char ch[25 ];
cin.get(ch,25, .); /*s-a citit un ir de
maxim 24 caractere care se termin
cu caracterul punct*/
Funcia cin.get() poate fi utilizat i fr
paracmetri situaie n care aceasta
permite citirea unui caracter.
Observaie:
n cazul unei citiri repetate utiliznd
funcia cin.get cu parametru se va utiliza
ntercalat i funcia fr parametri pentru
a se putea face n siguran celelalte citiri
de iruri de caractere.

Funcii definite pe iruri


Operaiile specifice care se fac obiectul prelucrrii irurilor de caractere pot fi:
- determinarea lungimii irului de caractere
- copierea unui ir de caractere n alt ir de caractere
- concatenarea irurilor de caractere
- compararea irurilor de caractere
- cutarea unui caracter/ir ntr-un alt ir de caractere
- tergerea unui caracter/ir dintr-un ir de caractere
- conversia unui numr (ntreg sau real) ntr-un ir i invers
n funcie de limbajul de programare utilizat acestea pot fi efectuate prin func ii definite
pe iruri de caractere sau pot fi realizat prin diferite artificii ntre aceste func ii.
48

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de maxim 2 elevi.
Ca materiale suport se pot folosi:
O prezentare multimedia care s cuprind noiunile de mai sus.
Aplicaii de prelucrare a elementelor unui ir de caractere, utiliznd func iile
specifice limbajului de programare.

Ca materiale de evaluare se pot folosi:


Probe practice i scrise

49

Fia suport 4.3. Articolul


Articolul este o structur de date eterogen (cu elemente de tipuri diferite), cu acces
direct la elementele sale, ntre care exist o relaie de ordine ierarhic.
Variabilele de tip articol se reprezint intern ca succesiuni de cmpuri elementare, ce
pot fi de tipuri diferite, cu reprezentarea intern i lungimea fizic specifice tipurilor lor.
Lungimea zonei de memorie rezervat pentru variabila de tip articol rezult din
nsumarea lungimilor cmpurilor. Aceasta nu poate depi 65520 octei (ca orice
variabil de tip structurat).

In figura de mai sus avem un exemplu de articol cu trei campuri de tipuri diferite: nume
de tip ir de caractere, vrst de tip ntreg i medie de tip real. Adresarea cmpurilor
(prin numele lor) se face folosind operatorul . (punct). Dac se declar o variabil
e de tip ELEV, atunci un element ar putea fi accesat pe cmpuri astfel: e.nume,
e.varsta, e.medie
Datele de tip articol pot fi adresate n dou moduri: global sau pe cmpuri (cum am
vzut n exemplul anterior). Adresarea global este permis numai n operaia de
atribuire, cu condiia ca ambele variabile (surs i destinaie) s fie articole de acelai
tip.

Declarare:
Varianta Borland Pascal
Record
type <identificator> = <tip record>; unde
<tip record> ::= record <list de cmpuri> [;]
end
<list de cmpuri> ::= <parte fix> [; <parte
variante>] | <parte variante>
<parte fix> ::= <seciune record> {;
<seciune record> }
<seciune record> ::= <identificator>{,
<identificator>}: <tip>
<parte variante> ::= case[ <identificator>:]
<tip> of <variant> {; <variant>}
<variant> ::= <constant> {, <constant>} :
[<list de cmpuri>] [;])
adic un element de tip record este n
50

Varianta C/C++
struct [nume structur]
{
[<tip> <nume variabil>];
[<tip> <nume variabil>];
...
} [list de variabile];
Exemplu:
Este necesar s dm un
structurii. O vom denumi: elev.
struct elev
{
char nume[200];
float media;
int absente;

nume

general format dintr-o parte fix i una } ;


variabil, fiecare dintre acestea fiind alctuit elev x[30];
din cmpuri.
//am declarat un vector n care fiecare
component este de tip elev.
Exemplu:
Type Data = record
ziua: 1..31;
luna: 1..12;
anul: 1..9999
end;

Acces la componentele variabilei


Un cmp al unei variabile de tip nregistrare se acceseaz prin:
nume_variabil. cmp
Exemplu:
Fie urmtoarea declaraie de variabil:
x:data; {declarat la exemplul de mai sus}
Accesul la cmpurile variabilei se face: x. ziua :=3; x. luna :=6; x. anul :=2009;

Operaii specifice
Citirea unei variabile de tip nregistrare se face citind informaiile corespunztoare
fiecrui cmp al acesteia: readln (x. ziua); readln (x. luna); readln (x. anul);
Scrierea unei variabile de tip nregistrare se face scriind informaiile corespunztoare
fiecrui cmp al acesteia: writeln (x. ziua); writeln (x. luna); writeln (x. anul);

Utilitate
- Lista
Exemple de liste se ntlnesc destul de des n practica prelucrrii datelor pe calculator.
Iat cteva: lista studenilor dintr-o grupa i a notelor primite la un examen, lista crilor
dintr-o biblioteca, lista clienilor unei bnci, lista cadrelor didactice dintr-o catedra etc.
Putem defini lista ca o colecie omogen, secvenial de date.
- Stiva
Stiva este un caz special de list liniar n care intrrile i ieirile se fac la un singur
capt al ei.
Exemple de stive de obiecte sunt oarecum evidente: stive de lemne, de lzi, de baloi
de paie, de farfurii, de dosare etc. Structura de stiv presupune, conform definiiei, o
anumit disciplin: totdeauna se adug un obiect "deasupra" ultimului depus si se
extrage totdeauna ultimul obiect adugat. Se spune ca accesul la o stiv este de tip
LIFO (Last In - First Out). Dou operaii sunt eseniale n lucrul cu stiva: adugarea unui
element i extragerea unui element din stiva.
- Cozi
Coada este lista liniar n care adugarea de noi elemente se face la un capt, iar
extragerea unui element se poate face numai prin cellalt capt al listei.
Din definiie rezulta c, ntotdeauna, dintr-o coad se extrage elementul cel mai vechi.
Se spune ca accesul la o coad este de tip FIFO (First In First Out).
51

Ca i n cazul stivei, operaiile de baz asupra unei cozi sunt dou: adugarea unui
element n coada i extragerea unui element din coad.
- Arbori
Listele reprezint mijloace simple i practice de a reprezenta organizarea liniara a
obiectelor.
Realitatea complex pe care o modelm ne arat nsa legturi ntre obiecte care
depesc modelul liniar. Grafurile i ca un caz particular al acestora - arborii - reprezint
structuri capabile s surprind complexitatea legturilor dintre obiecte.
Cu ajutorul arborilor se pot descrie foarte fidel structurile de tip ierarhic (piramidal). Iat
cteva exemple: structura de conducere a unei firme, organizarea administrativ
teritoriala dintr-o tara, organizarea unei armate, structura unei cri.

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 2-3 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.
Activiti interactive, de genul urmator:
o Aplicaii de prelucrare a elementelor unor tablori de articole.

Ca materiale de evaluare se pot folosi:


o Probe practice i scrise

52

Fia suport 4.3. Fiiere


Fisierele sunt structuri externe de date create n memoria extern i care dau
posibilitatea pstrarii datelor n mod permanent, chiar i dup terminarea executrii
programului.
Fiierul este o colecie organizat de informaii (date, rezultate, programe surs,
programe direct executabile etc.), dispuse pe unul sau mai multe suporturi externe.
Fiierul, n contextul limbajelor de programare, este o structur de date omogen,
format din componente de acelai tip.
Transferul informaiilor ntre memoria intern i cea extern se realizeaz la nivel de
articol. Pentru aceasta, n memoria intern va trebui s declarm o variabil avnd
acelai tip cu tipul nregistrrilor fiierului iar prin operaiile de intrare / ieire se va
realiza citirea, respective scrierea, n fiier.

Moduri de deschidere a fiierelor (citire, scriere, adugare)


Orice fiier, nainte de a fi prelucrat trebuie deschis. Deschiderea se face n dou etape:
n primul rnd se precizeaz ce fiier se deschide i apoi urmeaz deschiderea propriuzis prin apelul unor proceduri/funcii.
Varianta Borland Pascal
Deschiderea unui fiier se face folosind
procedura Assign(f, nume): se realizeaz
asocierea numelui fiierului extern(nume)
variabilei fiier(f) i apoi procedura
Rewrite(f): pregtete pentru re(scriere)
fiierul f, nlocuindu-l cu un fiier vid(nu
conine nici o component) i stabilind
poziia iniial de scriere sau Reset(f):
pregtete fiierul f pentru citire, mutnd
poziia de citire la nceputul fiierului

Varianta C/C++
Deschiderea se realizeaz cu funcia open
care se apeleaz printr-o expresie de
forma df= open () unde df este o
variabil de tip int

Citirea dintr-un fiier deschis se realizeaz folosind funcia read.


Varianta Borland Pascal
Varianta C/C++
Citirea se face prin apelul procedurii
Read(f,
x):
copiaz
urmtoarea
component a fiierului f n variabila x i
apoi avanseaz poziia de citire dincolo de
aceast component sau Readln(f): trece
la nceputul urmtoarei lini a fiierului f.

La fiecare apel al funciei read se citete


nregistrarea curent. Astfel, la primul apel
se citete prima nregistrare din fiier, la al
doilea apel a doua nregistrare i aa mai
departe.

Scrierea ntr-un fiier se face folosind funcia write. Este asemntoare cu funcia read
i are acelai prototip. Diferena const n aceea c realizeaz transferul datelor n sens
invers, adic din zona de memorie, n fiier.
Varianta Borland Pascal
Varianta C/C++
Scrierea se face prin apelul procedurii Scrierea se face folosind funcia write.
Write(f, x): adaug n fiierul f o Utilizarea funciei
implica includerea
component a crei valoare este dat de fiierului io.h
53

expresia x i deplaseaz poziia de scriere


n dreptul noului sfrit de fiier sau
Writeln(f): ncheie linia curent a fiierului
f.
Adugarea se face prin apelul procedurii
Append(f): adug informaii ntr-un fiier
deschis;
Dup terminarea prelucrri unui fiier acesta trebuie nchis. Acest lucru se realizeaz
folosind funcia close.
O funcie util n programele care lucreaz cu fiiere este funcia Eof care spune dac
s-a ajuns la sfritul fiierului.

Accesul la datele din fiier (secvenial, direct)


Din punctul de vedere al accesului la componente, fiierele se mpart n:
- fiiere cu acces secvenial : componentele pot fi prelucrate(accesate) succesiv (unul
dup altul) ncepnd cu primul pn la ultimul, n ordinea n care sunt nregistrate n
fiier;
- fiiere cu acces direct: componentele fiierului pot fi prelucrate n orice ordine prin
precizarea numrului de ordine din cadrul fiierului.

Operaii de intrare/ieire
Varianta Borland Pascal

Varianta C/C++

Operaiile de intrare / ieire sunt Read (f,


art) respectiv Write (f, art) unde art este
variabila din memoria intern (declarat n
program) n, sau din care se face
transferul din / n fiier.

Intrri / ieiri de iruri de caractere:


biblioteca standard a limbajului conine
funciile fgets i fputs care permit citirea,
respectiv scrierea nregistrrilor care sunt
iruri de caractere.
Intrri / ieiri cu format: biblioteca standard
a limbajului conine funciile fscanf i fprintf
care permit citirea datelor dintr-un fiier,
respectiv scrierea.

Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.

Ca materiale suport se pot folosi:


O prezentare multimedia care s cuprind noiunile de mai sus.
Activiti interactive, de genul urmator:
54

o Aplicaii de prelucrare a elementelor dintr-un fi ier.


o Utilizarea datelor de intrare memorate n fi iere text i salvarea
rezultatelor obinute n fiiere text.

Ca materiale de evaluare se pot folosi:


Probe practice i scrise

55

IV. Fia rezumat


Unitatea de nvmnt __________________

Fia rezumat
Clasa ________________

Nr.
Crt.
1
2
3
4
...
Y

Nume i
prenume
elev

Profesor______________________
Competena 1

A1

A2

Competena 2
AX

A1

A2

Competena 3
A3

A1

A2

A3

zz.ll.aaaa1

zz.ll.aaaa reprezint data la care elevul a demonstrat c a dobndit cunotinele, abilitile i atitudinile vizate prin activitatea respectiv

56

Observaii

V. Bibliografie
1. Cristian Georgescu, 1999. Analiza si proiectarea sistemelor informatice,
Editura Radial, Galai
2. Mihaela Georgescu, 2002, Structuri de date si baze de date, Editura Pax
Aura Mundi, Galai
3. Popescu T.& colectiv, 1999, Dictionar de informatica, Editura stiintifica si
enciclopedica, Bucureti
4. Maxim I., 1997, Metodica predrii informaticii, Universitatea tefan cel
Mare, Suceava, curs litografiat
5. Ionescu C., 1999, Metodica predrii informaticii, Universitatea BabeBolyai, Cluj, curs litografiat,
6. Wirth N., 1976, Algorithms+Data Structures=Programs, Prentice Hall, Inc
7. Sorin, T., Cerchez E., erban M., 1999, Informatica, Varianta C++, manual
pentru clasa a IX-a, Ed L&S Infomat, Bucureti
8. Sorin, T., Cerchez E., erban M., 1999, Informatica, Varianta Pascal,
manual pentru clasa a IX-a, Ed L&S Infomat, Bucureti
9. Sorin, T., 1997, Bazele programrii n C++, Ed. L&S Infomat, Bucureti
10. Sorin, T ., 1996, Tehnici de programare, Ed. L&S Infomat
11. Tomescu I., 1994, Bazele informaticii (Manual pentru clasa a X), Ed.
Didactic i Pedagogic
12. Stoilescu D., 1998, Manual de C/C++ pentru licee, Ed. Radial, Galai,
13. Ptru B., Miloescu M., 1999, Informatic - manual pentru clasa a IX-a,
Ed. Teora,
14. Lica D., Onea E., 1999, Informatica, manual pentru clasa a IX-a, Ed. L&S
Infomat,
15. Knuth D. E., 1973, Tratat de programarea calculatoarelor, vol. I, II, III, Ed.
Tehnic, Bucureti,
16. Ivac C., Prun M., Mateescu E., 1997, Bazele Informaticii (Grafuri i
elemente de combinatoric) - Caiet de laborator, Ed. Petrion
17. Ivac C., Prun M., 1995, Bazele informaticii, Ed. Petrion
57

18. Giumare C., Negreanu L., Clinoiu S., 1997, Proiectarea i analiza
algoritmilor. Algoritmi de sortare, Ed. All
19. Cormen T., Leiserson Ch., Rivest R., 1990, Introduction to Algorithms, MIT
Press,
20. Andonie R., Grbacea I., 1995, Algoritmi fundamentali, o perspectiv C++,
Ed. Libris,
21. ***.La http://www.allaboutcircuits.com/vol_4/chpt_2/3.html 08.05.2009
22. ***. La http://www.wikipedia.org/. 04-12.05.2009
23. ***.La http://www.ecvale.com/index.php?
main_page=pub_eind_info&pubs_id=290807217 . 08.05.2009
24. ***. La http://hal.archives-ouvertes.fr/docs/00/28/14/29/PDF/floating-pointarticle.pdf 28.04.2009
25. *** La http://profu.info/limbajul-c/ 05.05.2009
26. ***. La http://www.structuri.ase.ro/ 09.05.2009
27. ***. La http://corina.doit.ro/graf/ 02.05.2009
28. ***. La http://en.wikipedia.org/wiki/Big_O_notation 23.04.2009
29. ***.La http://www.stud.usv.ro 12.05.2009

58

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