Вы находитесь на странице: 1из 62

Universitatea Româno-Americanǎ

Facultatea de Informaticǎ Managerialǎ

Algoritmi
Şi structuri de date
-conspect -

Student: Ciurescu Raul-Cristian

Grupa: 602
Anul: I

CUPRINS

1. Sistem Informaţional – 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

2
Introducere:

Semiotica se ocupã cu studiul semnelor în natura şi în societate.


Semnul nu este o calitate în sine a unui obiect, ci o funcţie 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.
Ştiinţa este bogatã în semne indiciale, inevitabile, atât î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 astãzi 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ã;
 Referenţialã;
 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 informaţional – Sistem informatic

Sistem informaţional

Un sistem poate fi privit ca un ansamblu de elemente interconectate şi


interconditionate prin relaţii 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, având
ca parti componente mijloacele şi procedeele ce asigura legaturile intre

4
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:

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

6
- 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 tehnico-
stiintifica, medicina, etc.

7
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, având î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, atât a datelor cat şi a produselor software;
 Faciliteaza insusirea teoretica şi practica a hardware-ului şi software-
ului 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,

10
precum şi interconectarea retelelor a.i. sa se obtina sisteme
teleinformatice de dimensiuni mari.
Aceste preocupari s-au materializat atât î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 atât 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 relaţii.
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 , având 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 relaţii care duc la un anumit mecanism de selectie
şi identificare a datelor.
Aceste relaţii 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 s-


au stabilit anumite relaţii ş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 relaţii 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 relaţii de tip m la n.

15
 Structura relationara este formata din mai multe tabele de date
elementare, numite tablori sau relaţii, 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 2 .... n
X1 X2 Xn
Adresa Adresa Adresa Adresa
de de de de
bazã bazã+1 bazã+2*1 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 secvenţialã sau liniarã desemneazã una sau mai multe


operaţii ce se executã una dupã cealaltã, în mod liniar (secvenţial).
Structura alternativãdesemneazã execuţia unei secvenţe de operaţii S1 sau a
alteia S2, în funcţie de îndeplinirea sau nu a unei condiţii.
Structurile alternative sunt de mai multe tipuri:
• Structura IF – THEN – ELSE, selecteazã succesiunea operaţiilor ce
urmeazã a fi executate, funcţie de valoarea logicã de ,,adevãr” sau
,,fals” pe care o are în momentul respectiv condiţia specificatã. Dacã
este adevãratã condiţia se urmeazã calea specificatã de ramura DA,
altfel se urmeazã calea NU.

23
• Blocul are deci o intrare şi douã ieşiri, corespunzãtoare celor douã
valori logice posibile pentru o expresie logicã (Adevarat şi fals, Da şi
Nu)

• Structura IF – THEN numitã şi selecţia simplã, este practic o formã


particularã a selecţiei IF – THEN – ELSE, în care blocul de pe ramura
Nu este vid.
• În mod asemãnãtor se poate construi şi selecţia IF – ELSE, cu
precizarea cã în acest caz blocul vid va fi cel de pe ramura Da.
• Practic, în ambele forme particulare, se testeazã condiţia logicã şi se
specificã doar succesiunea de operaţii ce trebuie efectuate pe una
dintre ramuri. Pe ramura cu bloc vid nu se executã nimic.
• Structura CASE – OF selecteazãuna dintre mai multe ramuri, în
funcţie de valoarea unui selector. De aceea structura de acest tip se
mai numeşte selecţie multiplã.

Structura repetitivã sau iteraţia indicã repetarea unei operaţii sau


secvenţe de operaţii S, atâta timp cât este îndeplinitã o anumitã conditie.
În funcţie de momentul în care se face testarea condiţiei specificate,
structurile repetitive sunt de mai multe tipuri:

• Condiţia poate fi testatã anterior execuţiei secvenţei de comenzi S şi


atunci avem o structurã de tip WHILE – DO

24
• Condiţia se testeazã posterior execuţiei secvenţei de comenzi S şi
atunci avem o structurã de tip DO – UNTIL

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


numãrului de reluãri. Din acest punct de vedere, o structurã poate fi:

• fãrã numãrãtor, cãci nu se cunoaşte de la început numãrul de reluãri.


Aşa este cazul structurii de tip WHILE, indiferent de tipul ei.
• cu numãrãtor, atunci când se ştie sau se poate calcula automat
numãrul de reluãri. Aşa e cazul structurii repetitive de tip DO – FOR

25
Pentru a evita ciclarea la infinit a structurilor repetitive, programatorul
trebuie sã aigure negarea condiţiei pentru a permite ieşirea din structurile
WHILE – DO şi DO – UNTIL.
Se observã cã diferenţa esenţialã între cele douã structuri constã în
faptul cã DO – UNTIL executã S cel puţin o datã, în timp ce WHILE – DO
poate sã nu-l execute pe S deloc, dacã la intrarea în structurã condiţia este
deja falsã.
Programarea structuratã beneficiazã şi de un puternic suport teoretic
constând într-o construcşie 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 mulţime F de acţiuni şi o mulţime P de
predicate, astfel încât organigrama sã fie structuratã şi sã fie echivalentã
cu cea iniţialã.
- Corolarul ,,de sus în jos”: Un program structurat este echivalent cu un
program scris sub una din urmãtoarele forme:

P=Secvenţial(f,g)
P=Alternativ(p,f,g)
P=Repetitiv(p,f)
Unde p este un predicat al lui P, iar f şi g sunt secvenţe structuratesau
funcţii ale programului.

Teorema de corectitudine:

26
Corectitudinea unui program structurat poate fi verificatã prin
examinarea fiecãrui nod din arborescenţa 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 funcţionare,


uşor de modificat, portabil, eficient, însoţit de o documentaţie
corespunzãtoare. Existã numeroase tehnici de verificare şi validare a
algoritmilor, adresate în general practicienilor, dar şi uşor accesibile unui
începãtor în programare.
Dintre acestea amintim:

• testarea programelor şi depanarea programelor


• verificarea formalizatã a programelor
• cea mai slabã precondiţie
• cea mai tare postcondiţie
• instrucţiuni generalizate
• sintaxa expresiilor logice

Acţiunea de testare a programelor se deosebeşte de celelalte faze prin


care trec acestea (proiectare, programare, documentaţie, 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 funcţionare a programului, de a gãsi
hibele aeestuia şi nu pãrţile sale bune. Din punct de vedere psihologic,
programatorul însuşi trebuie sã adopte în aceastã etapã 0 atitudine
“duşmãnoasã” faţã de propriul program, pentru a putea gãsi defectele
acestuia,
Analizând problema mai atent, realizãm de fapt cã scopul testãrii este
în realitate tot constructiv, acela de a pune în funcţiune un program care sã
funcţioneze la parametri prevãzuţi.
Se ştie cã, într-un algoritm de calcul şi deci, într-un program, este
oricând posibilã prezenţa unei/unor erori, oricât 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à aetivitãţi ar trebui sã earacterizeze practic toate etapele
prin care trece un program, de la formularea cerinţei de rezolvare a unei
probleme, la analiza acesteia, la identificarea şi apoi descrierea algoritmului
de rezolvare a problemei, a codificãrii datelor şi validarea rezultatelor
obţinute.
Aceasta deoarece tot mai mulţi specia1işti din diferite domenii aratã
cã aceastã activitate de testare şi validare nu este specificã doar activitäţii de
programare, ci se întâ1neşte pretutindeni, acolo unde se produce sau
construieşte ceva; existã în acest sens controale efectuate la nivelul fiecärei
operaţii sau grup de operaţii, dupã cum existã şi un control final, produsului
finit, pentru realizarea recepţiei lui finale.
În acest sens, activitatea de verificare şi validare a unui produs
program urmãreşte în principal, urmàtoarele:
• descoperirea defectelor programului
• certificarea faptului cã programul va funcţiona corect în condiţii
de exploatare curentã.

Testarea programului rãmâne metoda de bazã pentru verificarea


corectitudinii unui program, succesul ei fiind condiţionat în primul rând de
experienţa programatorului, de complexitatea şi completitudinea setului de
date folosite în procesul testãrii, de analiza riguroasã, atentã a rezultatelor
obţinute în urma fiecãrui test.
Prin testarea programului se înţelege deci executarea programului
respectiv cu scopul de a descoperi o anomalie sau eroare. Ea se bazeazã pe
construirea unor eşantioane de date de intrare care sã conducã la depistarea
unor erori în functionarea programului, într-un timp cât mai scurt şi cu efort
cât mai mic.
Practic, pornind de la nişte date de test construite de el, programatorul
aşteaptã sã obţinã la final sau pe parcurs, anumite rezultate. Dacä acestea
sunt corecte, complete sau în formatul aşteptat avem cel putin o eroare în
execuţia programuiui. Putem spune cã succesul testãrii depinde de “arta”
programatorului de a-şi construi setul de date de test.
Trebuie sä precizãm insã faptul cã relevanţa testului depinde de
numãrul eşantioane1or de date de test, dar mai ales de calitatea datelor alese.
În acest sens, au apãrut, î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 funcţionalã sau metoda cutiei negre, care presupune

28
construirea datelor de test astfel încât sã permita testarea fiecãrei funcţiuni a
programului;
• testarea structuralã sau rnetoda cutiei transparente, care
presupune construirea datelor de test astfel încât toate pãrţile programului sã
poatã fi testate.
Succesul activitãţii de testare constã deci în conceperea unor date de
intrare prin prelucrarea cãrora defectele algoritmului şi deci şi a programului
sã fie puse în evidenţã prin observarea şi analiza rezultatelor obţinute.

De aceea el este în mare mãsura dependent de experienţa şi


îndemânarea programatorului, de abilitatea lui de a-şi construi datele de test
cât mai complete, complexe, cuprinzãtoare din punct de vedere al situaţiilor
sau valorilor de excepţie ce pot apare în execuţia 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 execuţiei acestuia

Depanarea simbolicã, o altã metodã de depanare, este mai uşor de


utilizat, deoarece oferã posibilitatea de a urmãri executarea programului la
nivel de limbaj sursã. Limbajele de programare oferã, în ultimile lor
versiuni, un depanator simbolic integrat, care permite depanarea uşoarã,
plãcutã şi eficientã a programelor prin urmãtoarele operaţii:
• executarea pas cu pas a programului (un pas inseamnã de fapt o
instrucţiune executabilã);
• observarea, în timpul execuţiei, a valorilor unor variabile sau
expresii specificate de programator (care apar într-o fereasträ specialã -
Watch Window);
• specificarea unor puncte de suspendare a execuţiei 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 când aparent totul funcţioneazã corect. În acest sens amintim variabila
cu rol de indice (numãrãtor) care asigurã parcurgerea elementelor unui
vector. Aceasta trebuie iniţializatã cu poziţia primului element din şir care
trebuie prelucrat şi apoi testatä şi comparatã valoarea ei cu cea finalã.
Deasemenea, expresia care stabileşte dacã un ciclu se executã sau nu trebuie
astfel formulatã sau initializatã încât sã asigure sau nu prima execuţie, aşa
cum necesitã algoritmul de prelucrare descris. În acest sens, trebuie sã facem
precizarea cä adeseori, suntem nevoiţi sã facem noi, prin program,
iniţializarea variabilei care controleazã execuţia ciclului, pentru a asigura
execuţia lui pentru prima datã. Este vorba de ciclul cu testarea iniţialã a
condiţiei, la care reluarea ulterioarã va fi hotãrâtã de valoarea pe care
respectiva variabilã o primeşte, în timpul execuţiei programului, în cadrul
ciclului. Deci, ciclul cu testarea iniţialã a condiţiei trebuie sã fie bine
analizat, verificat şi testat din punctul de vedere al expresiei care-i
controleazã reluarea.
Practica a dovedit, în timp, cã oricât de numeroase ar fi testele
efectuate asupra unor programe foarte complexe, ele nu pot garanta
funcţionarea corectã a acestora. Ele rãmân deosebit de utile pentru
semnalarea multora dintre erori şi deasemenea pentru familiarizarea
programatorului cu algoritmul, cu modul sãu de lucru.
Proprietatea P se numeşte precondiţie sau proprietate finalã, iar
proprietatea Q postcondiţie san proprietate finalã.
Practica a dovedit cä existã situaţii când pentru un algoritm A şi o
postcondiţie datã, nu intereseazã o precondiţie oarecare, ci se cautã “ cea
mai bunã” precondiţie care rezolvã algoritmul dat.
Fie secvenţa de comenzi, care calculeazã factorialul unui numãr >=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 porneşte de
la valoarea 1 (n>=1). Deci, precondiţia n>=2 poate fi inlocuitã cu n>=1 care
se considerä o precondiţie mai bunã, care descrie o mulţime de date iniţiale
mai cuprinzãtoare, obtinutã prin adãugarea valorii 1.
O analizã mai atentã a algoritmului aratã cã precondiţia n>=1 poate fi
inlocuitã cu n>0 consideratä o precondiţie mai bunã, care atestã capacitatea

30
algoritmului de a calcula factorialul oricãrui numãr natural, mulţimea datelor
initiale fiind din nou mãritã prin adãugarea valorii 0 (0!=1).

CAPITOLUL 8

Limbaje de programare
Un limbaj de programare este un ansamblu de simboluri, cuvinte,
instrucţiuni şi semnificaţii atribuite acestora, utilizat pentru descrierea
algoritmilor. Limbajul de programare este astfel un mijloc prin care
programatorul comunicã cu calculatorul.
Programul este o succesiune de intrucţiuni aparţinând unui limbaj de
programare, prin care se descriu operaţiile la care sunt supuse datele şi
ordinea de execuţie 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 înlãtura acest mare dezavantaj au apãrut limbajele simbolice
şi apoi limbajele de programare evoluate care prin intermediul
ansambloarelor şi compilatoarelor de care dispun, permit traducerea
automatã a instrucţiunilor 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 menţionãm:
- 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 activitãţii de programare îl constituie programul scris ca
text într-un limbaj de programare. Un astfel de program se numeşte 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 înţeles de cãtre
şistemul electronic de calcul. Pentru aceasta este necesara traducerea lui intr-
un cod intern, accesibil calculatorului. Aceastã operaţie se realizeazã cu un
program translator numit compilator. Compilatorul este componenta
software care realizeazã traducerea programului sursa în cod intern,
rezultand aşa 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 atât la nivelul operaţiilor de executat cât ş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
operaţii.Limbajul Pascal a fost implementat pânã în prezent pe o mare
varietate de calculatoare, având un inalt grad de portabilitate comparativ cu
implementarea altor limbaje de programare.
Un program reprezintã o mulţime ordonatã de instrucţiuni, asociatã
unui algoritm de rezolvare a unei probleme care comandã operaţiile de
prelucrare a datelor.

Instrucţiunea reprezintã exprimarea intr-o forma riguroasa a unei


operatii şi precizeaza functia şi adresele operanzilor.Relaţia dintre cele 3
elemente: algoritm, limbaj şi program poate fi exprimatã astfel:

Blocul

32
executabil constituie lanţul 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 mulţimea operaţiilor 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 numãr 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
Funcţiile 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ã funcţii care permit trecerea de la caracter la codul ASCII şi

33
invers.
CHR ( cod ) este o funcţie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o funcţie 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.
Declaraţia 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 rulãrii
programelor.
Orice încercare de a atribui constantelor o valoare, chiar dacã este
egalã cu cea iniţialã, va genera un mesaj de eroare.
Se asigurã astfel protecţia valorilor.
Declaraţia de tip
TYPE Identif_tip=definiţie tip;
Declaraţia de variabile
Var identif var: spaţiu tip var
Dacã sunt mai multe variabile de acelasi tip, se inşirã separate cu `,`
Declaraţia de funcţii şi proceduri
function nume_funcţie (declaraţie de var): tip rez;
function fact (n: integer):integer;

34
Mai multe variabile se separã prin `;`
Instrucţiuni pascal: Limbajul pascal este puternic orientat spre
programarea structuratã, fiind conceput astfel încât sa implementeze corect
conceptele proiectãrii şi realizãrii structurate şi modularizate a programelor.
Progamul scris într-un limbaj de programare evoluat deci în pascal, se
numeste progream sursã.

Instrucţiuni simple:
• de atribuire
• apeluri de procedura
• instrucţiunea de salt necondiţionat(goto)
• instrucţiunea vidã
Instrucţiuni simple
Prin instructiuni simple se realizeazã o mare parte din operatiile
de bazã a algoritmilor de prelucrare. Instructiunea vidã descrie acţiunea vidã,
ea este definitã prin lipsa în contextul unor construcţii pascal, fãrã a avea o
mnemonica explicitã.
Se prezintã ca o linie goala urmatã de `;`
i:=1 ; 2 instrucţiuni vide
If x>0 then
x:=x+1
else;
Instrucţiunea 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
condiţii 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 operaţii, se
numeşte procedurã.
Procedurile întâlnite în program ca simple instrucţiuni genereazã o
serie de operaţii:
- compilatorul cautã numele de procedurã în biblioteca sa; dacã
nu este gãsit acolo procedura e cautatã în lista de declaraţii de proceduri a
programului; dacã nu este nici acolo se afiseazã un mesaj de eroare.
- dacã este gãsitã 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 fişiere în Turbo Pascal sunt asociate tastaturii şi respectiv
ecranului.
Fisierele INPUT şi OUTPUT conţin excusiv şiruri de caractere
organizate pe linii. Liniile sunt încheiate de caracterul special standard EOL
introdus automat la apasarea tastei ENTER.
Citirea datelor din fişierul 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
Instrucţiuni 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ã decât î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 entităţi formate din caractere :


• Literele mari şi mici ale alfabetului limbii române: A-Z, a-z;
• Cifrele sistemului de numerotaţie zecimal: 0-9;
• Caractere speciale: =-/^(){}[].,;:_!@#$%&etc;
• Caractere speciale perechi: <=,>=,=,<>;
• Separatorii : spaţiu, tab, Enter.

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


utilizator, o enumerare, o procedură, o funcţie, un obiect, o metodă, o
proprietate, un control, o formă, un modul sau chiar proiectul însuşi. Un
proiect Basic poate să conţină 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 operaţii. Astfel pentru valorile
unui tip întreg se pot face următoarele operaţii : +, -, *, împărţirea întreagă,
împărtirea reală, restul împărţirii întregi, ridicarea la putere.
Constantele : reprezintă o valoare fixă care nu se schimbă în timpul
execuţiei programului sau de la o execuţie la alta. Pot fi de 2 tipuri :
intrinseci şi simbolice.
Variabilele : reprezintă o locaţie de memorie internă care serveşte
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
- tip de data

38
- domeniu.

Utilizatorul poate defini în cadrul modulului său şi tipuri de date


proprii, deci tipuri de date predefinite. Pentru aceasta, declaraţia de tip se
face de către programatori în prima parte a modului de cod cu ajutorul
instrucţiunii :
• TYPE – definire variabilă
• END TYPE

Operatorii : Reprezintă comenzi speciale pentru operaţiile ce pot fi executate


cu datele din program. Basic pune la dispoziţie 4 tipuri de operatori :
aritmetici, logici, de comparare şi de concatenare.
O funcţie este o procedură care efectuează o anumită sarcină într-un
program.
1. Dialogul standard cu utilizatorul
Funcţia INPUT- apelul funcţiei INPUT permite preluarea de date de la
tastatură.
2. Funcţii matematice şi statistice : ABS, EXP, INT, LOG, RND,
SQR, ATN, SIN, COS, TAN ;
3. Funcţii pentru şiruri de caractere : LCASE$, UCASE$,
LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$,
INSTR,
4. Funcţii pentru conversia întregilor : INT, CINT ;
5. Funcţii pentru conversia tipului de dată : CDBL, CLNG.
6. Funcţii pentru lucrul cu date calendaristice : TIME$, DATE$ ;
O procedură este o secvenţă de instrucţiuni 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.

Instrucţiuni de atribuire – atribuirea se poate efectua prin


instrucţiunile :
Let - pentru valori atribuite variabilelor şi proprietăţilor ;
Set – pentru atribuirea de obiecte la o variabilă de tip obiect ;
Lset şi Rset – pentru atribuiri speciale de şiruri sau tipuri
definite de utilizator
Terminarea execuţiei unui program sau oprirea temporară a acestuia
sepot realiza prin instrucţiunile : DoEvents, End, Exit, Stop.

39
Se ştie că în cadrul algoritmilor de rezolvare a problemelor se
întâlnesc, în afara unor secvenţe de operaţii care se execută liniar, în mod
necondiţionat, o serie de operaţii care necesită testarea unor condiţii, funcţie
de care se o succesiune de operaţii sau alta, sau o serie de operaţii care se
execută în mod repetat. Avem de a face cu cele trei tipuri de structuri
fundamentale :
- secvenţială /liniară ;
- alternativă/de decizie ;
- repetitivă.
Limbajul de programare Basic implementează aceste structuri de
control ale programului prin comenzi corespunzătoare, deci :
- comenzi pentru structuri alternative ;
- comenzi pentru structuri repetitive.
Comenzile pentru structurile alternative : If…. Then, If…Then…Else,
Select Case.
Comenzile pentru structurile repetitive : While…Wend, Do….Loop,
For….Next, For Each… Next.
Fişierele conţin colecţii de date omogene ca natură şi criterii de prelucrare,
memorate pe discul magnetic .

CAPITOLUL 9

Algoritmi speciali

1. Sortarea unui vector

Prin sortare se înţelege aranjarea elemntelor unei mulţimi , în ordine


crescătoare/descrescătoare a valorilor acestora. Există mai multe variante de
sortare : sortarea prin interschimbare, prin selecţie, prin inserţie,

2. Interclasarea a doi vectori de dimensiuni variabile.

Prin interclasare se înţelege procesul de obţinere din două sau mai


multe mulţimi ordonate, o nouă mulţime, ordonată după acelaşi criteriu.
Există mai multe variante de interclasare :

1. Varianta 1 :

Presupune compararea a două elemente , câte unul din fiecare vector


iniţial, cu scrierea celui mai mic dintre ele în vectorul rezultant şi trecerea la
următorul element al vectorului iniţial din care s-a preluat.

40
2. Varianta 2 :

Presupune obţinerea vectorului rezultant într-un proces unic de comparare.


Pentru a continua procesul în cazul în care se epuizează unul din vectorii
iniţiali, ultimul element al acestuia va primi o valoare mai mare decât oricare
din valorile regăsite, de regulă, în vectorii iniţiali.Această valoare poartă
denumirea HIGH-VALUE (HV) . Procesul se încheie când ambii vectori
iniţiali au fost parcurşi 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 programării, vizând obţinerea unor programe corecte şi fiabile,
reducerea costului elaborării, documentării, testării, întreţinerii şi
dezvoltării produselor software.

Modularizarea programelor.

Algoritmii de rezolvare a problemelor complexe se întocmesc şi/sau


pot fi descompuşi în manieră sistematică, după criteriul funcţional, în
mod ierarhic, până la nivel de subalgoritm/funcţie elementară, ca element
terminal în structura unităţii funcţionale(UF).
Un modul funcţional se caracterizează prin :
• Nume extern şi/sau intern;
• Funcţie logică perfect definită;
• Punct de intrare şi punct de ieşire unice;
• Relaţia cu modulele din aval şi amonte-interfată;
• Posibilitatea elaborării şi testării independente (în cadrul
contextului său);
Tipuri de module funcţionale :
• Module directoare sau de comandă sau monitoare;
• Module de prelucrare sau module-funcţie;

41
• Module mixte;
• Module comune;
• Module speciale;
• Module nefuncţionale;
• Module monitor.

2 Monitorizarea modulelor.

Tipul de monitorizare poate varia în limite relativ largi, în funcţie de


filozofia de realizare a sistemului, de facilităţile de utilizare puse la
dispoziţia beneficiarului său şi de deciziile de proiectare adoptate,
astfel :
• Monitoare pure
• Monitoare complexe
• Monitoare foarte complexe.

3. Interconectarea modulelor.

În mod ideal , modulele trebuie să fie cât 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 :
• Întâmplătoare
• Logică
• Temporală
• Procedurală
• Comunicaţională
• Secvenţială
• Functională.

.4. Tehnici de modularizare

Construirea unor programe modularizate implică utilizarea unor


tehnici şi procedee foarte diversificate :
• Utilizarea tabelelor de decizie şi a diagramelor de optimizare
• Utilizarea parametrilor simbolici

42
• Asigurarea şi definirea centralizată şi standardizată a parametrilor
statici, a datelor comune, a tabelelor de decizie, a listelor.
• Separarea funcţiilor de intrare/ieşire
• Evitarea reutilizării zonelor de memorare temporară intermodule
• Nealterarea valorii constantelor.

5. Tabele de decizie (TD)

Tabele de decizie reprezintă un procedeu de reprezentare a


algoritmilor cu număr mare de decizii bazate pe condiţii complexe sau
dinamice, fiind astfel un mijloc eficient de modularizare. TD conţin două
tipuri d intrări :
• Condiţii elementare simple sau compuse aplicate unor variabile cu
valori alternatil-exclusive de tip alfanumeric sau logic;
Condiţii compuse aplicate asupra condiţiilor elementare prin conjuncţie.

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 programării liniare;
• Metoda programării dinamice.

1. Recursivitatea

Este o tehnică de programare utilizată frecvent , în implementarea


funcţiilor şi procedurilor . La baza recursivităţii stă stiva, care este gestionată

43
în mod implicit, în această zonă de memorie salvându-se automat, la fiecare
la fiecare apel de funcţieurmătoarele informaţii :
• Valorile parametrilor de tip valoare;
• Adresele parametrilor de tip variabilă;
• Variabilele locale ale subprogramului;
• Adresa de întoarcere la instrucţiunea aflată după instrucţiunea de apel.

2. Tehnica “Backtracking”

Această tehnică se foloseşte în rezolvarea unor probleme cum ar fi :


• Generarea permutărilor de n elemente;
• Generarea aranjamentelor;
• Generarea combinărilor;
• Generarea partiţiilor unei mulţimi;
• Problema celor N dame;
• Produsul cartezian a N mulţimi;
• Problema Comis-voiajorului;
• Problema plăţii unei sume S utilizând N tipuri de monede;

3. Metoda “ Divide et Impera”

Exemple de probleme rezolvate cu această metodă : căutare binără.

4. Metoda Greedy

Caracteristicile acestei metode sunt :


• La intrare avem o mulţime A cu N elemente
• Se cere selectarea unei submulţimi B a lui A sau o ordine de
prelucrare a elementelor lui A care să optimizeze o funcţie obiectiv dată . Se
cere deci o singură soluţie.
Elementele mulţimii A se parcurg pe rând, după o eventuală rearanjare a lor,
în vederea testării lor pentru adăugarea acestora la B.

44
CAPITOLUL 12

Probleme

Problema nr. 1

Sa se prezinte sub forma de chema logicã şi instrucţiunea unui limbaj de


programare sau pseudocod un algoritm eficient care sã determine pentru o
matrice de n linii şi m coloane a cãrei elemente se citesc de la tastaturã
urmãtoarele:
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
for j:=1 to m do
begin
writeln('a[',i,',',j,']=');
read(a[i,j]);
end;

45
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
begin
max2:=a[i,j];
y:=i;
end;

46
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];
d:=i;
e:=j;
end;
h) for i:=1 to n do

47
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 sfârşitul


vectorului elementele sale nule pãstrând 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ă C≥0


E=
A-B, dacă C<0

Analizând problema dată, se observă că datele de intrare sunt A, B şi


C. Algoritmul va testa pe C, şi, în funcţie 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ă, bătrânul Trică a murit, lăsând proprietăţile sale ca moştenire


nepotului său Andi, prietenul meu. El a moştenit şi castelul Towertia, bântuit
de fantome. Începând cu ora 12 noaptea până dimineaţa se aud în tot castelul
două zgomote descifrabile: un cântat duios la vioară şi un râs puternic. Andi
a observat anumite obiceiuri:
- când el cântă la pian şi fantoma nu râde, fantoma care cântă la
vioara îşi schimbă activitatea (dacă cânta-tace, dacã tăcea-cântă);
altfel ea face în fiecare minut ce făcea în cel precedent;
- când fereastra este închisă fantoma care râde face ce făcea cealaltă
fantomă în minutul precedent (râde dacă cealaltă cântă, tace dacă
cealaltă tăcea);
- când fereastra este deschisă, fantoma care râde face opusul la ceea
ce cealaltă făcea în minutul precedent.
Andi vrea să ştie cum să scape de fantome (să le facă să tacă)!

Rezolvare:
- 3: când fereastra este deschisă, fantoma care râde face opusul la
ceea ce cealaltă făcea în minutul precedent.
- 1: când el cântă la pian şi fantoma nu râde, fantoma care cântă la
vioara îşi schimbă activitatea (dacă cânta-tace, dacã tăcea-cântă);
altfel ea face în fiecare minut ce făcea în cel precedent;
- 2: când fereastra este închisă fantoma care râde face ce făcea
cealaltă fantomă în minutul precedent (râde dacă cealaltă cântă,
tace dacă cealaltă tăcea)

Problema nr. 6

Duminică, Marius şi Radu au fost să vadă la hipodrom cursa de cai. Mai


întâi s-au dus să vadă caii. Au făcut 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 arătat că nici unul nu a căştigat:


1)Marius nu a ghicit locul nici unui cal
2)Marius nu a ghicit nici măcar ordinea a câte 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 ?

1 2 3 4 5
Radu Doodoo Azur Elfy Candy Emily
Marius Azur Emily Candy Doodoo Elfy

Urmărind 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 2 3 4 5
Elfy Doodoo Azur Candy Emily

Problema nr. 7

Un batranel se duce la piaţã (mai bine statea acasa) sã vândã nişte ouã. Un
tânãr neatent l-a îmbrâncit şi coşul a cãzut spãrgând ouãle. vinovatul vrând
sã îşi rãscumpere greşeala l-a întrebat :

60
-Câte ouã au fost în coş?
-Nu-mi aduc aminte, dar ştiu cã dacã le scoteam câte 2,câte 3,câte 4,câte 5
sau câte 6, în coş rãmânea mereu un singur ou, iar dacã le scoteam câte 7 ,
nu rãmânea nici unul.
Dupã câteva minute de gândire, tânãrul a calculat câte ouã erau.
Tu poţi gãsi numãrul de ouã din coş?

Rezolvare:

- batrânelul spune cã dacã scotea ouãle câte 7 nu mai rãmânea nici


un ou un coş de unde tragem concluzia cã numãrul ouãlor trebuie
sã fie un multiplu de 7
- mai spune cã dacã le scotea câte 2,câte 3,câte 4,câte 5 sau câte 6, în
coş rãmânea mereu un singur ou de unde rezultã cã din numãrul
care este multiplu de 7 dacã scadem 1 trebuie sã rãmânã un numãr
care sã fie divizibil şi cu 2 şi cu 3 şi cu 4 şi cu 5 şi cu 6
- deci cãutãm un numãr care sã aibe ultima cifrã 1 sau 6
- astfel 7, 14 sunt excluse
- incercãm 21:7=3
21-1=20:2=10
20:3 nu este divizibil
- cãutãm în continuare...
- 28, 35, 42, 49 sunt excluse
- verificãm 56:7=8
56-1=55:2 nu este divizibil
- 63, 70, 77, 84 sunt excluse
- continuãm cu 91:7=13
91-1=90:2=45
:3=30
:4=25
:5=18
:6=15
Rezultã cã bãtrânelul avea în coş exact 91 de ouã.

61
Bibliografie

Manual „Algoritmi şi structuri de date: fundamente ale


programãrii structurate” / Cezar Botezatu – Bucureşti :
Editura Universitarã, 2004
Powered by http://www.referat.ro/
cel mai tare site cu referate

62

Вам также может понравиться