Sunteți pe pagina 1din 317
CURS DE INFORMATICA INVATAMANTUL GIMNAZi May & oo coodsl > Tudor Sorin De la Pascal la Delphi Pentru elevii din clasele v-vIII DICK SERBAN © Toate drepturile sunt rezervate editurii L&S INFOMAT Prefata Aceasta carte se adreseaza elevilor din clasele v-vrrz si este gandita ca manual de informatica. > Desi informatica se invaté cu mult mai usor daca studiul ei incepe in timpul gimnaziului, din pacate, nu existé o programa pentru aceasta disciplina, motiv pentru care asa numitele “continuturi ale invatarii", au fost stabilite de autor. > Pentru introducerea notiunilor de algorimicd, pe care le consider strict necesare, am utilizat doud limbaje: Turbo Pascal si Borland Delphi. > De ce Turbo Pascal? - Pentru intelegerea algoritmilor se utilizeaza scheme logice si/sau limbaje de tip pseudocod. Pascal-ul a fost conceput ca limbaj de tip pseudocod. Datorité calitatilor incontestabile pe care le are, Pascal-ul a devenit limbaj de programare. Prin utilizarea lui se imbinaé avantajul prezentarii sistematice a algoritmilor, specifica pseudocodului, cu avantajul dat de posibilitatea testarii imediate, prin rularea programului obtinut. - Pascal-ul permite introducerea treptaté a notiunilor. Astfel putem scrie programe care nu folosesc subprograme, apoi invatam s& le cream pe acestea din urma, pentru ca, la sfasit s& putem invata mecanismele de baz& ale programérii orientate pe obiecte. Toate acestea stau la baza formarii gandirii algoritmice: la inceput copii invaté s& scrie mic secvente care s& exemplifice structurile liniare si repetive, apoi sa descompuna problema in subprobleme carora le ataseaza subprograme, iar apoi s& gandeasca obiectual. > De ce Borland Delphi? = Astézi programele prezinté o interfaté de exceptie, realizaté cu ajutorul unor componente standardizate. A scrie programe cu astfel de interfaté inseama s& cunosti Programarea Vizualé. Aceasta poate fi studiaté cu ajutorul limbajului Borland Delphi. - In ultimul timp, Tehnologia Informatiel a devenit o disciplina indispensabila. Un capitol important al ei se ocupa de utilizarea calculatoarelor. Programele care se studiaz& sunt obtinute cu ajutorul Programériil Vizuale. Studiul diverselor componente vizuale, creeaza posibilitatea s& Invatém rapid un anumit program, pentru ca ne concentrém exclusiv asupra a ceea ce face, nu si asupra modului in care-| comandém! = Intr-un anumit sens, Programarea Vizualé generalizeazé programarea clasic&. Asta pentru cé a) Programarea Vizualé este orientaté pe evenimente. Un program este realizat astfel incdt si efectueze o anumitd actiune ca urmare a unui eveniment. De exemplu, un click asupra unui buton este un eveniment. Th acest’ moment, se ruleazé o proceduré care raspunde acestui eveniment. Procedura este scrisd clasic, asa cum sunt cele din Turbo Pascal. Prin urmare, secventele clasice sunt subordonate evenimentelor. ) Programarea Vizualé este orientaté pe componente. Pentru multe dintre operatile pe care trebuie s& le programam existé componente specializate care le realizeazd. Aceasta inseamnaé ca, de acum, realizarea programelor se face intr-o maniera diferité, cu mult mai @ficienta: se adund componentele de care este nevoie, dupa care acestea “se leaga" intre ele si se scriu secventele particulare, clasice, strict necesare programului. > Nu In ultimul rand, Programarea Vizuala are rolul de a apropia copii de programare. Pentru ei, efectele vizuale au mare efect. Tudor Sorin Partea | Turbo Pascal Capitolul 1 Notiuni introductive 1.1 Mediul integrat de programare Turbo Pascal Pentru a usura munca programatorilor Pascal firma Borland a pus la dispozitia acestora mai multe instrumente (compilator, editor de texte, meniuri, etc.) care concura la realizarea unui program. Toate acestea poarta numele de mediu integrat de programare Turbo Pascal. Lansarea programului care-I afiseaz& se face prin apelul programului bp.exe. In imaginea de mai jos puteti si vedeti ce se afiseazd la acest apel: al ogee pests program arch“Pun Compile Debug Tools Options - Fereastra program este cea In care se introduce textul programului. Numele ei implicit este NONAMEsxx, unde x este un numar cu doud cifre. - Meniul -mai multe cuvinte scrise orizontal in partea de sus (FILE, EpIT,...etc). Cu ajutorul sau, programatorul poate da diverse comenzi necesare realizarii programului. . (BBHY compile Debug Tools Pentru a comanda o anumita operatie, se apeleazi grupul de comenzi din care aceasta face parte (in exemplu Trace into rr | Run), apoi se selecteazé operatia cu Go to cursor Fa ajutorul unei bare orizontale si se Frogrem reset ctrl4+F2 | lanseaz& in executie tastand Enter Farenster ely sau un click cu mouse-ul. Step over Cursorul plasat in fereastr - 0 liniuté orizontala care clipeste si indica in permanenta pozitia de pe ecran in care va aparea primul caracter tastat. 7 1.2 Introducerea textului programului Orice text sursi se scrie intr-o fereastré program, cu ajutorul editorulu) de texte. Textul se introduce si apoi se salveaz pe hard-disk sau pe disk-ets sub forma de fisier (se mai numeste si fisier text). Fiecare caracter tastat apare in pozitia cursorului. Dupa tastare, cursoru| ocupa pozitia urmatoare literei tastate. El se poate deplasa in cele 4 direct: cu ajutorul tastelor sdgeti (~, 1, —, J). Exist si posibilitatea pozitionarii cursorului prin intermediul mouse-ului -se executd click in pozitia dorité. Avem la dispozitie cateva taste cu rol special in introducerea textelor: Enter determina cursorul sa sara la rand nou. Delete -sterge caracterul sub care se afl cursorul. Backspace are rolul de a sterge caracterul aflat inaintea pozitiei curente a cursorului. Caps Lock Daca aceasta tasté nu a fost apasaté, se scrie cu litere mici. In momentul apasarii tastei Caps Lock, se aprinde un beculet al tastaturii (indicd faptul cd a fost apsat) si pana la o noua apdsare, se scrie cu litere mari. ghift Se foloseste impreuna cu celelalte taste. Principiul este urmatorul: se apas& shift, dupa care, neridicand degetul de pe ea, se alt tast. Dacd aceasta este litera va aparea pe ecran ca liter’ mare, iar dacd este tasté bifunctionala (vezi randul 2 al tastaturii) se tip&reste ce este sus - caracterele speciale *, (, &...) -. Toate acestea se Intamplé in ipoteza in care Caps Lock nu a fost apasata (beculetul corespunzator este stins). In cazul in care am apasat-o (beculetul corespunzator este aprins) la apdsarea cu Shift, va scrie cu litere mici. Tasta Caps Lock, nu influenteaza selectia in cazul tastelor bifunctionale. 1.3 Rularea unui program S& consideraém c& am tastat programul urmator: Programul citeste dou’ numere a si b si tipareste suma lor. Nu prezentim acum modul in care acesta a fost realizat. Pentru moment, ne intereseaza s&1 rulém. > Rularea propriu-zisa se face prin apdsarea tastelor cTRL si F9 (intai cTRL si fara s& ridicim degetul de pe aceasti tastA apasim F9). O astfel de modalitate de apasare a tastelor se noteazd prescurtat CTRL+F9. > Daca nu am tastat corect textul, apare un mesaj de eroare, iar cursorul se pozitioneazd in locul unde se presupune ca exista eroarea (nu intotdeauna locul presupus este cel in care s-a produs intr-adevar eroarea). In acest caz, se efectueazd corectia necesara si se incearca, din nou, rularea programului (CTRL+F9). In cazul in care nu avem erori, se executd programul. Procedand astfel, calculatorul executéa mai multe actiuni (corect, acestea se numesc faze), pe care le prezentam in continuare. 1) Compilarea programului - traducerea lui din Pascal in cod masina (succesiune de 0 si 1). Dacd programul este tastat corect, compilarea reuseste si se trece la faza urmatoare, altfel apare mesaj de eroare, asa cum am aratat. 2) Editarea legaturilor -fazi pe care nu o prezentam. 3) Executia programului - fazi care este specifica fiecdrui program in parte si pe care o prezentam, in continuare, pentru programul de mai sus. La inceput, calculatorul va tipari mesajul ‘a=* si asteapta introducerea num@rului a. S& presupunem ca dorim sa introducem numarul 12. Se 9 apasd 1, apoi 2, dupd care se apasd Enter. Dupa introducere, se tipareste mesajul ‘b=* si se asteapté introducerea numarului b. Presupunem ca introducem numérul 5. Calculatorul va tipari 17, adicé suma celor doua numere. In acest moment executia programului este terminata. = S& observém ca, in momentul executiei, de pe ecran dispare textul programului, citirea si scrierea datelor se efectueaz4 cu ajutorul alte| ferestre, iar dupa terminarea executiei, pe ecran apare, din nou, textul sursd. In acest fel vom lucra cu doua ferestre: * fereastra in care gasim textul sursa; © fereastra in care programul citeste datele si scrie rezultatele, prezentata mai jos: => Dupa terminarea executiei, se revine la fereastra in care se gaseste textul surs& al programului. De cele mai multe ori, nici nu avem timpul necesar s4 vedem rezultatul tiparit. Pentru a vizualiza rezultatele se tasteazi aLT+F5. In acest caz, revenirea in mediul in care se gaseste textul sursi (programul) se face prin apasarea tastei Enter sau, din Nou, ALT+FS. 1.4. Salvarea si incdrcarea programelor In paragraful anterior am invatat s& rulém un program. S& presupunem cA dupa 0 zi, dou’, dorim s& rulim din nou programul anterior. Ce avem de facut? Introducem din nou textul sursa si efectuam operatiile care au fost arétate? Se poate si asa, dar pierdem timp, cu introducerea textului. Pentru a nu pierde inutil timpul, trebuie ca, odaté introdus textul sursa al unui program, acesta sa fie salvat. > Prin salvarea unui program se intelege operatia prin care acesta este scris pe suport magnetic (de cele mai multe ori pe hard). Pentru a putea refolosi programul salvat, acesta trebuie Incarcat. > Prin incdrcarea unui program se intelege operatia prin care acesta este citit de pe suportul magnetic si introdus in memoria intema. Salvarea unui program se face utilizand un anumit nume pentru el. De asemenea, Incdrcarea sa se face dup numele sub care a fost salvat. > Numele sub care se face salvarea sau inc&rcarea programelor este numele ferestrei care il contine, urmat de extensia .pas. Pana th acest moment nu am folosit dec&t nume implicit (dat de sistem) pentru fereastra program. Este bine ca salvarea programului sa se facd sub nume alese de noi (explicite). S& presupunem ca am introdus textul sursd al unui program intr-o fereastra cu nume implicit. Dorim s& salvam programul cu numele primul.pas. Pentru aceasta vom proceda astfel: e apelam optiunea FILE a meniului (ALT+F); * se selecteazd optiunea Save As (se pozitioneaza bara pe optiunea aratata, dupa care se tasteazd Enter); * va aparea o feréastrd cu un rol special (pentru salvare) - in care tastém numele sub care vrem sa salvam programul (pentru exemplu, primul). Apasém Enter sau executam click pe OK. In urma acestor actiuni, programul se va gasi pe hard sub numele priml.pas (extensia a fost addugaté automat). De asemenea, fereastra program va avea acelasi nume (primul.pas). i Daca dorim s& salvém un program aflat intr-o fereastra cu nume explicit si nu dorim schimbarea numelui, vom proceda astfel: * apelém optiunea FrLe a meniului (ALT+F); * selectém optiunea Save. Mai simplu, salvarea se face apasdnd tasta F2 (0 astfel de tastd, care actionata reduce considerabil efortul de a da o comandé se mai numeste sj tasté fierbinte). Y Diferenta dintre Save si Save As este data de faptul cd save salveazd un program cu numele pe care il are fereastra, iar Save as salveazd Programul cu un nou nume (care va fi introdus de programator). Totusi, dac& fereastra are un nume implicit, programatorul este intrebat sub ce nume s& se facd salvarea (ca la Save As). ¥ In cazul in care se doreste si se salveze un program cu un nume sub care se regdseste un altul, programatorul este avertizat si intrebat daca s& salveze peste cel memorat (overwite -caz in care cel initial salvat ‘se pierde), sau nu. Y ste bine ca atunci cand scriem un program sa-| salvam din cand in cand (poate fi o intrerupere de curent sau alt incident, caz in care am m™uncit degeaba). Y Atentie! SA nu confundim numele programului (dupa cuvantul program) cu numele sub care va fi salvat programul. Este recomandabil ca cele doud nume sa coincida. ’ F&r& alt optiune, salvarea unui program se face in directorul curent. in cazul in care se doreste salvarea in alt director (folder), trebuie precizaté ‘si calea (pentru Save As). Exempiu: dorim sa salvém programul cu numele primul in subdirectorul PRG al directorului MARIUS. Numele va fi: C:\MARIUS\PRG\PRIMU1. Sa presupunem ca dorim s& incarcém programul salvat anterior. Se poate proceda astfel: * se selecteaz4 optiunea FILE a meniului (ALT+F); * se selecteaz4 optiunea OPEN; © se tasteaz4 C:\MARIUS\PRG\PRIMUL 12 Mai simplu, se tasteazé F3, apoi C:\MARIUS\PRG\PRIMUL. y Atat fereastra de salvare, cat si fereastra de incdrcare a unui program au forma speciala, numité in informaticdé cutie de dialog. Ambele cutii de dialog permit ca utilizatorul sé poaté explora structura directoarelor (folder-elor) pentru indentificarea spatiului de salvare sau a programului care se incarca. a o Dupa aparitia cutiei de dialog, putem proceda si altfel. Vom observa ca, in partea inferioara a ei, se gaseste o lista care cuprinde: Programele din directorul (folder-ul) curent (se recunosc dupa extensia pas). In exemplu avem doar programul Sortare. Lista subdirectoarelor directorului curent (se recunosc prin faptul cd se termina cu caracterul ‘\’ In exemplu avem sSubdir\. Caracterele ..\ (au semnificatia de director radacina). Saltul la aceasta listé se poate face tastand Tab. Odata efectuat saltul, putem explora intreg hardul, de exemplu pentru a inc&rca programul pe care I dorim. Cum procedam? Q Dac& programul pe care dorim sé incdrcém se gaseste in directorul curent, plimbam cu ajutorul tastelor sdgeti o bara luminoasa panad cand aceasta se pozitioneaza pe numele programului, apoi tastam Enter. Daca programul se gaseste intr-un subdirector al directorului radacina, pozitionaém bara luminoasé asupra numelui sau, apoi tastam CR si procedam ca la cazul anterior. Daca programul se gaseste in radacina directorului considerat exploram radacina plasand bara luminoasé deasupra caracterelor ..\ si tastand Enter, apoi procedam ca in cazurile anterioare. 13 1.5 Lucrul cu mai multe ferestre program Existé cazuri cand este necesar si avem afisate, simultan, mai multe ferestre program (unele le incdrc&ém de pe hard, altele le scriem in acel moment etc.). De la bun inceput, precizim cé mediul integrat de programare Turbo Pascal permite acest lucru. De exemplu, putem Incarca (asa cum a fost aratat in paragraful anterior) doud programe de pe hard. Evident, fiecare program are asociati fereastra sa (numele ferestrei coincide cu numele programului care a fost incdrcat). Tn cazul existentei mai multor ferestre program, la un anumit moment, fnumai una este activa, in sensul cd putem opera numai asupra programului aflat in fereastra activa. Crearea unei noi ferestre se face utilizand optiunea New a meniului File (aut+F si selectém New). In acest fel obtinem o fereastré cu un nume predefinit (WONAME:cx). Modul in care dam numele dorit unei ferestre a fost prezentat. SA presupunem c& avem deschise 3 ferestre program la un moment dat. Am artat faptul ci numai una dintre ele este activa. Pentru ca alta fereastra s& devina activa, se activeaz4 optiunea Next a meniului Window (aut+wW sl se selecteazi Next). Mai simplu, se tasteazi Fé. Repetand procedeul urmatoarea fereastri devine activ’, pané cAnd prima fereastrd redevine activa. Existé cazuri cand o anumité secventd, dintr-un program deja tastat, trebuie introdusa in altul, pe care il scriem in acel moment. Pentru a putea efectua aceasta operatie, trebuie s& marcdm ca bloc secventa respectiva (odaté marcat, va figura tn program intr-un context grafic diferit). Pentru marcare, procedam astfel: - se pozitioneaza cursorul la inceputul primului rand al secventei; - apasém tasta shift in mod continu si cu sageata jos marcém randurile care o alcatuiesc. Odat& marcat, un bloc poate fi transferat intr-o fereastra specialé numita Clipboard. Transferul este de doua feluri: » blocul este numai copiat in Clipboard (raémAne si in fereastra program care jl contine); » blocul este mutat efectiv in Clipboard (dispare din fereastra program care 1 contine). 14 a In primul caz se apeleazd optiunea copy a meniului Edit (Alt+z si se selecteazé Copy) sau, mai scurt, Ctrl+Ins. a In al doilea caz se apoleazd optiunea Cut a meniului Bait (Alt+e si se selecteazi Cut) sau Shift+Del Dac& dorim, putem vizualiza continutul Clipboard-ului apeland optiunea Show Clipboard a meniului Edit. Din Clipboard, un bloc poate fi inserat in fereastra activa. Inserarea se face, Incep&nd cu pozitia curenté a cursorului, apeland optiunea Paste a meniului Edit (pe scurt, Shift+Ins). Daca dorim, putem modifica dimensiunile ferestrei active. Aceasta se face astfel: => se apeleazd optiunea Size Move a meniului Window (marginile ferestrei active capata alta culoare (verde); => cu ajutorul tastei shift+ sagetile dreapta, stanga se deplaseaza latura din dreapta a dreptunghiului care marcheaza fereastra (cea din stanga ramane fixa); = cu ajutorul tastel shifttsagetile sus, jos se deplaseazi baza dreptunghiului (latura de sus ramane fixa); = dupa ce am adus fereastra la dimensiunile dorite, ea poate fi mutata cu ajutorul sagetilor in pozitia dorita; = in final, se tasteazi Enter. In cazul in care dorim, putem modifica aranjarea ferestrelor program pe ecran. 41. Le putem aranja una sub alta cu ajutorul optiunii Tile a meniului Window. 15 2. Le putem aranja in cascadi cu ajutorul optiunii Cascade a meniului Window. 7 HE ns oP ES TY Dacé dorim ca fereastra activa sa ocupe intreg ecranul se apeleaza optiunea Zoom a meniului Window. Probleme propuse 1. Introduceti si rulati urmatorul program (aduna, scade, inmulteste si imparte doud numere cu parte fractionara. Exemplu a=1.25, b=7.76. Observati ca fn loc de virguld se foloseste punctul. program ex; var a,b,8,4,p,c:real; begin write('a=');readln(a); write('b=') ;readin(b); s:=atb;d:=a-b;p:=a%bjc:=a/b; writeln('suma ei writeln( ‘diferent: 742623); writeln('produsul +1623); writeln('catul este ',c:6:3) end. 2) Salvati programul de mai sus sub numele de ex-pas. Salvarea se va face In doua directoare (folder-e) diferite stabilite de dumneavoastra. 3) La intrarea in Turbo Pascal, incarcati ce ati salvat anterior. 4) Lucrati simultan cu doua ferestre program. Aranjati in toate modurile posibile cele doua ferestre. 5) Selectati un bloc dintr-unul din programe si introduceti-| in celdlalt, dupa linia 3. Capitolul 2 Primele programe 2.1 Cel mai simplu program $& vedem cum araté cel mai simplu program Pascal: program primul; begin end. Programul de mai sus este corect. Cu toate acestea el nu face nici o operatie. Daca i analizm, putem trage primele concluzii: = orice program Pascal incepe cu cuvantul program, urmat de numele programului (nume pe care lam ales pentru a-l “boteza”). In exemplu, numele este primul. => orice program Pascal contine cuvintele begin si end; => dupa numele programului punem ';' (caracterul punct si virgula); = orice program Pascal se termina cu '.' (caracterul punct). ¥ in scrierea unui program nu are importanté daca folosim litere mari sau mici. De exemplu, programul de mai sus ar putea arata si astfel (desi nu este 0 forma elegant de prezentare): PRograM primil; Becin End. ¥ Nu are importanta nici plasarea cuvintelor pe linie, nici numarul spatiilor dintre ele. Oricum, doua cuvinte trebuie despartite prin cel putin un ‘spatiu. Programul de mai sus poate fi scris si asa, desi neelegant: pRogrAm PRIMUL; BeGin End. S& ne imaginam c& avem in faté un program mare scris asa. El poate fi rulat, dar care programator va mai intelege ceva, daca il priveste ? ¥ Versiunea Borland a limbajului permite ca secventa program nume sd lipseascd. De exemplu, putem scrie si asa: begin end, 2.2 Cate ceva despre variabile SA analizim programul de mai jos, care citeste un numér intreg pe care il introducem de la tastatura si il tipareste: program cl; var arinteger; begin read(a); write(a) end. Tn cazul in care introducem numarul 10, calculatorul va tipari 10, daca introducem 16, calculatorul va tipari 16 s.a.m.d. Care este mecanismul prin care se realizeazi aceasta? Calculatorul preia data citit& si o depune in memoria intema. De acolo, aceasta este preluata si afisat& (tiparité) pe monitor. > Prin citire se intelege operatia prin care calculatorul preia o data din exterior si o depune in memoria intema. Pentru citire, mediul exterior va fi tastatura (vom vedea c& exist si alte dispozitive de pe care se poate citi). > Prin scriere se intelege operatia prin care calculatorul preia o data din memoria intema si o depune in exterior. Pentru scriere, mediul exterior va fi monitorul (ca si la citire, vom vedea ca exista si alte dispozitive pe care se poate scrie). Schema de mai jos, sintetizeazé mecanismul prezentat: A spune c& o dat este depusd in memoria interna este mult prea putin. Memoria intem& contine o multime de alte informati. Trebuie s& stim locul 1n care aceasta este depusd. Pentru a putea realiza aceasta, se foloseste un procedeu specific. In ce const el? Pe scurt, se declaré o variabilé (in programul exemplu se numeste a). Pentru declarare, se foloseste cuvantul var, urmat de numele variabilei, caracterul ‘:' si tipul variabilei. Desi notiunea de tip este mai complexa, pentru moment, retinem faptul ca tipul variabilei precizeazé natura datelor care pot fi retinute in variabila 18 respectiva. In exemplu, variabila este a de tip integer. Aceasta inseamna c& va putea retine numai numere intregi. Pentru inceput, ne vom imagina variabila a ca pe o “cutiulaé” aflaté in memoria interna si care retine un numér intreg. S& presupunem cA s-a citit numarul 10. Reprezentarea intuitiva va fi: Dac& numérul citit este 16, reprezentarea intuitiva pentru variabila a este: Dac& tinem cont de faptul ci variabila a se gaseste in memoria interna, schema devine: Data (16) Data (16) MEMORIE Sa observam in cazul citirii numarului 10, variabila a retine 10, in cazul numarului 16 variabila a retine 16. Ne-am imaginat variabila ca pe o cutiuté pe care, in cazul nostru, am numit-o a. Aceasta retine la un anumit moment un numér intreg. Tocmai de aici provine numele de variabila - desi are un unic nume a, retine diverse date, deci are un continut variabil. program c2; var b:string; begin read(b); write(b) end. Programul de mai sus citeste un cuvant si il tipareste. De exemplu, daca la citire introducem cuvantul “soare” acesta va fi tiparit. Variabila b este de tipul string , adic poate retine un sir de caractere. Si pe aceasta ne-o imaginém ca pe o “cutiutaé” care are capacitatea de a retine cuvinte: b ¥ Am dat acest exemplu pentru a atrage atentia asupra importantei pe care o prezinti tipul variabllei - determiné natura datelor care pot fi retinute de o variabila. 19 2.3 Structura unui program PASCAL jn acest paragraf vom prezenta structura simplificaté a unui program Pascal. Acesta este: program nume; declaratii de variabile; begin instructiune,; instructiune,; end. => Comenzile pe care programul le da, la executie, calculatorului se numesc instructiuni. => Instructiunile se gasesc cuprinse intre cuvintele begin si end. => In absenta unor instructiuni speciale, ordinea de executie a instructiunilor este daté de ordinea in care acestea sunt scrise. = Nu are important daca scriem cu litere mici sau mari. => Instructiunile sunt asezate pe lini. O linie poate contine una sau mai multe instructiuni. = Instructiunile sunt separate de caracterul ‘;’ (mai putin intre ultima instructiune si end). Relum programul din paragraful anterior. program cl; var a:integer; begin read(a); write(a) end. Numele programului este c1. Am declarat o singura variabilé a, de tip integer. Intre begin si end se gasesc doua instructiuni: read(a) (care are rolul de comanda calculatorului citirea variabilei a) si write(a) (care are rolul de a comanda calculatorului scrierea variabilei a. In scrierea programelor, se pot folosi comentarii. Acestea trebuie introduse ‘intre caracterele ‘{', ‘}'. laté cum arat& programul nostru comentat: 20 program cl; var arinteger; begin read(a); (citesc variabila a) write(a) (tiparese continutul variabilel a) end. ¥ Este recomandabil ca programele sa fie comentate. De multe ori, dupa un timp, tntelegem cu greutate chiar programele scrise de noi, daca sunt mari si nu au fost comentate. ¥ Un rol aparte in scrierea unui program 1] au cuvintele cheie (rezervate). Acestea sunt cuvinte folosite in scrierea unui program numai intr-un anumit context. Exemple de cuvinte cheie: begin, end, var, program De exemplu, nu putem ca pe o variabilaé sé o numim begin, pentru ca acest cuvant are un rol precis in scrierea programelor. 2.4 Ce este un algoritm si care este legatura sa cu programul Vom porni de la un exemplu preluat din viata noastré. SA presupunem ca mama ne roagd sd mergem sa cumparam pdine. Ce trebuie sé facem? C&nd am decis s& plecdm dupa paine, vom proceda astfel: lum banii necesari; ne indreptam catre magazin; solicitim 0 paine; © platim; venim cu ea c&tre casa; o dam mamei. Daca ar fi sa sintetizém acestea, am obtine sirul actiunilor ce urmeaza a fi executate ca sd cumparam painea. Acesta ar arata astfel: Inceput; ja banii; deplaseaza-te la magazin; cere © paine; plateste painea; deplaseaza-te cu painea acasa; preda painea ‘Sfarsit. Vom conveni ca pe ultimul rezultat sd-l numim algoritm de cumparare paine. Orice copil care cumpaéra o paine va executa actiunile continute de 21 acest algoritm. Cu putind imaginatie, vom accepta cd, odata invatat, un robot (s4 cunoasca algoritmul) ar putea cumpara o paine. Si totusi ce este un algoritm? Ni-| putem imagina ca un sir de actiuni in vederea atingerii unui obiectiv. Cu toate acestea, o definitie precisa a notiunii de algoritm nu poate fi data. S& observam ca actiunile care alcdtuiesc algoritmul se executd in ordinea in care au fost puse. Astfel, degeaba plecam sé cumparam paine daca nu am luat banii, n-am cui sé cer o paine dacd nu am ajuns la magazin etc. Revenim la programul din paragraful precedent. Si acesta contine un algoritm, algoritmul de citire si tiparire a unui numar intreg. Sirul actiunilor este urmatorul: Inceput citeste numarul; tipareste numarul Sfarsit. $i aici, actiunile trebuie indeplinite in ordinea tn care au fost puse. Astfel, nu putem tipari numérul inainte ca acesta s& fie cunoscut (citit). Ce concluzie putem trage? Un program cuantificd un algoritm. Revenind la primul exemplu din paragraf, calculatorul se comporta exact ca robotul care cumparaé painea: executé orbeste un sir de actiuni (pentru calculator acestea se numesc instructiuni). Pentru a putea cumpara painea, robotul trebuie invatat (trebuie sé cunoascd algoritmul), pentru a putea citi si tipari un numér calculatorul trebuie invatat ce are de facut (trebuie s& cunoasca algoritmul). ¥ In viata de toate zilele intdinim Ia tot pasul algoritmi, ca de exemplu: algoritmul prin care dim un telefon, algoritmul de adunare a doud numere intregi. Exist diverse forme de a redacta algoritmi: © scheme logice - folosite mult in trecut si mai putin astazi. © limbaje de tip pseudocod; limbaje de programare (Pascal, c etc). Redactarea-algoritmilor direct intr-un limbaj de programare (obtinand imediat programul) este avantajoasi prin faptul cd putem verifica dacd algoritmul este corect prin rularea programului (hartia suporta orice prostie, calculatorul nu). Cu toate acestea, prin faptul ca, la redactare, trebuie tinut in permanent cont de restrictille limbajului respectiv, putem gresi. Din acest motiv, unil specialisti considera cd este bine ca la Inceput sd redactém 22 algoritmul sub forma de schema logicd sau pseudocod si utilizand aceasta redactare s& elaborém programul. Indiferent de forma de redactare, esential este ca un algoritm sa fie gandit corect. Aceasta nu este usor! Revenim la exemplul cu robotul care cumpara o paine. Pare totul clar, nu? in realitate nu este asa. Ce se intémpla dacé magazinul este inchis? SA ne gndim c& este vorba de un robot. Un om poate lua o decizie (de exemplu s& plece la alt magazin) dar robotul nu ia decizii dacd nu a fost invatat. Apare o situatie pe care algoritmul nu o contine. Exact asa se intémpld si cu un calculator care executé un program insuficient gndit. De exemplu, pentru programul propus, ce se intampla daca, la rulare, noi introducem o litera in loc de un numar? Programul se va termina cu eroare, pentru cd nu am prevazut acest caz! Concluzia? Un algoritm corect elaborat trebuie s& prevada toate situatiile posibile! ¥ Trebuie s& retinem un alt aspect extrem de important: nu este greu sa invatm un limbaj de programare, este mult mai greu sa invatém sé elabor&m algoritmi corecti. Noi vom invata, in paralel, atat limbajul c&t si elaborarea algoritmilor. Pentru ‘inceput, algoritmii vor fi redactati direct in Pascal. Vom proceda astfel ‘intrucat acest limbaj a fost creat special pentru a ne invata sa Programam. Procedand astfel avem doud avantaje mari: verificam imediat algoritmul prin rularea programului si in acelasi timp ne acomodam cu calculatorul. 2.5 Rularea pas cu pas a unui program Am invatat modul in care se ruleazd un program: se executd, pe rand instructiunile cuprinse intre begin si end. S& considerém programul care citeste si tipdreste un numéar intreg. Presupunem c& am introdus corect textul sursd. Dorim sa-I rulam intr-un mod aparte. Pentru aceasta apdsdém tasta F8 (se poate si cu F7 desi exista anumite diferente intre ele, dar nu in ce ne intereseazi in acest moment). Deasupra cuvantului begin apare o bara luminoasdé. Apasdm din nou F8. Bara luminoasd se deplaseaz& pozitionandu-se asupra liniei care contine comanda read(a) Imediat, se va trece in mediul in care se executa citiri scrieri, iar calculatorul va astepta introducerea valorii lui a. Imediat ce am introdus valoarea, se revine in mediul in care avem textul 23 sursd, jar bara luminoasd se va afla deasupra liniei care contine comanda write(a). Tasténd din nou F8, se va tipari aceasté valoare, iar bara va fi pozitionaté asupra liniei care contine cuvantul end. Tastand Fe, executia programului se incheie. » © astfel de rulare, in care calculatorul nu trece la executia comenzilor care se aflé pe o linie decdt dupa ce am tastat r8 se numeste rulare pas cu pas. vy Rularea pas cu pas este extrem de utilé in depanarea programelor (corectarea erorilor care apar la executie), dar si atunci cand invatém sa programm. Acest din urma aspect este cel care ne intereseazé acum Ruland pas cu pas un program avem posibilitatea sd verificém modul in care se executa instructiunile (am vazut cum). Este recomandabil ca, la inceput, programele sa fie rulate pas cu pas. Y Bara luminoasa se pozitioneazd asupra unei linii si arata ca urmeaza sa se execute instructiunile aflate pe acea linie (am vazut faptul ca o linie poate contine mai multe instructiuni). Din acest motiv, pentru a vizualiza executia fiecdrei instructiuni, este recomandabil ca instructiunile sa fie plasate cate una pe linie. ¥ nc& un avantaj pe care jl avem daca rulim pas cu pas un program: putem vizualiza continutul variabilelor chiar pe parcursul executiei programelor. Aceasta ne ajuta mult in invatarea programarii. Atunci cand dorim s& vizualizam o variabilé procedim astfel: - tastim aALT+D; - selectém EVALUATE/MODIFY - se tasteaz numele variabilei al carui continut dorim sa-| vizualizam. Exercitiu: in rularea pas cu pas a programului ¢1, vizualizati continutul variabilei a inainte si dupa citirea ei. 2.6 Cate ceva despre citiri si scrieri. $& reluam exemplele din paragraful anterior. Cum am comandat calculatorului s& citeascé continutul unei variabile si cum am comandat tiparirea ei? Pentru aceasta, am folosit instructiunile read (pentru citire) si write (pentru scriere). Presupunem cd am apelat mediul integrat de programare Borland scal, Dupdé cum stim, pentru a vizualiza acea fereastra in care programele citesc / scriu se tasteazé aLT+F5. Observam cursorul existent pe ecran intr-o anumita pozitie (acea liniuta orizontalé care apare/dispare). 4 > Orice citire / scriere se executé incepand cu pozitia curenté a cursorului. Astfel, dac& programul citeste o variabilé intreagd a, iar noi introducem numarul 65, fn momentul introduceril, cifra 6 apare in pozitia curenté a cursorului, cursorul se deplaseazé in pozitia urmatoare in care va aparea numarul 5. Daca programul scrie continutul unei variabile intregi a (sd presupunem ca aceasta contine numarul 76), cifra 7 apare in pozitia curenta a cursorului, acesta se deplaseazi cu o pozitie, dupa care cifra 6 va aparea pe noua pozitie. S& retinem acest fapt. Programul cei tipareste un mesaj -este posibild.tiparirea mesajelor. Pentru aceasta, textul este incadrat intre doua caractere ‘. program csi; write('aceasta este o floare.') end. $A analizim programul cs2. El este asemanator cu primul (tipareste acelasi mesaj). Diferenta este ca, in vreme ce primul program foloseste pentru tiparire instructiunea write, al doilea foloseste instructiunea writeln. Care este diferenta intre ele? program cs2; begin writeln('aceasta este o floare.') end. = Instructiunile write si writeln diferd intre ele prin pozitia cursorului dupa executie. Astfel, la write cursorul va ocupa prima pozitie in care nu s-a scris (in exemplu se va gasi dupa caracterul *.’). Dupa executia instructiunii writeln, cursorul se va gasi la inceputul randului urmator. In rest, cele doua instructiuni sunt identice. Asa cum instructiunea write are perechea writeln, tot asa instructiunea xead are perechea readin. Sa analizim programele urmatoare: program cs3; program cs4; var a:integer; var a:integer; begin begin read(a) readin(a) end. end. Amandoua citesc o variabilé intreag. Diferenta este ca primul foloseste read, iar al doilea readin, Comparand executia lor, observam ca intre read sl readin existé urmatoarea diferenté: in vreme ce read lasd 25 cursorul exact in prima pozitie in care nu am tastat nici un caracter, readin aseaz& cursorul in prima pozitie a randului urmator. ¥ Acest fapt fl putem folosi pentru a realiza citiri / scrieri elegante. Sa fim explicit. In mod normal, atunci cand se citeste o variabila, trebuie ca persoana care introduce data sa fie invitaté de calculator sA execute actiunea. Daci n-am proceda asa, este posibil ca un eventual utilizator al programului nostru sd nu stie ce are de facut. De ce? Calculatorul asteapta introducerea valorii respective. Persoana neavizaté asteapta la randul ei... Programul care urmeaza citeste o variabilé in mod elegant. Astfel, inainte de citire, apare numele variabilei, urmaté de semnul ‘='. Mesajul este (prin liniuta de subliniere am notat cursorul). Persoana care va utiliza programul va sti ce are de facut. La tiparirea mesajului ‘a=‘ am_ folosit write pentru c& suntem interesati ca sa pozitionam cursorul imediat dupa semnul ‘='. Dupa citire, dorim s& afisam (tot elegant) ce am citit. Din acest motiv, trebuie s& scriem pe randul urmator. Cum am realizat aceasta? Simplu, citind cu readin. Urmeaza tiparirea. Ne-am putea intreba de ce pentru ultima tiparire am folosit writeln si nu write. Evident, dupa executia instructiunii writeln, cursorul se va gasi la inceputul randului urmator. Si ce dac&? Programul a fost executat, veti spune. Da, asa este, numai ca daca nu am fi procedat asa, programul urméator va citi / scrie din pozitia curenta a cursorului si nu de pe un rand nou... program cs5; var a:integer; write(‘a=');readin( writeln('a=',a); end. Daca ati fost atenti, ati observat cA writeln utilizeazd doi parametri separati prin virgula. Primul parametru reprezinté un mesaj, al doilea numele variabilei a. Aceasta inseamnd c& putem folosi mai multi parametri atat pentru citire c&t si pentru scriere. Conditia? Parametrii s fie separati prin virgula. Programul care urmeaza citeste doua variabile, a si b, utilizand o singura instructiune readin. Continutul variabilelor respective, insotit de mesajele corespunzatoare este tiparit prin utilizarea unei singure instructiuni: writeln. program cs6; var a,b:integer; begin readln(a,b); writeln(‘a=',a,' ',"bet,b) end. 26 Analiz&nd programul anterior apare urméitoarea intrebare: cum se introduc volorile variabilelor a si b (avand in vedere ca se citesc utilizand o singura procedur’ readin)? Avem doud posibilitéti de a le introduce. Posibilitatea 1. Introducem valoarea pentru a, tastém unul sau mai multe blancuri, introducem valoarea lui b si tastém Enter. Posibilitatea 2. Introducem valoarea pentru a, tastéam Enter (cursorul sare pe randul urmator), introducem valoarea lui b si tastam Entex. S& observém c& si tiparirea s-a facut intr-un mod special. Dupé ce am comandat scrierea continutului variabilei a, se gasesc doua caractere * (apostrof) separate prin cateva spatii (blancuri). De ce le-am pus? Pentru ca Intre cele doué mesaje (de exemplu a=7 si b=3) sa fie cateva spatii. Spatiile ldsate intre apostrofuri apar intre cele doua mesaje. © utilizare specialé o au instructiunile readin si writeln fara parametri. SA analizam programul de mai jos. Acesta tipareste numarul 6 (se poate tip&ri_un numar in acest mod). Observam c& programul se termina cu instructiunea readin. Ce rol are ea? Am invatat faptul ca dupa ce un program isi incheie executia se revine in mod automat in mediul in care se gaseste textul sursa. Desigur, rezultatele se pot vizualiza tastand ALT+F5. Pentru ca revenirea sd nu se faci automat (sd avem timp sa vedem rezultatul), vom utiliza instructiunea readin faré parametri. Efectul? Se va astepta s& se tasteze Enter. In acest timp, avem posibilitatea sA vedem ce sa tiparit. program cs7; begin writeln(6); readin; 7 end. Programul de mai jos tipareste numerele 6 si 7. Intre cele doua numere existé un rand liber. De ce? Pentru cd am utilizat writeln. Instructiunea writeln £4r4 parametri are rolul de a determina saltul cursorului pe randul urmétor. program cs8; begin writeln(6); writeln; {se sare un rand} writeln(7) end. 27 2.7 Operatii aritmetice-elemente introductive Cu ajutorul instructiunilor write, wxiteln se pot face operatii aritmetice elementare. Curh procediim? S& analizim programul de mai jos. El calculeazé suma intre numerele 6 si 7. Ca si la matematica’, pentru adunare se foloseste semnul ‘+’. Observati cum am. procedat: am scris pur si simplu sub writeln expresia (6+7). Calculatorul va face suma si va tipari rezultatul. program opl; begin weriteln(6+7); readin; end. Tn acest mod putem calcula suma mai multor numere naturale. In programul de mai jos se calculeazé suma a 3 numere naturale. program op2; begin writeln(5+15+13); readin; end. Programele prezentate anterior au un mare dezavantaj. Ele calculeaza suma a doua, trei numere naturale date. Astfel, primul program nu calculeaz4 dec&t suma 6+7, dar dacd dorim, de exemplu, s& calculém 9+3 programul nu ne mai este de nici un folos. Cum putem face un program care s& calculeze suma a doud numere naturale pe care le introducem? Sa analizim programul de mai jos: program op3; var a,brinteger; write('a=');readin(a); write('b=');readin(b); weriteln('atb=',a+b); readin; end. Pentru aceasta trebuie s& folosim variabile. Astfel, in program au fost declarate doua variabile a si b. Initial acestea fost citite pentru a sti uma c&ror numere se calculeaza. La sfarsit se tipareste mesajul a+b urmat de suma calculaté. Dac’, de exemplu pentru a se introduce 2 si pentru b se introduce 3 programul va tipari atb=5. Observam si faptul ca sub aceeasi instructiune writen, am tiparit atét un text (a+b) cat si un numar (suma ‘ntre a si b). 28 Asa cum pentru adunare folosim semnul ‘+", pentru scddere se foloseste semnul ‘=’, Tntocmai ca la matematicd. Prograntul de mai jos calculeazé diferenta dintre numerele 79 si 53. program op4; begin writeln('79-53=', 79-53); readin; end. Putem calcula si produsul a doud numere. Spre deosebire de matematica, pentru inmultire vom folosi semnul ‘*" (asterisc). program op5; begin writeln('3*5=',3*5); readin; end. Cum facem impértirea a doud numere naturale?. De la inceput, precizam c& este vorba de impértirea intreag’. Ce intelegem prin impartirea ‘intreag&? Fiind dat deimpértitul si impartitorul trebuie sa aflam un numar ‘intreg care sA ne spuna de cate ori intra impartitorul in deimpartit. Exemplu: deimpartitul=25, impértitorul=10. Catul va fi 2 (pentru cA 10 intra de doua ori in 25). Daca notém deimpartitul cu p, impartitorul cu z, catul cu c, iar restul cu R, intre ele exista identitatea fundamentala: D=IxC+R, unde R20, R