Sunteți pe pagina 1din 59

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....................................................................................................................................5 Fia suport 2.2. Noiuni de baz ale limbajelor de programare ..............................................5 Fia suport 3.1. Instruciuni ....................................................................................................5 Fia suport 3.2. Echivalena structurilor repetitive..................................................................5 Fia suport 3.3. Corectitudinea programelor ..........................................................................5 Fia suport 4.1 Tablouri...........................................................................................................5 Fia suport 4.2. iruri de caractere..........................................................................................5 Fia suport 4.3. Articolul.........................................................................................................5 Fia suport 4.4. Fiiere.............................................................................................................5 II. Documente necesare pentru activitatea de predare.....................................................................6 III. Resurse.......................................................................................................................................7 Tema 1. Medii de dezvoltare integrate .......................................................................................7 Fia suport 1 Mediu de dezvoltare integrat..............................................................................7 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). ...................................10 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. ................................................................................................................................10 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................................11 Tema 2. Limbaje de programare ...........................................................................................13 Fia suport 2.1. Program. Limbaj de programare categorii de limbaje de programare......13 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'. .....................................................................................13 Etapele realizrii unui program..................................................................................................13 Fia suport 2.2. Noiuni de baz ale limbajului de programare ............................................16 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...........................23 Pascal se realizeaz prin procedurile standard din biblioteca standard a limbajului..............23 C++ - se realizeaz prin intermediul unor funcii din biblioteca standard a limbajului............23 read(identificator_variabil);.....................................................................................................23 readln(identificator_variabil);..................................................................................................23 Intrrile standard se realizeaz cu obiectul cin i operatorul >>. Pentru utilizarea acestora este necesar includerea fiierului iostream.h...................................................................................23 cin>> identificator_variabil;....................................................................................................23 Exemplu:....................................................................................................................................23 write(ir_de_caractere); ..........................................................................................................23 write (ir_de_caractere, identificator_variabila);....................................................................23 writeln(identificator_variabila);.................................................................................................23 Ieirile standard se realizeaz cu obiectul cout i operatorul <<. Pentru utilizarea acestora este necesar includerea fiierului iostream.h...................................................................................23 Tema 3. Programarea structurat...............................................................................................25 Fia suport 3.1. Instruciuni ..................................................................................................25

Fia suport 3.2. Echivalena structurilor repetitive ...................................................................33 Fia suport 3.3. Corectitudinea programelor ............................................................................36 Tema 4. Tipuri structurate de date.............................................................................................41 Fia suport 4.1 Tablouri.........................................................................................................41 Citirea tablourilor...................................................................................................................44 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. .....................................................................44 Exemplu:................................................................................................................................44 Citirea vectorului, a respectiv a matricei mat se realizeaz astfel:........................................44 Afiarea tablourilor................................................................................................................45 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. ..............................................45 Exemplu:................................................................................................................................45 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:................................................................................................................45 Prelucrarea i utilizarea tablourilor........................................................................................46 Fia suport 3.2. iruri de caractere........................................................................................48 Fia suport 4.3. Articolul.......................................................................................................51 Fia suport 4.3. Fiiere...........................................................................................................54 IV. Fia rezumat.............................................................................................................................57 V. Bibliografie...............................................................................................................................58

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 Tema 1. Medii de dezvoltare integrate Tema 2. Limbaje de programare Fie suport Fia suport 1. Medii de dezvoltare integrate 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: 8

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 10

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? 11

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

12

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.

13

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). 14

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

15

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*/ 16

o //Acesta este un comentariu n C scris pe un rnd 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 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. n C/C++ cuvintele cheie sunt scrise cu litere mici. 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. Visual Basic 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 } 17

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:
Tip Shortint Byte Integer Word Longint Valoare minim -128 0 -32768 0 -2147483648 Valoare maxim 127 255 32767 65535 2147483647

Exemple in C/C++
Tip unsigned unsigned long int short long Valoare minim 0 0 -32768 -32768 Valoare maxim 65535 4294967295 32767 32767

-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++

18

Tip Single Real Double Extended Comp

Valoare minima 1.5E-45 2.9E-39 5.0E-324 3.4E-4932 -263+1

Valoare maxima 3.4E38 1.7E38 1.7E308 1.1E4932 263-1

Tip float

Valoare minima 3.4E-38

Valoare maxima 3.4E38 1.7E308 1,1E4932

double 1.7E-308 long 3,4E-4932 double

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:
Tip char Valoare minim #0 Valoare maxim #255

Exemple in C/C++
Tip Valoare minim -128 Valoare maxim 255 127

unsigned char 0 char

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), - tip (care arat crei mulimi de valori aparine variabila i specific ce operatori pot fi utilizai) 19

- 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++ tip_de_date identificator_variabil; Varianta PASCAL 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++ const identificator_variabil = valoare; const tip_de_date identificator_variabil = valoare; Exemplu: const varsta=25; const double PI = 3.14; Varianta PASCAL 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.

20

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++. 21

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 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) 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

22

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}

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.

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};

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
23

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

24

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; 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++; C/C++ variabila=valoare; variabila=expresie; Exemplu: a = 56; b = a-2*a; c = c+1; b =b-1;

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--; 25

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. 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; } 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; }

26

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 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 C/C++ Situaia I if (exp_logic) secve1; else secven2; Situaia II if (exp_logic) secve;

II.

Varianta Pascal Situaia I if exp_logic then secve1 else secven2; Situaia II if exp_logic then 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. 27

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 28

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; 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. 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"; } Ct timp condiia C este diferit de 0 , se execut secvena de instruciuni S. Execuia se oprete cnd condiia C este egal cu 0. Varianta C/C++ while(C) do S;

29

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; 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. Varianta C/C++ do {S} while C;

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); 30 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;

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;

31

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

32

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;

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

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

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; C/C++ do {S } While (c)

S; {se execut secvena S} While not c do S;

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

33

for contor:=vi vf do S;

to

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

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

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; | 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);

Pascal for contor:=vi vf do S;

to

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

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

34

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

35

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. 36

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, 37

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.

38

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 39

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.

40

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]; 41

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[0][18] a[1] [18]

a[0][19] a[1] [19]

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

---------

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

---------

----------

a[9] [1]

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 ---------------------------------------------------------------------------------------42 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[2] [1] a[1][2] a[2] [2] a[1][19] a[2] [19] a[1][20] 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]. 43

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); 44

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; }

45

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: a ij, 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? 46

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

47

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]; Exemplu: var ch:string[10]; {am declarat un ir de caractere cu numele ch care poate memora un ir de maxim 10 caractare}

Varianta C/C++ char nume[constanta_intreaga]; 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 48

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. 49

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

50

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).

ELEV nume vrst medie

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:

51

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 general format dintr-o parte fix i una variabil, fiecare dintre acestea fiind alctuit din cmpuri. Exemplu: Type Data = record ziua: 1..31; luna: 1..12; anul: 1..9999 end;

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.

nume

struct elev { char nume[200]; float media; int absente; }; elev x[30]; //am declarat un vector n care fiecare component este de tip elev.

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. 52

- 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). 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

53

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 54

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 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.

Varianta C/C++ 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: 55

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

56

IV. Fia rezumat


Unitatea de nvmnt __________________

Fia rezumat
Clasa ________________ Nume i prenume elev Competena 1 A1 zz.ll.aaaa1 A2 AX A1 Competena 2 A2 A3 A1 Profesor ______________________ Competena 3 A2 A3 Observaii

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

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

57

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

58

17. Ivac C., Prun M., 1995, Bazele informaticii, Ed. Petrion 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

59

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