Sunteți pe pagina 1din 62

Algoritmi

i structuri de date
-conspect -

CUPRINS
1. Sistem Informaional Sistem Informatic
2. Structuri de date
3. Grafuri
4. Algoritmi definire
5. Descrierea algoritmilor
6. Structuri fundamentale ale algoritmilor
7. Evaluarea corectitudinii algoritmilor
8. Limbaje de programare
9. Algoritmi speciali
10.

Tehnici de programare

11.

Tehnici de programare structurat

12.

Probleme
Bibliografie

Introducere:
2

Semiotica se ocup cu studiul semnelor n natura i n societate.


Semnul nu este o calitate n sine a unui obiect, ci o funcie pe care acest
obiect o poate dobandi. Studiind combinatorica rezultant, rezult ca din
punct de vedere teoretic sunt posibile mii de clase de semne; dar imensa
varietate de semne poate fi raportata la o anumita tipologie conform careia
semnele se repartizeaz n 3 categorii: semne iconice, semne indiciale,
semne simbolice. Aceasta clasificare se refer la tipul de legatura al
semnului cu referentul.
Sunt de remarcat 3 specii de semne iconice: imagini, grafuri, metafore.
tiina este bogat n semne indiciale, inevitabile, att n procesele de
generalizare cat i n cele de demonstrare, dar metoda modelarii promoveaz
cu deosebita putere n cercetarea stiintifica, semnele iconice.
Se poate afirma totodata, ca semnele simbolice prezinta caracterul cel mai
pronuntat social; ele sunt generate exclusiv prin puterea unei conventii pe
care o comunitate de indivizi, istoriceste constituita o poate instaura.
Un loc special il ocup aici codurile utilizate n telegrafie, sistemele de
semne utilizate de diferite tiinte ( formule algebriece, formule din chimia
organica, etc. ) dar mai cu seama, limbajele de comunicare om masina, de
o deosebita importanta astzi datorita dezvoltarii calculatoarelor electronice.
O alta triada care a jucat un rol important n dezvoltarea semioticii
este constituita de distinctiile dintre:
Sintaxa studiul relatiilor dintre semnele unui sistem semiotic;
Semantica studiul relatiilor dintre semne i obiectele pe care ele le
desemneaza;
Pragmatica studiul relatiilor dintre semne i cei care le interpreteaza
i le folosesc.
Statutul pragmaticii este inca foarte controversat, mai ales n legatura cu
limbajele de programare a calculatoarelor electronice, i cu evolutia
acestora.
Cele 6 functii ale procesului de comunicare codificata sunt:
Emotiv;
Conativ;
Referenial;
Fatic ( de centrare asupra canalului );
Metalingvistic ( de centrare asupra codului );
Poetic.
3

Superioritatea calitativ a vorbelor fata de semnale provine din


generalitatea semnificatiilor pe care le produce. Magia cuvintelor tine de
valoarea cognitiva i pragmatica a notiunilor pe care le vehiculeaza. Fiecare
cuvant era i ramane o victorie contra absentei, contra lipsei, contra
neputinei a spus Gerard Mendel n cartea sa La chasse structurale.
CAPITOLUL 1
Sistem informaional Sistem informatic
Sistem informaional
Un sistem poate fi privit ca un ansamblu de elemente interconectate i
interconditionate prin relaii fizice, sociale i de alta natura, intre ele i nu
mediul extern sistemului, care functioneaza n vederea realizarii unui scop
sau a finalizarii unui obiect.
Activitatea desfasurata intr-un sistem organizat, n vederea realizarii
unui obiectiv poate fi definita ca fiind rezultatul actiunii conjugate, a 3
subsisteme ce actioneaza intr-o stransa interdependenta i care la randul lor
pot fi considerate sisteme:
- Sistemul de conducere sau decizional ( S.D. )
- Sistemul condus, de executie sau operational ( S.O. )
- Sistem informational.
Sistemul de conducere are rolul de a dispune, indruma i coordona
activitatea n vederea realizarii abiectivelor fixate, cu eficienta maxima.
Sistemul condus are rolul de a executa practic deciziile luate i de a furniza
date privind actiunile realizate, sau n curs de executie, folosind pt aceasta
resursele materiale, financiare stiintifice i umane existente, repartizate pe
obiective dinainte stabilite.
Pentru executarea activitatiilor de baz ale procesului decizional:
planificare, urmarire, control i decizie, sistemului de conducere ii sunt
necesare permanent informatii despre starea i evolutia sistemului de
executie, despre legaturile acestuia cu exteriorul. De la sistemul de
conducere, spre sistemul condus vor circula decizii. Acest circuit de
informatii i decizii reprezint un proces permanent care se realizeaza prin
existenta Sistemului Informational.
Sistemul Informational este un instrument indispensabil conducerii, avnd
ca parti componente mijloacele i procedeele ce asigura legaturile intre

elementele de executie i elementele decizionale pentru conducere i


organizare.
n felul acesta, prin sistemul informational se pot cunoaste la timp i
n cantitati necesare toate elementele de caracterizare a activitatilor
desfasurate, el cuprinzand fondul de informatii, tehnicile de colectare i
stocare, mijloacele i metodele necesare n vederea prelucrarii i transmiterii
informatiilor.
Deci, sistemul informational este un ansamblu de fluxuri i circuite
informationale organizate intr-o conceptie unitara, el utilizeaza modele,
proceduri, resurse umane i materiale pentru colectarea, inregistrarea,
prelucrarea, stocarea i/sau transmiterea datelor i a informatiilor, prin
intermediul carora asigura interconexiunile informationale dintre sistemul de
conducere i sistemul condus.
Sistemul informational primeste intrari, le prelucreaza i furnizeaza
iesiri. Intrarile i iesirile unui sistem informational, sunt date, informatii i
decizii.
Ansamblul operatiilor la care sunt supuse intrarile pentru a furniza iesirile se
constituie n proceduri.
n cazul cand metodele, procedurile i mijloacele utilizate pentru colectarea,
inregistrarea, prelucrarea, stocarea i/sau transmiterea datelor i a
informatiilor sunt cu preponderenta automatizate, sistemul informational
devine un sistem informatic.
Sistemul informatic intrument al conducerii stiintifice a societatilor
comerciale
Conceptul de sistem informatic
n masura n care activitatiile din cadrul sistemului informational sunt
realizate cu ajutorul echipamentelor electronice de culegere, transmitere,
stocare i prelucrare automata a datelor, se spune ca avem de a face cu
informatizarea sistemului informational i implicit cu aparitia conceptului de
sistem informatic.
Sistemul informatic, reprezint un ansamblu de elemente intercorelate,
functional n scopul automatizarii obtinerii informatiilor necesare conducerii
n procesul de elaborare a deciziilor.
Un sistem informatic, este compus, n principal din urmatoarele
elemente:

a. Baz tehnica sau hardware-ul sistemului informatic, care este


constituita din totalitatea mijloacelor tehnice de culegere,
transmitere, stocare i prelucrare a datelor, n care locul central
revine calculatorului electronic.
b. Sistemul de program sau software-ul sistemului, ce cuprinde
totalitatea programelor pentru functionarea sistemului informatic, n
concordanta cu functiunile i obiectivele ce au fost stabilite.
c. Baz stiintifico-metodologica, care este constituita din modele
matematice ale proceselor i fenomenelor economice, metodologii,
metode i tehnici de realizare a sistemelor informatice.
d. Baz informationala cuprinde datele suspuse prelucrarii, fluxurile
informationale, sistemele i nomenclatoarele de coduri.
e. Resursele umane i cadrul organizatoric, care cuprinde personalul
de specialitate i cadrul necesar functionarii sistemului informatic.
Obiectivele sistemului informatic
Obiectivele sistemului informatic pot fi clasificate dupa mai multe criterii
astfel:
A. n functie de sfera de cuprindere pot fi: principale ( generale ) i
secundare ( derivate ).
B. Din punct de vedere al domeniului de activitati asupra carora se rasfrang
efectele utilizarii calculatoarelor electronice, obiectivele pot fi clasificate
astfel:
a. Obiective ce afecteaza activitatiile de baz din cadrul unitatilor
economice ( comerciala, productia, etc. ) cum ar fi:
- cresterea gradului de incarcare a capacitatilor de productie existente
i reducerea duratei ciclului de fabricatie;
- cresterea volumului productiei;
- reducerea consumurilor specifice de materii prime i materiale
- reducerea personalului administrativ functionaresc;
- cresterea gradului de utilizare a capacitatii de cazare;
- sporirea volumului incasarilor din cativitati de prestari servicii;
- cresterea profitului i a rentabilitatii etc.
b. obiectivele ce afecteaza functionarea sistemului informational cum
ar fi:
- cresterea vitezei de raspuns a sistemului la solicitarile
beneficiarilor;

- cresterea exactitatii i preciziei n procesul de prelucrare a


datelor i informarea conducerii;
- reducerea costului informatiei;
- rationalizarea fluxurilor informationale;
- rationalizarea circuitelor informationale;
- sporirea completitudinii situatiilor de informare raportare ,
etc.
C. Din punct de vedere al posibilitatiilor de cuantificare a efectelor acestora:
a. obiective cuantificabile, cum ar fi:
- accelerarea vitezei de rotatie a mijloacelor circulante, prin
inlaturarea imobilizarilor de mijloace circulante;
- reducerea cheltuielilor de transport;
- reducerea cheltuielilor indirecte;
- cresterea volumului productiei;
- rationalizarea formularisticii de evidenta, etc.
b. obiective necuantificabile, care influenteaza n mod direct
indicatorii cuantificabili.
Clasificarea sistemelor informatice
Sistemele informatice se clasifica dupa mai multe criterii:
A. n functie de domeniul de utilizare, acestea se clasifica n 4 grupe, astfel:
a. sisteme informatice pentru conducerea activitatiilor unitatiilor
economico sociale, care se caracterizeaza prin aceea ca datele de intrare,
de regula sunt furnizate prin documente intocmite de om, iar la iesire sunt
furnizate de catre sistem tot sub forma de documente, pentru perceperea
acestora de catre om.
b. sisteme informatice pentru conducerea sistemelor tehnologice care se
caracterizeaza prin aceea ca datele de intrare sunt asigurate prin
intermediul unor dispozitive automate care transmit sub forma de semnale
informatii despre diversi parametrii ai procesului tehnologic, iar datele de
iesire se transmit de asemenea sub forma de semnale unor organe de
executie, regulatoare, care modifica automat parametrii procesului
tehnologic.
c. sistemele informatice pentru activitatea de cercetare stiintifica, i
proiectare, care asigura atutomatizarea calculelor tehnico-ingineresti.
d. sistemele informatice speciale, care sunt destinate unor domenii
specifice de activitate, ca de exemplu: informare i documentare tehnicostiintifica, medicina, etc.

B. Un alt criteriu de clasificare al sistemelor informatice economice este


nivelul ierarhic ocupat de sistemul economic n structura organizatorica a
societatii, conform caruia avem urmatoarea clasificare:
a. sisteme informatice pentru conducerea activitatii la nivelul unitatilor
economie. Acestea pot fi descompuse n subsisteme informatice asociate
functiunilor economico-sociale sau chiar unor activitati;
b. sisteme informatice pentru conducerea activitatii la nivelul
organizatiilor economico-sociale cu structura de grup.
c. sistemele informatice teritoriale. Sunt constituite la nivelul unitatilor
administrativ-teritoriale i servesc la fundamentarea deciziilor adoptate de
catre organele locale de conducere;
d. sistemele informatice pentru conducerea ramurilor, subramurilor i
activitatilor la nivelul economiei nationale.
Se constituie la nivelul ramurilor, subramurilor i activitatilor individualizate
n virtutea diviziunii sociale a muncii i specificate n clasificarea ramurilor
economiei nationale. Principala lor functiune consta n fundamentarea i
reglarea echilibrului dezvoltarii economico-sociale n profil de ramura.
e. sistemele informatice functionale generale au ca atribut principal faptul
ca intersecteaza toate ramurile i activitatiile ce au loc n spatiul economiei
nationale, furnizand informatiile necesare coordonarii de ansamblu i
sincronizarilor n procesul reproductiei din cadrul economiei de piata.
C. n functie de modul de organizare a datelor n cadrul sistemelor
informatice acestea pot fi:
a. sisteme informatice cu organizarea datelor n fisiere clasice. Acest
mod de organizare a datelor are tendinta de rasfrangere sub aspectul
aplicabilitatii, datorita neajunsurilor pe care le prezinta.
b. Sisteme informatice cu organizarea datelor n baze de date. Aceasta
categorie de sisteme prezinta o tendinta de extindere i dezvoltare.
De la baze de date cu structuri arborescente i retea, s-a trecut la
baze de date rationale.

Sistemul informatic instrument al conducerii moderne


Obtinerea de catre agentii economici i societatiile comerciale a unei
eficiente economice sporite, este conditionata de existenta unei conduceri
stiintifice bazate pe o buna cunoastere a legilor economice.
8

Plecand de la faptul, pe de o parte, ca modelele matematice reprezint


componenta stiintifica a unui sistem informatic, iar pe de alta parte, tinand
seama de facilitatile oferite de utilizarea calculatorului electronic, se poate
aprecia ca sistemul informatic constituie un adevarat instrument n
conducerea stiintifica a activitatii economice.
Proiectarea la nivel micro i macroeconomic a unor sisteme informatice
care sa utilizeze tehnica bazelor de date i care sa contina o serie de
modele matematice, iar situatiile de informare raportare sa aiba un
caracter de semnalare preventiva a abaterilor fata de starea normala,
reprezint o forma superioara de organizare i prelucrare a datelor.
Stadiul actual i tendintele dezvoltarii sistemelor informatice
n ultimii ani asistam la una dintre cele mai importante transformari din
istorie ale infrastructurii tehnologice a societatii. Aceasta schimbare consta
defapt n adaugarea unui nou substrat n infrastructura tehnologica, substrat
care este uzual denumit tehnologia informatiei. n acest nou substrat se
evidentiaza n mod decisiv informatica. Aceasta extindere este pe cale de a
produce o schimbare majora n societatea noastra i anume, trecerea de la
orientarea industriala, n care accentul se pune pe masina i energie, la o
noua orientare informationala n care accentul este pus pe robot i
informatie. Masina i energia vor juca un rol important, fundamental n
societatea informationala, dar pentru noile masini, pentru noile industrii, ca
i pentru celelalte activitati ale omului devin esentiale tehnologiile
informatice care au la baz electronica, informatica, i comunicatiile
moderne.
Informatizarea activitatilor economico-sociale a cunoscut profunde
transformari precum:
a. Se manifesta n mod clar o tendinta spre divizarea costurilor
software-ului sistemelor informatice. Reducerea costurilor sistemelor
informatice se datoreaza, pe de o partea, reducerii costurilor
hardware-ului, iar pe de alta parte, reducerii costului software-ului. n
prezent se manifesta o tendinta clara n dezvoltarea sistemelor
informatice bazate tot mai mult pe platformele software la nivel
inalt. O platforma software corespunde unei platforme de aplicatii i
contine functii software de baz i functii specifice aplicatiei
companiei.
b. Se manifesta o intensa tendinta spre tehnologia sistemelor
informatice bazate pe retele de calculatoare. Cresterea complexitatii,
9

varietatii aplicatiilor i aparitia de noi produse informatice cu un


raport pret / performanta din ce n ce mai avantajos au facut necesara
i rentabila conectarea intre ele a calculatoarelor n cadrul unor retele
care constituie la ora actuala suportul cel mai adecvat pentru
teleinformatica.
c. n domeniul organizarii datelor, se manifesta tendinta spre baze de
date orientate obiect.
Structurile clasice de date bazate pe text i valori numerice fie se dovedesc
insuficiente, fie complexitatea lor depaseste posibilitatiile de stocare i
prelucrare oferite de tehnologiile clasice. Aplicatiile asociate cu disciplinele
tehnologice cum ar fi : proiectarea asistata pe calculator, sistemele
informatice geografice i sistemele bazate pe cunostinte, presupun stocarea
unor cantitati mari de informatii cu o structura complexa.
Unele aplicatii informatice solicita monitorizarea unor desene formate
din grupuri de elemente complexe ce trebuie sa fie combinate, separate,
suprapuse i modificate astfel incat sa permita elaborarea unor variante de
proiect. Bazele de date clasice sau relationale ofera prea putin suport teoretic
i practic pentru tipurile neconventionale de date.
d. Se manifesta tendinta catre sisteme deschise.
Apreciem ca n prezent domeniul informaticii se caracterizeaza prin cel mai
pronuntat dinamism. Se asista la o proliferare de produse hardware i
software, apar de la o zi la alta noi versiuni i noi produse.
Faptul ca un sistem este deschis, nu implica i nu impune nici o
implementare practica de sistem, tehnologie sau mijloc de interconectare,
termenul de sistem deschis se refer doar la recunoasterea reciproca i
aplicabilitatea acelorasi standarde.
Astfel de standarde au cel putin urmatoarele efecte mai importante:
Producatorii se simt incurajati sa le implementeze deoarece, avnd n
vedere larga circulatie a acestor standarde, produsele lor informatice
vor fi mult mai vandabile decat daca nu le utilizeaza;
Asigura o crestere a gradului de portabilitate de pe o platforma de
sistem pe alta, att a datelor cat i a produselor software;
Faciliteaza insusirea teoretica i practica a hardware-ului i softwareului de catre utilizatori
Standardizarea se regaseste intr-o multitudine de domenii de activitati
Standardizarea retelelor de calculatoare. Au luat o amploare deosebita
preocuparile privind realizarea unor retele eterogene de calculatoare, precum

10

i interconectarea retelelor a.i. sa se obtina sisteme teleinformatice de


dimensiuni mari.
Aceste preocupari s-au materializat att n plan practic, prin realizarea unor
sisteme mari cat i n plan teoretic, prin elaborarea de catre ISO
( International Standard Organization ) a unui model arhitectural stratificat
de referinta pentru interconectarea sistemelor deschise.
Modelul a fost adoptat n 1983 i reprezint un cadru conceptual de
lucru pentru definirea de standarde referitoare la interconectarea
calculatoarelor eterogene. Scopul fundamental al acestui standard
international este asigurarea unei baze comune pentru coordonarea de noi
standarde privind interconectarea sistemelor, permitand n acelasi timp
evaluarea standardelor existente.
Conceptul de sistem deschis n viziunea ISO denota capabilitatea
oricaror 2 sisteme, omogene sau neomogene care respecta modelul de
referinta i standardele corespunzatoare de a putea fi interconectate. De
asemenea a fost adoptat teoretic i practic i un model arhitectural ierarhizat,
elaborat de catre Departamentul Apararii din S.U.A. ( Departament of
Defence DoD )
Standardizarea arhitecturii Sistemelor de Gestiune a Bazelor de Date. n
acest sens amintim arhitectura propusa de CODASYL i ANSI.
Standardizarea limbajelor de programare s-a materializat prin propunerile
grupului de lucru CODASYL, care au elaborat limbajul de programare
COBOL. Unele limbaje cum sunt: C, C++, Basic, SQL, au devenit
standarde de facto, datorita faptului ca s-au impus prin performantele i
facilitatiile ce le ofera.
CAPITOLUL 2
Structuri de date
Prelucrarea automata a datelor necesita, pe langa activitatiile legate de
formularea problemei, de analiza acesteia n vederea gasirii algoritmului de
rezolvare i o alta activitate deosebit de importanta, legata de organizarea
datelor.
Organizarea datelor este un proces care cuprinde urmatoarele activitati:
- identificarea datelor;
- clasificarea i descrierea propietatiilor, a caracteristicilor
datelor;

11

- gruparea datelor n colectii de date destinate prelucrarii


automate;
- reprezentarea externa pe suporturi tehnice;
- identificarea, definirea i descrierea procedurilor de prelucrare
automata.
Eficienta prelucrarii automate a datelor, succesul acesteia depind n mare
masura, de organizarea interna i externa a datelor, de stabilirea unor
structuri de date care sa corespunda cerintelor de prelucrare.
Concepte de baz
Odata cu aparitia bazelor de date, n terminologia curenta au fost
introduse i utilizare 3 concepte de baz n organizarea datelor, i anume:
entitate, atribut i valoare.
Entitatea reprezint un obiect concret sau abstract, reprezentat prin
proprietatiile lui. Pe de alta parte orice proprietatea a unui obiect poate fi
descrisa printr-o pereche ( Atribut, Valoare ); prin urmare o entitate poate fi
reprezentata prin mai multe proprietati, deci mai multe perechi de forma
( Atribut, Valoare ).
De exemplu, un student X se poate reprezenta prin perechi ( Nume, Ion ),
( Facultate, Informatica ), ( Telefon, 435 34 76 ), ( Grupa 601 ) etc.
Practic, multimea atributelor, Nume, Facultate, Telefon, Grupa, poate fi
asociata mai multor studenti; aceasta inseamna ca un atribut nu
caracterizeaza doar o entitate, ci o clasa de entitati, numita entitate grup.
n exemplul nostru, entitatea grup se poate numi STUDENTI.
Notiunea de atribut este cunoscuta i sub numele de camp sau
caracteristica.
Notiunea de data
n informatica prin data, se intelege un model de reprezentare a informatiilor
despre obiectele supuse prelucrarii automate, accesibil att utilizatorului cat
i componentelor calculatorului.

n functie de obiectele pe care le reprezint datele se pot clasifica n:


date elementare sau scalare care se prezinta sub forma de entitati
indivizibile

12

colectii de date, care se prezinta sub forma unor multimi de date


elementare intre care se definesc i se descriu anumite relaii.
Componentele unei structuri se pot identifica i selecta prin numele de
identificare sau prin pozitia pe care o ocup n cadrul structurii, potrivit
relatiei de ordine stabilita.
Dupa tipul componentelor, structurile de date se pot grupa n:
structuri de date omogene, care contin elemente de acelasi tip;
structuri de date eterogene, care contin componente de tipuri diferite.
OBSERVATIE:Daca o structura se poate descompune n structuri de
acelasi tip, atunci structura respectiva este recursiva.
n mod corespunzator, structurile de date vor putea fi:
structuri de date interne , avnd caracter temporar, deoarece sunt
realizate n memoria interna de tip RAM ( volatila );
structuri de date externe, care au un caracter relativ permanent,
deoarece sunt memorate pe suport extern. Aceste structuri pot
curpinde:
o fisiere de date
o baze de date
o banci de date
Din punct de vedere al modului de alocare a zonelor de memorie, structurile
de date pot fi grupate astfel:
structuri de date statice, la care alocarea zonelor de memorie necesare
pastrarii temporare a datelor este facuta n momentul compilarii
programului i ramane aceasi pe toata durata de executie a
programului respectiv;
structuri de date dinamice, la care alocarea zonelor de memorie se
face numai n momenutl executiei programului, la momentul necesar,
ele putand fi modificate, eliberate, sau realocate pe toata durata de
executie a programului respectiv.
Dupa nivelul de structurare a datelor se poate face gruparea:
structura logica, care se refer la modul de ordonare a datelor, la
operatorii de prelucrare a datelor;
structura fizica, reprezentand modul de implementare, de reprezentare
a datelor, pe suport magnetic de date.
13

Tipuri de structuri de date


Am vazut ca o structura de date reprezint practic o colectie de date intre
care s-au definit o serie de relaii care duc la un anumit mecanism de selectie
i identificare a datelor.
Aceste relaii pot fi de tipul:
de echivalenta
de ordine
de ordine totala
de preordine
Se numeste tip de structura de date o multime ordonata de date, intre care sau stabilit anumite relaii i care folosesc, pentru realizarea operatiilor un
grup de operatori de baz cu o anumita semantica.
Principalele tipuri de structuri de date ( logice ) sunt:
structura punctuala
structura liniara

a1

a2

a3

a4

Structur liniar simpl


Principalele caracteristici ale acestui tip de structura sunt:
- cardinalul multimii elementelor initiale este egal cu 1
- cardinalul multimii elementelor terminale este egal cu maxim 1
- orice element neterminal are un succesor imediat unic
14

primul element nu are predecesori


ultimul element nu are succesori
relatiile stabilite intre date sunt de tip 1 la 1
daca exista un cuplu n relatie de forma ( u, v ), unde v este
ultimul element al structurii, iar u este primul element, atunci
structura se numeste structura liniara inelara sau circulara.
- intre date se stabilesc relaii de tipul 1 la 1
- structura liniara se numeste structura liniara cu elemente
structurate arborescent, daca componentele ei sunt structuri
arborescente
- structura liniara se numeste structura liniara cu elemente
structurate retea, daca componentele ei sunt structuri de tip
retea
structura arborescenta, sau descendenta, sau ierarhica este definita atunci
cand intre elementele colectiei de date exista o relatie de ordine.
Arbori binari
Datorita specificului lor, arborii binari admit o reprezentare grafica
simetrica, axa de simetrie trecand prin radacina arborelui. De aceea,
subarborii unui element oarecare sunt denumiti subarbore stang, i respectiv
subarbore drept, functie de pozitia relativa a acestora fata de elementul
respectiv.
Astfel pentru arborii binari s-au identificat i s-au descris 3 modalitati de
parcurgere a elementelor arborelui denumite:
- parcurgere n preordine
- parcurgere n inordine
- parcurgere n finordine ( postordine )
structura retea, definita atunci cand intre elementele colectiei de date
exista o relatie de preordine. Ea are urmatoarele caracteristici:
- este practic un graf care are, intre doua noduri, legaturi budirectionale;
- exista unul sau mai multe noduri initiale (cardinalul miltimii este egal
sau mai mare cu 1);
- exista unul sau mai multe noduri finale (cardinalul mltimii nodurilor
finale este egal sau mai mare cu 1);
- orice nod poate avea mai multi predecesori, el putand fi predecesorul
propriului predecesor. Atunci apar n retea cicluri. Un ciclu se
defineste atunci cand nodul initial este acelasi cu nodul final;
- intre elementele structurii de tip retea se regasesc relaii de tip m la n.
15

Structura relationara este formata din mai multe tabele de date


elementare, numite tablori sau relaii, obtinute prin metoda normalizarii,
pentru a asigura conditiile de integritate i unicitate a datelor i a elimina
astfel nomaliile la actualizari.
Despre acest tip de structura vom invata mai mult la S.G.B.D.-uri, adica
la sisteme de gestiune a bazelor de date, special realizate pentru operatii
cu colectii de date memorate pe suporti externi.
Informatii despre cantitatile de produse finite care trebuie realizate
Informatii despre structura produselor finite respective.
Fisierul se defineste ca o multime de date omogene din punct de vedere al
semnificatiei lor i al cerintelor de prelucrare. Aceasta multime este
organizata ca o lista liniara, cu elemente structurale arborescente.
Baz de date se defineste ca o colectie de date aflate n interdependenta,
memorata pe suport impreuna cu descrierea datelor i a relatiilor dintre ele.
Banca de date reprezint un sistem de organizare i prelucrare respectiv
tele-prelucrare a datelor constituit din:
- baz de date
- un sistem de programe pentru gestiunea datelor.
Structuri de date interne
Cele mai frecvent utilizate structuri statice de date sunt:
masive (tablouri )
articole ( inregistrari logice )
Limbajele de programare permit implementarea acestor structuri statice de
date.
Masivul reprezint o structura de date omogena cu una, doua sau n
dimensiuni. Masivul cu o dimensiune se numeste n mod uzual vector, iar cu
doua matrice.
Exemplu:
Fie vectorul X cu elementele x1, x2, x3, ... ,xn un tablou unidimensional cu n
elemente componente de acelasi tip.
16

n memoria interna el va fi memorat astfel:


X
1
X1
de
baz

2
X2
Adresa
de
baz+1

....
Adresa
de
baz+2*1

n
Xn
Adresa

Adresa
de
baz+(n-1)*1

Reprezentarea elementelor unui vector n memoria interna


Articole.Fisiere de date
Articolul sau inregistrarea logica reprezint o structura de date interna,
eterogena de tipul structura arborescenta .
Un articol este format din campuri de date care se identifica n mod unic
printr-un identificator sau nume asociat.
Fisierul de date este format din articole sau inregistrari logice care descriu
aceleasi entitati i formeaza o colectie de date omogene din punct de vedere
al semnificatiei i al cerintelor de prelucrare.
Metodele de organizare a fisierelor definesc regulile care stau la baz
constituirii articolelor n fisiere i se stabilesc la operatia de creare a
fisierelor. Astfel fisierele pot avea:
Organizare secventiala care memoreaza articolele de date secvential n
ordinea introducerilor iar accesul la articole poate fi doar secvential.
Organizare secvential-indexata care presupune crearea fisierului de
date cu articolele ordonate crescator dupa valoarea unui camp de date
numit cheie de indexare.
Organizare directa care presupune memorarea i apoi identificarea
articolelor printr-o cheie care poate fi un camp de date, sau nu, dar a
carei valoare se asociaza fiecarui articol n parte.
Metodele de acces la articolele unui fisier stabilesc modalitatile prin care
se localizeaza un articol n fisierul de date.
Tipuri de acces:
Acces secvential
Acces direct

17

Programare orientata spre obiecte


Programare orientata spre obiecte reprezint un stil de programare nou, care
utilizeaza concepte i constructii noi, modalitati noi de structurare a datelor,
de tratare a colectiilor de date i programare.
La programarea orientata spre obiecte procedurile de prelucrare i
datele sunt incapsulate n obiecte, asupra carora se aplica mesaje care
modeleaza comportamentul sistemului.
Date i expresii
Asupra datelor elementare sau memorate n structuri de date statice sau
dinamice, interne sau externe, n cadrul prelucrarii atutomate, se pot aplica
diferiti operatori, rezultand astfel constructii sintactice denumite expresii.
Expresiile sunt deci grupuri alcatuite din operanzi i operatori. Din evaluarea
unei expresii rezult o valoare, care reprezint rezultatul ei.
Operatorii pot fi grupati n:
- operatori aritmetici
- operatori logici
- operatori de comparare
- operatori pe siruri de caractere
Toate limbajele de programare permit implementarea acestor tipuri de
operatori i constructia unor tipuri de expresii corespunzatoare.
n toate limbajele de programare, operatorii aritmetici au reprezentarea:
+ pentru adunare
- pentru scadere
* pentru inmultire
/ pentru impartire
^n pentru ridicarea la putere n
( ) pentru gruparea operatiilor i schimbarea ordinii normale de executie a
acestora.
Este permisa includerea unor paranteze n altele, ordinea de desfacere a
acestora fiind dinspre interior spre exterior.
CAPITOLUL 3
Grafuri
Definitii, tipuri
Notiunile de algoritm i schema logica pot fi definite, explicate i mai ales
foarte des utilizate n legatura cu elemente de teoria grafurilor.
18

Se umeste graf neorientat o pereche ordonata G = ( X, U ), unde X este o


multime finita i nevida de elemente numite noduri ( varfuri ), iar U este o
multime de perechi neordonate de elemente distincte ale lui X, numite
muchii.
Se numeste lant intr-un graf G = ( X, U ) o succesiune de muchii de
forma [i1,i2], [i2,i3],...,[n-1,n], notata prescurtat prin [i1,i2,...n]
Un lant n care muchiile sunt diferite doua cate doua se numeste ciclu.
Un varf care este extre,otatea imeo somgire ,icjoo se mi,este varf terminal.
Doua varfuri unite printr-o muchie se numesc varfuri adiacente.
Un graf orientat este o pereche ordonata G = ( X, U ), deosebirea fata de
graful neorientat constand n faptul ca elementele lui U sunt perechi
ordonate de varfuri numite arce. n cazul grafurilor orientate, notiunile de
lant i ciclu isi au corespondent n notiunile de drum i circuit.
Arbori
Se numeste arbore un graf neorientat, conex,
OBSERVATIE: Intr-un arbore cu n varfuri, exista cel putin doua varfuri
terminale.
Se poate demonstra, cu privire la grafuri, teorema:
Fie G un graf neorientat, cu n 1 varfuri. Urmatoarele afirmatii sunt
echivalente:
1. G este un arbore;
2. G are n-1 muchii i nu contine cicluri;
3. G are n-1 muchii i este conex;
4. Orice doua varfuri din G sunt unite printr-un unic lant.
Se numeste arbore binar un arbore orientat, n care fiecare varf are
cel mult doi descendenti, facandu-se insa distinctia intre descendetul stang i
cel drept al fiecarui varf.
Se numeste arbore de sortare un arbore binar cu proprietatile:
- INF(i) INF(j) pentru orice varf j din subarborele stang al lui i;
- INF(i) INF(j) pentru orice varf j din subarborele drept al lui i.
CAPITOLUL 4
Algoritmi definire
19

Notiunea de algoritm, preluata din matematica, este fundamentala n


activitatea de programare a calculatoarelor electronice.
Programarea este practic activitatea prin care se concepe i se realizeaza
programul pentru rezolvarea unei probleme, cu ajutorul calculatorului
electronic.
Un program reprezint o succesiune de instructiuni i comenzi apartinand
unui/unor limbaje de programare ( Pascal, Basic, C, Java ) care conduc la
solutionarea problemei formulate.
Daca ne referim la activitatea de programare, vom identifica n cadrul
acestea etapele:
- formularea problemei
- elaborarea, identificarea i descrierea algoritmului de rezolvare
- scrierea programului
- programul trebuie sa fie bun, simplu i eficient.
- testarea programului
- realizarea, completarea i definitivarea documentatiei programului
- exploatarea curenta
Notiunea de algoritmi
Cuvantul algoritm este de origine araba, derivand din numele
matematicianului Abu Ja`far Mohammed ibn Musa al-Kahowarizmi.
Cunoscuta cu aproape 2000 ani I.H., notiunea de algoritm a devenit
una din notiunile centrale ale matematicii actuale.
Sunt mai multe tipuri de algoritmi, cum ar fi:
- algoritmul impartirii a doua numere
- algoritmul extragerii radacinii patrate a unui numar
- algoritmul rezolvarii ecuatiei de gradul II
S-a demonstrat apoi ca nu orice problema poate fi rezolvata alcatuind un
algoritm de rezolvare a acesteia.
Se spune ca o problema este decidabila daca exista un algoritm pentru
rezolvarea ei.
De exemplu, problema gasirii solutiilor unei ecuatii diofantice de gradul I de
forma:
ax+by=c
a,b,c sunt numere intregi, este decidabila.

20

CAPITOLUL 5
Limbaje de prezentare a algoritmilor ( pseudocod )

Descrierea in practica a algoritmilor in limbaj natural sau cu ajutorul


schemelor logice prezinta unele dezavataje. Astfel, prima este prea detaliata
pentru gustul programatorilor si de aceea nu este acceptata decat in cazuri
speciale, in care trebuie sa sustina in fata unor nespecialisti in informatica,
solutia adoptata.
Practica acceptata si alte metode de descriere, dintre care in ultima
vreme s-au impus limbajele de prezentare a algoritmilor, numite si
pseudocod.

Unele notatii folosite la descrierea algoritmilor

Formulele folosite in matematica si in tehnica sunt date pentru cazul general,


aparand in ele atat numele unor cantitati variabile, cat si a unor constante.

In pseudocod subprogramele au urmatoarea forma generala:


ANTET
Secventa de instructiuni
END

ANTET poate fi de forma:


PROGRAM nume_program

21

PROCEDURE nume_procedura
FUNCTIE nume_functie

Apelul subprogramelor se face prin referirea de forma:


Nume ( lista_parametrii ) sau prin intermediul unui cuvant cheie cum ar fi
cuvantul CALL:
CALL nume_procedura ( lista_parametrii )

Exista posibilitatea reluarii repetate a unui pas sau grup de mai multi pasi in
interiorul unui aloritm; aceste procee repetitive pot fi definite ca iterative sau
recursive.
Iterativitatea este procesul prin care rezultatul este obtinut prin executia
repetata a uui set de operatii, de fiecare data cu alte valori de intrare.
Recursivitatea reprezinta un proces repetitiv prin care rezultatul de la un
anumit pas se determina pe baza unuia sau mai multor rezultate obtinute in
pasii anteriori.
Scheme logice
Schema logica este o forma de prezentare a algoritmului si a modului de
lucru al acestuia sub forma grafica, folosind diferite simboluri grafice.
Se stie ca in practica programarii se acorda o importanta deosebita realizarii
schemelor logice in perioada de debut, astfel ca dupa o anumita experienta in
domeniu, se incearca tot mai des renuntarea la aceasta importanta etapa a
proiectarii.

Figurile geometrice folosite la realizarea schemelor logice se numesc


simboluri sau blocuri.

Principiile ralizarii schemelor logice:


22

- orice schema logica incepe cu blocul START


- dupa START, daca e necesar si daca sunt date de intrare, se citesc
datele de intrare.
- Dupa terminarea activitatii unui bloc de prelucrare, incepe activitatea
blocului imediat urmator.
- Dupa terminarea activitatii unui bloc de decizie isi incepe activitatea
blocul conectat la iesirea corespunzatoare conditiei adevarate, in cazul
unui bloc simplu, cu doua iesiri, se executa blocul conectat la DA daca
este adevarata conditia specificata si blocul conectat la NU in caz
contrar.
- Schema logica isi inceteaza activitatea la blocul STOP.

Schemele logice pot aparea, functie de gradul lor de dificultate, fiind:


- scheme logice simple
- scheme logice ramificate
- scheme loice cu cicluri
- scheme logice cu cicluri ierarhizate
CAPITOLUL 6
Structuri fundamentale ale algoritmilor
Structura secvenial sau liniar desemneaz una sau mai multe
operaii ce se execut una dup cealalt, n mod liniar (secvenial).
Structura alternativdesemneaz execuia unei secvene de operaii S1 sau a
alteia S2, n funcie de ndeplinirea sau nu a unei condiii.
Structurile alternative sunt de mai multe tipuri:

Structura IF THEN ELSE, selecteaz succesiunea operaiilor ce


urmeaz a fi executate, funcie de valoarea logic de ,,adevr sau ,,fals pe
care o are n momentul respectiv condiia specificat. Dac este adevrat
condiia se urmeaz calea specificat de ramura DA, altfel se urmeaz calea
NU.

23

Blocul are deci o intrare i dou ieiri, corespunztoare celor dou


valori logice posibile pentru o expresie logic (Adevarat i fals, Da i Nu)

Structura IF THEN numit i selecia simpl, este practic o form


particular a seleciei IF THEN ELSE, n care blocul de pe ramura Nu
este vid.

n mod asemntor se poate construi i selecia IF ELSE, cu


precizarea c n acest caz blocul vid va fi cel de pe ramura Da.

Practic, n ambele forme particulare, se testeaz condiia logic i se


specific doar succesiunea de operaii ce trebuie efectuate pe una dintre
ramuri. Pe ramura cu bloc vid nu se execut nimic.

Structura CASE OF selecteazuna dintre mai multe ramuri, n


funcie de valoarea unui selector. De aceea structura de acest tip se mai
numete selecie multipl.
Structura repetitiv sau iteraia indic repetarea unei operaii sau
secvene de operaii S, atta timp ct este ndeplinit o anumit conditie.
n funcie de momentul n care se face testarea condiiei specificate,
structurile repetitive sunt de mai multe tipuri:

Condiia poate fi testat anterior execuiei secvenei de comenzi S i


atunci avem o structur de tip WHILE DO

24

Condiia se testeaz posterior execuiei secvenei de comenzi S i


atunci avem o structur de tip DO UNTIL

Structura repetitiv mai poate fi analizat i din punct de vedere al


numrului de reluri. Din acest punct de vedere, o structur poate fi:

fr numrtor, cci nu se cunoate de la nceput numrul de reluri.


Aa este cazul structurii de tip WHILE, indiferent de tipul ei.

cu numrtor, atunci cnd se tie sau se poate calcula automat


numrul de reluri. Aa e cazul structurii repetitive de tip DO FOR

25

Pentru a evita ciclarea la infinit a structurilor repetitive, programatorul


trebuie s aigure negarea condiiei pentru a permite ieirea din structurile
WHILE DO i DO UNTIL.
Se observ c diferena esenial ntre cele dou structuri const n
faptul c DO UNTIL execut S cel puin o dat, n timp ce WHILE DO
poate s nu-l execute pe S deloc, dac la intrarea n structur condiia este
deja fals.
Programarea structurat beneficiaz i de un puternic suport teoretic
constnd ntr-o construcie de principii, termeni i teoreme matematice
specifice.
Teorema de structur Bohm i Jacopini spune:
Orice schem logic este echivalent cu o schem logic structurat
Dac o organigram cuprinde o mulime F de aciuni i o mulime P
de predicate, astfel nct organigrama s fie structurat i s fie
echivalent cu cea iniial.
Corolarul ,,de sus n jos: Un program structurat este echivalent cu un
program scris sub una din urmtoarele forme:
P=Secvenial(f,g)
P=Alternativ(p,f,g)
P=Repetitiv(p,f)
Unde p este un predicat al lui P, iar f i g sunt secvene structuratesau
funcii ale programului.
Teorema de corectitudine:

26

Corectitudinea unui program structurat poate fi verificat prin


examinarea fiecrui nod din arborescena sa. Dac fiecare nod se verific
local, se spune c programul structurat este corect.

CAPITOLUL 7
Evaluarea corectitudinii algoritmilor
Un program realizat trebuie s fie corect, clar, sigur n funcionare,
uor de modificat, portabil, eficient, nsoit de o documentaie
corespunztoare. Exist numeroase tehnici de verificare i validare a
algoritmilor, adresate n general practicienilor, dar i uor accesibile unui
nceptor n programare.
Dintre acestea amintim:

testarea programelor i depanarea programelor


verificarea formalizat a programelor
cea mai slab precondiie
cea mai tare postcondiie
instruciuni generalizate
sintaxa expresiilor logice

Aciunea de testare a programelor se deosebete de celelalte faze prin


care trec acestea (proiectare, programare, documentaie, etc.) prin caracterul
ei n aparen demolator. Astfel, n timp ce alte faze au o esen
constructiv, testarea are n aparen un caracter distructiv, deoarece scopul
ei este de a pune n eviden proasta funcionare a programului, de a gsi
hibele aeestuia i nu prile sale bune. Din punct de vedere psihologic,
programatorul nsui trebuie s adopte n aceast etap 0 atitudine
dumnoas fa de propriul program, pentru a putea gsi defectele
acestuia,
Analiznd problema mai atent, realizm de fapt c scopul testrii este
n realitate tot constructiv, acela de a pune n funciune un program care s
funcioneze la parametri prevzui.
Se tie c, ntr-un algoritm de calcul i deci, ntr-un program, este
oricnd posibil prezena unei/unor erori, orict de precis i laborioas ar fi
metodologia de elaborare. Proeesul de detectare i apoi de eliminare a
erorilor unui algoritm/program are dou componente, numite:

verificare
validare
27

Aceste dou aetiviti ar trebui s earacterizeze practic toate etapele


prin care trece un program, de la formularea cerinei de rezolvare a unei
probleme, la analiza acesteia, la identificarea i apoi descrierea algoritmului
de rezolvare a problemei, a codificrii datelor i validarea rezultatelor
obinute.
Aceasta deoarece tot mai muli specia1iti din diferite domenii arat
c aceast activitate de testare i validare nu este specific doar activitii de
programare, ci se nt1nete pretutindeni, acolo unde se produce sau
construiete ceva; exist n acest sens controale efectuate la nivelul fiecrei
operaii sau grup de operaii, dup cum exist i un control final, produsului
finit, pentru realizarea recepiei lui finale.
n acest sens, activitatea de verificare i validare a unui produs
program urmrete n principal, urmtoarele:

descoperirea defectelor programului

certificarea faptului c programul va funciona corect n condiii


de exploatare curent.
Testarea programului rmne metoda de baz pentru verificarea
corectitudinii unui program, succesul ei fiind condiionat n primul rnd de
experiena programatorului, de complexitatea i completitudinea setului de
date folosite n procesul testrii, de analiza riguroas, atent a rezultatelor
obinute n urma fiecrui test.
Prin testarea programului se nelege deci executarea programului
respectiv cu scopul de a descoperi o anomalie sau eroare. Ea se bazeaz pe
construirea unor eantioane de date de intrare care s conduc la depistarea
unor erori n functionarea programului, ntr-un timp ct mai scurt i cu efort
ct mai mic.
Practic, pornind de la nite date de test construite de el, programatorul
ateapt s obin la final sau pe parcurs, anumite rezultate. Dac acestea
sunt corecte, complete sau n formatul ateptat avem cel putin o eroare n
execuia programuiui. Putem spune c succesul testrii depinde de arta
programatorului de a-i construi setul de date de test.
Trebuie s precizm ins faptul c relevana testului depinde de
numrul eantioane1or de date de test, dar mai ales de calitatea datelor alese.
n acest sens, au aprut, n ultimul timp, o serie de metode de elaborare a
datelor de test, care ajut programatorul, oferindu-i posibilitatea de a aborda
sistematic activitatea de testare a programelor, cu o probabilitate crescut de
depistare a erorilor.
Aceste metode pot fi denumite:

testarea funcional sau metoda cutiei negre, care presupune


28

construirea datelor de test astfel nct s permita testarea fiecrei funciuni a


programului;

testarea structural sau rnetoda cutiei transparente, care


presupune construirea datelor de test astfel nct toate prile programului s
poat fi testate.
Succesul activitii de testare const deci n conceperea unor date de
intrare prin prelucrarea crora defectele algoritmului i deci i a 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 curect a programului.
Testarea unui program trebuie s se finalizeze, pentru a fi util, cu
semnalarea erorii i localizarea ei. De aceea, testarea programului este
urmat de depanarea lui.
Depanarea unui program const n localizarea erorii, determinarea
naturii sale i corectitudinea ei. Ea se poate face n mod:
sttic, dup executarea programului
dinamic, n timpul execuiei acestuia
Depanarea simbolic, o alt metod de depanare, este mai uor de
utilizat, deoarece ofer posibilitatea de a urmri executarea programului la
nivel de limbaj surs. 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 inseamn de fapt o


instruciune executabil);

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


29

variabilelor neinitializate sunt greu de semnalat i de localizat, mai ales


atunci cnd aparent totul funcioneaz corect. n acest sens amintim variabila
cu rol de indice (numrtor) care asigur parcurgerea elementelor unui
vector. Aceasta trebuie iniializat cu poziia primului element din ir care
trebuie prelucrat i apoi testat i comparat valoarea ei cu cea final.
Deasemenea, expresia care stabilete dac un ciclu se execut sau nu trebuie
astfel formulat sau initializat 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. Este vorba de ciclul cu testarea iniial a
condiiei, la care reluarea ulterioar va fi hotrt de valoarea pe care
respectiva variabil o primete, n timpul execuiei programului, n cadrul
ciclului. Deci, ciclul cu testarea iniial a condiiei trebuie s fie bine
analizat, verificat i testat din punctul de 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 deasemenea pentru familiarizarea
programatorului cu algoritmul, cu modul su de lucru.
Proprietatea P se numete precondiie sau proprietate final, iar
proprietatea Q postcondiie san proprietate final.
Practica a dovedit c exist situaii cnd pentru un algoritm A i o
postcondiie dat, nu intereseaz o precondiie oarecare, ci se caut cea
mai bun precondiie care rezolv algoritmul dat.
Fie secvena de comenzi, care calculeaz factorialul unui numr >=2:
(n>=2)
f:=1;
i:=1;
while i <n do
begin
i:=i+1;
f:=f*i
end
(f=n!)
Se poate observa factorialul este calculat corect i dac n pornete de
la valoarea 1 (n>=1). Deci, precondiia n>=2 poate fi inlocuit cu n>=1 care
se consider o precondiie mai bun, care descrie o mulime de date iniiale
mai cuprinztoare, obtinut prin adugarea valorii 1.
O analiz mai atent a algoritmului arat c precondiia n>=1 poate fi
inlocuit cu n>0 considerat o precondiie mai bun, care atest capacitatea

30

algoritmului de a calcula factorialul oricrui numr natural, mulimea datelor


initiale fiind din nou mrit prin adugarea valorii 0 (0!=1).
CAPITOLUL 8
Limbaje de programare
Un limbaj de programare este un ansamblu de simboluri, cuvinte,
instruciuni i semnificaii atribuite acestora, utilizat pentru descrierea
algoritmilor. Limbajul de programare este astfel un mijloc prin care
programatorul comunic cu calculatorul.
Programul este o succesiune de intruciuni aparinnd unui limbaj de
programare, prin care se descriu operaiile la care sunt supuse datele i
ordinea de execuie a acestora, pentru rezolvarea automat a unei probleme
date. Un program reprezint o alta modalitate de descriere a unui algoritm
de rezolvare a unei probleme date.
Pentru a nltura acest mare dezavantaj au aprut limbajele simbolice
i apoi limbajele de programare evoluate care prin intermediul
ansambloarelor i compilatoarelor de care dispun, permit traducerea
automat a instruciunilor scrise ntr-un limbaj apropiat de limbajul curent de
limbajul binar. Limbajele de programare reprezinta principalele mijloace de
comunicare om-masina, evolutia lor fiind nemijlocit legat de cea a
calculatoarelor electronice, a caror era a inceput prin anii 1944.
Dintre limbajele de programare evoluate utilizate pe toata gama
sistemelor de calcul menionm:
- Basic
- Algol
- Fortram
- Cobol
- Pascal
- C
- PL/1
n ultimul timp s-au impus tot mai multe limbaje de inteligen
artificial i sisteme expert cum sunt:
- C++
- Lisp
- Prolog
precum i programarea pe obiecte ( Basic, C, etc. ).
Orice limbaj de programare presupune definirea urmatoarelor
elemente componente:
alfabetul
vocabularul
31

gramatica
punctuatia
semantica
Rezultatul activitii de programare l constituie programul scris ca
text ntr-un limbaj de programare. Un astfel de program se numete program
sursa. El este scris printr-un editor de texte acceptat de limbajul de
programare respectiv.
Fiind scris ca format text, programul surs nu este neles de ctre
istemul electronic de calcul. Pentru aceasta este necesara traducerea lui intrun cod intern, accesibil calculatorului. Aceast operaie se realizeaz cu un
program translator numit compilator. Compilatorul este componenta
software care realizeaz traducerea programului sursa n cod intern,
rezultand aa numitul program cod obiect. Lucrul cu un anumit limbaj de
programare presupune existenta compilatorului pentru acel limbaj.
Ansamblul format din limbajul de programare i programul translator
asociat, formeaza sistemul de programare.
Limbajul de programare pascal face parte din categoria limbajelor de
programare evoluate de nivel inalt. Un program structurat este constituit din
unitati functionale bine definite, ierarhizate conform naturii specifice a
problemei de rezolvat. n interiorul unei astfel de unitati functionale,
structurarea se manifesta att la nivelul operaiilor de executat ct i la cel al
datelor de prelucrat.
Programarea structurata este o metoda independenta de limbajul de
programare utilizat. Limbajul Pascal include conceptele programarii
structurate n ambele sensuri ale efortului de abstractizare presupus de
realizarea unui program: ogranizarea datelor i conceperea succesiunii de
operaii.Limbajul Pascal a fost implementat pn n prezent pe o mare
varietate de calculatoare, avnd un inalt grad de portabilitate comparativ cu
implementarea altor limbaje de programare.
Un program reprezint o mulime ordonat de instruciuni, asociat
unui algoritm de rezolvare a unei probleme care comand operaiile de
prelucrare a datelor.
Instruciunea reprezint exprimarea intr-o forma riguroasa a unei
operatii i precizeaza functia i adresele operanzilor.Relaia dintre cele 3
elemente: algoritm, limbaj i program poate fi exprimat astfel:

Blocul

32

executabil constituie lanul de instructiuni prin care este codificat programul


n limbajul pascal, deci prin care se descrie algoritmul de prelucrare. Acestea
sunt cuprinse ntre Begin i End.
Este interzis sa dam nume diverselor obiecte care sa coincida cu acele
cuvinte rezervate. n partea declarativa orice declaratie careia nu i se
asociaza obiectele legate de programul n cauza se poate omite.
Toate obiectele manipulate n pascal poarta un nume. Acest
nume se numeste identificator. Identificatorii sunt denumiri prin care se
desemneaza datele, procedurile, functiile, programele.
Un tip de date reprezint setul de valori pe care le poate lua
elementul respectiv, mpreun cu mulimea operaiilor care se aplica asupra
acestora. Orice variabila utilizata n program trebuie sa apartina unui tip.
Tipul de date poate fi: predefinit i construit pe baza celor predefinite.
Din punct de vedere al posibilitatii de modificare a valorii n faza de
executie a programului, datele se pot clasifica n:
- date variabile
- date constante
Tipurile intregi de date sunt:
- Byte
- Word
- Shortint
- Integer
- Longint
Tipul real reprezint un numr real cuprins ntre dou limite care
difer de la un compilator la altul i de la un tip la altul.
Astfel tipurile reale pot fi:
- real
- single
- double
- extended
- comp
Funciile SUCC i PRED nu functioneaz, tipul REAL nefiind
ordinal.
Tipul Caracter ( CHAR )
O variabil de tip caracter poate avea drept valoare un caracter. O
constanta de tip caracter poate fi:
`a` `:` literele mari au alte valori decat cele mici
x:char se reprezinta n memorie pe un octet, adica 255 coduri.
x:=`a` sau x:=a
Exist funcii care permit trecerea de la caracter la codul ASCII i
33

invers.
CHR ( cod ) este o funcie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o funcie care intoarce codul ASCII al
caracterului respectiv.
Tipul Boolean este un tip ordinal, enumerativ, care ocup un octet
memorie i poate lua 2 valori logice: adevarat i fals.
Declaraia de tip se face :
Type boolean = ( True, False )
Tipul Declarat ( Enumerativ ) este definit de utilizator ca o lista
ordonat, prin enumerarea valorilor posibile astfel:
TYPE identif tip = ( lista elemente )
TYPE zi-sapt= ( luni, marti, ... , duminica )
Tipul Subdomeniu se mai numeste tip interval i se defineste ca
submultime a unui tip ordinal prin precizarea intervalului inchis de valori.
Toate caracteristicile tipului parinte ( Integer , Char ) se regasesc n tipul
subdomeniului, singura deosebire dintre ele constand n multimea valorilor
pe care le poate lua.
Declararea constantelor:
CONST ident = valoare;
Pot fi numai de tip standard ( scalar ) i se declar n sectiunea
CONST
Valoarea constantei nu poate fi modificat n timpul rulrii
programelor.
Orice ncercare de a atribui constantelor o valoare, chiar dac este
egal cu cea iniial, va genera un mesaj de eroare.
Se asigur astfel protecia valorilor.
Declaraia de tip
TYPE Identif_tip=definiie tip;
Declaraia de variabile
Var identif var: spaiu tip var
Dac sunt mai multe variabile de acelasi tip, se inir separate cu `,`
Declaraia de funcii i proceduri
function nume_funcie (declaraie de var): tip rez;
function fact (n: integer):integer;

34

Mai multe variabile se separ prin `;`


Instruciuni pascal: Limbajul pascal este puternic orientat spre
programarea structurat, fiind conceput astfel nct sa implementeze corect
conceptele proiectrii i realizrii structurate i modularizate a programelor.
Progamul scris ntr-un limbaj de programare evoluat deci n pascal, se
numeste progream surs.

Instruciuni simple:

de atribuire
apeluri de procedura
instruciunea de salt necondiionat(goto)
instruciunea vid

Instruciuni simple
Prin instructiuni simple se realizeaz o mare parte din operatiile
de baz a algoritmilor de prelucrare. Instructiunea vid descrie aciunea vid,
ea este definit prin lipsa n contextul unor construcii pascal, fr a avea o
mnemonica explicit.
Se prezint ca o linie goala urmat de `;`
i:=1 ; 2 instruciuni vide
If x>0 then
x:=x+1
else;
Instruciunea de atribuire evalueaz o expresie i atribuie rezultatul
obtinut unei variabile sau functii.
Are formatul general:
Identificator:=valoare;
Prioritatea operanzilor n Pascal:
NOT
* / DIV MOD AND
+ - OR ( *, +, -, pe multimi )
= , > , < ,<= , >= , <> , i operatori relationali pe multimi
Expresii logice sunt cele care n urma evaluarii produc un rezultat
logic de TRUE sau FALSE ( Boolean ). Ele se prezint fie sub forma unor
condiii simple, fie sub forma unor conditii compuse, formate din mai multe
conditii simple legate prin operatorii logici: AND, OR, NOT.
Dac nu suntem siguri de prioritatea anumitor operatori este necesara
utilizarea parantezelor.
35

Apelul de procedur:
Orice rutin scris de noi, pentru a efectua anumite operaii, se
numete procedur.
Procedurile ntlnite n program ca simple instruciuni genereaz o
serie de operaii:
compilatorul caut numele de procedur n biblioteca sa; dac
nu este gsit acolo procedura e cautat n lista de declaraii de proceduri a
programului; dac nu este nici acolo se afiseaz un mesaj de eroare.
dac este gsit procedura e apelat.
Instructiunea de salt neconditionat GOTO
Format : GOTO eticheta;
La intalnirea ei se executa un salt la linia care este precedata de
eticheta urmata de `:`
IF delta >= 0 THEN
GOTO 30
ELSE
WRITE (` ecuatia nu are solutii`);
30: x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
write ( x1, x2 );
end.
Instructiuni structurate
Instructiunea compusa este o secventa de instructiuni delimitata de
cuvintele rezervate BEGIN, END.
Format :
BEGIN lista-instr END;
Efectul executiei instructiunii IF:
Se evalueaza conditia specificata.
Instructiuni pentru realizarea structurilor repetitive
Instructiunea WHILE realizeaza structura repetitiva conditionata
anterior.
Format:
WHILE conditie DO instructiune; este echivalenta cu o
constructie formata din urmatoarele instructiuni:
IF conditie THEN
BEGIN
instructiune
GOTO 1
end.
Instructiunea WHILE se mai numeste instructiune cu test initial.

36

Instructiunea Repeat
Realizeaza structura repetitiva conditionata posterior.
Format:
REPEAT instructiune UNTIL conditie ;
REPEAT
instructiune
UNTIL
conditie;
Ca i ELSE, inainte de UNTIL mi se pune `;`.
Instructiunea FOR ( ciclu cu contor )
Realizeaza structura repetitiva cu numarator ( contor de numarare ).
Format:
1) FOR contor:=val initiala TO val finala
DO instructiunea;
2) FOR contor:=val initiala DOWNTO val finala
DO instructiunea

Instructiuni de citire i scriere a datelor


n pascal, citirea i scrierea nu se realizeaza prin instructiuni, ci prin
proceduri specializate n acest sens, proceduri standard ale limbajului.
Aceste fiiere n Turbo Pascal sunt asociate tastaturii i respectiv
ecranului.
Fisierele INPUT i OUTPUT conin excusiv iruri de caractere
organizate pe linii. Liniile sunt ncheiate de caracterul special standard EOL
introdus automat la apasarea tastei ENTER.
Citirea datelor din fiierul INPUT
Exist doua proceduri standard predefinite n Pascal:
-Read
-Readln
Procedura READ
Format:
READ ( variabila{,variabila});
- variabilele pot fi doar de tip CHAR, INTEGER, REAL sau
STRING.
Procedura READLN
Format:
READLN ( variabila{,variabila});
Scrierea datelor:
-Write
-Writeln
37

Instruciuni de selectie multipl ( CASE )


Format:
CASE expresie OF
lista etichete CASE:instructiune;
END;
Structura de tablou (Vector, Matrice): structura de tablou n Pascal
este mai flexibil dect n alte limbaje de programare, fiind rezultatul
compunerii a dou tipuri:
- tipul de baza al tabloului
- tipul de indexare al tabloului

Setul de caractere : Acestea sunt entiti formate din caractere :


Literele mari i mici ale alfabetului limbii romne: A-Z, a-z;
Cifrele sistemului de numerotaie zecimal: 0-9;
Caractere speciale: =-/^(){}[].,;:_!@#$%&etc;
Caractere speciale perechi: <=,>=,=,<>;
Separatorii : spaiu, tab, Enter.

Identificatorii : Pot fi o variabil, o contant, un tip definit de


utilizator, o enumerare, o procedur, o funcie, un obiect, o metod, o
proprietate, un control, o form, un modul sau chiar proiectul nsui. Un
proiect Basic poate s conin maxim 32000 identificatori.
Comentariile sunt iruri de caractere care au n fa caracterul apostrof () i
servesc pentru a face mai lizibil textul programului , pntru a documenta
programul.
Fiecare tip de dat permite o serie de operaii. Astfel pentru valorile
unui tip ntreg se pot face urmtoarele operaii : +, -, *, mprirea ntreag,
mprtirea real, restul mpririi ntregi, ridicarea la putere.
Constantele : reprezint o valoare fix care nu se schimb n timpul
execuiei programului sau de la o execuie la alta. Pot fi de 2 tipuri :
intrinseci i simbolice.
Variabilele : reprezint o locaie de memorie intern care servete
pentru stocarea temporar a datelor i care se identific printr-un nume.
Tipul variabilelor din Basic sunt : variant, byte, boolean, integer, long,
single, double, currency, date i object.
Variabilele din Basic sunt caracterizate prin :
- nume

38

- tip de data
- domeniu.
Utilizatorul poate defini n cadrul modulului su i tipuri de date
proprii, deci tipuri de date predefinite. Pentru aceasta, declaraia de tip se
face de ctre programatori n prima parte a modului de cod cu ajutorul
instruciunii :

TYPE definire variabil

END TYPE
Operatorii : Reprezint comenzi speciale pentru operaiile ce pot fi executate
cu datele din program. Basic pune la dispoziie 4 tipuri de operatori :
aritmetici, logici, de comparare i de concatenare.
O funcie este o procedur care efectueaz o anumit sarcin ntr-un
program.
1.
Dialogul standard cu utilizatorul
Funcia INPUT- apelul funciei INPUT permite preluarea de date de la
tastatur.
2.
Funcii matematice i statistice : ABS, EXP, INT, LOG, RND,
SQR, ATN, SIN, COS, TAN ;
3.
Funcii pentru iruri de caractere : LCASE$, UCASE$,
LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$,
INSTR,
4.
Funcii pentru conversia ntregilor : INT, CINT ;
5.
Funcii pentru conversia tipului de dat : CDBL, CLNG.
6.
Funcii pentru lucrul cu date calendaristice : TIME$, DATE$ ;
O procedur este o secven de instruciuni executate ca un tot unitar
sau partajabile. Exist trei tipuri de proceduri : SUB, FUNCTION, Tip de
proprietate. Sintaxa general a unei proceduri este : Private/Public/Static/Sub
.
End Sub.
Instruciuni de atribuire atribuirea se poate efectua prin
instruciunile :
Let - pentru valori atribuite variabilelor i proprietilor ;
Set pentru atribuirea de obiecte la o variabil de tip obiect ;
Lset i Rset pentru atribuiri speciale de iruri sau tipuri
definite de utilizator

39

Terminarea execuiei unui program sau oprirea temporar a acestuia


sepot realiza prin instruciunile : DoEvents, End, Exit, Stop.
Se tie c n cadrul algoritmilor de rezolvare a problemelor se
ntlnesc, n afara unor secvene de operaii care se execut liniar, n mod
necondiionat, o serie de operaii care necesit testarea unor condiii, funcie
de care se o succesiune de operaii sau alta, sau o serie de operaii care se
execut n mod repetat. Avem de a face cu cele trei tipuri de structuri
fundamentale :
- secvenial /liniar ;
- alternativ/de decizie ;
- repetitiv.
Limbajul de programare Basic implementeaz aceste structuri de
control ale programului prin comenzi corespunztoare, deci :
- comenzi pentru structuri alternative ;
- comenzi pentru structuri repetitive.
Comenzile pentru structurile alternative : If. Then, IfThenElse,
Select Case.
Comenzile pentru structurile repetitive : WhileWend, Do.Loop,
For.Next, For Each Next.
Fiierele conin colecii de date omogene ca natur i criterii de prelucrare,
memorate pe discul magnetic .
CAPITOLUL 9
Algoritmi speciali
1. Sortarea unui vector
Prin sortare se nelege aranjarea elemntelor unei mulimi , n ordine
cresctoare/descresctoare a valorilor acestora. Exist mai multe variante de
sortare : sortarea prin interschimbare, prin selecie, prin inserie,
2. Interclasarea a doi vectori de dimensiuni variabile.
Prin interclasare se nelege procesul de obinere din dou sau mai
multe mulimi ordonate, o nou mulime, ordonat dup acelai criteriu.
Exist mai multe variante de interclasare :
1. Varianta 1 :

40

Presupune compararea a dou elemente , cte unul din fiecare vector


iniial, cu scrierea celui mai mic dintre ele n vectorul rezultant i trecerea la
urmtorul element al vectorului iniial din care s-a preluat.
2. Varianta 2 :
Presupune obinerea vectorului rezultant ntr-un proces unic de comparare.
Pentru a continua procesul n cazul n care se epuizeaz unul din vectorii
iniiali, ultimul element al acestuia va primi o valoare mai mare dect oricare
din valorile regsite, de regul, n vectorii iniiali.Aceast valoare poart
denumirea HIGH-VALUE (HV) . Procesul se ncheie cnd ambii vectori
iniiali au fost parcuri integral, deci elementele finale au valoarea HV.
CAPITOLUL 10
Tehnici de programare
1. Programarea modular. Tabele de decizie
Programarea modular are ca obiectiv reducerea empirismului
artizanal folosit n elaborarea programelor i instaurarea principiilor
ingineriei programrii, viznd obinerea unor programe corecte i fiabile,
reducerea costului elaborrii, documentrii, testrii, ntreinerii i
dezvoltrii produselor software.
Modularizarea programelor.
Algoritmii de rezolvare a problemelor complexe se ntocmesc i/sau
pot fi descompui n manier sistematic, dup criteriul funcional, n
mod ierarhic, pn la nivel de subalgoritm/funcie elementar, ca element
terminal n structura unitii funcionale(UF).
Un modul funcional se caracterizeaz prin :
Nume extern i/sau intern;
Funcie logic perfect definit;
Punct de intrare i punct de ieire unice;
Relaia cu modulele din aval i amonte-interfat;
Posibilitatea elaborrii i testrii independente (n cadrul
contextului su);
41

Tipuri de module funcionale :


Module directoare sau de comand sau monitoare;
Module de prelucrare sau module-funcie;
Module mixte;
Module comune;
Module speciale;
Module nefuncionale;
Module monitor.
2 Monitorizarea modulelor.
Tipul de monitorizare poate varia n limite relativ largi, n funcie de
filozofia de realizare a sistemului, de facilitile de utilizare puse la
dispoziia beneficiarului su i de deciziile de proiectare adoptate,
astfel :
Monitoare pure
Monitoare complexe
Monitoare foarte complexe.
3. Interconectarea modulelor.
n mod ideal , modulele trebuie s fie ct mai independente pentru a
reduce gradul de cuplare a acestora. Gradul de interconectare poate fi :
Minimal
Normal;
Coeziunea modulelor.
Se disting mai multe nivele de coeziune :
ntmpltoare
Logic
Temporal
Procedural
Comunicaional
Secvenial
Functional.
.4. Tehnici de modularizare

42

Construirea unor programe modularizate implic utilizarea unor


tehnici i procedee foarte diversificate :
Utilizarea tabelelor de decizie i a diagramelor de optimizare
Utilizarea parametrilor simbolici
Asigurarea i definirea centralizat i standardizat a parametrilor
statici, a datelor comune, a tabelelor de decizie, a listelor.
Separarea funciilor de intrare/ieire
Evitarea reutilizrii zonelor de memorare temporar intermodule
Nealterarea valorii constantelor.
5. Tabele de decizie (TD)
Tabele de decizie reprezint un procedeu de reprezentare
a
algoritmilor cu numr mare de decizii bazate pe condiii complexe sau
dinamice, fiind astfel un mijloc eficient de modularizare. TD conin dou
tipuri d intrri :
Condiii elementare simple sau compuse aplicate unor variabile cu
valori alternatil-exclusive de tip alfanumeric sau logic;
Condiii compuse aplicate asupra condiiilor elementare prin conjuncie.

CAPITOLUL 11
Tehnici de programare structurat

Cele mai utilizate tehnici de programare structurat sunt :


Recursivitatea ;
Metoda Backtracking;
Metoda Divide et impera;
Metoda Greedy;
Metoda Branch and Bound;
Metode euristice;
Metoda programrii liniare;
Metoda programrii dinamice.

43

1. Recursivitatea
Este o tehnic de programare utilizat frecvent , n implementarea
funciilor i procedurilor . La baza recursivitii st stiva, care este gestionat
n mod implicit, n aceast zon de memorie salvndu-se automat, la fiecare
la fiecare apel de funcieurmtoarele informaii :
Valorile parametrilor de tip valoare;
Adresele parametrilor de tip variabil;
Variabilele locale ale subprogramului;
Adresa de ntoarcere la instruciunea aflat dup instruciunea de apel.
2. Tehnica Backtracking

Aceast tehnic se folosete n rezolvarea unor probleme cum ar fi :


Generarea permutrilor de n elemente;
Generarea aranjamentelor;
Generarea combinrilor;
Generarea partiiilor unei mulimi;
Problema celor N dame;
Produsul cartezian a N mulimi;
Problema Comis-voiajorului;
Problema plii unei sume S utiliznd N tipuri de monede;

3. Metoda Divide et Impera


Exemple de probleme rezolvate cu aceast metod : cutare binr.
4. Metoda Greedy
Caracteristicile acestei metode sunt :
La intrare avem o mulime A cu N elemente
Se cere selectarea unei submulimi B a lui A sau o ordine de
prelucrare a elementelor lui A care s optimizeze o funcie obiectiv dat . Se
cere deci o singur soluie.
Elementele mulimii A se parcurg pe rnd, dup o eventual rearanjare a lor,
n vederea testrii lor pentru adugarea acestora la B.

44

CAPITOLUL 12
Probleme
Problema nr. 1
Sa se prezinte sub forma de chema logic i instruciunea unui limbaj de
programare sau pseudocod un algoritm eficient care s determine pentru o
matrice de n linii i m coloane a crei elemente se citesc de la tastatur
urmtoarele:
a) media aritmetic a elementelor de pe fiecare linie
b) media aritmetica a elementelor de pe fiecare coloan
c) valoarea elem. maxim i locul n care acesta se afl de pe fiecare linie
d) valoarea elem. maxim i locul n care acesta se afl de pe fiecare
coloan
e) valoarea elem. minim i locul n care acesta se afl de pe fiecare linie
f) valoarea elem. minim i locul n care acesta se afl de pe fiecare
coloan
g) elementul maxim la nivel de matrice
h) elementul minim la nivel de matrice
program matricea_de_la_curs;
type matrice=array[1..20,1..20] of integer;
var a:matrice;
max,max2,min,min2,w,z,i,p,maa,m,n,d,e,f,g,minn,maxx,j,s,ma,x,y:integer;
begin
writeln('dati nr de linii i nr de coloane');
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n do
45

for j:=1 to m do
begin
writeln('a[',i,',',j,']=');
read(a[i,j]);
end;
a) for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
ma:=(s div m);
writeln('media aritmetica pe linia ',i ,'=',ma);
readln;
end;
b) for j:=1 to m do
begin
p:=0;
for i:=1 to n do
p:=p+a[i,j];
maa:=(p div n);
writeln('media aritmetica pe coloana ',j,'= ',maa);
readln;
end;
c) for i:=1 to n do
begin
max:=-3200;
for j:=1 to m do
if a[i,j]>max then
begin
max:=a[i,j];
x:=j;
end;
writeln('maximul liniei ',i,' este elementul a[',i,',',x,'] i este egal cu ',max);
readln;
end;
d) for j:=1 to m do
begin
max2:=-3200;
for i:=1 to n do
if a[i,j]>max2 then
46

begin
max2:=a[i,j];
y:=i;
end;
writeln('maximul coloanei ',j,' este elementul a[',y,',',j,'] i este egal cu
',max2);
readln;
end;
e) for i:=1 to n do
begin
min:=3200;
for j:=1 to m do
if a[i,j]<min then
begin
min:=a[i,j];
w:=j;
end;
writeln('minimul liniei ',i,' este elementul a[',i,',',w,'] i este egal cu ',min);
readln;
end;
f) for j:=1 to m do
begin
min2:=3200;
for i:=1 to n do
if a[i,j]<min2 then
begin
min2:=a[i,j];
z:=i;
end;
writeln('minimul coloanei ',j,' este elementul a[',z,',',j,'] i este egal cu
',min2);
readln;
end;
g) maxx:=-3200;
minn:=3200;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>maxx then
begin
maxx:=a[i,j];
47

d:=i;
e:=j;
end;
h) for i:=1 to n do
for j:=1 to m do
if a[i,j]<minn then
begin
minn:=a[i,j];
f:=i;
g:=j;
end;
writeln('elementul maxim al matricei este a[',d,',',e,']=',maxx);
writeln('elementul minim al matricei este a[',f,',',g,']=',minn);
readln;
end.

SCHEMA LOGIC:

48

49

50

51

52

Problema nr. 2
Se d un vector cu n elemente numere ntregi. S se mute la sfritul
vectorului elementele sale nule pstrnd ordinea celorlalte elemente.
program ddd;
type vector=array[1..20] of integer;
var v:vector;
n,i,j,k:integer;
begin
write('dati numarul de elemente');
readln(n);
for i:=1 to n do
begin
write('v[',i,']=');
readln(v[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if v[i]=0 then
begin
k:=v[i];
v[i]:=v[j];
v[j]:=k;
end;
for i:=1 to n do
writeln('v[',i,']=',v[i]);
readln;
end.

53

SCHEMA LOGIC:

54

Problema nr. 3
S se realizeze un program pentru evaluarea expresiei:
A +B, dac C0
E=
A-B, dac C<0
Analiznd problema dat, se observ c datele de intrare sunt A, B i
C. Algoritmul va testa pe C, i, n funcie de valoarea sa, va calcula pe E fie
ca A+B, fie ca A-B.
program prg2_pagina_187;
var a,b,c:integer;
e:real;
begin
write('Introduceti valoarea pentru a= ');read(a);
write('Introduceti valoarea pentru b= ');read(b);
write('Introduceti valoarea pentru c= ');read(c);
e:=0;
if (c<0) then e:=(a*a)-b
else
if (c=0) then e:=sqrt((a*a)-b)
else e:=(1/(a*a))-b;
write('E:= ',e:8:2);
readln;
end.

55

SCHEMA LOGIC:

56

Problema nr. 4
Sa se verifice dac 2 numere sunt prietene
Doua numere sunt prieten dac primul numar este = cu suma divizorilor
celui de-al doilea mai putin el insusi i cel de-al doilea este egal cu suma
divizorilor primului numar mai putin el insusi
n=220 1+2+4+5+10+11+20+22+44+55+110
m=284 1+2+4+71+142
s1 = suma divizorilor lui n mai putin el insusi
s2 = suma divizorilor lui m mai putin el insusi
n i m prietene dac s1=m i s2=n
program lalala;
var m,n,s1,s2,i:integer;
begin
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n-1 do
if n mod i=0 then s1:=s1+i;
for i:=1 to m-1 do
if m mod i=0 then s2:=s2+i;
if (s1=m) and (s2=n) then writeln('aceste doua numere sunt prietene')
else writeln('din pacate nu sunt prietene');
readln;
end.

57

SCHEMA LOGIC:

58

Probleme de logic:
Problema nr. 5:
n aceast var, btrnul Tric a murit, lsnd proprietile sale ca motenire
nepotului su Andi, prietenul meu. El a motenit i castelul Towertia, bntuit
de fantome. ncepnd cu ora 12 noaptea pn dimineaa se aud n tot castelul
dou zgomote descifrabile: un cntat duios la vioar i un rs puternic. Andi
a observat anumite obiceiuri:
- cnd el cnt la pian i fantoma nu rde, fantoma care cnt la
vioara i schimb activitatea (dac cnta-tace, dac tcea-cnt);
altfel ea face n fiecare minut ce fcea n cel precedent;
- cnd fereastra este nchis fantoma care rde face ce fcea cealalt
fantom n minutul precedent (rde dac cealalt cnt, tace dac
cealalt tcea);
- cnd fereastra este deschis, fantoma care rde face opusul la ceea
ce cealalt fcea n minutul precedent.
Andi vrea s tie cum s scape de fantome (s le fac s tac)!
Rezolvare:
- 3: cnd fereastra este deschis, fantoma care rde face opusul la
ceea ce cealalt fcea n minutul precedent.
- 1: cnd el cnt la pian i fantoma nu rde, fantoma care cnt la
vioara i schimb activitatea (dac cnta-tace, dac tcea-cnt);
altfel ea face n fiecare minut ce fcea n cel precedent;
- 2: cnd fereastra este nchis fantoma care rde face ce fcea
cealalt fantom n minutul precedent (rde dac cealalt cnt,
tace dac cealalt tcea)

Problema nr. 6
Duminic, Marius i Radu au fost s vad la hipodrom cursa de cai. Mai
nti s-au dus s vad caii. Au fcut pariuri pe primele cinci locuri.
Radu a crezut astfel:
59

1) Doodoo; 2) Azur; 3) Elfy; 4)Candy; 5) Emily.


Marius a pariat astfel:
1) Azur; 2) Emily; 3)Candy; 4)Doodoo; 5) Elfy
Rezultatele au artat c nici unul nu a ctigat:
1)Marius nu a ghicit locul nici unui cal
2)Marius nu a ghicit nici mcar ordinea a cte doi cai unul dup altul
Radu a fost mai aproape de realitate:
3)A ghicit locurile a doi cai;
4)A ghicit ordinea finala a dou perechi de cai unul dup altul.
Care a fost rezultatul ?
Radu
Marius

1
Doodoo
Azur

2
Azur
Emily

3
Elfy
Candy

4
Candy
Doodoo

5
Emily
Elfy

Urmrind tabelul de mai sus putem afirma c:


Pe locul I nu va fi Doodoo sau Azur
Pe locul II nu va fi Emily
Pe locul III nu va fi Candy
Pe locul IV nu va fi Doodoo
Pe locul V nu va fi Elfy
Deci Doodoo poate fi pe locurile II sau V.
Ordinea este:
1
Elfy

2
Doodoo

3
Azur

4
Candy

5
Emily

Problema nr. 7
Un batranel se duce la pia (mai bine statea acasa) s vnd nite ou. Un
tnr neatent l-a mbrncit i coul a czut sprgnd oule. vinovatul vrnd
s i rscumpere greeala l-a ntrebat :
60

-Cte ou au fost n co?


-Nu-mi aduc aminte, dar tiu c dac le scoteam cte 2,cte 3,cte 4,cte 5
sau cte 6, n co rmnea mereu un singur ou, iar dac le scoteam cte 7 ,
nu rmnea nici unul.
Dup cteva minute de gndire, tnrul a calculat cte ou erau.
Tu poi gsi numrul de ou din co?
Rezolvare:
- batrnelul spune c dac scotea oule cte 7 nu mai rmnea nici
un ou un co de unde tragem concluzia c numrul oulor trebuie
s fie un multiplu de 7
- mai spune c dac le scotea cte 2,cte 3,cte 4,cte 5 sau cte 6, n
co rmnea mereu un singur ou de unde rezult c din numrul
care este multiplu de 7 dac scadem 1 trebuie s rmn un numr
care s fie divizibil i cu 2 i cu 3 i cu 4 i cu 5 i cu 6
- deci cutm un numr care s aibe ultima cifr 1 sau 6
- astfel 7, 14 sunt excluse
- incercm 21:7=3
21-1=20:2=10
20:3 nu este divizibil
- cutm n continuare...
- 28, 35, 42, 49 sunt excluse
- verificm 56:7=8
56-1=55:2 nu este divizibil
- 63, 70, 77, 84 sunt excluse
- continum cu 91:7=13
91-1=90:2=45
:3=30
:4=25
:5=18
:6=15
Rezult c btrnelul avea n co exact 91 de ou.

61

Bibliografie

Manual Algoritmi i structuri de date: fundamente ale


programrii structurate / Cezar Botezatu Bucureti :
Editura Universitar, 2004

62

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