You are on page 1of 62

Universitatea Romno-American Facultatea de Informatic Managerial

Algoritmi
i structuri de date
-conspect -

Student: Ciurescu Raul-Cristian Grupa: 602

Anul: I

CUPRINS
1. Sistem Informaional Sistem Informatic
2. Structuri de date

3. Grafuri 4. Algoritmi definire 5. Descrierea algoritmilor 6. Structuri fundamentale ale algoritmilor 7. Evaluarea corectitudinii algoritmilor 8. Limbaje de programare 9. Algoritmi speciali 10. 11. 12. Tehnici de programare Tehnici de programare structurat Probleme Bibliografie

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

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

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

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

b.

c.

d. e.

constituita din totalitatea mijloacelor tehnice de culegere, transmitere, stocare i prelucrare a datelor, n care locul central revine calculatorului electronic. 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. Baz stiintifico-metodologica, care este constituita din modele matematice ale proceselor i fenomenelor economice, metodologii, metode i tehnici de realizare a sistemelor informatice. Baz informationala cuprinde datele suspuse prelucrarii, fluxurile informationale, sistemele i nomenclatoarele de coduri. Resursele umane i cadrul organizatoric, care cuprinde personalul de specialitate i cadrul necesar functionarii sistemului informatic.

Obiectivele sistemului informatic Obiectivele sistemului informatic pot fi clasificate dupa mai multe criterii astfel: A. n functie de sfera de cuprindere pot fi: principale ( generale ) i secundare ( derivate ). B. Din punct de vedere al domeniului de activitati asupra carora se rasfrang efectele utilizarii calculatoarelor electronice, obiectivele pot fi clasificate astfel: a. Obiective ce afecteaza activitatiile de baz din cadrul unitatilor economice ( comerciala, productia, etc. ) cum ar fi: - cresterea gradului de incarcare a capacitatilor de productie existente i reducerea duratei ciclului de fabricatie; - cresterea volumului productiei; - reducerea consumurilor specifice de materii prime i materiale - reducerea personalului administrativ functionaresc; - cresterea gradului de utilizare a capacitatii de cazare; - sporirea volumului incasarilor din cativitati de prestari servicii; - cresterea profitului i a rentabilitatii etc. b. obiectivele ce afecteaza functionarea sistemului informational cum ar fi: - cresterea vitezei de raspuns a sistemului la solicitarile beneficiarilor;

cresterea exactitatii i preciziei n procesul de prelucrare a datelor i informarea conducerii; - reducerea costului informatiei; - rationalizarea fluxurilor informationale; - rationalizarea circuitelor informationale; - sporirea completitudinii situatiilor de informare raportare , etc.
-

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

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

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

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

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

10

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

11

gruparea datelor n colectii de date destinate prelucrarii automate; - reprezentarea externa pe suporturi tehnice; - identificarea, definirea i descrierea procedurilor de prelucrare automata.
-

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

n functie de obiectele pe care le reprezint datele se pot clasifica n: date elementare sau scalare care se prezinta sub forma de entitati indivizibile

12

colectii de date, care se prezinta sub forma unor multimi de date elementare intre care se definesc i se descriu anumite relaii. Componentele unei structuri se pot identifica i selecta prin numele de identificare sau prin pozitia pe care o ocup n cadrul structurii, potrivit relatiei de ordine stabilita. Dupa tipul componentelor, structurile de date se pot grupa n: structuri de date omogene, care contin elemente de acelasi tip; structuri de date eterogene, care contin componente de tipuri diferite.

OBSERVATIE:Daca o structura se poate descompune n structuri de acelasi tip, atunci structura respectiva este recursiva. n mod corespunzator, structurile de date vor putea fi: structuri de date interne , avnd caracter temporar, deoarece sunt realizate n memoria interna de tip RAM ( volatila ); structuri de date externe, care au un caracter relativ permanent, deoarece sunt memorate pe suport extern. Aceste structuri pot curpinde: o fisiere de date o baze de date o banci de date Din punct de vedere al modului de alocare a zonelor de memorie, structurile de date pot fi grupate astfel: structuri de date statice, la care alocarea zonelor de memorie necesare pastrarii temporare a datelor este facuta n momentul compilarii programului i ramane aceasi pe toata durata de executie a programului respectiv; structuri de date dinamice, la care alocarea zonelor de memorie se face numai n momenutl executiei programului, la momentul necesar, ele putand fi modificate, eliberate, sau realocate pe toata durata de executie a programului respectiv. Dupa nivelul de structurare a datelor se poate face gruparea: structura logica, care se refer la modul de ordonare a datelor, la operatorii de prelucrare a datelor; structura fizica, reprezentand modul de implementare, de reprezentare a datelor, pe suport magnetic de date.

13

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

a1

a2 Structur liniar simpl

a3

a4

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

14

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

Structura relationara este formata din mai multe tabele de date elementare, numite tablori sau relaii, obtinute prin metoda normalizarii, pentru a asigura conditiile de integritate i unicitate a datelor i a elimina astfel nomaliile la actualizari.

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

16

n memoria interna el va fi memorat astfel: X 1 X1 de baz

2 X2 Adresa de baz+1

.... Adresa de baz+2*1

n Xn Adresa

Adresa de baz+(n-1)*1

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

17

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

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

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

20

CAPITOLUL 5 Limbaje de prezentare a algoritmilor ( pseudocod )

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

Unele notatii folosite la descrierea algoritmilor

Formulele folosite in matematica si in tehnica sunt date pentru cazul general, aparand in ele atat numele unor cantitati variabile, cat si a unor constante.

In pseudocod subprogramele au urmatoarea forma generala: ANTET Secventa de instructiuni END

ANTET poate fi de forma: PROGRAM nume_program

21

PROCEDURE nume_procedura FUNCTIE nume_functie

Apelul subprogramelor se face prin referirea de forma: Nume ( lista_parametrii ) sau prin intermediul unui cuvant cheie cum ar fi cuvantul CALL: CALL nume_procedura ( lista_parametrii )

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

Figurile geometrice folosite la realizarea schemelor logice se numesc simboluri sau blocuri.

Principiile ralizarii schemelor logice:


22

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

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

scheme logice ramificate

- scheme loice cu cicluri - scheme logice cu cicluri ierarhizate CAPITOLUL 6 Structuri fundamentale ale algoritmilor Structura secvenial sau liniar desemneaz una sau mai multe operaii ce se execut una dup cealalt, n mod liniar (secvenial). Structura alternativdesemneaz execuia unei secvene de operaii S1 sau a alteia S2, n funcie de ndeplinirea sau nu a unei condiii. Structurile alternative sunt de mai multe tipuri: Structura IF THEN ELSE, selecteaz succesiunea operaiilor ce urmeaz a fi executate, funcie de valoarea logic de ,,adevr sau ,,fals pe care o are n momentul respectiv condiia specificat. Dac este adevrat condiia se urmeaz calea specificat de ramura DA, altfel se urmeaz calea NU.

23

Blocul are deci o intrare i dou ieiri, corespunztoare celor dou valori logice posibile pentru o expresie logic (Adevarat i fals, Da i Nu)

Structura IF THEN numit i selecia simpl, este practic o form particular a seleciei IF THEN ELSE, n care blocul de pe ramura Nu este vid. n mod asemntor se poate construi i selecia IF ELSE, cu precizarea c n acest caz blocul vid va fi cel de pe ramura Da. Practic, n ambele forme particulare, se testeaz condiia logic i se specific doar succesiunea de operaii ce trebuie efectuate pe una dintre ramuri. Pe ramura cu bloc vid nu se execut nimic. Structura CASE OF selecteazuna dintre mai multe ramuri, n funcie de valoarea unui selector. De aceea structura de acest tip se mai numete selecie multipl.

Structura repetitiv sau iteraia indic repetarea unei operaii sau secvene de operaii S, atta timp ct este ndeplinit o anumit conditie. n funcie de momentul n care se face testarea condiiei specificate, structurile repetitive sunt de mai multe tipuri:

Condiia poate fi testat anterior execuiei secvenei de comenzi S i atunci avem o structur de tip WHILE DO

24

Condiia se testeaz posterior execuiei secvenei de comenzi S i atunci avem o structur de tip DO UNTIL

Structura repetitiv mai poate fi analizat i din punct de vedere al numrului de reluri. Din acest punct de vedere, o structur poate fi:

fr numrtor, cci nu se cunoate de la nceput numrul de reluri. Aa este cazul structurii de tip WHILE, indiferent de tipul ei. cu numrtor, atunci cnd se tie sau se poate calcula automat numrul de reluri. Aa e cazul structurii repetitive de tip DO FOR

25

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

26

Corectitudinea unui program structurat poate fi verificat prin examinarea fiecrui nod din arborescena sa. Dac fiecare nod se verific local, se spune c programul structurat este corect.

CAPITOLUL 7 Evaluarea corectitudinii algoritmilor Un program realizat trebuie s fie corect, clar, sigur n funcionare, uor de modificat, portabil, eficient, nsoit de o documentaie corespunztoare. Exist numeroase tehnici de verificare i validare a algoritmilor, adresate n general practicienilor, dar i uor accesibile unui nceptor n programare. Dintre acestea amintim: testarea programelor i depanarea programelor verificarea formalizat a programelor cea mai slab precondiie cea mai tare postcondiie instruciuni generalizate sintaxa expresiilor logice

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

Aceste dou aetiviti ar trebui s earacterizeze practic toate etapele prin care trece un program, de la formularea cerinei de rezolvare a unei probleme, la analiza acesteia, la identificarea i apoi descrierea algoritmului de rezolvare a problemei, a codificrii datelor i validarea rezultatelor obinute. Aceasta deoarece tot mai muli specia1iti din diferite domenii arat c aceast activitate de testare i validare nu este specific doar activitii de programare, ci se nt1nete pretutindeni, acolo unde se produce sau construiete ceva; exist n acest sens controale efectuate la nivelul fiecrei operaii sau grup de operaii, dup cum exist i un control final, produsului finit, pentru realizarea recepiei lui finale. n acest sens, activitatea de verificare i validare a unui produs program urmrete n principal, urmtoarele: descoperirea defectelor programului certificarea faptului c programul va funciona corect n condiii de exploatare curent. Testarea programului rmne metoda de baz pentru verificarea corectitudinii unui program, succesul ei fiind condiionat n primul rnd de experiena programatorului, de complexitatea i completitudinea setului de date folosite n procesul testrii, de analiza riguroas, atent a rezultatelor obinute n urma fiecrui test. Prin testarea programului se nelege deci executarea programului respectiv cu scopul de a descoperi o anomalie sau eroare. Ea se bazeaz pe construirea unor eantioane de date de intrare care s conduc la depistarea unor erori n functionarea programului, ntr-un timp ct mai scurt i cu efort ct mai mic. Practic, pornind de la nite date de test construite de el, programatorul ateapt s obin la final sau pe parcurs, anumite rezultate. Dac acestea sunt corecte, complete sau n formatul ateptat avem cel putin o eroare n execuia programuiui. Putem spune c succesul testrii depinde de arta programatorului de a-i construi setul de date de test. Trebuie s precizm ins faptul c relevana testului depinde de numrul eantioane1or de date de test, dar mai ales de calitatea datelor alese. n acest sens, au aprut, n ultimul timp, o serie de metode de elaborare a datelor de test, care ajut programatorul, oferindu-i posibilitatea de a aborda sistematic activitatea de testare a programelor, cu o probabilitate crescut de depistare a erorilor. Aceste metode pot fi denumite: testarea funcional sau metoda cutiei negre, care presupune
28

construirea datelor de test astfel nct s permita testarea fiecrei funciuni a programului; testarea structural sau rnetoda cutiei transparente, care presupune construirea datelor de test astfel nct toate prile programului s poat fi testate. Succesul activitii de testare const deci n conceperea unor date de intrare prin prelucrarea crora defectele algoritmului i deci i a programului s fie puse n eviden prin observarea i analiza rezultatelor obinute. De aceea el este n mare msura dependent de experiena i ndemnarea programatorului, de abilitatea lui de a-i construi datele de test ct mai complete, complexe, cuprinztoare din punct de vedere al situaiilor sau valorilor de excepie ce pot apare n execuia curect a programului. Testarea unui program trebuie s se finalizeze, pentru a fi util, cu semnalarea erorii i localizarea ei. De aceea, testarea programului este urmat de depanarea lui. Depanarea unui program const n localizarea erorii, determinarea naturii sale i corectitudinea ei. Ea se poate face n mod: sttic, dup executarea programului dinamic, n timpul execuiei acestuia

Depanarea simbolic, o alt metod de depanare, este mai uor de utilizat, deoarece ofer posibilitatea de a urmri executarea programului la nivel de limbaj surs. Limbajele de programare ofer, n ultimile lor versiuni, un depanator simbolic integrat, care permite depanarea uoar, plcut i eficient a programelor prin urmtoarele operaii: executarea pas cu pas a programului (un pas inseamn de fapt o instruciune executabil); observarea, n timpul execuiei, a valorilor unor variabile sau expresii specificate de programator (care apar ntr-o fereastr special Watch Window); specificarea unor puncte de suspendare a execuiei programului; modificarea valorilor unor variabile.

n activitatea de testare i depanare a programelor, erorile datorate


29

variabilelor neinitializate sunt greu de semnalat i de localizat, mai ales atunci cnd aparent totul funcioneaz corect. n acest sens amintim variabila cu rol de indice (numrtor) care asigur parcurgerea elementelor unui vector. Aceasta trebuie iniializat cu poziia primului element din ir care trebuie prelucrat i apoi testat i comparat valoarea ei cu cea final. Deasemenea, expresia care stabilete dac un ciclu se execut sau nu trebuie astfel formulat sau initializat nct s asigure sau nu prima execuie, aa cum necesit algoritmul de prelucrare descris. n acest sens, trebuie s facem precizarea c adeseori, suntem nevoii s facem noi, prin program, iniializarea variabilei care controleaz execuia ciclului, pentru a asigura execuia lui pentru prima dat. Este vorba de ciclul cu testarea iniial a condiiei, la care reluarea ulterioar va fi hotrt de valoarea pe care respectiva variabil o primete, n timpul execuiei programului, n cadrul ciclului. Deci, ciclul cu testarea iniial a condiiei trebuie s fie bine analizat, verificat i testat din punctul de vedere al expresiei care-i controleaz reluarea. Practica a dovedit, n timp, c orict de numeroase ar fi testele efectuate asupra unor programe foarte complexe, ele nu pot garanta funcionarea corect a acestora. Ele rmn deosebit de utile pentru semnalarea multora dintre erori i deasemenea pentru familiarizarea programatorului cu algoritmul, cu modul su de lucru. Proprietatea P se numete precondiie sau proprietate final, iar proprietatea Q postcondiie san proprietate final. Practica a dovedit c exist situaii cnd pentru un algoritm A i o postcondiie dat, nu intereseaz o precondiie oarecare, ci se caut cea mai bun precondiie care rezolv algoritmul dat. Fie secvena de comenzi, care calculeaz factorialul unui numr >=2: (n>=2) f:=1; i:=1; while i <n do begin i:=i+1; f:=f*i end (f=n!) Se poate observa factorialul este calculat corect i dac n pornete de la valoarea 1 (n>=1). Deci, precondiia n>=2 poate fi inlocuit cu n>=1 care se consider o precondiie mai bun, care descrie o mulime de date iniiale mai cuprinztoare, obtinut prin adugarea valorii 1. O analiz mai atent a algoritmului arat c precondiia n>=1 poate fi inlocuit cu n>0 considerat o precondiie mai bun, care atest capacitatea

30

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

gramatica punctuatia semantica

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

Blocul

32

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

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

34

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

Instruciuni simple: de atribuire apeluri de procedura instruciunea de salt necondiionat(goto) instruciunea vid

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

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

36

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

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

Instruciuni de selectie multipl ( CASE ) Format: CASE expresie OF lista etichete CASE:instructiune; END; Structura de tablou (Vector, Matrice): structura de tablou n Pascal este mai flexibil dect n alte limbaje de programare, fiind rezultatul compunerii a dou tipuri: tipul de baza al tabloului tipul de indexare al tabloului Setul de caractere : Acestea sunt entiti formate din caractere : Literele mari i mici ale alfabetului limbii romne: A-Z, a-z; Cifrele sistemului de numerotaie zecimal: 0-9; Caractere speciale: =-/^(){}[].,;:_!@#$%&etc; Caractere speciale perechi: <=,>=,=,<>; Separatorii : spaiu, tab, Enter.

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

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

39

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

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

Module mixte; Module comune; Module speciale; Module nefuncionale; Module monitor.

2 Monitorizarea modulelor. Tipul de monitorizare poate varia n limite relativ largi, n funcie de filozofia de realizare a sistemului, de facilitile de utilizare puse la dispoziia beneficiarului su i de deciziile de proiectare adoptate, astfel : Monitoare pure Monitoare complexe Monitoare foarte complexe. 3. Interconectarea modulelor. n mod ideal , modulele trebuie s fie ct mai independente pentru a reduce gradul de cuplare a acestora. Gradul de interconectare poate fi : Minimal Normal; Coeziunea modulelor. Se disting mai multe nivele de coeziune : ntmpltoare Logic Temporal Procedural Comunicaional Secvenial Functional. .4. Tehnici de modularizare 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 funciilor de intrare/ieire Evitarea reutilizrii zonelor de memorare temporar intermodule Nealterarea valorii constantelor. 5. Tabele de decizie (TD) Tabele de decizie reprezint un procedeu de reprezentare a algoritmilor cu numr mare de decizii bazate pe condiii complexe sau dinamice, fiind astfel un mijloc eficient de modularizare. TD conin dou tipuri d intrri : Condiii elementare simple sau compuse aplicate unor variabile cu valori alternatil-exclusive de tip alfanumeric sau logic; Condiii compuse aplicate asupra condiiilor elementare prin conjuncie.

CAPITOLUL 11 Tehnici de programare structurat

Cele mai utilizate tehnici de programare structurat sunt : Recursivitatea ; Metoda Backtracking; Metoda Divide et impera; Metoda Greedy; Metoda Branch and Bound; Metode euristice; Metoda programrii liniare; Metoda programrii dinamice. 1. Recursivitatea Este o tehnic de programare utilizat frecvent , n implementarea funciilor i procedurilor . La baza recursivitii st stiva, care este gestionat

43

n mod implicit, n aceast zon de memorie salvndu-se automat, la fiecare la fiecare apel de funcieurmtoarele informaii : Valorile parametrilor de tip valoare; Adresele parametrilor de tip variabil; Variabilele locale ale subprogramului; Adresa de ntoarcere la instruciunea aflat dup instruciunea de apel. 2. Tehnica Backtracking Aceast tehnic se folosete n rezolvarea unor probleme cum ar fi : Generarea permutrilor de n elemente; Generarea aranjamentelor; Generarea combinrilor; Generarea partiiilor unei mulimi; Problema celor N dame; Produsul cartezian a N mulimi; Problema Comis-voiajorului; Problema plii unei sume S utiliznd N tipuri de monede;

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

44

CAPITOLUL 12 Probleme Problema nr. 1 Sa se prezinte sub forma de chema logic i instruciunea unui limbaj de programare sau pseudocod un algoritm eficient care s determine pentru o matrice de n linii i m coloane a crei elemente se citesc de la tastatur urmtoarele: a) media aritmetic a elementelor de pe fiecare linie b) media aritmetica a elementelor de pe fiecare coloan c) valoarea elem. maxim i locul n care acesta se afl de pe fiecare linie d) valoarea elem. maxim i locul n care acesta se afl de pe fiecare coloan e) valoarea elem. minim i locul n care acesta se afl de pe fiecare linie f) valoarea elem. minim i locul n care acesta se afl de pe fiecare coloan g) elementul maxim la nivel de matrice h) elementul minim la nivel de matrice program matricea_de_la_curs; type matrice=array[1..20,1..20] of integer; var a:matrice; max,max2,min,min2,w,z,i,p,maa,m,n,d,e,f,g,minn,maxx,j,s,ma,x,y:integer ; begin writeln('dati nr de linii i nr de coloane'); write('n='); readln(n); write('m='); readln(m); for i:=1 to n do 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 sfritul vectorului elementele sale nule pstrnd ordinea celorlalte elemente. program ddd; type vector=array[1..20] of integer; var v:vector; n,i,j,k:integer; begin write('dati numarul de elemente'); readln(n); for i:=1 to n do begin write('v[',i,']='); readln(v[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if v[i]=0 then begin k:=v[i]; v[i]:=v[j]; v[j]:=k; end; for i:=1 to n do writeln('v[',i,']=',v[i]); readln; end.

53

SCHEMA LOGIC:

54

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

55

SCHEMA LOGIC:

56

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

57

SCHEMA LOGIC:

58

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

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

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

Urmrind tabelul de mai sus putem afirma c: Pe locul I nu va fi Doodoo sau Azur Pe locul II nu va fi Emily Pe locul III nu va fi Candy Pe locul IV nu va fi Doodoo Pe locul V nu va fi Elfy Deci Doodoo poate fi pe locurile II sau V. Ordinea este: 1 Elfy 2 Doodoo 3 Azur 4 Candy 5 Emily

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

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

61

Bibliografie

Manual Algoritmi i structuri de date: fundamente ale programrii structurate / Cezar Botezatu Bucureti : Editura Universitar, 2004
Powered by http://www.referat.ro/ cel mai tare site cu referate

62

You might also like