Sunteți pe pagina 1din 62

Universitatea Romano-American

Facultatea de Informatic Managerial

Algoritmi
Si structuri de date
-conspect -

Student: Ciurescu Raul-Cristian


Grupa: 602
Anul: I

referat.clopotel.roreferat.clopotel.ro

CUPRINS
1. Sistem Informational 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:

Semiotica se ocup cu studiul semnelor in natura si in societate.


Semnul nu este o calitate in sine a unui obiect, ci o functie 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 in 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.
Stiinta este bogat in semne indiciale, inevitabile, atat in procesele de
generalizare cat si in cele de demonstrare, dar metoda modelarii promoveaz
cu deosebita putere in 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 in telegrafie, sistemele de
semne utilizate de diferite stiinte ( 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 in dezvoltarea semioticii
este constituita de distinctiile dintre:
Sintaxa studiul relatiilor dintre semnele unui sistem semiotic;
Semantica studiul relatiilor dintre semne si obiectele pe care ele le
desemneaza;
Pragmatica studiul relatiilor dintre semne si cei care le interpreteaza
si le folosesc.
Statutul pragmaticii este inca foarte controversat, mai ales in legatura cu
limbajele de programare a calculatoarelor electronice, si cu evolutia
acestora.
Cele 6 functii ale procesului de comunicare codificata sunt:
Emotiv;
Conativ;
Referential;
Fatic ( de centrare asupra canalului );
Metalingvistic ( de centrare asupra codului );
Poetic.

Superioritatea calitativ a vorbelor fata de semnale provine din


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

elementele de executie si elementele decizionale pentru conducere si


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

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


constituita din totalitatea mijloacelor tehnice de culegere,
transmitere, stocare si prelucrare a datelor, in care locul central
revine calculatorului electronic.
b. Sistemul de program sau software-ul sistemului, ce cuprinde
totalitatea programelor pentru functionarea sistemului informatic, in
concordanta cu functiunile si obiectivele ce au fost stabilite.
c. Baz stiintifico-metodologica, care este constituita din modele
matematice ale proceselor si fenomenelor economice, metodologii,
metode si tehnici de realizare a sistemelor informatice.
d. Baz informationala cuprinde datele suspuse prelucrarii, fluxurile
informationale, sistemele si nomenclatoarele de coduri.
e. Resursele umane si cadrul organizatoric, care cuprinde personalul
de specialitate si cadrul necesar functionarii sistemului informatic.
Obiectivele sistemului informatic
Obiectivele sistemului informatic pot fi clasificate dupa mai multe criterii
astfel:
A. In functie de sfera de cuprindere pot fi: principale ( generale ) si
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
si reducerea duratei ciclului de fabricatie;
- cresterea volumului productiei;
- reducerea consumurilor specifice de materii prime si materiale
- reducerea personalului administrativ functionaresc;
- cresterea gradului de utilizare a capacitatii de cazare;
- sporirea volumului incasarilor din cativitati de prestari servicii;
- cresterea profitului si a rentabilitatii etc.
b. obiectivele ce afecteaza functionarea sistemului informational cum
ar fi:
- cresterea vitezei de raspuns a sistemului la solicitarile
beneficiarilor;

- cresterea exactitatii si preciziei in procesul de prelucrare a


datelor si 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 in mod direct
indicatorii cuantificabili.
Clasificarea sistemelor informatice
Sistemele informatice se clasifica dupa mai multe criterii:
A. In functie de domeniul de utilizare, acestea se clasifica in 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, si
proiectare, care asigura atutomatizarea calculelor tehnico-ingineresti.
d. sistemele informatice speciale, care sunt destinate unor domenii
specifice de activitate, ca de exemplu: informare si documentare tehnicostiintifica, medicina, etc.

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


nivelul ierarhic ocupat de sistemul economic in structura organizatorica a
societatii, conform caruia avem urmatoarea clasificare:
a. sisteme informatice pentru conducerea activitatii la nivelul unitatilor
economie. Acestea pot fi descompuse in 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 si servesc la fundamentarea deciziilor adoptate de
catre organele locale de conducere;
d. sistemele informatice pentru conducerea ramurilor, subramurilor si
activitatilor la nivelul economiei nationale.
Se constituie la nivelul ramurilor, subramurilor si activitatilor individualizate
in virtutea diviziunii sociale a muncii si specificate in clasificarea ramurilor
economiei nationale. Principala lor functiune consta in fundamentarea si
reglarea echilibrului dezvoltarii economico-sociale in profil de ramura.
e. sistemele informatice functionale generale au ca atribut principal faptul
ca intersecteaza toate ramurile si activitatiile ce au loc in spatiul economiei
nationale, furnizand informatiile necesare coordonarii de ansamblu si
sincronizarilor in procesul reproductiei din cadrul economiei de piata.
C. In functie de modul de organizare a datelor in cadrul sistemelor
informatice acestea pot fi:
a. sisteme informatice cu organizarea datelor in 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 in baze de date. Aceasta
categorie de sisteme prezinta o tendinta de extindere si dezvoltare.
De la baze de date cu structuri arborescente si retea, s-a trecut la
baze de date rationale.

Sistemul informatic instrument al conducerii moderne


Obtinerea de catre agentii economici si 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 in
conducerea stiintifica a activitatii economice.
Proiectarea la nivel micro si macroeconomic a unor sisteme informatice
care sa utilizeze tehnica bazelor de date si 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 si prelucrare a datelor.
Stadiul actual si tendintele dezvoltarii sistemelor informatice
In ultimii ani asistam la una dintre cele mai importante transformari din
istorie ale infrastructurii tehnologice a societatii. Aceasta schimbare consta
defapt in adaugarea unui nou substrat in infrastructura tehnologica, substrat
care este uzual denumit tehnologia informatiei. In acest nou substrat se
evidentiaza in mod decisiv informatica. Aceasta extindere este pe cale de a
produce o schimbare majora in societatea noastra si anume, trecerea de la
orientarea industriala, in care accentul se pune pe masina si energie, la o
noua orientare informationala in care accentul este pus pe robot si
informatie. Masina si energia vor juca un rol important, fundamental in
societatea informationala, dar pentru noile masini, pentru noile industrii, ca
si pentru celelalte activitati ale omului devin esentiale tehnologiile
informatice care au la baz electronica, informatica, si comunicatiile
moderne.
Informatizarea activitatilor economico-sociale a cunoscut profunde
transformari precum:
a. Se manifesta in 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. In
prezent se manifesta o tendinta clara in dezvoltarea sistemelor
informatice bazate tot mai mult pe platformele software la nivel
inalt. O platforma software corespunde unei platforme de aplicatii si
contine functii software de baz si functii specifice aplicatiei
companiei.
b. Se manifesta o intensa tendinta spre tehnologia sistemelor
informatice bazate pe retele de calculatoare. Cresterea complexitatii,
9

varietatii aplicatiilor si aparitia de noi produse informatice cu un


raport pret / performanta din ce in ce mai avantajos au facut necesara
si rentabila conectarea intre ele a calculatoarelor in cadrul unor retele
care constituie la ora actuala suportul cel mai adecvat pentru
teleinformatica.
c. In domeniul organizarii datelor, se manifesta tendinta spre baze de
date orientate obiect.
Structurile clasice de date bazate pe text si valori numerice fie se dovedesc
insuficiente, fie complexitatea lor depaseste posibilitatiile de stocare si
prelucrare oferite de tehnologiile clasice. Aplicatiile asociate cu disciplinele
tehnologice cum ar fi : proiectarea asistata pe calculator, sistemele
informatice geografice si 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 si modificate astfel incat sa permita elaborarea unor variante de
proiect. Bazele de date clasice sau relationale ofera prea putin suport teoretic
si practic pentru tipurile neconventionale de date.
d. Se manifesta tendinta catre sisteme deschise.
Apreciem ca in prezent domeniul informaticii se caracterizeaza prin cel mai
pronuntat dinamism. Se asista la o proliferare de produse hardware si
software, apar de la o zi la alta noi versiuni si noi produse.
Faptul ca un sistem este deschis, nu implica si nu impune nici o
implementare practica de sistem, tehnologie sau mijloc de interconectare,
termenul de sistem deschis se refer doar la recunoasterea reciproca si
aplicabilitatea acelorasi standarde.
Astfel de standarde au cel putin urmatoarele efecte mai importante:
Producatorii se simt incurajati sa le implementeze deoarece, avand in
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, atat a datelor cat si a produselor software;
Faciliteaza insusirea teoretica si practica a hardware-ului si 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

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


dimensiuni mari.
Aceste preocupari s-au materializat atat in plan practic, prin realizarea unor
sisteme mari cat si in 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 in 1983 si 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 in acelasi timp
evaluarea standardelor existente.
Conceptul de sistem deschis in viziunea ISO denota capabilitatea
oricaror 2 sisteme, omogene sau neomogene care respecta modelul de
referinta si standardele corespunzatoare de a putea fi interconectate. De
asemenea a fost adoptat teoretic si practic si 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. In
acest sens amintim arhitectura propusa de CODASYL si 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 si
facilitatiile ce le ofera.
CAPITOLUL 2
Structuri de date
Prelucrarea automata a datelor necesita, pe langa activitatiile legate de
formularea problemei, de analiza acesteia in vederea gasirii algoritmului de
rezolvare si o alta activitate deosebit de importanta, legata de organizarea
datelor.
Organizarea datelor este un proces care cuprinde urmatoarele activitati:
- identificarea datelor;
- clasificarea si descrierea propietatiilor, a caracteristicilor
datelor;

11

- gruparea datelor in colectii de date destinate prelucrarii


automate;
- reprezentarea externa pe suporturi tehnice;
- identificarea, definirea si descrierea procedurilor de prelucrare
automata.
Eficienta prelucrarii automate a datelor, succesul acesteia depind in mare
masura, de organizarea interna si externa a datelor, de stabilirea unor
structuri de date care sa corespunda cerintelor de prelucrare.
Concepte de baz
Odata cu aparitia bazelor de date, in terminologia curenta au fost
introduse si utilizare 3 concepte de baz in organizarea datelor, si anume:
entitate, atribut si 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.
In exemplul nostru, entitatea grup se poate numi STUDENTI.
Notiunea de atribut este cunoscuta si sub numele de camp sau
caracteristica.
Notiunea de data
In informatica prin data, se intelege un model de reprezentare a informatiilor
despre obiectele supuse prelucrarii automate, accesibil atat utilizatorului cat
si componentelor calculatorului.

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


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 si se descriu anumite relatii.
Componentele unei structuri se pot identifica si selecta prin numele de
identificare sau prin pozitia pe care o ocup in cadrul structurii, potrivit
relatiei de ordine stabilita.
Dupa tipul componentelor, structurile de date se pot grupa in:
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 in structuri de
acelasi tip, atunci structura respectiva este recursiva.
In mod corespunzator, structurile de date vor putea fi:
structuri de date interne , avand caracter temporar, deoarece sunt
realizate in 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 in momentul compilarii
programului si ramane aceasi pe toata durata de executie a
programului respectiv;
structuri de date dinamice, la care alocarea zonelor de memorie se
face numai in 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 relatii care duc la un anumit mecanism de selectie
si identificare a datelor.
Aceste relatii 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 relatii si 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 in 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 relatii 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, si respectiv
subarbore drept, functie de pozitia relativa a acestora fata de elementul
respectiv.
Astfel pentru arborii binari s-au identificat si s-au descris 3 modalitati de
parcurgere a elementelor arborelui denumite:
- parcurgere in preordine
- parcurgere in inordine
- parcurgere in 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 in retea cicluri. Un ciclu se
defineste atunci cand nodul initial este acelasi cu nodul final;
- intre elementele structurii de tip retea se regasesc relatii de tip m la n.
15

Structura relationara este formata din mai multe tabele de date


elementare, numite tablori sau relatii, obtinute prin metoda normalizarii,
pentru a asigura conditiile de integritate si unicitate a datelor si 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 si 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 in interdependenta,
memorata pe suport impreuna cu descrierea datelor si a relatiilor dintre ele.
Banca de date reprezint un sistem de organizare si 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 in 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

In 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 in 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 in mod unic
printr-un identificator sau nume asociat.
Fisierul de date este format din articole sau inregistrari logice care descriu
aceleasi entitati si formeaza o colectie de date omogene din punct de vedere
al semnificatiei si al cerintelor de prelucrare.
Metodele de organizare a fisierelor definesc regulile care stau la baz
constituirii articolelor in fisiere si se stabilesc la operatia de creare a
fisierelor. Astfel fisierele pot avea:
Organizare secventiala care memoreaza articolele de date secvential in
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 si apoi identificarea
articolelor printr-o cheie care poate fi un camp de date, sau nu, dar a
carei valoare se asociaza fiecarui articol in parte.
Metodele de acces la articolele unui fisier stabilesc modalitatile prin care
se localizeaza un articol in 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 si constructii noi, modalitati noi de structurare a datelor,
de tratare a colectiilor de date si programare.
La programarea orientata spre obiecte procedurile de prelucrare si
datele sunt incapsulate in obiecte, asupra carora se aplica mesaje care
modeleaza comportamentul sistemului.
Date si expresii
Asupra datelor elementare sau memorate in structuri de date statice sau
dinamice, interne sau externe, in cadrul prelucrarii atutomate, se pot aplica
diferiti operatori, rezultand astfel constructii sintactice denumite expresii.
Expresiile sunt deci grupuri alcatuite din operanzi si operatori. Din evaluarea
unei expresii rezult o valoare, care reprezint rezultatul ei.
Operatorii pot fi grupati in:
- operatori aritmetici
- operatori logici
- operatori de comparare
- operatori pe siruri de caractere
Toate limbajele de programare permit implementarea acestor tipuri de
operatori si constructia unor tipuri de expresii corespunzatoare.
In 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 si schimbarea ordinii normale de executie a
acestora.
Este permisa includerea unor paranteze in altele, ordinea de desfacere a
acestora fiind dinspre interior spre exterior.
CAPITOLUL 3
Grafuri
Definitii, tipuri
Notiunile de algoritm si schema logica pot fi definite, explicate si mai ales
foarte des utilizate in legatura cu elemente de teoria grafurilor.
18

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


multime finita si 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],...,[in-1,in], notata prescurtat prin [i1,i2,...in]
Un lant in 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 in faptul ca elementele lui U sunt perechi
ordonate de varfuri numite arce. In cazul grafurilor orientate, notiunile de
lant si ciclu isi au corespondent in notiunile de drum si 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 si nu contine cicluri;
3. G are n-1 muchii si este conex;
4. Orice doua varfuri din G sunt unite printr-un unic lant.
Se numeste arbore binar un arbore orientat, in care fiecare varf are
cel mult doi descendenti, facandu-se insa distinctia intre descendetul stang si
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 in


activitatea de programare a calculatoarelor electronice.
Programarea este practic activitatea prin care se concepe si se realizeaza
programul pentru rezolvarea unei probleme, cu ajutorul calculatorului
electronic.
Un program reprezint o succesiune de instructiuni si 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 in cadrul
acestea etapele:
- formularea problemei
- elaborarea, identificarea si descrierea algoritmului de rezolvare
- scrierea programului
- programul trebuie sa fie bun, simplu si eficient.
- testarea programului
- realizarea, completarea si 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 secvential sau liniar desemneaz una sau mai multe
operatii ce se execut una dup cealalt, in mod liniar (secvential).
Structura alternativdesemneaz executia unei secvente de operatii S1 sau a
alteia S2, in functie de indeplinirea sau nu a unei conditii.
Structurile alternative sunt de mai multe tipuri:

Structura IF THEN ELSE, selecteaz succesiunea operatiilor ce


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

23

Blocul are deci o intrare si dou iesiri, corespunztoare celor dou


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

Structura IF THEN numit si selectia simpl, este practic o form


particular a selectiei IF THEN ELSE, in care blocul de pe ramura Nu
este vid.

In mod asemntor se poate construi si selectia IF ELSE, cu


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

Practic, in ambele forme particulare, se testeaz conditia logic si se


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

Structura CASE OF selecteazuna dintre mai multe ramuri, in


functie de valoarea unui selector. De aceea structura de acest tip se mai
numeste selectie multipl.
Structura repetitiv sau iteratia indic repetarea unei operatii sau
secvente de operatii S, atata timp cat este indeplinit o anumit conditie.
In functie de momentul in care se face testarea conditiei specificate,
structurile repetitive sunt de mai multe tipuri:

Conditia poate fi testat anterior executiei secventei de comenzi S si


atunci avem o structur de tip WHILE DO

24

Conditia se testeaz posterior executiei secventei de comenzi S si


atunci avem o structur de tip DO UNTIL

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


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

fr numrtor, cci nu se cunoaste de la inceput numrul de reluri.


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

cu numrtor, atunci cand se stie sau se poate calcula automat


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

25

Pentru a evita ciclarea la infinit a structurilor repetitive, programatorul


trebuie s aigure negarea conditiei pentru a permite iesirea din structurile
WHILE DO si DO UNTIL.
Se observ c diferenta esential intre cele dou structuri const in
faptul c DO UNTIL execut S cel putin o dat, in timp ce WHILE DO
poate s nu-l execute pe S deloc, dac la intrarea in structur conditia este
deja fals.
Programarea structurat beneficiaz si de un puternic suport teoretic
constand intr-o construcsie de principii, termeni si teoreme matematice
specifice.
Teorema de structur Bohm si Jacopini spune:
Orice schem logic este echivalent cu o schem logic structurat
Dac o organigram cuprinde o multime F de actiuni si o multime P
de predicate, astfel incat organigrama s fie structurat si s fie
echivalent cu cea initial.
Corolarul ,,de sus in jos: Un program structurat este echivalent cu un
program scris sub una din urmtoarele forme:
P=Secvential(f,g)
P=Alternativ(p,f,g)
P=Repetitiv(p,f)
Unde p este un predicat al lui P, iar f si g sunt secvente structuratesau
functii ale programului.
Teorema de corectitudine:

26

Corectitudinea unui program structurat poate fi verificat prin


examinarea fiecrui nod din arborescenta 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 in functionare,
usor de modificat, portabil, eficient, insotit de o documentatie
corespunztoare. Exist numeroase tehnici de verificare si validare a
algoritmilor, adresate in general practicienilor, dar si usor accesibile unui
inceptor in programare.
Dintre acestea amintim:

testarea programelor si depanarea programelor


verificarea formalizat a programelor
cea mai slab preconditie
cea mai tare postconditie
instructiuni generalizate
sintaxa expresiilor logice

Actiunea de testare a programelor se deosebeste de celelalte faze prin


care trec acestea (proiectare, programare, documentatie, etc.) prin caracterul
ei in aparent demolator. Astfel, in timp ce alte faze au o esent
constructiv, testarea are in aparent un caracter distructiv, deoarece scopul
ei este de a pune in evident proasta functionare a programului, de a gsi
hibele aeestuia si nu prtile sale bune. Din punct de vedere psihologic,
programatorul insusi trebuie s adopte in aceast etap 0 atitudine
dusmnoas fat de propriul program, pentru a putea gsi defectele
acestuia,
Analizand problema mai atent, realizm de fapt c scopul testrii este
in realitate tot constructiv, acela de a pune in functiune un program care s
functioneze la parametri prevzuti.
Se stie c, intr-un algoritm de calcul si deci, intr-un program, este
oricand posibil prezenta unei/unor erori, oricat de precis si laborioas ar fi
metodologia de elaborare. Proeesul de detectare si apoi de eliminare a
erorilor unui algoritm/program are dou componente, numite:

verificare
validare
27

Aceste dou aetivitti ar trebui s earacterizeze practic toate etapele


prin care trece un program, de la formularea cerintei de rezolvare a unei
probleme, la analiza acesteia, la identificarea si apoi descrierea algoritmului
de rezolvare a problemei, a codificrii datelor si validarea rezultatelor
obtinute.
Aceasta deoarece tot mai multi specia1isti din diferite domenii arat
c aceast activitate de testare si validare nu este specific doar activittii de
programare, ci se inta1neste pretutindeni, acolo unde se produce sau
construieste ceva; exist in acest sens controale efectuate la nivelul fiecrei
operatii sau grup de operatii, dup cum exist si un control final, produsului
finit, pentru realizarea receptiei lui finale.
In acest sens, activitatea de verificare si validare a unui produs
program urmreste in principal, urmtoarele:

descoperirea defectelor programului

certificarea faptului c programul va functiona corect in conditii


de exploatare curent.
Testarea programului rmane metoda de baz pentru verificarea
corectitudinii unui program, succesul ei fiind conditionat in primul rand de
experienta programatorului, de complexitatea si completitudinea setului de
date folosite in procesul testrii, de analiza riguroas, atent a rezultatelor
obtinute in urma fiecrui test.
Prin testarea programului se intelege deci executarea programului
respectiv cu scopul de a descoperi o anomalie sau eroare. Ea se bazeaz pe
construirea unor esantioane de date de intrare care s conduc la depistarea
unor erori in functionarea programului, intr-un timp cat mai scurt si cu efort
cat mai mic.
Practic, pornind de la niste date de test construite de el, programatorul
asteapt s obtin la final sau pe parcurs, anumite rezultate. Dac acestea
sunt corecte, complete sau in formatul asteptat avem cel putin o eroare in
executia programuiui. Putem spune c succesul testrii depinde de arta
programatorului de a-si construi setul de date de test.
Trebuie s precizm ins faptul c relevanta testului depinde de
numrul esantioane1or de date de test, dar mai ales de calitatea datelor alese.
In acest sens, au aprut, in 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 functional sau metoda cutiei negre, care presupune


28

construirea datelor de test astfel incat s permita testarea fiecrei functiuni a


programului;

testarea structural sau rnetoda cutiei transparente, care


presupune construirea datelor de test astfel incat toate prtile programului s
poat fi testate.
Succesul activittii de testare const deci in conceperea unor date de
intrare prin prelucrarea crora defectele algoritmului si deci si a programului
s fie puse in evident prin observarea si analiza rezultatelor obtinute.
De aceea el este in mare msura dependent de experienta si
indemanarea programatorului, de abilitatea lui de a-si construi datele de test
cat mai complete, complexe, cuprinztoare din punct de vedere al situatiilor
sau valorilor de exceptie ce pot apare in executia curect a programului.
Testarea unui program trebuie s se finalizeze, pentru a fi util, cu
semnalarea erorii si localizarea ei. De aceea, testarea programului este
urmat de depanarea lui.
Depanarea unui program const in localizarea erorii, determinarea
naturii sale si corectitudinea ei. Ea se poate face in mod:
sttic, dup executarea programului
dinamic, in timpul executiei acestuia
Depanarea simbolic, o alt metod de depanare, este mai usor de
utilizat, deoarece ofer posibilitatea de a urmri executarea programului la
nivel de limbaj surs. Limbajele de programare ofer, in ultimile lor
versiuni, un depanator simbolic integrat, care permite depanarea usoar,
plcut si eficient a programelor prin urmtoarele operatii:

executarea pas cu pas a programului (un pas inseamn de fapt o


instructiune executabil);

observarea, in timpul executiei, a valorilor unor variabile sau


expresii specificate de programator (care apar intr-o fereastr special Watch Window);

specificarea unor puncte de suspendare a executiei programului;

modificarea valorilor unor variabile.

In activitatea de testare si depanare a programelor, erorile datorate


29

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


atunci cand aparent totul functioneaz corect. In acest sens amintim variabila
cu rol de indice (numrtor) care asigur parcurgerea elementelor unui
vector. Aceasta trebuie initializat cu pozitia primului element din sir care
trebuie prelucrat si apoi testat si comparat valoarea ei cu cea final.
Deasemenea, expresia care stabileste dac un ciclu se execut sau nu trebuie
astfel formulat sau initializat incat s asigure sau nu prima executie, asa
cum necesit algoritmul de prelucrare descris. In acest sens, trebuie s facem
precizarea c adeseori, suntem nevoiti s facem noi, prin program,
initializarea variabilei care controleaz executia ciclului, pentru a asigura
executia lui pentru prima dat. Este vorba de ciclul cu testarea initial a
conditiei, la care reluarea ulterioar va fi hotrat de valoarea pe care
respectiva variabil o primeste, in timpul executiei programului, in cadrul
ciclului. Deci, ciclul cu testarea initial a conditiei trebuie s fie bine
analizat, verificat si testat din punctul de vedere al expresiei care-i
controleaz reluarea.
Practica a dovedit, in timp, c oricat de numeroase ar fi testele
efectuate asupra unor programe foarte complexe, ele nu pot garanta
functionarea corect a acestora. Ele rman deosebit de utile pentru
semnalarea multora dintre erori si deasemenea pentru familiarizarea
programatorului cu algoritmul, cu modul su de lucru.
Proprietatea P se numeste preconditie sau proprietate final, iar
proprietatea Q postconditie san proprietate final.
Practica a dovedit c exist situatii cand pentru un algoritm A si o
postconditie dat, nu intereseaz o preconditie oarecare, ci se caut cea
mai bun preconditie care rezolv algoritmul dat.
Fie secventa 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 si dac n porneste de
la valoarea 1 (n>=1). Deci, preconditia n>=2 poate fi inlocuit cu n>=1 care
se consider o preconditie mai bun, care descrie o multime de date initiale
mai cuprinztoare, obtinut prin adugarea valorii 1.
O analiz mai atent a algoritmului arat c preconditia n>=1 poate fi
inlocuit cu n>0 considerat o preconditie mai bun, care atest capacitatea

30

algoritmului de a calcula factorialul oricrui numr natural, multimea 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,
instructiuni si semnificatii atribuite acestora, utilizat pentru descrierea
algoritmilor. Limbajul de programare este astfel un mijloc prin care
programatorul comunic cu calculatorul.
Programul este o succesiune de intructiuni apartinand unui limbaj de
programare, prin care se descriu operatiile la care sunt supuse datele si
ordinea de executie 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 inltura acest mare dezavantaj au aprut limbajele simbolice
si apoi limbajele de programare evoluate care prin intermediul
ansambloarelor si compilatoarelor de care dispun, permit traducerea
automat a instructiunilor scrise intr-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 mentionm:
- Basic
- Algol
- Fortram
- Cobol
- Pascal
- C
- PL/1
In ultimul timp s-au impus tot mai multe limbaje de inteligent
artificial si sisteme expert cum sunt:
- C++
- Lisp
- Prolog
precum si programarea pe obiecte ( Basic, C, etc. ).
Orice limbaj de programare presupune definirea urmatoarelor
elemente componente:
alfabetul
vocabularul
31

gramatica
punctuatia
semantica
Rezultatul activittii de programare il constituie programul scris ca
text intr-un limbaj de programare. Un astfel de program se numeste 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 inteles de ctre
sistemul electronic de calcul. Pentru aceasta este necesara traducerea lui intrun cod intern, accesibil calculatorului. Aceast operatie se realizeaz cu un
program translator numit compilator. Compilatorul este componenta
software care realizeaz traducerea programului sursa in cod intern,
rezultand asa numitul program cod obiect. Lucrul cu un anumit limbaj de
programare presupune existenta compilatorului pentru acel limbaj.
Ansamblul format din limbajul de programare si 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. In interiorul unei astfel de unitati functionale,
structurarea se manifesta atat la nivelul operatiilor de executat cat si la cel al
datelor de prelucrat.
Programarea structurata este o metoda independenta de limbajul de
programare utilizat. Limbajul Pascal include conceptele programarii
structurate in ambele sensuri ale efortului de abstractizare presupus de
realizarea unui program: ogranizarea datelor si conceperea succesiunii de
operatii.Limbajul Pascal a fost implementat pan in prezent pe o mare
varietate de calculatoare, avand un inalt grad de portabilitate comparativ cu
implementarea altor limbaje de programare.
Un program reprezint o multime ordonat de instructiuni, asociat
unui algoritm de rezolvare a unei probleme care comand operatiile de
prelucrare a datelor.
Instructiunea reprezint exprimarea intr-o forma riguroasa a unei
operatii si precizeaza functia si adresele operanzilor.Relatia dintre cele 3
elemente: algoritm, limbaj si program poate fi exprimat astfel:

Blocul

32

executabil constituie lantul de instructiuni prin care este codificat programul


in limbajul pascal, deci prin care se descrie algoritmul de prelucrare. Acestea
sunt cuprinse intre Begin si End.
Este interzis sa dam nume diverselor obiecte care sa coincida cu acele
cuvinte rezervate. In partea declarativa orice declaratie careia nu i se
asociaza obiectele legate de programul in cauza se poate omite.
Toate obiectele manipulate in 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, impreun cu multimea operatiilor care se aplica asupra
acestora. Orice variabila utilizata in program trebuie sa apartina unui tip.
Tipul de date poate fi: predefinit si construit pe baza celor predefinite.
Din punct de vedere al posibilitatii de modificare a valorii in faza de
executie a programului, datele se pot clasifica in:
- date variabile
- date constante
Tipurile intregi de date sunt:
- Byte
- Word
- Shortint
- Integer
- Longint
Tipul real reprezint un numr real cuprins intre dou limite care
difer de la un compilator la altul si de la un tip la altul.
Astfel tipurile reale pot fi:
- real
- single
- double
- extended
- comp
Functiile SUCC si 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 in memorie pe un octet, adica 255 coduri.
x:=`a` sau x:=a
Exist functii care permit trecerea de la caracter la codul ASCII si
33

invers.
CHR ( cod ) este o functie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o functie care intoarce codul ASCII al
caracterului respectiv.
Tipul Boolean este un tip ordinal, enumerativ, care ocup un octet
memorie si poate lua 2 valori logice: adevarat si fals.
Declaratia 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 si se defineste ca
submultime a unui tip ordinal prin precizarea intervalului inchis de valori.
Toate caracteristicile tipului parinte ( Integer , Char ) se regasesc in tipul
subdomeniului, singura deosebire dintre ele constand in multimea valorilor
pe care le poate lua.
Declararea constantelor:
CONST ident = valoare;
Pot fi numai de tip standard ( scalar ) si se declar in sectiunea
CONST
Valoarea constantei nu poate fi modificat in timpul rulrii
programelor.
Orice incercare de a atribui constantelor o valoare, chiar dac este
egal cu cea initial, va genera un mesaj de eroare.
Se asigur astfel protectia valorilor.
Declaratia de tip
TYPE Identif_tip=definitie tip;
Declaratia de variabile
Var identif var: spatiu tip var
Dac sunt mai multe variabile de acelasi tip, se insir separate cu `,`
Declaratia de functii si proceduri
function nume_functie (declaratie de var): tip rez;
function fact (n: integer):integer;

34

Mai multe variabile se separ prin `;`


Instructiuni pascal: Limbajul pascal este puternic orientat spre
programarea structurat, fiind conceput astfel incat sa implementeze corect
conceptele proiectrii si realizrii structurate si modularizate a programelor.
Progamul scris intr-un limbaj de programare evoluat deci in pascal, se
numeste progream surs.

Instructiuni simple:

de atribuire
apeluri de procedura
instructiunea de salt neconditionat(goto)
instructiunea vid

Instructiuni simple
Prin instructiuni simple se realizeaz o mare parte din operatiile
de baz a algoritmilor de prelucrare. Instructiunea vid descrie actiunea vid,
ea este definit prin lipsa in contextul unor constructii pascal, fr a avea o
mnemonica explicit.
Se prezint ca o linie goala urmat de `;`
i:=1 ; 2 instructiuni vide
If x>0 then
x:=x+1
else;
Instructiunea de atribuire evalueaz o expresie si atribuie rezultatul
obtinut unei variabile sau functii.
Are formatul general:
Identificator:=valoare;
Prioritatea operanzilor in Pascal:
NOT
* / DIV MOD AND
+ - OR ( *, +, -, pe multimi )
= , > , < ,<= , >= , <> , si operatori relationali pe multimi
Expresii logice sunt cele care in urma evaluarii produc un rezultat
logic de TRUE sau FALSE ( Boolean ). Ele se prezint fie sub forma unor
conditii 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 operatii, se
numeste procedur.
Procedurile intalnite in program ca simple instructiuni genereaz o
serie de operatii:
compilatorul caut numele de procedur in biblioteca sa; dac
nu este gsit acolo procedura e cautat in lista de declaratii de proceduri a
programului; dac nu este nici acolo se afiseaz un mesaj de eroare.
dac este gsit procedura e apelata.
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 si 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 si scriere a datelor


In pascal, citirea si scrierea nu se realizeaza prin instructiuni, ci prin
proceduri specializate in acest sens, proceduri standard ale limbajului.
Aceste fisiere in Turbo Pascal sunt asociate tastaturii si respectiv
ecranului.
Fisierele INPUT si OUTPUT contin excusiv siruri de caractere
organizate pe linii. Liniile sunt incheiate de caracterul special standard EOL
introdus automat la apasarea tastei ENTER.
Citirea datelor din fisierul INPUT
Exist doua proceduri standard predefinite in 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

Instructiuni de selectie multipl ( CASE )


Format:
CASE expresie OF
lista etichete CASE:instructiune;
END;
Structura de tablou (Vector, Matrice): structura de tablou in Pascal
este mai flexibil decat in 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 entitati formate din caractere :


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

Identificatorii : Pot fi o variabila, o contanta, un tip definit de


utilizator, o enumerare, o procedura, o functie, un obiect, o metoda, o
proprietate, un control, o forma, un modul sau chiar proiectul insusi. Un
proiect Basic poate sa contina maxim 32000 identificatori.
Comentariile sunt siruri de caractere care au in fata caracterul apostrof () si
servesc pentru a face mai lizibil textul programului , pntru a documenta
programul.
Fiecare tip de data permite o serie de operatii. Astfel pentru valorile
unui tip intreg se pot face urmatoarele operatii : +, -, *, impartirea intreaga,
impartirea reala, restul impartirii intregi, ridicarea la putere.
Constantele : reprezinta o valoare fixa care nu se schimba in timpul
executiei programului sau de la o executie la alta. Pot fi de 2 tipuri :
intrinseci si simbolice.
Variabilele : reprezinta o locatie de memorie interna care serveste
pentru stocarea temporara a datelor si care se identifica printr-un nume.
Tipul variabilelor din Basic sunt : variant, byte, boolean, integer, long,
single, double, currency, date si object.
Variabilele din Basic sunt caracterizate prin :
- nume

38

- tip de data
- domeniu.
Utilizatorul poate defini in cadrul modulului sau si tipuri de date
proprii, deci tipuri de date predefinite. Pentru aceasta, declaratia de tip se
face de catre programatori in prima parte a modului de cod cu ajutorul
instructiunii :

TYPE definire variabila

END TYPE
Operatorii : Reprezinta comenzi speciale pentru operatiile ce pot fi executate
cu datele din program. Basic pune la dispozitie 4 tipuri de operatori :
aritmetici, logici, de comparare si de concatenare.
O functie este o procedura care efectueaza o anumita sarcina intr-un
program.
1.
Dialogul standard cu utilizatorul
Functia INPUT- apelul functiei INPUT permite preluarea de date de la
tastatura.
2.
Functii matematice si statistice : ABS, EXP, INT, LOG, RND,
SQR, ATN, SIN, COS, TAN ;
3.
Functii pentru siruri de caractere : LCASE$, UCASE$,
LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$,
INSTR,
4.
Functii pentru conversia intregilor : INT, CINT ;
5.
Functii pentru conversia tipului de data : CDBL, CLNG.
6.
Functii pentru lucrul cu date calendaristice : TIME$, DATE$ ;
O procedura este o secventa de instructiuni executate ca un tot unitar
sau partajabile. Exista trei tipuri de proceduri : SUB, FUNCTION, Tip de
proprietate. Sintaxa generala a unei proceduri este : Private/Public/Static/Sub
.
End Sub.
Instructiuni de atribuire atribuirea se poate efectua prin
instructiunile :
Let - pentru valori atribuite variabilelor si proprietatilor ;
Set pentru atribuirea de obiecte la o variabila de tip obiect ;
Lset si Rset pentru atribuiri speciale de siruri sau tipuri
definite de utilizator

39

Terminarea executiei unui program sau oprirea temporara a acestuia


sepot realiza prin instructiunile : DoEvents, End, Exit, Stop.
Se stie ca in cadrul algoritmilor de rezolvare a problemelor se
intalnesc, in afara unor secvente de operatii care se executa liniar, in mod
neconditionat, o serie de operatii care necesita testarea unor conditii, functie
de care se o succesiune de operatii sau alta, sau o serie de operatii care se
executa in mod repetat. Avem de a face cu cele trei tipuri de structuri
fundamentale :
- secventiala /liniara ;
- alternativa/de decizie ;
- repetitiva.
Limbajul de programare Basic implementeaza aceste structuri de
control ale programului prin comenzi corespunzatoare, 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.
Fisierele contin colectii de date omogene ca natura si criterii de prelucrare,
memorate pe discul magnetic .
CAPITOLUL 9
Algoritmi speciali
1. Sortarea unui vector
Prin sortare se intelege aranjarea elemntelor unei multimi , in ordine
crescatoare/descrescatoare a valorilor acestora. Exista mai multe variante de
sortare : sortarea prin interschimbare, prin selectie, prin insertie,
2. Interclasarea a doi vectori de dimensiuni variabile.
Prin interclasare se intelege procesul de obtinere din doua sau mai
multe multimi ordonate, o noua multime, ordonata dupa acelasi criteriu.
Exista mai multe variante de interclasare :
1. Varianta 1 :

40

Presupune compararea a doua elemente , cate unul din fiecare vector


initial, cu scrierea celui mai mic dintre ele in vectorul rezultant si trecerea la
urmatorul element al vectorului initial din care s-a preluat.
2. Varianta 2 :
Presupune obtinerea vectorului rezultant intr-un proces unic de comparare.
Pentru a continua procesul in cazul in care se epuizeaza unul din vectorii
initiali, ultimul element al acestuia va primi o valoare mai mare decat oricare
din valorile regasite, de regula, in vectorii initiali.Aceasta valoare poarta
denumirea HIGH-VALUE (HV) . Procesul se incheie cand ambii vectori
initiali au fost parcursi integral, deci elementele finale au valoarea HV.
CAPITOLUL 10
Tehnici de programare
1. Programarea modulara. Tabele de decizie
Programarea modulara are ca obiectiv reducerea empirismului
artizanal folosit in elaborarea programelor si instaurarea principiilor
ingineriei programarii, vizand obtinerea unor programe corecte si fiabile,
reducerea costului elaborarii, documentarii, testarii, intretinerii si
dezvoltarii produselor software.
Modularizarea programelor.
Algoritmii de rezolvare a problemelor complexe se intocmesc si/sau
pot fi descompusi in maniera sistematica, dupa criteriul functional, in
mod ierarhic, pana la nivel de subalgoritm/functie elementara, ca element
terminal in structura unitatii functionale(UF).
Un modul functional se caracterizeaza prin :
Nume extern si/sau intern;
Functie logica perfect definita;
Punct de intrare si punct de iesire unice;
Relatia cu modulele din aval si amonte-interfata;
Posibilitatea elaborarii si testarii independente (in cadrul
contextului sau);
41

Tipuri de module functionale :


Module directoare sau de comanda sau monitoare;
Module de prelucrare sau module-functie;
Module mixte;
Module comune;
Module speciale;
Module nefunctionale;
Module monitor.
2 Monitorizarea modulelor.
Tipul de monitorizare poate varia in limite relativ largi, in functie de
filozofia de realizare a sistemului, de facilitatile de utilizare puse la
dispozitia beneficiarului sau si de deciziile de proiectare adoptate,
astfel :
Monitoare pure
Monitoare complexe
Monitoare foarte complexe.
3. Interconectarea modulelor.
In mod ideal , modulele trebuie sa fie cat 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 :
Intamplatoare
Logica
Temporala
Procedurala
Comunicationala
Secventiala
Functionala.
.4. Tehnici de modularizare

42

Construirea unor programe modularizate implica utilizarea unor


tehnici si procedee foarte diversificate :
Utilizarea tabelelor de decizie si a diagramelor de optimizare
Utilizarea parametrilor simbolici
Asigurarea si definirea centralizata si standardizata a parametrilor
statici, a datelor comune, a tabelelor de decizie, a listelor.
Separarea functiilor de intrare/iesire
Evitarea reutilizarii zonelor de memorare temporara intermodule
Nealterarea valorii constantelor.
5. Tabele de decizie (TD)
Tabele de decizie reprezinta un procedeu de reprezentare
a
algoritmilor cu numar mare de decizii bazate pe conditii complexe sau
dinamice, fiind astfel un mijloc eficient de modularizare. TD contin doua
tipuri d intrari :
Conditii elementare simple sau compuse aplicate unor variabile cu
valori alternatil-exclusive de tip alfanumeric sau logic;
Conditii compuse aplicate asupra conditiilor elementare prin conjunctie.

CAPITOLUL 11
Tehnici de programare structurat

Cele mai utilizate tehnici de programare structurata sunt :


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

43

1. Recursivitatea
Este o tehnica de programare utilizata frecvent , in implementarea
functiilor si procedurilor . La baza recursivitatii sta stiva, care este gestionata
in mod implicit, in aceasta zona de memorie salvandu-se automat, la fiecare
la fiecare apel de functieurmatoarele informatii :
Valorile parametrilor de tip valoare;
Adresele parametrilor de tip variabila;
Variabilele locale ale subprogramului;
Adresa de intoarcere la instructiunea aflata dupa instructiunea de apel.
2. Tehnica Backtracking

Aceasta tehnica se foloseste in rezolvarea unor probleme cum ar fi :


Generarea permutarilor de n elemente;
Generarea aranjamentelor;
Generarea combinarilor;
Generarea partitiilor unei multimi;
Problema celor N dame;
Produsul cartezian a N multimi;
Problema Comis-voiajorului;
Problema platii unei sume S utilizand N tipuri de monede;

3. Metoda Divide et Impera


Exemple de probleme rezolvate cu aceasta metoda : cautare binara.
4. Metoda Greedy
Caracteristicile acestei metode sunt :
La intrare avem o multime A cu N elemente
Se cere selectarea unei submultimi B a lui A sau o ordine de
prelucrare a elementelor lui A care sa optimizeze o functie obiectiv data . Se
cere deci o singura solutie.
Elementele multimii A se parcurg pe rand, dupa o eventuala rearanjare a lor,
in vederea testarii lor pentru adaugarea acestora la B.

44

CAPITOLUL 12
Probleme
Problema nr. 1
Sa se prezinte sub forma de chema logic si instructiunea unui limbaj de
programare sau pseudocod un algoritm eficient care s determine pentru o
matrice de n linii si 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 si locul in care acesta se afl de pe fiecare linie
d) valoarea elem. maxim si locul in care acesta se afl de pe fiecare
coloan
e) valoarea elem. minim si locul in care acesta se afl de pe fiecare linie
f) valoarea elem. minim si locul in 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 si 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,'] si 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,'] si 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,'] si 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,'] si 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 intregi. S se mute la sfarsitul
vectorului elementele sale nule pstrand 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
Sa se realizeze un program pentru evaluarea expresiei:
A +B, daca C0
E=
A-B, daca C<0
Analizand problema data, se observa ca datele de intrare sunt A, B si
C. Algoritmul va testa pe C, si, in functie 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 si 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 si m prietene dac s1=m si 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:
In aceasta vara, batranul Trica a murit, lasand proprietatile sale ca mostenire
nepotului sau Andi, prietenul meu. El a mostenit si castelul Towertia, bantuit
de fantome. Incepand cu ora 12 noaptea pana dimineata se aud in tot castelul
doua zgomote descifrabile: un cantat duios la vioara si un ras puternic. Andi
a observat anumite obiceiuri:
- cand el canta la pian si fantoma nu rade, fantoma care canta la
vioara isi schimba activitatea (daca canta-tace, dac tacea-canta);
altfel ea face in fiecare minut ce facea in cel precedent;
- cand fereastra este inchisa fantoma care rade face ce facea cealalta
fantoma in minutul precedent (rade daca cealalta canta, tace daca
cealalta tacea);
- cand fereastra este deschisa, fantoma care rade face opusul la ceea
ce cealalta facea in minutul precedent.
Andi vrea sa stie cum sa scape de fantome (sa le faca sa taca)!
Rezolvare:
- 3: cand fereastra este deschisa, fantoma care rade face opusul la
ceea ce cealalta facea in minutul precedent.
- 1: cand el canta la pian si fantoma nu rade, fantoma care canta la
vioara isi schimba activitatea (daca canta-tace, dac tacea-canta);
altfel ea face in fiecare minut ce facea in cel precedent;
- 2: cand fereastra este inchisa fantoma care rade face ce facea
cealalta fantoma in minutul precedent (rade daca cealalta canta,
tace daca cealalta tacea)

Problema nr. 6
Duminica, Marius si Radu au fost sa vada la hipodrom cursa de cai. Mai
intai s-au dus sa vada caii. Au facut 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 aratat ca nici unul nu a castigat:
1)Marius nu a ghicit locul nici unui cal
2)Marius nu a ghicit nici macar ordinea a cate doi cai unul dupa altul
Radu a fost mai aproape de realitate:
3)A ghicit locurile a doi cai;
4)A ghicit ordinea finala a doua perechi de cai unul dupa altul.
Care a fost rezultatul ?
Radu
Marius

1
Doodoo
Azur

2
Azur
Emily

3
Elfy
Candy

4
Candy
Doodoo

5
Emily
Elfy

Urmarind tabelul de mai sus putem afirma ca:


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 piat (mai bine statea acasa) s vand niste ou. Un
tanr neatent l-a imbrancit si cosul a czut sprgand oule. vinovatul vrand
s isi rscumpere greseala l-a intrebat :
60

-Cate ou au fost in cos?


-Nu-mi aduc aminte, dar stiu c dac le scoteam cate 2,cate 3,cate 4,cate 5
sau cate 6, in cos rmanea mereu un singur ou, iar dac le scoteam cate 7 ,
nu rmanea nici unul.
Dup cateva minute de gandire, tanrul a calculat cate ou erau.
Tu poti gsi numrul de ou din cos?
Rezolvare:
- batranelul spune c dac scotea oule cate 7 nu mai rmanea nici
un ou un cos de unde tragem concluzia c numrul oulor trebuie
s fie un multiplu de 7
- mai spune c dac le scotea cate 2,cate 3,cate 4,cate 5 sau cate 6, in
cos rmanea mereu un singur ou de unde rezult c din numrul
care este multiplu de 7 dac scadem 1 trebuie s rman un numr
care s fie divizibil si cu 2 si cu 3 si cu 4 si cu 5 si 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 in 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 btranelul avea in cos exact 91 de ou.

61

Bibliografie

Manual Algoritmi si structuri de date: fundamente ale


programrii structurate / Cezar Botezatu Bucuresti :
Editura Universitar, 2004

62

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