204
Doina Logofatu (n. 18 martie 1974) este absolventa a Pacultatii de Informatica, Universitatea "Al.I. Cuza" din Iasi. in 1999 a absolvit cursurile de studii aprofundate (masterat), cu lucrarea de disertatie Programarea distribuiui in Java RMI. 0 analiza comparaiivii. A predat la Liceul de Informatica "Grigore C. Moisil" Iasi, a sustinut laboratoare de C/C+ + la Facultarea de Informatica Iasi, a lucrat ca programator la firrne de soft din Iasi l}i Muncben. in prezent, lucreaza ca programator in Munchen. Este ccautoare a manualului de informatica pentru clasa a XI-a, profilul matematica-informatica (petrion, 2001), autoare a cartii C+ +. Probleme rezotvate # aIgoritmi (Polirom, 2(01) l}i a unor articole publicate in revista GInfD. Doina Logofatu Bazele - .. "- programarll In Aplicalii c © 2006 by Editura POLIROM www.polirem.ro .;.. "'-'-'" ': ,yo,;.. -c- ::" L,i. __ ,""C ... ' .-:." '-,0.- ...... Editura POLIROM Iasi, B-dul Carol I nc. 4, P.O. BOX 266, 700506 Bucuresti, B-dull.C. Bratianu nr. 6, et. 7, ap. 33, C,P. 37; P.O, BOX 1-728, 030174 Descrierca elP a BibIiotccii Natlonate a Rnmaniei : apllcatli I Doina Logoflitu. - Iasi : Polirorn, 2006 LOGOFATU, DOINA Bazele programarf in C: Bibliogr. ISBN: 973-46-0219-5 004.43 C (075.8) Printed in ROMANIA -'-. ;;,' . POll ROM 2006 ..' :'"

Bazele Programarii Doina Logofatu

Embed Size (px)

DESCRIPTION

bazele-programarii

Citation preview

  • Doina Logofatu (n. 18 martie 1974) este absolventa a Pacultatii de Informatica, Universitatea"Al.I. Cuza" din Iasi. in 1999 a absolvit cursurile de studii aprofundate (masterat), cu lucrarea dedisertatie Programarea distribuiui in Java RMI. 0 analiza comparaiivii. A predat la Liceul deInformatica "Grigore C. Moisil" Iasi, a sustinut laboratoare de C/C+ + la Facultarea de InformaticaIasi, a lucrat ca programator la firrne de soft din Iasi l}i Muncben. in prezent, lucreaza caprogramator in Munchen. Este ccautoare a manualului de informatica pentru clasa a XI-a, profilulmatematica-informatica (petrion, 2001), autoare a cartii C+ +. Probleme rezotvate # aIgoritmi(Polirom, 2(01) l}i a unor articole publicate in revista GInfD.

    Doina Logofatu

    Bazele- .. "-programarll In

    Aplicaliic

    2006 by Editura POLIROM

    www.polirem.ro

    _-~~J~';":::"':'::"";;""";[':'.;.. "'-'-'" ~- ': ,yo,;.. -c- ::" L,i. __ ,~'L.~-L",:;,~:" ,""C ~... ' ~~ .-:." '-,0.- ......~

    Editura POLIROMIasi, B-dul Carol I nc. 4, P.O. BOX 266, 700506Bucuresti, B-dull.C. Bratianu nr. 6, et. 7, ap. 33, C,P. 37; P.O, BOX 1-728, 030174

    Descrierca elP a BibIiotccii Natlonate a Rnmaniei :

    apllcatli I Doina Logoflitu. - Iasi : Polirorn, 2006LOGOFATU, DOINA

    Bazele programarf in C:Bibliogr.ISBN: 973-46-0219-5

    004.43 C (075.8)

    Printed in ROMANIA

    -'-. ;;,' . ..,,~-

    POll ROM2006

    ..' :'"

  • _-i;" .---'-_: ..... :.

    Profesorilor mei de maremauca, Rodica Ungureanu(Liceul teoretic "Grigore Ghica") Si Victor Bamea

    (~koalaGenerala or. 7), eu multumiri Si recunostinta

    "

    Cuprins

    Cuvant tnainte

    Evolutla sistemelor de calcul

    1. Abacul2. Noi instrumente de ealeul3. Blaise Pascal4. Gottfried Wilhelm von Leibniz5. Xavier Thomas de Colmar Si primul calculator

    "pentru mase"6. Masina lui Joseph Jaquard7. Charl.es Babbage si Lady Ada Lovelace8. Parintele algebrei Boole

    . 9. Invenrarea masinii de scris10. Hollerich Si Powers - no", cogcepte lmpottante. . ..".~ ... " "'. ,'. - . .. -

    11. Efecrul Edison, electricitate, comutatoare si amplificatoare12. Analizorul dlfcrenjlal al lui Bush13. Masina Turing14. Impactul algebrei Boole asupra circuitelor elcetronice15. Primul computer electroll;ic digital - ABC16. George Stibitz, primul computer electronic digital,

    acccs de la dtsrama17. Konrad Zuse18. ENIAC - succesul computerelor digitale19. Ideile revolujionare ale lui John von Newmann20. Succesorii lui ENIAC: EDVAC si UNIVAC; caractcristici21. Circuitul lntcgrat - cipul -:-' cipul de-siliciu22. Generatiile sistcmelor de ealeul23. Incursiune in viitor24. Exercitii, tntrebari

    11

    1315151617

    1818182021

    ~12122222223

    232424252626272727

  • 293131323739394041414245454647484849

    Algoritmi - elemente definitorii

    1. Geneza cuvantulul algoritm2. Definitii alternative3. Exemple4. De la problema spre solutie5. Proprietajile unui algoritm6. Algoritmiea7. Modelul de ealeul RAM8. Complexitatea algoritmilor

    8.1. Nota/We e. 0 # a8.2. Optimalitate, reducere, exemple

    9. Exemplu comparativ de crestere a lui Otgfn)10. Timpul real necesar unui algoritm (polinomial vs exponential)11. Clasificarea problemelor (P, NP, NP-complete, NP-hard)12. Probleme NP-complete13. Problema satisfiabilitatii (SAY)14. Clasa problemelor NP-hard15. Exercitii Si probleme propuse

    Limbajul C - prezentarc generala 511. Istorie .al llmbajului 532. Construcjii de baza 54

    2.1. Setul de caractere 542.2. Identijieatori 542.3. Cuvinte-cheie 542.4. Tipuri de date 55

    ~:~: ~~fflG'!:e~-~::~~:':;::'~~:.:.::::: ~.~ :~:::::::: ~~:::::::::::::::::::::: >~: :~'::: :~:::::::::::::: :.~~2.7 Comentariile 56

    3. Expresii 573.1. Operanzi 573.2. Operatori 57

    4. Structura programelor C 584.1. Directive de preproeesare , 584.2. Functii 59

    5. Instrucjiuni 605.1. lnstructiunea vida 605.2. Instructiunea expresie 605.3. lnstructiunea compusd 60

    ~ :~: ~~~~~~;&:=:"~~i~l:~~:: :,~,~.:: ~.~:':;::{ :'~ :~.:::::::.:..:.;::::: :.~:::: ~:: :,:~.:,::::::::::::::::: :~5.6. lnstructiunea for : 625.7. lnsmcqiunea do-while 625.8. Instructiunea switch ~ 62

    5.9. lnstructiunea break 635.10. Instncqiunea continue 63

    6. Intrari/iesiri standard 636.1. Functta de scriere cu format 636.2. Functia de citire cu format 64

    7. Fisiere : " ,.. 647.1. Deschiderea unui fisier : 657.2. Inctuaerea unuifisier 657.3. Punctia de verificare a sfiir#tului de fisier 657.4. Functii de citlre/scriere 65

    8. Noi tipuri de date: struct, e num, union 668.1. struct 668.2. enum ~i typeaef 678.2. union 68

    9. Tablouri 699.1. Concept, declarare, irqializare 699.2. Tablourile multidimenstonale 709.3. Tablourile de caractere 71

    10. Pointeri, sizeof alocarea dinamica a memoriei 7110.1. Notiune, exemple, metode specijice 7110.2. Poimeri folositl ca argumente in functii 7410.3. Pointeri ~i tablouri 7410.4. Pointeri ~i structuri 7510.5. Greseli uzualecu pointeri 76

    11. Siruri de cara~tere 7711.1. Reprezentarea $i lucrul eu siruri de caractere 7711.2. Operatii cu siruri de caraetere,: biblioteca 77

    ~~: ~:~::~~: ::::ll~r:s~~piotli~~':;~p~~~:~:: ::~~:~:: :.::::: ::":::::::::::::::::::::: :~::~:::::::::::: ;~Algoritmi elementari 95

    Problema 1. Dtvitibilitate prin sciideri 97Problema 2. Algoritmullui Euclid . 98Problema 3. Test simplu de primalitate 99Problema 4. Distantdminima intre puncte 100Problema 5. Dimensiunea spatiului de memorie , 103Problema 6. Numerele lui Fibonacci 104Problema 7. Pozitia punctului in cere 106Problema 8. Media aritmetica 107Problema 9. Sir recurent .- 108Problema 10. Functie sinonima cu atol _ 109Problema 11. {n!t?rr!,~/~i 1:spr: ,J:aracf~r.x..: ';"A" ~ ',_'::-;'" ',' ':.~"" 111Problema 12. Pallndrom ~j sunidcifrelor : : ..: ~ :~.:.:: : 111Problema 13. Radical injinit 113Problema 14. Serie eu valoarea l( 114Problema 15. Instrucsiunea de decizie ?: 120

  • 297298298

    Structurt, uniuni, campurl de bili 197Problema 1. Puncte colineare.................................................................... 199Problema 2. Suma a doua fraqii 201Problema ,3. Reuniune de intervale 203Problema 4. Diferenta, reuniunea ~i iruerseqia a doua multimi '" 204Problema 5. Apartenenta unui punct la disc 207Problema 6. Test union ' 209Problema 7. CfJmpuri de biJi 212Probleme propuse 213

    Operatll pc bitl 215Problema 1. Reprezemare binard ............................................................ 217Problema 2. Operatit elementare pe bi!i 218Problema 3. impachetarea datei 219Problema 4. Diferite opera/if jolosind bitii 221Problema 5. Numarul bitilor 1 in reprezenrarea tn baza 2 224Problema 6. Ciurul lui Eratostene pe bifi 225Probleme propuse 227

    Funcpl de timp, numere aleatorii 229Problema 1. Ziua din saptamfJnl1 231Problema 2. rand (), qsort () # bsearch () 233Problema 3. Cap si pajurd 235Problema 4. Hartie-pumn-foarfece 237Problema 5. Timp simplu 239Problema 6. Pauza fn secunde 240Problema 7. Data ~i ora curente 241Problema 8. Trecut sau viitor 242Probleme propuse ' 243

    S~~PC~\lri cu ~~ptQref~rire , : ~ :.. ::: :: ~ : 247Problema 1. Cuvinte in propozqie 249Problema 2. Cuvinte eu majuscule ordonaie crescator 251Problema 3. Cuvinte eu majuscule ordonate crescator ~i luate 0 singura data 253Problema 4. Matrice rare ; 254Problema 5. Joe de copii I 262Problema 6. Joc de copii II 265Problema 7. Tabela de dispersie (Hash Table) 269Problema 8. Crearea listelor 274Problema 9. Stiva (Stack) 278Problema 10. Carfi de joe 282Problema 11. Parcurgerea arborelui binar 289Probleme propuse _ 292

    Grafuri, tehnici dcprcgramare .'.;.:.-; 295

    1. GrafuriMetode de reprezentareProblema 1.1. Parcurgerile BFS ~i DFS

    121123124125126127128130131132135137138140142143144145148150152154155157159160161163 .-

    164166171

    173174175177178179183185187189190192193

    Problema 16. Perechi spectateProblema 17. Seria FareyProblema 18. Divizori comuniProblema 19. Tranformare dintr-o baza in baza 10Problema 20. Testarea formatarli afi~.arN numerelor naturaleProblema 21. Numere perjecteProblema 22. Numere prieteneProblema 23. Suma cuburilorProblema 24. Coduri ASCIlExercitii # probleme propuse (nu sunt permise tablouri)

    Tablourt, pcinteri, pointed la functiiProblema 1. Element minim intr-un tablou unidimensionalProblema 2. Bubble SortProblema 3. Derivata unui polinomProblema 4. Ciurul lui ErasosteneProblema 5. Selectarea numerelor ce depasesc un pragProblema 6. Inmutnrea unuipolinom cu (X-a)Problema 7. Produs a aouo matriceProblema 8. Conjecture lui GoldbachProblema 9. Btemente vecine cu difererqa 1Problema 10. Rezolvarea ecuatiilor de gradul alII-leaProblema 11. Cautarea unui element intr-un tablou unidimensionalProblema 12. Sortarea coloanelor in matriceProblema 13. Elemente simetrice in tablou piuraticProblema 14. Pointer de parcurgereal unui tablouProblema 15. Adrese in tabtouri

    :..Probtema }6, Interschimbare de octeti.,,-Probl;'ma 17. T~blou -eu pointeri la june/ii

    Problema 18. Puncte-saProbleme propuse

    Siruri de caractere. Operatii ell flslereProblema 1. Copierea unui sir constant (caraeter eu caraeter, pointer)Problema 2. Utilirarea functiilor strcat, strlen, s r rcn r, strrchrProblema 3. Compararea a doua siruri (strcmp; stricmp)Problema 4. Primul subslr care incepe cu un caracter din all sir (strpbrk) ..Problema 5. Gasirea unui subsir fntr-un sir (strstr)Problema 6. Adunarea a douii numere (utilizareajunCfiilor strlen, strcat) ......Problema 7. Secvema de cautaiProblema 8. PasaresteProblema 9. Ut~lizareajunefiilor strncpy, scxcec, strlenProblema 10. Utilizarea functiei strtok ()Problema 11. Concatenarea a douii fisiereProblema 12. Argumente fn Zinia de comandaProbleme ~i exercitli propuse

    d;'-

  • Aplicape r fractali space-feeling 394

    Primulpas este eel rna; greu.

    Conceputa ca un manual pentru cei ce vor sa lnceapa studiul programarli, cartea areca scop inrroducerea in domeniu ~;i fonnarea unor abilitati de abordare a situatiilorpractice, dar suportul teoretic riguros Si varietatea temelor.prezentate 0 indica si celoravand deja cunostinte avansate. 0 recomandam elevilor, studentilor, programatorilor,profesorilor de informatica Si tuturor celor ce doresc sa isi perfectioneze cunostintele indomeniu, putand fi folosita pentru studiul individual, dar Si ca material de lucru la orelede curs.

    Consideram ca limbajul C este eel mai indicat limbaj pentru inceperea studiuluiprogramarii, fiind puternic, flexibil, efieient si stand Ia baza limbajelor orientate peobiect modeme: C+ +, Java, CD. lnainte de a lucra Ia nivelul unui limbaj orientat peobiect sunt necesare dezvoltarea unei gandiri algoritmice, structurate, Si stapanireaconceptelor de baza (elaborarea algoritmilor, variabile, instructiuni, modularitate, alocareade resurse). Cei care iSilnsusesc aceste aspecte vor vedea ca pe un lueru firesc continuareacu C+.+ sau Java, limbaje ce aduc in plus facilitatide abstractizarea datelorsi suporraprogramarea orientata pe obiect.

    Cele 125 de probleme complet rezolvate au grade diferite de dificultate. Pe langadescrierea problemelor este furnizat Si un set de date de intrare Si iesire eloevent, astfelincat cititorul sa tsi poata evalua 0 eventuala solutie proprie. Imediat dupa enuntulproblemei se continua cu 0 parte de analiza a acesteia Si cu descrierea unei metode derezolvare, ce se regaseste in'listing-ul complet al programului aferent. Urmeaza catevaexercitii inrudite cu problema analizata. 0 serie de probleme propuse se gjtseac Si lasfarsitul fiecarui capitol, in total cartea contlnand 400 de exercijii Si probleme propuse.

    De-a lungul a 14 capitole, eititorul este invitat la 0 calarorie care incepe eu prezentareaunor fapte istorice $i teoretlce, urmarind evolutia sistemelor de calcul de-a lungultirnpului, aspecte teoretice Si practice privind definirea-Si elaborarea algoritrnilor siprezentarea limbajului C. Drumul anevoios de la abac pana la calculatorul modem, cupuncte-cheie precum masina decalcul a lui Pascal, ce~__ de: tcsut a lui .Jaquard, rnasinaanalirica a lui Babbage Si contributia Adei Lovelace, efeciulBdlson; Complex Nunib"erCalculator, ENIAC, aparitla cipului de siliciu, este descris cronologic in primul capitol.Notiunea de algoritm, eu istoricuI sau, elementele caracteristice, clasificarl Si exemple

    Cuvant inainte

    377

    405

    327

    Aplicatie t numere mari

    Bibliograjie

    Problema 1.2. Matricea drumurilor 3012. Recursivitate 303

    Problema 2.1. Suma cijrelor unui numar natural 303Problema 2.2. Numarul a 304

    3. Divide et impera ; 306Problema 3.1. Aflarea celui mat mare divizor comun a n numere naturale 306Problema 3.2. Tumurile din Hanoi 308

    4. Greedy 309Problema 4.1. Problema continua a rucsacului. 310Problema 4.2. Colorarea hiirtii 312

    5. Backtracking 314Problema 5.1. Colorarea harIii 314Problema 5.2. Problema fotografiei 316

    6. Programare dinamica 318Problema 6.1. Determinarea combin1irilor 319Problema 6.2. Cuvinte potrivite 320

    7. Probleme propuse 322

    Probleme de concursProblema 1. Cuburi 329Problema 2. Numere Bangia 331Problema 3. Sa taiem pizza! 333Problema 4. Secvenpi Collatz 335Problema 5. PI 337Problema 6. Imersectie de cercuri 339Problema 7. Sortarea DNA-ului 343Problema 8. CutU ascunse .. 345Problema 9. Numere fel de fel 349Problema 10. Big Mod 351

    ~::::: ~;. :::~: ::~~~j~~~ig~:~:~::~:~~~::~:~::~:~~:.::::.:t::-:.:'; ~~~Problema 13. Numere unu 358Problema 14. Codul secret .. 360Problema 15. Impartirea dirtilor la Bridge ': 364Probleme propuse 368

  • in incheiere, va rog pe durrmeavcastra, cititorii pasionati, sa imi impartiiiti ideile,completarile i sugestiile la adresa: [email protected].

    sugestive, este prezentata in eel de al doilea capitol, iar elementele de beza ale limbajuluiC sunt descrise concis ~i sustinute de exemple sugestive in capitolul al treilea.

    Cartea continua ell sapte capitole ce contin probleme rezolvate si propuse, care iSipropun familiarizarea treptata ell limbajul C Si eu elaborarea solutiilor pentru problemeconcrete (instructiuni simple, siruri de caractere, tablouri, srructuri, uniuni, pointed,operatii pe biti, functii de timp, numere aleatorii).

    Ultimele cinci capitate contin elemente mai avansate (structuri "inlantuite, grafuri,Backtracking, recursivitate, programare dinamlca. probleme de concurs, fractali), unuldintre scopuri fiind Si acela de a mart interesul Si curiozitatea cititorului in ceea cepriveste programarca. Capitolul 10, deosebit de interesant, contine II probleme completrezolvate folosind structuri cu autoreferire (liste simplu ~i dublu lnlantuite, circulare,Hash Table, stiva ~i arbori) ~i numeroase probleme propuse. Urmatcrul capitol prezintanojiunea de graf ~i tehnicile traditionale de programare (recuraivitatea, Divide et impera,Backtracking, Greedy. programarea dinamica), tmpreuna eli probleme clasicerezolvatesipropuse. Capitolul 12 contine 15 probleme rezolvate, in general propuse la concursulstudentesc ACM, ~i peste 30 de exercitii si probleme propuse.:Se continua cu realizareaunei aplicatii complexe care urillzeaza liste simplu jnlantuite pentru reprezentareanumerelor naturale mari. in scopul calcularii radicalului de un ordin dat k dintr-unnumar mare, se vor scrie rnetodele corcspuuaatoere ce opereaza cu astfel de numerereprezentate ca Iiste, Ultimul capitol este 0 aphcatie in~dita cu fractali space-feeling carefoloseste, pe langa alte notiuni, operatiile pe biti ~i 0 retina grafica,

    12 cuvANT iNAINTE

    _";'-:f",.~ '

    .Doina LogofdtuMiinchen, februarie 2006

    c-

    Evolutia sistemelor de calcul

    > Abacul - inventie revolutionara> Noi instrumente de ca1cul, concepte matematice, personalitati multivalente :

    Napier, Pascal, Fermat, Leibniz> Xavier Thomas de Colmar ~i primul calculator pentru mase Spre sistemul binar: masina pentru stofe a lui James Jaquard}> Charles Babbage ~i Lady Ada Lovelace}> Creatorul a1gebrei Boole.> Inventarea masinii de scris Hollerich i Powers: noi concepte importante Efectul Edison, electricitate, comutatoare, amplificatoare Analizorul diferential al lui Bush, masina Turing? Redescoperirea tarzie ~.alg~br_ei ~()Qle" Primul computer electronic digital: ABC> George Stibitz: calcule de la distanta> Konrad Zuse - inventatorul computerului ENIAC sau suceesul computerelor digitale Ideile revolutionare ale lui John von Newmann}> Succesorii iui ENIAC:. EDVAC ~i UNIVAC Circuitul integrat, cipul , cipul de siliciu Incursiune in viitor> Exercitii, Intrebari

  • Abac roman

    ._~:, .- -~--?"-

    .-

    fntotdeauna provoaca unul singur scanteia care impingeomenirea inainte.

    Igor Sikorsky (1889-1972),inventatorul elicopterului

    1. Abaeul

    La lnceputuri se foloseau pentru calcule cele zecedegete (de unde si geneza cuvanrului digital - digit),ceea ce a condus la marea popularitate de-a lungulistoriei a sistemului zecimal de calcul. Mai tarzru, inAntichitate, au fost folosite pietricele, pentru a ilustranumarul de obiecte in posesie, metoda eficientapentru lucrul cu adunari ~i scaderi. Inunele culturi,pietrieelele au fost inlocuite cu betisoare, noduri la 0sfoara, semne pe 0 tiiblita de argila etc. Cuvantulabacus provine de la cuvantul arab abaq, care tnseamnafaras i era 0 tabla portabila eu santuri de nisip, pe care se puteau amplasa pietricele.Ulterior, aceste pietricele au fest inlocuite cu margele, santurile cu sfori i tabla eu uncadru, formand ceea ce I10i cuno5lstem sub numele .de 'numaraioare. In Antichitate,abacul a fost 0 inveIrtiet~Vdluporiarj:( tItillzati" mii de ani pentru calcule rapide, desi aufost descoperite felurite table ell numere de catre greci, romani, mesopotamieni, egipteni.Utilizatorii abacului au devenit extrem de prtceputi in calcule, unele teste aratand ca unexpert in folosirea abacului poate fi mai rapid decat un calculator mecanic. Dupadescoperirea abacului, aparitia altar instrumente de calcul a stagnat pentru mai mult de2000 de ani; se pare ca in Evul Mediu stiirua si comertul nu au necesitat calcule maiinaintate.

    2. Noi instrumente de ealcul

    Inceputurile computerelor moderne se contureaza abia in secolul al XVII-lea, candpersonalitati ea Descartes, Pascal, Fermat, Leibniz i Napier revolutioneaza concepteleasupra lumii ale Antichiratiitn-doinenti precuin filosofia, .matematica; -astronomia. inrnatematica, progresul este evident ~i de aceea devine ncccsara aparitia.unor instrumentemai scfisticate de calcul. Inventarea logaritmilor in 1614 de catre matematiciamil scotianJohn Napier (1550-1617) stimuleaza aparitia unor suporturi care sa execute adunari si

  • 16 BAZELE PROGRAMARil iN C. APLICATIIEVQLUTIA SISTEMELOR DE CALCUL 17

    3. Blaise Pascal

    scaderi de logaritmi. Tabelele sale de logaritmi au ajuns repede cunoscute si intensutilizate; in plus. a inventat i 0 masina simpla pentru Inmultiri cu 0 cifra. 0 serie de alIioameni de tiin pasionati au continuat munca lui Napier, inventand diverse instrumentede caleul (germanul Wilhelm Schickard, 1623, englezii Edmund Gunter si WilliamOughtred, 1650 etc.).

    Amfdcu: aceastii scrisoare mal lungii, pentruelinu am avut limpsa 0 fac matscund.Omul nu giiseste nimic mal intolerabil ca [aptul de a fi tntr-o stare de completrepaus, fara-pasiuni, Jara ocupatle, lara diversiune, fara efort, Atunei tsi simtenulitatea, singuriuatea, imperfectiunea, dependenja, lipsa de aiutor i de continue.Un fleae ne consoleaza pentru cd un fleae ne produce necazuri.Teate cauzele sfarsesc atunci _cand dispar sentimentele.lmaginatia decide totui.Riiul este mai pur decal izvorul sau.Omul este 0 trestie, cea mal siaba din natura, dar este 0 trestie gdnditoare.

    4. Gottfried Wilhelm von Leibniz

    Spre sfarsitul vietii a suferit serioase probleme de sanatate Si s-a eoncentrat pescrierea de filosofie religioasa (s-a izolat de lume din cauza puternicelor .convingerireligioase). Unul dintre visele sale, acela de a crea 0 masina inteligenta, "dinspre suflet,spre folosire mecantca", avea sa se tmplineasca pas cu pas de-a lungul timpului, prinimplicarea altar oameni de stiintli pasionati,

    Filosoful lid matematicianul german GottfriedWilhelm von Leibniz (1646-1716) a adus Imbu-nlitiilirilenecesare masinii lui Pascal in 1671. Numa-riuoarea lui Leibniz (hazara pe roata lui Leibniz) afest primul calculator' in doua miscari proiectatpentru inmultirea prin adunari repetate. Leibnizavea 0 cultura enciclopedica, consolidatii devremeintimpul studiilor-sale la Universitatea din Leipzig.Interesulsaupentru matematica crestea pe masura-ce citea tot mai multe opere filosofice. A sustinutun doctorat in drept la Universitatea de la Numberg,a practicat dreptul la Paris pentru a-si putea sustinestudiile sale de matematica, a ocupat funcjii desfatuitor pe langii personalitati politiee ale vremii. I Gottfried Wilhelm von LeibnizIn biografia sa din Encyclopaedia Britannica, el -este descris astfel :

    Leibnie era un om de staturii mijlocie, garbovit # cracanat. la fel de capabil sagiindeascii cateva zile in acelasi scaun ca ~i Sa cdliitoreasciipe striulle Europei Yard~i iarnii. Era un muncitor neobosit, un corespondent universal (a avut peste 600 decorespondenti), un patriot Si un cosmopolit, un mare om de stiintii si unul dintre celemai .put~Tllif,r;~:$ptTite pte civiliratiei vestice.

    In 1675, Leibniz a deseoperit ealculul integral Si caleulul diferential (independent deIsaac Newton), iar nctatiile sale pentru metodele de caleul ale diferentialelor Si integra-lelor au ramas valabile pana asllizi. EI a publicat fcarte mult, al3.t luediri filosofice

    Maslna de calcul a lui Pascal

    ~

    Clarftatea mintii inseamnii Sf claritatea pasiunii ; de aceea, 0 mime clara #minuruuii tubeste cu ardoare-Si vede clar ceea ce iubeste.Am descoperit eli toata nenorocirea umana vine de la aceea ca omul nu e capabilsa stea linistit intr-un lac.De vreme Ce nu putem Sri totul despre toaie, ar trebui sa stim one piutn din toate.Tacerea acestor SEa/if infinite md umple de-spaima.De obicei, suntem mai convinsi de caurele pe care le descoperini singuri dedit decele pe care ni le oferii altii,Ajungem la adevdr nu doar datoritii unei cauze, ci # dataritll inimii.

    Un pas important in evolutia calculatoarelor meca-nice a fost introducerea, in 1642, a "rotilor din-tate", de catre Blaise Pascal (1623-1662), celebrulfilosof, fizician i matematician francez. El aconstruit pentru tatiil sau. care lucra la un biroude colectare a taxelor, un sistem mecanizat cu 0

    serie de cadrane atasate unorroti dintate care aveauinscrise cifrele de la 0 la 9pe circumferinta (acest apa-rat era utilizat doar pentruadunari i scaderl). Visulsan era sa construiasca un aparat cu inteligenta mecanica, care saexecute toate operatiile posibile. $i pentru ca distanta de la adunarela inmuljire nu e asa de mare, nu va trece mult timp pana ladescoperirea unei masini de mmultit prin adunarea repetata anumerelor. Ca filosof, Blaise Pascal a cautat supravietuirea sufle-tului, ca poet i scriior a scris contemplatiile sale despre .,maretiaSi mizeria umana", dar cel mai putemic s-a remarcat prin studiiledin domeniile fizicii si mat~maticii. Impreuna ,Cll Fermat, esteconsiderat a fi coinventatorul teoriei probabilitatilor, a descoperit,in fizica, Legea lui Pascal (presiunea lichidului intr-un containereste constanta), in geometrie, teorema hexagonului (cand avea 16ani), triunghiullui Pascal i aplicabilitatea lui in expresii binomialeSi probebitistica. lata i cateva dintre afirmatiile sale:

    .;;..

  • 18 BAZELE PROGRAMARn iN c. APLICATIJ EVOLUTIA SISTEMELOR DE CALCUL 19

    inovatoare, cat Si rnatematice, iar corespondentele sale aveau ca domenii matematica,logica, istoria, filosofia, dreptul , politica, teclogla. .

    5. Xavier Thomas de Colmar i primul calculator"pentru mase"

    retras fondurile dupa un timp, iar Babbage a incercat sa continue constructia din fonduripersonale, prna cand acestea s-au tenninat i a fost nevoit sa renunte. Aceasta masina,desi avea adaptibilitate i aplicabilitate limitate, a reprezentat un progres important. Maitarziu, Babbage a inventat 0 aWi masina. proiect mult mai ambijios, masina analuica,care includea cinci aspecte cruciale ale viitoarelor calculatoare : un suport de intrare ; 0 modalitate de stocare a numerelor pentru pro-

    cesare; un procesor sau calculator pentru numere ; 0 unitate de control al actiunilor ce trebuie exe-

    cutate; 0 unitate de iesire.

    Babbage nu a definitivat niciodata .constructia,dar structura Iogica a calculatoarelor actuale vinede Ia el, una dintre caracteristicile de baza fiindconceptul de ,,,program stocat", necesar implemen-tarii unui compilator. Relativ la prima masina a luiBabbage, masina diferentiala, ea a fast construitade suedezul Georg Scheutz, care a avut fondurile necesare si a creat 0 varianta simplificataa acesteia, tinand cont ~i de Observatiile Adei Lovelace. Masina a obtinut medalia de aurla a expozitiede Ia Paris din 1855. Babbage era prezent in audienta i a fost frustrat idescumpanit. Ulterior, masina a fast cumparata de catre guvernul englez, acelasi caresistase fondurile de realizare a ei. Foarte interesant este faptul ca in 1991, deci la 120 deani de Ia moartea sa, oamenii de tiinta britanici au reconstruit masina analitica aluiBabbage, urmandu-I intocmai planurile. Rezultatul a fast a masina imensa care afunctionat perfect, iar calculele aveau 0 precizie de 31 de cifre. Aceasta poate fi admirata

    .__. '.-..'" astazi la Muzeul Britanic, unde se remarca acuratejea gandirii .lui Babbage, rnigala i'::~~;~:::=~~~~1!J'dare.a-:cu care a prolectat-o. . ".,' , ,,':_ ,,' '-., .,c:~~ ~ -_~ Lady-Ada Lovelace (1815-1852), fiica Lordului Byron: a devenit implicata in proiec-

    """--.- -'la-ie. Ea l-a ajutat pe .Babbage nu doar financlar, ci i prin importante contribujiirnaternatice cu privire la masina analiticd. Ada Lovelace a fast printre putinii din vremeasa care i-a injeles imporranja ~i potentialul, scriindu-i acestuia: "Putem spune ca masinaenalirica jese modelele algebrice la feI cum razboiul de tesur a lui Jaquard tese flori sifrunze". Ada a fast fasclnata de masinile lui Babbage ~i a acceptat, in 1843, sa traducadin franceza lucrarea Elemente ale masinii analitice a lui Charles Babbage a lui LuigiFrederico Menabrea, Accasta Iucrare si-a triplat volumul datorita notelor ~i observatiilorpersonale ale Adei. Babbage, persoana nu tocmai placuta in particular, a fast impresionat

    ~i i-a scris : "pe masura ce citeam notele dumneavoastra, mi-a crescut i surprinderea cuprivire la ele ~i regret ca nu am explorat mai din timp un filon asa de bogat in metaluleel mai nobil". in iulie 1843, Ada ii scrie lui Babbage, cerandu-i parerea: "A vrea sapot introduce ceva de genul numerelor lui B~I1)9u1li ... c~ un ,exempl~ despre cum 0functie trebuie sa fie prelucrata de masina, fara:'~~filucrat~ de:miiiteai mana ornului".Rezultatul .a fost Iarg acceptat ca fiind primul program de computer ~i chiar daca nu a fosttranspus in practidi in timpul vietii sale, Cll sistemele din zilele noastre programul propusde ea pentru calculul numerelor lui Bernoulli produce rezultate corecte. De exernplu, ea

    .0 )1,,,"":

    Masina lui Jaquard

    6. Masina lui Joseph Jaquard

    Una dintre inventiile revolutiei indus-triale ce a avut legatura directa ellcomputerele este fliClita.' in 1801 decatre francezul Joseph Jacquard(1752-1834). El a perfectat primamasina de perforat cartele, eli scopulde a crea modele pentru stofe. Uncelebru portret al inventatorului a fastprodus eu ajutorul a 24.000 de carteleperforate. Clnd Jacquard si-a introdusmasina pentru prima data, a Intern-pinat dificultati in a fi acceptata dincauza .frici! de masini", in orasul Lyon,el a fast atacat fizic Si masina i~'tJost ..1t,,' _distrusa, Dar ceea ce a reusit Jacquard ~ - .cu acest dispozitiv a fost stabilirea unei

    comunicari om-masina cu .ajutorul a douacuvinte : gaura ~i "ne-gaura", prefatare a sis-temului binar devenit ulterior universal.

    7. Charles Babbage i Lady Ada Lovelace

    Francezul Xavier Thomas de Colmar (1785-1870) a creat Arithmometrul, primul calcu-lator produs in masa, ce a continuat sa fie vandut timp de 90 de ani (Intre 1820 Ii 1878au fast construite peste 1.500 de astfel de masini), Au fost folosite cilindrii in treapta Iiactivatorul digital inventate de Leibniz.

    Charles Babbage (1792-1871) nu are faima de a fi construit primul computer din Iurne,dar a incercat din greu ~i a fost foarte aproape sa 0 faca, Singura sa greseala a fost ca s-anascur intr-un timp cand tehnologia de a construi un computer modem nu era asa deavansata ca si ~tiinta proiectarii acestuia. Profesor Ja,-Cambridge,el a fost un fanatic,'privind acuratetea matematica. '... ' . -. - . ". . . .

    A proiectat. in 1822, 'b,ma~ina mecanica automata de calcul, ma~ina diferentiaHi,care s-a dovedit mult mai greu de construit decat ii imaginase; guvernul britanic ~;i-a

  • 20 BAZELE PROGRAMARII iN C. APLICA TIl EVOLUTLA SISTEMELOR DE CALCUL 21

    scrie: Here follows a repetition of operations 13 to23 (;Urmeazil 0 repetitie a operajiilor 13 pana la 23 "),inrroducand ideea de loop. Babbage tnsusi a recu-noscut ca Ada Ii tntelcgc masina analiticii chiar maibine decat el tnsusi i ca era ell mult mai buna decatel in a 0 explica. Una dintre ideile ei a fost i conec-tarea masinii ell muzica, ea scriindu-i lui Babbage in1843: "Din nou, [mClina analiticiii poate lucra i eliaIte obiecte in afara de nurnere, acolo unde obiecteleale carer relajii mutuale fundamentale pot fi expri-mate de cele ale tiintei abstracte a operajiilor, i carepot fi susceptibile la adaptari pentru a actiona ellnotatia operajiilor ffilijiinii... Presupunand, de exem-pIu, ca relatiile fundamentale ale diferitelor sunete in

    ~tiinta armoniei sl a compozitiei muzicale ar fi sus-ceptibile unor 'asttet de expresii si adaptari, masina arputea elabora i piese muzicalestiintifice de orice fel de complexitate Si Intindere". Augusta Ada Byron; contcsa deLovelace, este prima femeie programator, ideile sale de loop ~i subrutine au devenitbazele programarii ~i este singura femeie careia i s-a dedicat un Iimbaj de programare -ADA -, dezvoItat de Departarnentul de Aparare al Statelor Unite, primul Iimbaj standar-dizat de nivel inalt. Ea a fost un matematician prolific de la 0 varsta frageda (Intr-o lumeostila, in care doamnele nu fiiceau astfel de lucruri), Iar flerul i premonijiile sale privindgandirea logica Si matematica erau spectaculoase si inedite. Din pacate, a murit la doar36 de ani; jnrrerupandu-si prea devreme activitarile creatcarc.

    8. Parintele algebrei Boole

    Englezul George Boole (1815-1864) a introdus ideea de a.-~" fcprcztf'nta'1iifoimaliadoar cu ajutorul celor -dout'valori Iogice,

    adevarat Si fals, plus concepte Si fonnule de a manipula acesteinformatii. Algebra Boole devine teoria matematica ncccsarapentru a opera cu sistemul binar. La varsta de 24 de ani,George Boole ii publica primul sau articol, "Cercetiiri pri-vind teoria transformarilor analitice", in Cambridge Mathe-matical Journal, iar in urmatorii 10 ani publica 0 serie dearticole care Iargesc limitele matemaricii "moderne". tn 1844,s-a concentrat pe utilizarea algebrei combinate i, in acelasian, a primit 0 medalie de la Societatea Regala pentru contri-bupile sale privind analiza. Curand, Boole a observat posi-

    bilitatile aplicarii.algebrei sale pentru solutionarea problemelor logice, iar in lucrarea din1847, Analiza matematicd a logicii, nu numai ca a extins speculatiile lui Leibniz privindIegatura dintre logidi Si matemalidi;-dar ciliar:a afirmat di logica estemai curand 0discipIina matematica decat una filosofidi. Concentrandu-se pe rafinarea conceptelorsale, a cautat sa creeze un limbaj logic care sa poata fi manipulat matematic, ajungmdla 0 algebra lingvisticii cu trei operateri de baza: AND, OR Si NOT. Sistemullui Boole

    (detaliat in 0 investigatie a legilor gandirii, pe care suntfondate Teoriile Matematice aleLogicii Si Probabiliuqilor, 1954) se baza pe 0 concepjle binara, procesand doua obiecte :atat de cunoscutele acum da/nu (yes/no), adevarat/fals (truelfalse) , on/off, zero/unu(zero/ones. Surprinzator, comunitatea academics a vremii a ignorat sau chiar criticalaceasra teorie, doar eminentul om de stiintli american Charles Sanders Peirce, intuindu-iperspectivele, a realizat potentiala utilizare in circuitele electronice, .@ra a reusi tnsaconstructia un aparat teoreric corespunzator, Meritul sau este acela de a fi inrrodusalgebra booleana in cursurile de filosofie logics dela universitarea sa. Ctriva ani maitarziu, studentulla Massachusetts Institute of Technology (MIT) Claude Shannon avea sagaseesca legatura concreta dintre logica booleana Si circuitele electrice.

    9. Inventarea masinil de scris

    In 1867, americanii Christopher Latham Sholes, Carlos Glidden si Samuel W. Soule auinventat prima masina de scris, iar in 1885, Dorr Eugene Felt a crear comptometrul,primul calculator care permitea introducerea numerelor prin apasarea unor taste, conec-tate cu 0 serie de metode primitive.

    10. Hollerich i Powers - noi concepte importanteUn semnificativ pas inainte in calculul automat a fost redescoperirea cartelelor perforate,introduse cu succes in 1890 de catre Herman Hollerich ~i James Powers. Ei au proiectatun sistem prin care informatii relevante despre 0 persoena (nume, varsta, sex) puteau ficodificate Cll ajutorul unor gauri in cartele cu 240 de pozitii (20 de randuri ~i 12coloane). Aceste cartele perforate au introdus concepte precum intrare/iesire (input/output) Si stocarea memoriei la scara mare. in 1896, Dr. -Hollerich a fondat TabulatingMachine Company pentru.n-promova.utilizarea comerclala a acestei masini, urnfand cain 1924, dupa carcva transformari Si redenumiri, compania Sa se numcasca InternationalBusiness Machines (IBM).

    11. Efectul Edison, electricitate, comutatoare i amplificatoareAlte descoperiri importante au fest becuI electric i Efectul Edison, descoperite in 1879de catre inventatorul american Thomas Alva Edison (1847-1931), detectarea undelorradio si convertirea lor in electricitate de catre fizicianul englez John Ambrose Fleming.In 1906, inventatorul american Lee De Forest (1873-1961) a introdus a1 treilea electrod,avand ca rezultat 0 triodd ; rolul de arnplificator sau comutator {Ii multe transmitatoareradio au fost construite folosind aceste triode. Triodele introduse de De Forest aurevolutionat campul radio4ifuziunii i~au.;fosLdesti.nate-pentru a realiza chiar mai'mult.Datoritii abilitii!ii lor de a func!iona drept comutatoare, ele vor avea un impact extra-ordinar asupra calculului digital.

  • 22 BAZELE PROGRAMARII iN C. APLlCATII EVOLUTIA SISTEMELOR DE CALCUL 23

    logice circuitelor electronice i a dcmonstrar cum conceptelealgebrei Boole pot fi utilizate pentru a reprezenta functiile comu-tatoarelor in circuitele electronice, instrumente matematice careau ramas 0 piarra de baza in proiectarea electronica digitala panain zilele noastre. Teza lui Shannon a avut un impact deosebit,deoarece ulterior atenjia comunitajilor stiintifice intemationaledin domeniu s-a concentrat pe constructia de masini de calcu!.bazate pe logica formals. ..

    16. George Stibitz, primul computer electronic digital,accesul de la distanta

    15. Primul computer electronic digital - ABC

    In 1939, Atanasoff i Berry au construit prirnul computer electronic digital din lume -Atanasoff Berry Computer (ABC). in 1937, profesorul Howard Aiken de la Harvard ainceput constructia unui sistem pentru calculul automat, creand seria calculatoarelorMark. Mark I a fost terminat cu ajutorul inginerilor de la IBM, avea dimensiuni gigantice,folosea cartelele perforate ca intrare pentru luarea deciziilor de-a lungul unor sistemeelectromecanice (adunarea Si scaderea luau 0,3 secunde, inmultirea - mai putin de 6secunde Si tmparrirea - mai putin de 16 secunde), iar rezultatele erau serise tot pe carteleperforate. Putea Sa execute cele cinci operatii, dar poseda Si subrutine pentru a lucra cufuncjii logaritmice Si trigonometrice. Aceasta masina a fost folosita intens de catrearmata americana in perioada celui de-al doilea razboi modial.

    Cam in aceeasi perioda cand Claude Shannon lucra lateza sa de masterat.~~p"'fet'algeb~o61eana-"~i -circulteleelectronice, George Stibitz (1904-1995), cercetiitor la BellLabs, a avut aceleasi idei. Realizand ca logica booleanapoate fi utilizata pentru comunicarea dintre rclccle tele-fonului electromecanic, el a coneetat tmpreuna un conglo-merat de relee, baterii, lampi, sarme ~i bucaji de cositor,pe care le-a mesterit pe masa sa din bucatarie in 1937.Rezultatul a fast un circuit ce controla adunarea binara,pe care l-a Incorporat in calculatorul digital Model K (dela kitchen - bucatarie, in engleza). Doi ani mai tarziu, incolaborare cu Samuel Williams, a construit la Bell Labs 0masina care executa toate cele patru operatii matematicepentru numere complexe. Complex Number Calculator(redenumit 'mai tarziu Bell LaQs~MQ4e! Relay rO,mputer)... ., , _ ~_" ':-

  • 24 BAZELE PROGRAMARIJ iN C. APLICATIJ EVOLUTIA SISTEMELOR DE CALCUL 25

    17. Konrad Zuse

    computer mai performant. Masina, cunoscuta subnwnele de Electrical Numerical-Integrator andCalculator (ENJf4C) a fost terminatil in 1946, avea30 de tone Siun volum imens, dar putea sa execute500 de adunari i300 de Inmultiri pe secunda,adica efectua tntr-o zi cat ar fi facut 0 persoana in300 de zile. Datele de intrare Si iesire erau codi-ficate pe cartele perforate care puteau stoca doar20 de nurnere zecimale. Instructiunile executabileale calculatorului erau incapsulate in unitati sepa-rate ale sale, ce trebuiau conectate pentru a crea"traseul" fluxului de informatii, Conexiunile tre-buiau refacute pentru fiecare calcul, tmpreuna euinitializarea unor tabele si eomutatoare. Acesta teh-nica de "cablare" era greoaie, dar EN/AC era programabil Si a' fost efieient pentruprogramele carora le-a fost destinat. EN/AC a fost acceptat ca fiind primul computerdigital de sucees Si a fost folosit in perioada 1946-1955.

    19. Ideile revolutionare ide lui John von Newmann

    Fascinat de succesullui EN/AC, matematicianul John vonNewmann (1903-1957) a scris in 1945 un studiu abstractal calculului in care arara ca un sistem de caleul trebuiesa alba 0 structura fizica fixa, simpla si sa fie eapabil dea executa orice fel de calcule pe baza unui controlcorespunzator programat, rara a fi nevoie sa se modificeunitliti fizice. EI recomanda sistemul binar pentru srocareadatelor si propunea .insrructiuni de control ~imetode destocare a acestora. Von Newmann a adus 0 contributieimportanta despre cum sistemele de caleul rapide trebuieorganizate i construite. Aceste idei, numite de obicei"tehniea programelor stocate", au devenit esentiale pentrugeneratiile viitoare de sisteme de calcul perfonnante i au

    fost universal acceptate. Technica programelor stocate Inglobeaza muIte caracteristici aleproiectarf i functionalitatii sistemelor de caleul si face posibile operatii performante, deexemplu 1.000 de operatii pe secunda. EI a introdus i ideea gruparii instructiunilor insubrutine care sa fie apelate repetat, depinzand de starea :}i directia calculului. VonNewmann si-a folosit ideile pentru a construi un nou tip de instructiuni-rnasina, nurnittransfer conditional al controlului, care pennitea ca 0 secventa de program sa fie opritai pornita din nou in orice moment Si stocarea cumulata a tuturor instructiunilorprogramului impreuna Cll datele in aceeasi -unitatc de memorie, astfel Incat, atunci candeste necesar instructiunile sa se poata schimba aritmetic in acelasi timp cu datele. Carezultat al acestor tehnici, calculul sl programarea au devenitmult mai rapide, malflexibile i mai efieiente. Subrutinele des folosue nu trebuiau sa fie reprogramate pentruflecare nou program, ele puteau fi pastrate in ",biblioteci" Si citite din memorie atunci

    ,,'..',18. ENIAC - succesul computerelor digitale

    La inceputul celui de-al doilea razboi mondial crescuse necesitatea unor calculatoareperformante. In 1942, John P. Eckert, John W. Mauchly si colaboratori de la Facultateade Inginerie Electrica a Universitatii din Pennsylvania au decis sa consrrulasca un.

    Cu ceva timp inainte ca Stibitz sa seocupe de doze de cositor Si Shannonsa-si scrie teza de masterat, gennanulKonrad Zuse (1910-1995) aglomera sufra-geria parintilor cu tot felul de deseuri,Student la Facultatea 'Iehnica din Berlin,a inceput de timpuriu, la fel ca SiShannonSi Stibirz, sa isi 'petreaca mult timp cufelurite ealcule Si a inceput consrrucdaunei masini eare sa execute metodelelaborioase necesitate de matematicamoderna. lmpreuna eu cativa prieteni, aconstruit din deseuri, acasa la el, primulcalculator electronic programabil dinlume, Z3. Originalul a fost, din pacate,

    Konrad Zuse in faja lui 23. 1941 I distrus ln razboi. In timpul ultimelor zilede razboi, urmatorul model, Z4, a fast

    transportat in circumstante aventuroase de la Berlin la G6ttingen Si apoi laoAllgau.Ascusa Intr-un grajd, masina ramane nedescoperita de carre paru i a fost transportata ..--=mai ~arziu la Institutul Fed~~al de Tehnologie de .la Zurich. 0 ~Ita creatie a geniului ZUs.~. '""' __ m,,::>~este primulIimbaj de programare algoritmic, Plankalkiil, descoperit in 1945-1946. A ~fost nurnit de catre multi "inventatorul computerului". Z3 era controlat de 0 casetaperforata, folosea role de film uzate, introclucerea datelor se facea cu 0 tastatura, afisarea -Cll un ecran eu lampi. lnrreaga maslna se baza pe tehnologia releelor Si necesita 2.600 derelee: 1.400 pentru memorie, 600 pentru unitatea aritmetica, restul pentru felurite circuitede control. Ele erau montate in trei stative, doua pentru memorie si unul pentru unitatilearirmetice si de control, fiecare de aproape 2 metri inaltime i 1 metru lungime. Memoriape 64 de cuvinte era in binar cu reprezentare in virgula mobila. Viteza lui 23 eracomparabila eu a lui Harvard Mark I. Z3 a functionat din 1939 pana la 5 decembrie1941. A dimas in casa lui Zuse pana cand a fest distrus de un raid aerian in 1944.

    distanta. Noua luni mai tarziu a adaugat al patrulea telex, de asta datala 400 de kilometridistanta, in New Hampshire. Acolo, in fata unei audiente sceptice fermata din membri aiSocietatii Matematice Americane, Stibitz a perfonnat calculul de la distanta prin transmi-terea i primirea datelor spre/dinspre computer prin intermediul telexului, moment incare s-au modificat decisiv conceptele despre utilizarea computerului.

    "";;;'

  • 26 BAZELE PROGRAMARII iN C. APLlCA.TllEVOLUTIA SISTEMELOR DE CALCUL 27

    Carol Iaciofano

    24. Exercitii, intrebari

    22. Generatiile sistemelor de calcul

    '" ':-c -. -,:o:.-::;,t~;_d":"~'i.:'o':~ .,-

    in conlcuzie, de-a lungul evolutiilor tehnice si stiintifice, sistemele de calcul au evoluatcontinuu. Se pot chiar determina generajii de sisteme de calcui :1. Prima generatie, cea a tuburilor catodice (vacuum tubes) - 1940-1950.2. A doua generatie : tranzistoarele - 1950-1964.3. A treia generatie folosea circuite integrate - 1964-1971.4. A patra generatie utilizeaza .cipuri pentru microprocesoare - 1971-prezent.

    fndi tntr-o copiliirie relativd, computerele par sa fie perfectibile La infinit. Marsultnspre .Computopia este mai degrabii liniar - odata cu fiecare pas tnainte apar alJiciuiva pasi inspre acolo si ne conduc spre 0 progresie clara in directia unei mai mariinteligerue ~i mai mari sofisticiiri. Ceea ce ar trebui sa ne readucd chlar mal des latntrebarea fundamentala : Ne vor putea computerele inlocui ? Numai timpul 0 vaspune...

    cipului, cele rnai multe dispozitive electrice functionau pebaza de Iampi Siconsumau cantitati uriase de energie elecrrtca.Dezvoltarea tranzistorilor a rezolvat partial aceasta problema,dar acestia trebuiau legati prin fire pe placi. Kilby si Noyceau gash solujia aproape simultan, combinand componenteseparate lntr-un circuit integrat facut dintr-un material semi-conductor. Jack SI. Clair Kilby a fast Ii inventatorul calcula-torului 'de buzunar. Noyce este fondatorul Intel si, la vremea inventiei, lucra in Palo Alto,California. EI este eel care a introdus adoptarea siliciului dintre materialele semi-conductoare. Din acest motiv, Noyce este creditat ca fiind eel care a pus cuvantul silicon(siliciu) in Silicon Valey, mai fiind nurnit ~i "Maiorul din Silicon Valley" . Cipul esteconsiderat inventia ultimilor 50 de ani, in cadrul unui sondaj de opinie realizat lainceputul anului 2005 de catre CNN, 28.500 de persoane din 120.000 (24%) fiind deaceasta parerc. Alte inventii importante: Internetul (23.600 - 20%), computerul personal(20.700 - 17%).

    ~3. Incursiunein viitorl~"

    Prima generatie de computere modeme programate electronic ce au adus ell ele avantajeleacestor tmbunatatirta fost construita in jurul anului 1940. Aces! grup a inclus sistemelede ealeul Random Access Memory (RAM), in care memoria era proiectata astfel incat saofere timp constant de acces la informatie pentru orice parte particulara de date. Masinileaveau cartele perforate san casete I/O perforate, capacitatea memoriei era de 1.000 decuvinte, iar timpul de acces, injur de 5 x 10-6 secunde. Ele erau fizic mult mai mici deditEN/AC, de exemplu, de marlmea unui pian. foloseau in jur de 2.500 de ruburi deelectroni, mult mai purine decat cele necesare pentru EN/AC. Sistemele de calcul ellprograme stocate din prima generatie aveau nevoie de multa intretinere, atingeau 0acuratete a operatiilor de 70-80% Si'au fest folosite intre 8 Si 12 ani. Primele sisteme decalcul disponibile pentru uz comercial au fost Electronic Discrete Variable AutomaticComputer (EDVAC) Ii Universal Automatic Computer (UNIVAC).

    EDVAC a fast construit la Facultatea de Inginerie Electricli a Universttatii PennsylvaniaSi a fast livrat pentru instalare laboratorului BRL Computing Laboratory in august 1949.Initial, a avut cateva erori logiee, care au fost rezclvate in 18 luni Si masina a intrat infunctiune in 1951, fiind apoi utilizata timp de 15-20 de ore pe sapramana pentru a rezolvaprobleme de matematica, Panli in 1961, EDVAC a functionat in medie 145 de are pesaptamana din 168. EDVAC a fost primul sistem de caleul eu programe stocate mternsiorganizat in felul urmator : . Control: aceasta unitate continearoeje butoan,ele'q.e,operare, comutatoarele de control

    Si un osciloscop necesar pentru opeiaii;re"de1UtreUiieie:' , c :.;',.-; - '", Dispecer: decodificarea comenzilor primite de la unitatea de control Side la memorie. Memoria rapida : continea doua unitati identice, fiecare cu cate 64 de linii de asteptare, Calculator: aceasta unitate efectua operatiile rationale (adunare, scadere, inmultire si

    tmpartire). Cronornetru: emitea pulsuri de ceas la intervale de 0 microsecunda Sipulsuri de timp

    la intervale de 48 de microsecunde.

    Chiar si dupa 10ani de activitate, EDVACa functionat in continuare datorita acuratetiiSi producrivitatii sale, a costului redus de operare, a eficientei, vitezei i flexibilitatii inrezolvarea unor probleme specifice.

    20. SuccesorliIui ENIAC: EDVAC i UNIVAC. Caracteristici

    cand erau Decesare. Mai mult decat atar. un program poate fi.:asamblat pe baza metodelordin biblioteci, iar scopul memoriei este de a reprezenta UD lac de asamblare in care toatepardle unui calcul laborios sunt pastrate, manipulate bucata cu bucata ~i combinatepentru a furniza rezultatul final. Atunci cand avantajele acestor tehnici s-au cristalizat,ele au devenit 0 practice standardizata.

    21, Circuitul integrat - cip.~t-;..c~PJl.l..d,~, ,s,i1ici~Cipul a fast inventat in 1961 de catre doi ingineri americani: Jack 81. Clair Kilby iRobert Noyce. Creatia lor a revolutionat tehnologia i a pus bazele miniaturizarii ,deschizand astfel calea spre aparitia computerelor moderne. inainte de inventarea

    1. Care a fost primul instrument de calcul ?~;Cefel de.variante.ale acestuiaexistau? Cat.a durat pana la descoperirea de noi astfel de instrumente? De ce?

    2. Care a fast aportul lui John Napier in evclutia sistemelor de calcul?3. Descrieji careva dintre preocuparile i rezultatele lui Blaise Pascal ~i ale lui Gottfried

    Wilhelm Von Leibniz. Ce aveau ei in comun?

  • 28 BAZELE PROGRAMAR.II IN C. APUCATII

    ~..:".: .

    4. Care a fost primul calculator vandut la'scara Iarga ? Cand a fest inrrodusa prima dataideea de sistem binar ~i comunicarea om-masina ?

    5. Care sunt cele cinci aspecte cruciale introduse de Charles Babbage odata eli proiec-tarea masinii sale analitice? Care sunt ideile Si contributiile Adei Lovelace privindeccasra masina ? Cum compera Ada masina lui Jaquard ell masina analitica ? Ce ideide baza din programare ii sunt atribuite Adei? Ce omagiu i-a adus DepartamentulAparani al Statelor Unite?

    6. Care sunt operatorh algebrei Bocle ? Ce afirma creatorul George Boole despre locullogicii privind matematica &i filosofia? A fost teoria sa unanim acceptata de comu-nitatea stiintifica a vremii? Cand avea sa se aduca recunoasterea algebrei Boole Iii ince domeniu?

    7. Ce aduce nou descoperirea efectului Edison?'8. Care sunt contributiilematematicianului englez Alan Mathison Thring?9. Care a fost primul computer digital, cine sunt constructorii si unde a fost el utilizat?

    Ce operajii putea el sa 'execute Z' Ce performante ~i volum avea?10. Care este primul computer digital de sucees? Cum functiona el?11. Ce aduce nou "tehniea programelor stocate" a lui John von Newmann?12; Care sunt succesorii lui ENIAC? Cemodel de caleul ~i caracteristici au fast inglo-

    bate? Care sunt eele einci dispczitive din care se compun ?13. Ce a revolutionat tehnologia ~i apus bazele miniaturizarii, deschizand ealea catre

    aparitia computerelor moderne ?14. Scrteji, eu ajutorul Internetului, un referat despre corespondenta lui Leibniz, con-

    ceptele deseoperite de Pascal sau activitatile Augustei Ada Lovelace.15. Scried-va parerea despre viitorul masinilor, pe marginea urmatoarelor citate:

    "Ma~inadescurajeaza ornul. Acum ca masina este perfecta. inginerul este un nimeni. "Ralph Waldo Emerson

    "A tine in frau masina ~i a Iimiiaarta la mestesug sunt negarea oportunitatii."""'---'- "-"'.0," -. -;. ::',> ~ Lewis Mumford

    ..Ma intereseaza viitorul pentru ca inti voi petrece restul vietii aeolo."Charles Kettering

    "Nu rna gandesc niciodata la viitor, El vine oricum destul de re~ede."Albert Einstein

    "Oamenii au devenit instrumente pentruinstrumentele lor."Henry David Thoreau

    "Imperiul viitorului este imperiul mintii. "Winston Churchill

    Algoritmi - elemente definitorii

    ):> Brimologia cuvantului algoritm):> Definitii alternative):> Sapte exemple de algoritmi (cmmdc, ciurullui Eratostene, Inmultirea numerelor intregi,

    maximul a n elemente, cautarea liniara, cautarea binara, Tiramisu)):> Abordarea unei probleme (reprezentare, codificare, transfonnare, proprierati ale unui

    algoritm)):> Algoritmica (descrierea, demonstrarea ~i studiul complexitatii)):> Nojiunea de model de calcul):0- Modelul de calcul RAM (Random Access Machine)):> Complexitatea algoritmilor, exemple):> Notatiile 0, a ~i n pentru analiza complexitatii-timp):> Optimalitatea, reducerea algoritmilor):> _oClasifigluea.-pmblcmelor):>. -Probleme -NP-complete, exemple):> Problema SAT, de ce este ea Imponanta):> Probleme NP-hard

  • Existii trei cai de a rezotva inteligent 0 problema :prima este concentrarea, asta e cea mai nobild ..a doua e copierea, asta e cea mai usoara .. a treiaeste prin experierud # e cea mai amara.

    Confucius'

    Chiar dad! computerele i aplicatiile variate corespunzatoare lor sunt un fenomenexploziv ce a devenit predominant in ultimii 20 de ani, 0 mare parte din conceptele cestau la baza acestor instrumente soft dateaza de foarte mult timp, chiar din Antichitate,i ele s-au dezvoltat de-a lungul timpului.

    1. Geneza cuvantului algoritm

    ~. .. ~"

    Cuvantul algoritm provine de la numele matematicianului, geo-grafuiui i astrologuiui arab Abu fa Jar Muhammad ibn MusaAl-Khwarizmi (?780-? 850, Bagdad). Cea mai importantalucrarea sa este Hisab al-jabr w'al-muqabala, iar titlul va conduce !)i lageneza cuVantului algebra, utilizat pentru a defmi aceasta ramuraa matematicii. EI a lucrat la Casa Intelepciunii din Bagdad, subpatronajul direct al califului AI-Mamun, unde traducea manu-scrisele tiintifice grecesti i studia algebra, geometria i astrologia.Vechii hindusi, greci, babilonieni, romani, chinezi foloseau notiu-nea de algoritm pentru operajii aritinetice simple.

    2. Deflnitil alternative

    i

    .~' ,'" ... ~.:.,; ~:C:>. .

    in linii mari, relativ la un algoritm putem afirma urmatoarcle : Un algoritm este 0 multime de reguli ce se pot aplica in cadrul procesului de

    constructie a solujiei !)ipot fi executate fie "de mana". fie de ciUre.~o..ma!)ln.a~.;,:- - .Un algoritm este 0 secventa de P3i care transforma multimea datelor de intrare in

    datele de iesire. rezultatele dorite. Un algoritm este 0 secventa de operatii executate eu date ce trebuie organizate in

    strucruri de date.

  • 32 BAZELE PROGRAM.ARniN C. APLICATIl ALGORITMI - ELEMENTE DEFINIlURli 33

    Cititi prograrnul C corespunzaror din capitolu14, "Algoritmi elementari".

    3. Exemple

    Varianta americana, folosita si fa noi, in care Varianra engleza, in care cifrele se considerafiecare cifra din at doilea nUIIUir se considera de la stanga spre dreaptade la dreapta la sranga

    981 98112 J4 12343924 981

    2943 19621962 294398 1 3924

    1210554 1210554

    Exemplul 2. Algoritmul clasic de tnmuuire a numerelor naturaleUrmatoarele Inmultiri desfasurate descriu sugestiv acest algoritm, cunoscut inca dinclasele primare.

    Exemplul3. Ciurullui EratosteneEratostene (?276-l94 t.e.n., Cyrene, acum Libia) a fostprimulmare geograf al lumii antiee i este considerat fondatorul .geo-grafiei fizice i matematice. A lucrat mult timp la eelebrabiblioteca din Alexandria, Egipt, i a fast, de asemenea, inte-resat de geometrie i numere prime. El a masurat primul eircum-ferlnja pamantului (ce s-a dovedit ulterior corecta) i a creat 0harra a lurnii, pe care a desenat linii paralele. in plus, a scris unpoem in versuri, Hermes, despre fundamentele astronomiei; asugerat ca anii bisecti se repeta la fiecare 4 ani; a introdusmetoda aflarfi numerelor prime Sita lui Eratostene. in memoriasa, exista azi un crater pe luna care Ii poarta numele.

    Definitie : Un numiir prim, e,s,t~u~ ~um~_~ai maredecgt 1 Si care se divide numaicu :CSi Cll el insusl. Un numar iiaturarcr~-"se"'d1videell un alt numar decat 1 ~i eI inS~sise numeste numar compus. Sita (ciurul) lui Eratostene este un algoritm care identificatoate nurnerele prime mai mici sau egale cu un numar natural n dar, astfel:

    '" 1. Se scriu in ordine toate numerele de Ia 1 la n , (Le vom elimina succesiv pe celecompuse prin marcarea lor. Initial, toate numerele sunt nemarcate.)

    2. Marcheaza 1 ca numar special (nu este nici prim, Did campus).3.kf-l4. Executa:

    4.1. m +- primul numer mai mare dedit k, care nu a.fost marcat (primul va fi 2 ! ) ;4.2. marcheaza numerele 2m, 3m, 4m, ... din Iista ca fiind compuse (mai intai

    se vor marca toti multiplii lui 2, apoi multiplii lui 3 ramasi etc.);4.3. m este 'un nurnar prim, adauga-l in lista de numere prime;4.4. k f- m.Paoa_caod (k ;, -In).

    5. Adauga numerele ramase nemarcate in Iista numerelor prime.6. Aflseaza lista nurnerelor prime pana la n.

    ---:'

    Pe baza acestei teoreme se deduce algoritmul :1. Citeste a, b numere naturale, a ~ b > 02. a

    l+- a, b i +- b, i

  • 34 BAZELE PROGRAMARII iN C. APLICATIl ALGORITMI, - ELEMENTE DEFINITORIl 35

    in care ne propunem s~ cautam litera j.

    Ilustram in continuare aplicarea algoritmului pentru sirul ordonat de 17 litereacdfghjlmoprsuvxz

    Pasu13.2 din algoritm ne indlca faptul ca daca numarul x cautatse situeazala dreaptaelementului din mijlucul intervalului cercetat (rn este mijlocul intervalului [1, j I ), alunciel va trebui cr!:utat in intervalul [m+l, j l : altfel, se va efectua cautarea in intervalul[i, m) I capetele i, respectiv j modificandu~se corespunztitor.

    Vom compara succesiv elementele din ir cu x.in momentul cand gasim un numar a icare este egal cu x , decidem ca prima pczijie la care se ami x in sir este i (3.2) ~i vomintrerupe cercetarea celorlalte elemente (3.3), pentru ca.problcma a fest complet rezol-vara. Daca s-ar dod detenninarea ultimului element care este egal eu x , atunei vomsterge din algoritm doar linia 3.3, restul ramanand nesehimbat. lncercati simulareaalgoritmului cu numerele 5, 7, 2, 1, 3, 7, 1, 6 ~i x = 1, prin scrierea succesiva atuturor variabilelor folosite.

    .. '""",,:;,

    A1goritmul de cautare binara :1. Citeste x, a1' a 2 , an2. i ~1, j +-- n .3. CAl_limp (1 < j) executa

    J.l.-rn am)' atunci i executa3.2. poz

  • 36 BAZELE PROGRAMARII iN C. APLICATIIALGORITMI - ELEMENTE DEFINITORIl 37

    a" ... , an = a c d f g h jIm 0 p r s u v x zx = jio(-l,j+-173.C d f g h jim 0 p r s u v x z acdfghjlmoprsllvxzi j i ji =l,j =17,m+-9 (3,2 sau 3.3?) i ~ 1, j _~, '1 (pas 3.3) , me-; 5 (3,.2 sau 3.3?)acdfghjlrnoprsuvxz a c d f g h jIm 0 p r s u vx z

    i j i ji ~ 5, j ~ 9 (pas3.2) , m

  • 38 BAZELE PROGRAMARll iN C. APLlCATJI ALGORITMI - ELEMENTE DEFINITORII 39

    ,.,.;:

    5. Proprietatlle unui algoritm

    Exemplul 2. Variantli a problemei orarului (Schedule Problem)Concret, presupunem ca dorim sa distribuim salile, profesorii, grupele de studentipentru a realiza orarul unei facultati, Codificarea informatiei practice este mult maidificila in acest caz decat eea din exemplul anterior, accasta "mapare" nu se mai produceatat de natural ~i accesibil.. Va trebui sa codificam cu numere de la 1 la np profesorii, cunumere de la 11a ng , toate grupelede studenti (plus fiecare student ~i apartenenta sa lagrupe), la fel locatiile (sali, amfiteatre, laboratoare etc.), cursurile posibile. Vor trebuistabilite diverse functii (caracteristici) care trebuie sa fie satisfacute de a eventualasolutie (fiecare curs are 0 durata si se poate desfasura doar in anumite sali, a grupa aredoar anumite cursuri, depinzand de an i specializare, un profesor preda doar anumitecursuri cu anumite grope etc.) si acestea trebuie, de asemenea, accesibil codificate. Vortrebui definite i 0 serie de restrictii, astfel tncat a posibila solutie sa poata fi veriflcatamatematic (un profesor sau un student nu poate fi in doua locuri simultan, Intr-o anumitiisala nu se pot suprapune activitati diferite etc.). Numai cand definirea in tennenimatematici a acestor entitati, caracteristici i forma solutiei sunt complet realizate sepoate trece la elaborarea unui algoritm pentru a gasi posibilele solutii.

    Trebuie sa posede date de intrare (input data). Trebuie sa posede date de iesire (output data). ' Determinismul (la executarea oricarui pas, trebuie sa.cunoastem succesorul acestuia). Corectitudinea datelor de iesire (a rezultatelor) in raport eu datele de intrare. Pinitudinea (pentru orice set de date de intrare posibile ale problemei, solutia este

    furnizati! intr-un numar finit de pasi) . " Eficienja (furnizarea solutiei trcbuie sa 'fie realizabila prin consumul eficiental

    resurselor timp, spat iu etc.). . - . ':c. ' Generalitatea (algoritmul este aplicabil unei clase de probleme, cele ale carer date de

    intrare satisfac anumite conditii).

    Algoritmica este ramura infonnaticii care se ocupa cu proiectarea si analizarea alga-ritmilor destinati a fi implementati cu ajutorul computerului.1. Prin proiectare (design) Intelegem doua etape :

    ,descrierea algoritmului utilizand un pseudolimbaj (schema logica, pseudocod,descriere ccprinzaroare sugestiva pe 0 foaie de hattie etc.) ;

    demonstrarea .corectitudinii, adica a faptului ca indiferent de datele de iritrareposibile introduse, rezultatul satisfaee cerinta problemei.

    2. Analiza algoritmului se refera la evaluarea performantei acestuia, adica a timpuluinecesar pentru a detennina solutia, dar i a altor aspecte, cum ar fi spatiul dememorie folosit i optimalitatea.

    6. Algoritmica

    .-! .

    .1. Construimgraful eraser Mrtii ~i matriceadeadicen~ in care A(i, j) = I, dad ~inumai daca i j ~i regiunile i, j suntvecine.

    2. Observam ea matricea de adicenta estesimetricarAj L, j) = A(j, i), \ii, jE{l, .. "/ nl .

    3. Culorile posibile vor fi cr, ... , Cm.4. Solutla va trebui sa fie de forma s = ICl,

    C2, ... , Cn},Ci Ell, , m},cusemnificatia ca c, este culoarea atasatavarfului i at grafului.

    .0

    ......~..-..,..

    8 regiuni, 3 culoriSe ceredetenninarea uneicolorari aregiunilor utilizO.nd cele trei culori, astfel fndltoricare douO. regiuni vecine sa fie coloratediferit.

    0 1 1 0 0 0 0 01 0 1 1 0 0 0 01 1 0 1 1 1 0 10 1 1 0 1 0 1 0

    A = 10 O. 1 1 . 0 1 1 00 0 1 0 1 0 1 10 0 0 o 1 1 0 10 0 1 0 0 1 1 0

    forma ei pracrica ~i, pentru a putea fi in generalrezolvata, va trebui sa 0 codificam in asa feltncat sa pennitem modelarea ei CU, ajutorulunui algoritm. Intuitiv, ne dam seama ca primulpas va fi atasarea unui numar flecarei.regiuui,

    ..ctw--." de la 1 la numarul acestora, n. Mai departe, vatrebui sa manipulam i informatiile de veci-natate, adica am putea construi 0 matrice patra-tica A de dimensiuni n . n, In care celulaA (i, j) va primi valoarea 1 san 0, cupa cumregiunile i i j sunt, respectiv nu sunt vecine.Vorn codifica i culorile ell nurnere de la 1 larot presupunand ca dispunem de mculori. Infelul acesta, am realizat o codificare simbolicd

  • 40 BAZELE PROGRAMARII iN C. APLICATII

    ALGORlTMI - ELEMENTE DEFINIIDRII 41

    inceputul trebuie sa fie alegerea sau definirea unui model de calcul, adica a unuiformalism matematic care descrie interactinea dintre componentele sistemului i furni-zeaza absrractizari utile pentru concepte precum timp sau concurenpl. De obicei, modelulfolosit este RAM (Random Access Machine), dar exista i alte modele de calcul precum :PRAM, Masini Turing, automate finite, circuite booleene, automate celulare etc. OdatamodeluI definit, algoritmul poate fi descris folosind un Iimbaj simplu, as"emfnator casintaxa, de exemplu Basic, Pascal, C, C++, Java etc.

    7. Modelul de calcul RAM.

    Proiectarea unui algoritm independent de masina depinde de un computer ipotetic nurnitRandom Access Machine (RAM) . Potrivit acestui model, computerul ipotetic satisface : Fiecare operatic "simpla" (+, -, *, /, %, =. if/dacii, call/apeleazQ) consuma 0

    unitate de timp. Ciclurile i metodele (functii, proceduri) nu sunt considerate:operatii simple. Acestea

    sunt compuse din mai muite operatii de un singur pas. Nu 'ar avea sens sa atribuimmetodei sortare, de exemplu, 0 unitate de timp, cand sortarea unui rnilion de elementeva consuma mult mai mult timp decat sortarea a 10 elemente. Timpul necesar pentrua executa un ciclu sau de a executa 0 metoda (un subprogram) depinde de numarul deiteratii, respectiv de natura metodei.

    Fiecare acces la memorie se executa tnrr-o unitate de timp i avem la dispozitie ataramemorie cata este necesara, Modclul RAM nu face diferenta daca anumite date suntpe disc sau in cache (memoria volatila), ceea ce simplifica analiza algoritmului.

    Conform cu modelul RAM, se va caIcula numarul de pasi (unitati de timp) necesaripentru instanta unei probleme. Presupunand cl:LRAM,executa un anurnit numar .de pasipe secunda, se poate usor det0;ii\lna -tlmpulreal' necesar, 'Una dintre nemultumiri aiputea fi faptul ca rnodelul este mult prea simplu, ca unele presupuneri sunt prea generalepentru a fi aplicate in practica. De exemplu, pentru inmultirea a doua numere este nevoiede obicei de mai mult tirnp decat pentru adunarea lor, eeea ce contrazice prima presu-punere a modelului. Timpul de acces la memorie difera de obicei relativ la loeul destocare a datelor, in cache (memoria volatila) sau pe disc, ceea ce contrazice cea de atreia presnpunere. Dar chiar i cu aceste neajnnsuri, modelul RAM este un instrumentexcelent pentru a intelege cum se comporta un aIgoritm in realitate, el reflectand cornporta-rea computerului, dar ramanand destul de simplu pentru a putea fi manipulat si tnjeles.

    Fiecare model are un interval-Iimita in care este util. Sa consideram ca exemplumodelul piimantului plat. Se poate afirma ca acesta este un model incorect, pentru ca

    este dovedit faptuI ca parnantut este rotund. Dar pentru a construifundatia unei case, modelul pamdntului plat este util i poate fi

    .utilizat ca atare, Este rnult maiusorde Iucrat practic eu un asfeldemodel decat ell un model sferic. Tot astfel se tntampla si cu modelul'de caleul RAM. EI este de fapt 0 abstractizare care, in general,devine foarte utila pentru a explica In pracnca performanta unuialgoritm,- intr-un mod independent de masina.

    8. Complexitatea algoritmilor

    Prin complexitatea unui algoritm intelegem de fapt costul, masuratcu ajutorul unor anumiti parametri (timp de executie, memorianecesara, numarul anumitor operatii etc.). Pentru a calcula comple-xitatea UTIui algoritm, avem nevoie sa decidem care sunt acestiparametri i sa gasim 0 functie de detenninare a costului cores-punzaioare.

    Dat fiind ca resursele de memorie sunt, In practice, foarte mari,deducem ca timpul de executie al unui algoritm este parametrul debaza, Complexitatea-timp poate fi calculata In functie de numarul deoperatii elementare (unitaji de timp) necesare atunci cand datele deintrare au 0 anumita dimensiune n. Cum am vazut mai sus, Ia descrierea modeluluiRAM, aceste operatii de baza pot fi comparatii (numar foarte mare, de exemplu, in cazulunui algorttm de caurare), asignari (de exemplu, in cazul unui algoritm de sortare),adunari, Inmultiri , diviziuni, modulo, apeluri de metoda etc.

    8.1. Notatiile 19, 0 i .Q

    in practica sunt folosite 0 serie de notatii utile pentru analiza performantei si a comple-xitatii unui algoritm. Accsrca marginesc valorile unei functii f date cu ajutorul unorconstante ~i a altei funcjii. Prezentam in continuare cele trei notatii cunoscute in acestsens.

    8.1.1. Notaiia 19 (categorie constanta - same order)Spunern ca f (n) = e (g (n) daca exista constantele pozitive no'

  • 42 BAZELEPROGRAMARIIiN C. APLICATII ALGORITMI - ELEMENTE DEFINITORII43

    no

    noJ(n) ~O(g(n

    ~," \

    5.r:'~?'?- t"~"".\\L;>~r.; \; "' :'.,:/ ,~ ~., . ',",/'/"- II I'\ r";"'",;,,~-,:~~ \! / V \'-'i ~ J't-: " ,;0,.,,,,/:" i. ! \ \{'..,..,j . ;'i If t r-: /< I i' I < r !', i II

    a) complexitatea in cazul eel mai defavorabil (worst-case complexity): timpul ~e exe~utiepentru orice dimensiune data va fi mai mic decat Iimita superioara, exceptand catevadimensiuni ale problemei, unde este atins un maxim; ..

    b) timpul de executie pentru orice dimensiune data va fi media numaruIui de operatnpentru toate instantele posibile ale problemei.

    Deoarece este dificil sa se estimezo 0 comportare statistica ce depinde de di.mens~une~intrarii, de cele mai multe ori este folosita prima Interpretare, cea a cazulUl cel~l.maldefavorabil. De cele mai rnulte ori, cornplexitatea lui f (n) este aproximata de familia sao (g (n) ), unde 9 (n) este una dintre functiile : n (complexitate liniara.). log,{n)(complexitate logaritmica), n", a ~ 2 (complexitate polinomiala), an (complexltateexponentiala), n I (complexitate factoriala). 0 alta deflnitie sugestiva echiv~ent~ e~~eeea folosind limitele din analiza matematica: daca limita pentru n rlnde la infinit 10f (n) Ig (D) " exista i este finita, atunei f (n) are ordinul 0 (g (n ) :

    Exemple:1. lim (sqrt (0) In) = 0 ~ sqrt (0) = 0 (0)2. lim (o/sqrt (n ) = infinit ~ 0 nu e s t.e 0 (sqrt (n )3. lim (n/2n) = Yi -7 0 = 0 (20)4. lim (20/0) = 2 ~ 20 = 0 (0)

    Pentru 0 sufieient de mare au loc inegalitatile:log(n) < 0 < n v Loq t n) < 0 2 < 0 3 < 21'1, ceea ce implica o(log(n '~,-, ,:"",1 -~::. '

    2.3. Cuvinte-cheieCuvintele-cheie (rezervate) sunt cuvinte care au un inteles special pentru eompilatorulC: sunt nume rezervate instructiunilor, tipurilor fundamentale si sintaxei pentru definireafunctiilor si a tipurilor de date. In limbajul ANSI C exista 32 de cuvinte rezervate :

    auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsigned

    cOn'tinue for signed voiddefault, ' .: ._g'oto

    -siz~of . volatile

    do . if static while

    Cuvintele-cheie (rezervate) se seriu intotdeauna cu litere mici,

    I~I

    2.4. Tipuri de datePrin tip de date se intelege 0 multime -peste care se definesc urmatoarele aspecte :- dimensiunea zonei de memorie asociara unui element;

    tirnpul de viata asociat datei ;multimea operatiilor prin care valorilefipului pot fi modificate sau prelucrate ~isemnificatia acestor operatii ;operatorii utilizati i restrictii asupra acestora.

    Tipurite de date pot fi predefinite (tipuri de baza) sau definite de utilizator (derivate).Tipurile fundamentale Si dimensiunile lor:

    TIpul Descrierea Numar deocteji

    char, unsigned char, caracter reprezentat prin cod ASCII 1signed charshort, unsigned short intreg binar reprezentat prin complement fata de 2 2int, unsigned int 2long, unsigned long 4

    float numar reprezentat in virgula flotanta in simple 4precizie

    double numar reprezentat in virgula flotanta in dubla 8precizielong double 10

    Datele de tip char au valori in intervalul [0, 255J sau [-128, 127J. Datclc de tipint (intregi cu semn) apartin intervalului [-32768, 32767]. Datele de tip unsignedint (intregi tara semn) apartin intervalului [0, 65535J. Datele de tip long (intregi cusemn in dubla precizie) apa~lin' ihferialu"rui [_2 31 , 23 1

  • 56 BAZELE PROGRAMARII IN C. APLICATII LIMBAJUL C - PREZENTARE GENERAL~, 57

    ...:.

    pe care lepoate avea variabila la momente diferite trebuie sa apartina aceluiasi tip) iadresii in memorie. Corespondenta dintre numele i tipul unei variabile se rcalizeaza ellajutorul unei declaratii.

    Declaraiii de variabile simpleo declaratie de variabile simple de acelasi tip are forma:

    lista~de_identificatori;

    Prin lista_d_identificatori se Intelege 0 succesiune de nume de variabileseparate prin virgulii:

    Exemple :int a, b , c , i, jichar Chifloat x, Yi

    Declaratia de tablou

    Un tablou reprezinta un tip structurat care ocupa 0 zona de, memorie continua #coniine elemente de acelasi tip.

    Declarajia unui singur tablou are forma: [dirn_l] [dirn_2) ... [dim_nJ;

    Daca se declara mai multe tablouri de acelasi tip, se pot scrie separate prin virgula,ca in exemplele de mai jos.

    Exemple:int 'a[1001, b(20) [10];'char ro[lOD);

    Pentru tabloul a [) se vor putea referi direct eiementele a [D] I a [1] r r a [ 99) .in cazul declaratiei generate de mai sus indicii elementelor tabloului pot lua valoriastfel: primul - Intre 0 i dirn_l-l, al doilea intre 0 si dim_2-l etc. Numele unuitablou poate fi utilizat in diverse constructii i are ca valoare adresa primului element altabloului.

    2.7. Comentariile

    .In l:rnbajul C, comentariile incepcu secventa de caractere 1* si se termina cu secventa* I. Acestea sunt ignorate de compilator si au rolul de a explica anwnite parti deprogram.

    3. Expresii

    o expresie este formata dintr-un operand san mai multi operanzi legati prin operatori.o expresie are ovaloare i un tip i pot fi folosite parantezele pentru a impune 0 anumitaordine a operatlilor.

    3.1. OperanziUn operand poate fi: 0 constanta, 0 constanta simbolica, numele unei variabile simple,numele unei structuri, numele unui tip, numele unui tablou, numele unei functii, referireala un element al unui tablou, apelul unei functii, referirea la elementul unei structuri, 0expresie inclusa intre paranteze rotunde.

    3.2. Operatori

    Existii trei tipuri de operatori. 0 expresie unara este formatii dintr-un operator unar carepreceda un operand sau cuvantul-cheie sizeof urmat de 0 expresie. 0 expresie poate fi,de asemenea, i denumirea unei variabile sau 0 expresie cast (conversie explicita), 0expresie binara este compusa din doi operanzi asupra carora se aplica un operator binar.

    Limbajul C contine urmatorii operatori unari:Simbol Semniflcatie

    - - ! negatla pentru numere intregi, negajla pe biti, negatia logica & indirectarea Si obtinerea adresei.unei variabilesizeof operatoruJ ce returneaza dimensiunea unui tip+ operatorul plus ~nar

    -t .:.~-- operarorf uuarl de lncremcntare ~U'ecremen~re (pot fi pr-e Si post)

    Operatorii binari, care se aplica de la stanga la dreapta:

    Simbol Semnihcatie* I % operatorii multiplicativi (inmultit, cat ~i rest)+ operatorii aditivi (plus, minus) operatorii de deplasare pe biti< > ~ == operatorii relational! (mai mic, mai mare, mai mic sao egal, mai mare!= sau egal, egal, diferit)& I . operatorii pe hip ($1, SAD, SAD EXCLDSlV)&& II operatorii logici (Sl, SAD), operatorul virguta (de execujie secventiala)

    -_..

    Operatorul de atribuire in forma sa simpla se norcaza prin caracterul ""," ~i areforma: v = expresie (aceasta expresie se numeste expresie de atribuire). Operatorulde atribuire are prioritatea cea mai mica rata de operatorii descrisi pana acurn. Deoareceoperatorii de atribuire se asocj~za de la dreapta la stanga, se poate scrie si v" = V n-1 =

  • 58 BAZELE PROGRAMARII iN C. APLICATII LIMBAJUL C - PREZENTARE GENERAoLA 59

    Actiune : nume este inlocuit din acest loc pana la sfarsit in codul-sursa ell Sllcce-siune de caractere.

    V 1 =: expresie. In evaluarea expresiei se va aplica regula conversiilorimplicite: daca expresia din dreapta semnului egal are un tip diferit de eel al variabileiv, atunci valoarea ei se convertesre la tipul variabilei i apoi se face atribuirea. Pentru arealiza operatia de atribuire, in afara semnului "",,, se mai poate folosi .una dintreconstrucdile op> , unde op poate fi: % / * - + & '" I (v op e xpr e s deeste echivalenta eli v = v op expresie). I

    Exemplu:#define MAX 5000/* MAX 5e substituie peste tot in continuare ell 5000*/

    Operatorul conditional. Se utilizeaza in evaluari de expresiicare reprezinta alternative.Are formatul : el ?e2: e3, unde el, e2 ~i e3 sunt expresii. Modul de evaluare a acesteiexpresii este urmatorul : se evalueaza expresia e1; daca aceasta este diferita de zerovaloarea expresiei conditionale este ez : daca valoarea lui e 1 este 0; valoarea expresieiconditionale este e 3.

    Operatorul virguld. Se foloseste pentru a grupa mai multe expresii in una singura ~iare cea mai midi prioritate. Cu ajutorul acestui operator construim expresii de forma:e 1, e2, ... 1 en ~i valoarea intregii expresii este valoarea lui en (dupa ce s-au evaluattoate expresiile succesiv).

    Biblioteci. Limbajul C contine multe functii pentru prelucrarea datelor; aces tea suntgrupate in biblioteci. Dintre cele mai importante biblioteei, precizam :- stdio. h ~i io. h, pentru eitire/scriere;- stdlib. h ~i math. h, pentru prelucrari numerice ;- ctype . h, pentru prelucrarea sau verificarea earaeterelor;- mem. h ~i string. h, pentru siruri de earactere Si zone de memorie ;- alloc. h, malloc. h ~i stdlib. h, pentru aloearea memoriei ;

    conio. h, pentru interfata eu consola ;- graphics. h, pentru interfata grafica ;- dos. h, pentru interfata eu sistemul de operare DOS.

    4. Structura programelor CDeclaratlile globale permit utilizarea unor tipuri de date si variabile definite de

    utilizator in orice punct din interiorul programului.

    Orice program Care urmatoarea structura :

    4.1. Directive de preprocesare

    I directive de preprocesaredeclaratii globalet'unctii4.2. Functii

    lnlimbajul C exista doua tipuri de functii : functii care retumeazd 0 valoare ~i functiicare nu returneaza 0 valoare. Structura unei functii este urmatoarea :

    tip_returnat nume_functie (lista parametrilor formali)declaratii de parametri

    Constante simbolice. 0 constanta simbolica are forma:I #define nume succesiune de caractere

    In primul eaz, fisierul specificat este cautat in directorul curent ~i apoi in directoarelestandard pentru include; in al doilea eaz, se ceuta numai in directoarele standard.Actiune : textul fii,eru~pi. specificareste inclu~ in program,

    :...~... ..' ...-,_ ,..1. ~''':.. . ,.,""". :. ':~.. . .. ~'.,. .' .~. .._Un pi-ogram'C-poate fi prclueratlnainte de a fi compllat. Acest tip de prelucrare senumeste preprocesare. Preprocesorul este apelat automat atunci cand se incepe compi-larea, e relativ simplu ~;i, de obicei, executa substitujii de text. Prin intermediullui sepot realiza; includeri de text, definitii i apeluri de macrouri simple, compilareconditionata. Punctia principala main contine instructiunile care se executa. Aceasta poate returna

    o valoare ~i poate avea Si parametri. .

    C':'.'declara~{i :de~V~ri~~ile localeinstructiuni separate prin ;

    Observajii :- parantezele rotunde trebuie sa fie prezente chiar ~i atunci cand lista parametrilor

    formali este vida;- partea de inceput a functiei pana la acolada descbisa se numeste antetul functiei ;- partea Iunctiei inclusa intre acolade, inclusiv acoladele, se numeste corpul functiei

    (acoladele sunt obligatorii).;..... , '. . '.. ~. _- arunci cand nu exista parametri fonnali se poate sa nu scriem nimie sau se poate scrie

    cuvantul void (tipul vid), varianta din urma fiind recomandata ;- cand functia nu rerurneaza nimie se poate scrie void in loc de tipul returnat; daca

    nu se scrie nimic, atunci tipul returnat va fi implicit tipul Lnt; ;

    Includerea unul fiier-sursa. Are una dintre formele:#include "specificator_de_fisier"#include I

  • 60 BAZELE PROGRAMARII iN C. APLICATII LIMBAJUL C - PREZENTARE GENERAL.'\. 61

    Se objine scriind caracterul ,,;" dupa 0 expresie (de atribuire, apelul unei functii,instructiuni expresie).

    Exempte:

    5. Instructluni

    5.1. Instructiunea vida

    1; altfel, se executa instructiunea 2.

    D~!.;i~U..

    1 sns t ruc t tune 1 I

    tEJect:

    1. Se evalueaza expresia dintre paran-teze.

    2. Daca valoarea expresiei este diferitiide zero, atunci se executa ins truc-tiune 1 ; altfel, se trece la urmatoa-rea instructlune.

    Instructiunea if ne permite ramificareain functie de valoarea unei expresii.

    if(expresie)instructiunel;

    Format 2:

    Formal 1 :

    5.4. Instrucfiunea if

    EJect:1-. Se evalueaza expresia din paranreza.2. Daca valoarea expresiei este diferita

    de zero, atunci se executa instructiunea.Se trece la instructiunea urmatoare.

    if(e~presie)instructiunel;e~se instructiune2;

    3.

    Are urmatorul format:1 whi~e(expresie)instructiune;

    ~-::;.b::::-=~,~'~:~ ,c'__ , _ .. ,..--:=5.5.1nstrucJiunea:whi~e! -,

    structura

    /1 postincrementare: i 5e mareste cu 1II expresie-de atribuireII citirea unui caracter de 1a tastaturaII predecrementare: k se micsoreaza cu 1

    int main (void)int main ()

    void main (void)void main ()

    main (void)main ()

    i+-I-;max 0:.0 a l Lj r .z .c :: getchar () ;--k;

    - functia main poate fi folosita i .cu oricare dintre anteturile de rnai jos :

    5.2. Instructiunea expresie

    Vom defini in continuare instructiunile C caracteristice programarii structurate :secveruialii, structura alternativii, structura repetitiva.

    Se reduce la caracterul ,,;" i l].u are nici un efect.

    III

    I5.3. Instructiunea compusiiEste 0 succesiune de declaratii urrnate de instructiuni, incluse Intre acolade. Declaratiilesan instructiunile (chiar i ambele) pot lipsi. Formatul acestei instructiuni :

    I declaratiiinstructiuniAceasta insrructiune mai poarta denumirea de instructiune repetitivii cu test initial ~i

    numiir necunoscut de pasi. Ea se executa astfel :1. Se evalueaza expresia dintre paranteze.2. Daca valoarea expresiei este diferitii de zero, se executa instructiunea i se trece la

    pasul 1.3. Daca valoarea expresiei este 0, se trece la urmatoarea instructiune.

  • 62 BAZELE PROGRAMARII iN C. APLICATII LIMBAJUL C - PREZENTARE GENERALA 63

    5.6. Instruciiunea forSe mai numeste instructiune repetitivd cu numar cunoscut de pasi. Formatul instructiuniieste:

    I for(el; e2; e3)instructiuneiunde e 1, e 2 i e 3 sunt expresii.

    for (e 1 ; e 2 ; e 3) este antetul ciclului. Instructiunea care se executa repetat estecorpul ciclului. e 1 reprezinta partea de initializare a ciclului, e3 - partea de reinitializarea sa, iar e 2 reprezinta conditia de continuare a ciclului.

    5.7. Instructiunea do-while.Se mai numeste instructiune repetitive cu test final. Are urmatorul format:I do instructiune while (expresie);

    Pasii de executie pentru aceasta instructiune sunt :1. Se executa instructiune.2. Se evalueaza expresie.3. Daca valoarea expresiei este diferita de 0, atunci se reia pasul 1; altfel (valoarea

    expresiei este 0), se trece Ia instructiunea urmatoare.

    5.8. Instructiunea swi tchPermite realizarea structurii selective. Este 0 generalizare care poate fi tnlocuita custructuri alternative if imbricate. Formatul instructiunii este:

    switch (expresie) { " -r;""- .ease c 1 : sir1_de_instructiuni; Ibreak; Icase C z: sirz_de_instructiuni; Ibreak; I

    ,

    case Cn: sirn_de_instructiuni; Ibreak; IIdefault: sir_de_instructiuni; I

    )

    Pasii de executie a instructiunii sunt :1. Se evalueaza expresia dintre paranteze.2. Se cornpara pe rand valoarea expresiei cu valorile cl' cz' ... , c ri 3. Daca valoarea expresiei coincide cu valoarea c k' atunci se executa secventa de

    instructiuni definita prin si.:c\;::.....de_instru-ctiuni.: daca nu coincide eu niciuna,atunci se executli'sir_de instructiunL "

    Alternativa default nu este obligatorie, la fel ~i instructiunile break. Daca. deexemplu, nu exista instructiune break dupa sirk_de_instructiuni, atunci se vor

    executa i urmatoarele siruri de instructiuni, pana la terminare sau pana la intalnirea uneiInsrructiuni break.

    5.9. Instructiunea breakFormatul instructiunii este :

    break;

    Aceasta instructiune se utllizeaza pentru a iesi dintr-o instructiune s wit ch sau pentrua iei dintr-o instructiune ciclica.

    5.10. Instructiunea con tinueFormatul instructiunii este :I continue;

    Eject:- tncadrul ciciurilor while ~i do-while, se realizeaza direct evaluarea expresiei care

    decide asupra continuarii ciclului ;- in ciclul for, ea realizeaza saltul Ia pasul de reinitializare,

    6.. Intrliri/ieiri standardLimbajul C nu dispune de instructiuni pentru operatiile de intrare/iesire, Acestea serealizeaza prin intermediul unor functii predefinite, care sunt implementate intr-o formacornpatibila pe majoritatea sistemelor de calcul,

    6.1. Functia de scriere cu formatPentru scrierea cu format a datelor se foloseste functia printf. Scrierea se face infisierul standard de iesire ~i formatul este :lint printf(const char *format [, lista_expresii J);

    Eject:1. Accepts 0 serie de argumente de tip expresie pe care, dupa ce Ie evalueaza, Ie

    transforms in siruri de caractere conform formatului specificat.2. Scrie aceste siruri in fisierul standard de iesire,

    Daca numarul de argumente specificflt~ in format nu corespunde ell numarul deargumente din lista de expresii, atunci iipar_rezultatc"'iiehteptate", care pot avea efectedaunatoare, in special daca numarul de argumente este mai mic decat numarul despecificatori de format. Rezultatul furnizat de functie, in caz de succes, este numarul deocteti scrisi, iar in caz de eroare, valoarea tntoarsa este EOF.

  • 64 BAZELE PROGRAMARII iN C. APLlCATII LIMBAJUL C - PREZENTARE GENERALA 65

    Specificatorii de format folositi de functiile printf ~i scanf' sunt:

    Se realizeaza ell ajutorul funcjiei fopen, ell sintaxa :7.1. Deschiderea unui fisier

    7.2. inchiderea unui fisierSe realizeaza eli ajutorul functiei fclose, ell sintaxa:

    int fclose(FILE *stream)care rerurneaza 0 in caz de succes.

    FILE *fopen( const char *nume_fisier,const char *mod_deschidere };

    Modurile de deschidere pot fi : r (deschidere numai pentru citire), w (deschiderenurnai pentru seriere), a (deschidere numai pentru adaugare), b (deschidere numai inmod binarj si t (deschidere in mod text, optiune implicita), Daca dorim sa combinamdoua sau mai multc moduri de deschidere, putem utiliza +

    inchiderea tuturor fisierelor deschise se realizeaza cu ajutorul functiei fcloseall,cu sintaxa:lint fc1osea11( void)

    ITipuri de formate

    Pentru numere intregi de tip inti lntreg in baza 8, 10 sau 16, in funcjie de primul san primele doua caractered intreg in baza 100 intreg in baza 8, nu este necesarf ccrierea cifrei 0 la inCf?utul numaruluix intreg in baza 16, nu este necesara scrierea secvemel Ox la inceputul numaruluiu lntreg tara semn

    Pentru caracteres sir de caractere .

    c un singur caracterPentru numere reale de tip float

    e E numar real de forma iiii. zzzzzz, node numarul de, cifre zecimalea cste dar deprecizie (implicit 6)

    f numar real de forma i. zzzzzz, undc numarul de cifre zecimale este dar de precizie(implicit 6). Se cbserva eli pentru partea Intreaga este folosita doar 0 cifra, spredeosebire de fonnatele e Si E.,unde pot f folosite pana la 4 cifre.

    9 G numar real care suprima caracterele tenninale ce nu influenteaza valoarea, adica cifrelede 0 de 1a sfar~it sl punctul zecimal, daca numarul ate partea rracuonara 0

    6.2. Functia de citire cu formatPentru citirea cu format a datelor se foloseste functia scanf. Aceasta are sintaxa : 7.3. Functia de verlficare a sfaritului de fisier

    7.4. Functii de citire/scrlere

    Daca citi~i-i i"avut succes, -sereturneaza valoarea car~cterului citit, altfel se rerurncazaEOF.

    Punctiile de citire pot fi, in funcjie de tipul datelor citite, de mai multe tipuri. Existiifunctii de citire pentru: earactere, slruri de caraetere, cu format, pentru tnreglsrrari.- Functii de citirelscriere pentru caraetere:

    Pentru citirea unui caraeter se folosesc functiile cu sintaxa:

    Este f eo f , are sintaxa:lint feof( FILE *stream

    Si returneaza"b da~a' pozfiiape"care u"e aflam in fisier n~' este la sfarsitul ace-stuia i 0valoare diferita de zero daca pozitia actuala indica sfarsitul de fisier.

    int fgetc( FILE *stream );int g~tc( FILE *stream );I

    7. Fislere

    Functiile de intrare/iesire se bazeaza pe conceptul de flux (stream). In C, unui flux i sepoate asocia orice: un fisier pe disc, un terminal, 0 unitate de CD-ROM. imprimanta,modcmul, placa de" sunet.

    int scanf(const char *format [,l~sta_adrese_var~ab~le]);

    unde format este 0 constama de tip .:sir de caractere specificand formatul in care vor fi. citite caracterele de la intrare, iar lis t.a. ed ces-e var Leb i.Lc este fermata din adrcsele

    v~riabilelor separate prin virgula. EfecluJ apelului este urmatorul :- citeste 0 secventa de campuri de intrare, caracter cu caracter, pana la tenninarea

    introducerii campurilor si apasarea tastei ENTER:- formateaza fiecare camp conform fonnatului specificat de argumentul char *format;- valorile astfel construite se memoreaza la adresele variabilelor specificate ca argu-

    mente.

  • 66 BAZELE PROGRAMARII iN C. APLlCATIl LIMBAJUL C - PREZENTARE GENERAL,b.. 67

    int fgets(char *5, int n, FILE *stream)

    lint fputs (const char e, FILE *f)

    unde s reprezlnta buffer-ul in care se stocheaza sirul citit Si n indica numarul maxim decaractere care se vor citi.

    Pentru scrierea unul sir de caractere lntr-un fisier se poate folosi functia fputs, cosintaxa :

    In caz de eroare, se intoarce valoarea EOF.

    - Functii de citire/scriere ell fannat:

    Sintaxa functiei fscanf pentru citirea variabilelor dintr-un fisier de tip stream este:

    Observam, in al doilea exemplu, ca 0 structura poate fi si membra a altei srructun.

    Exemple:t~ulstruct complex tipul struct pers

    . declarare, utilizare t~ulstruct anqajatstruct complex! struct pers {

    double x; char nume [35);double y; int ani;

    I I;".

    struct angajat{struct complex z; struct pers p;

    ".long salariu;

    z.x = 5.45; int vechime;z.y = -7.89; I

    ...

    struct angajat a;a.p.nume = ~Maia r ones cu" ;a.p.ani = 34;a.salariu = 6000000;a. vechime = 3;.

    Sa considerarn urmatorul program sugestiv :

    8.2. enum i typede:f

    Pentru scrierea unui caracter se folosesc functiile ell 'sintaxa :

    int fputc(int c, FILE *stream);int putc(int c, FILE *streaml;

    int fscanf(FILE *stream,const char *format [adresa_varl, ... ])

    In caz de scriere reusita, ambele intorc caracterul care s-a scris; in caz de eroare,ambele intorc caracterul EOF.- Functii de citire/scriere pentru giruri de caractere :

    Functia fgets citeste un sir de caractere dintr-un fisier i are sintaxa:

    I

    Ic

    Aceasta functie cireste 0 secventa de campuri de intrare caracter cu caracter, for-mateaza fiecare camp conform formatului specificat corespunzator, iar campul formateste transmis la adresa variabilei specificate.

    Pentru scrierea. ell format se utilizeaza