Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE ATESTAT
PRIMUL PROGRAM PASCAL
SEGARCEA 2010
CAPITOL
Introducere
ncepem lungul drum al programrii n Borland PASCALcu un program foarte simplu. Acesta afiaz un mesaj pe care l rostim cu enoie fiecare din noi, la zi de srbtoare: La muli ani frumoi! PROGRAM mesaj; BEGIN Write (La muli ani frumoi) END. Cuvintele cu majuscule PROGRAM, BEGIN i END se numesc cuvinte cheie (keywords) sau cuvinte rezervate (reserved words) deoarece sunt foarte importante i sunt definite sa aib anumite semnificaii. PASCAL are peste 50 de cuvinte rezervate. Cuvintele nebolduite (mesaj i Write) reprezint identificatori PASCAL ce desemneaz: Numele programului (mesaj) Actiunea de scriere pe monitor a textului: La muli ani frumoi! (Write) Write reprezint n PASCAL un identificator predefinit (standard). Remarc: spre dosebire de cuvintele cheie, identificatorii predefinii (standard) pot fi redefinii n cadrul programului (nelesul lor poate fii schimbat de programator ) ATENIE! Daca dai unui program numele Write, nu mai avei voie s folosii n program nici un enun write cu sensul predefinit.
Pentru a mbuntaii vizibilitatea programelor folosii spaiile libere (blancurile) ntre cuvinte, nume, simboluri etc. Pentru compilatorul (borland) PASCAL programul poate ncepe, aa cum o face i programul nostru, cu o linie de header ( antet ), ce conine: cuvntul cheie PROGRAM, urmat de numele programului. Remarc: observati ca linia de header trebuie sa se termine cu punct si virgula;. Simbolul punct si virgula ; reprezinta un exemplu de separator. REMARCI: Daca nu exista cel putin un enunt intre BEGIN si END programul nu va face nimic (acesta situatie nu deranjaza incercati!) Cuvintele cheie BEGIN si End sunt exemple de delimitatori ( cuvinte cheie sau simboluri care delimiteaza inceputul si sfarsitul unor zone ale programului ) Spre deosebire de separatori (virgula, punct si virgula) delimitatorii se gasesc in pereche. Exemplu: BEGIN-END . (Borland) PASCAL-ul vine in intampinarea dumneavoastra cu un mic vocabular de simboluri si cuvinte (identificatori) predefinite (standard) care pot fi combinate in difereite moduri pentru a creea instructiuni (enunturi). In continuare vom utiliza enunt si instructuine ca sinonime Un enunt poate fi gandit ca o fraza PASCAL o idee completa care precizeaza o lista de actiuni. Singurul enunt din programul nostru este WRITE urmat de o paranteza in interiorul careia se spune ce trebuie scris. In cazul programului pe care il comentam impreuna, tot ceea ce trebuie afisat (scris) este o succesiune de caractere numita sir de caractere.
Regulile de sintaxa ale PASCAL-ului precizeaza: Un sir de caractere este o secventa de caractere incluse intre apostrofuri; Pentru includerea sa in sirul de caractere apostroful trebuie dublat. Semnele mentionate (apostrofurile sunt esentiale in acest context. Daca le omiti vei avea parte de surprise. Evident nplacute!
Observatie: In conversaiile urmatoare va vom prezenta si alte cuvinte (Borland) PASCAL predefinite, cum sunt: read, integer, real, char, etc.
CAPITOL
II
BEGIN Writeln (Introduceti valori: lungime, latime, inaltime); Readln(lungime, latime, inaltime) Volum:= lungime*latime*inaltime; Writeln(Volumul paralelipipedului=,volum:9:5,metri cubi) END. {volumul} Cand programul este rulat, pe ecranul din fata dumneavoastra se va afisa: Introduceti valori: lungime, latime, inaltime 8.3 7.25 6.29 Volumul paralelipipedului= 378.50075 metri cubi. Sa examinam componentele acestui program, analizand pe rand urmatoarele elemente: Antetul (header-ul) programului Comentariile Declararea variabilelor Tipuri de date Enunturile (instructiunile) WRITELN Enuntul READLIN Utilizarea combinatiei WRITE-READLN in loc de WRITELNREADLN Enuntul de atribuire(afectare) Formatarea la iesire(iesire)
2.2.2 Comentarii
A doua linie a programului VOLUMUL este numita un comentariu. Orice sir de caractere delimitat de acolade reprezinta un comentariu. Comentariile sunt folosite pentru a mari integrabilitatea programelor (ele sunt ignorate de compilatorul PASCAL!). Remarcati in ultima linie a programului prezenta comentariului {volumul}, tocmai pentru a reaminti cititorului
numele programului care s-a incheiat. Comentariile pot fi plasate oriunde in cadrul programului, dar nu in interior identificatorilor. Remarca:In lipsa acoladelor e tastatura de pe care lucrati puteti folosi perechi de paranteze si asteriscuri: (* si *).
unde maxint este o valoare predefinita. In implementarile uzuale ale limbajului PASCAL maxint are valoarea 32767. Daca o variabila PASCAL va avea o valoare fractionara sau mai mare decat maxint (maxlongint), variabila va trebui sa fie de tip real. Remarc: (Borland) PASCAL 7, in afara de tipul real, pentru valorile reprezentate in virgula mobila, permite si utilizarea tipurilor: single, double, extended. ntr-un program (Borland) PASCAL tipul fiecarei variabile utilizate trebuie sa fie declarat. Omiterea declararii unei variabile folosite n partea principal a programului va genera o eroare. n progrmul pe care l analizm (volumul), declararea variabilelor s-a fcut utilizand enunul: VAR Lungime,latime,inaltime,volum: real. Odata ntlnit acest enun calculatorul ia cunotiin c toate cele patru variabile sunt de tip real. Zona de memorie alocat variabilelor. Fiecrei variabile din program i se asociaz o locaie de memorie pe care v-o putei imagina ca pe o cutie avnd inscripionate: nume i tip. Coninutul cutiei este dat de valoarea curent a variabilei. Tipul definete categoria valorii din cutie. Programul refer variabila prin nume. Partea principal a programului reprezint zona activ, executabil a programului. Cuvintele rezervate BEGIN i END delimiteaz instruciunile care descriu algoritmul principal al probemei de reyolvat. Remarc:Dupa END urmeaz ntotdeauna un punct.
Enunul WRITELN.
Enunurile writeln(se prinun writelin) sunt utilizate pentru vizualizarea, pe un suport de informaie (de regul monitor) a rezultatelor obinute n urma prelucrrilor, a mesajelor ctre utilizator etc. Ori de cte ori se va executa un enun WRITELN, calculatorul ad litteram tot ceea ce este inclus ntre apostrofuri precum i valorile oricrei variabile sau expresii aflate ntre paranteze. Pentru separarea elementelor din corpul instruciunii se folosesc virgulele. Primul enun din programul analizat (volumul) determin calculatorul s scrie pe ecran mesajul: Introducei valori: lungime, laime, nalime dup care mut cursorul la nceputul liniei urmtoare. Fr un astfel de mesaj este greu s ne dm seama c este timpul s se tasteze ceva. WRITELN foreaz calculatorul s afieze tot ceea ce s-a specificat n interiorul parantezelor. Remrci:
Enunurile WRITELN se folosesc ori de cte ori se dorete ca ieirea s aib loc pe propria sa linie; Enunurile WRITE se folosesc ori de cte ori se dorete s se menin la scriere ieirile (de la mai multe enunuri) pe aceeai linie; Cnd se execut un enun WRITE cursorul rmne unde s-a terminat scrierea i ateapt urmtorul enun WRITE; Enunul WRITELN poate fi folosit singur, fr nici o list de ieire, dac se dorete numai s se poziioneze cursorul la nceputul liniei urmtoare.
Enunul READLN
n momentul n care s-a executat instruciunea READLN (lungime,lime,nlime) calculatorul ateapt de la utilizator s introduc trei numere. Primul va fi atribuit variabilei lungime cel de-al doilea variabilei lime i n sfrit cel de-al treilea variabilei nlime. Nu uitai c cele trei variabile sunt de tip real! Putei tasta aceste valori: a) Toate ntr-o linie, separate de unul sau mai multe spaii 8.3 7.25 6.29 <cr> b) fiecare pe cte o linie 8.3<cr> 7.25<cr> 6.29<cr>
unde <cr> simbolozeaz apsarea tastei Enter(pe alte tastaturi Carrige Return). Remrci: READLN permite utilizatorului s introduc valorile variabilelor de intrare n timpul execuiei programului; Dup execuia unui enun READLN, cursorul se poziioneaz la nceputul urmtoarei linii de pe ecran; Diferena dintre READ i READLN este similar celei dintre WRITE i WRITELN.
Enunul de atribuire(afectare)
Enunul ce urmaez dup enunul READLN volum:=lungime*lime*nlime; se numete enun de atribuire ntruct el calculeaz ceva (produsul dintre lungime laime i nlime) i atribuie (afecteaz) rezltatul variabilei din stnga simbolului :=. Partea dreapt a acestui enun este un exemplu de expresie aritmetic. Remrci: m PASCAL simbolurile pentru adunare i scdere sunt cele obijnuite(+,-) dar simbolul pentru nmulire este * (n loc de x) Pentru mprire exist doi operatori : DIV i /(simbolul de mprire depinde de valoarea ctului-ntreag sau real)
Cnd calculatorul ajunge la un enun de atribuire, el evalueaz expresia din partea dreapt a simbolului de atribuire:= i atribuie rezultatul acesteia, variabilei unisce din partea stng a simbolului.
2.2.5.Punctuaia n PASCAL
Punctuaia corect esete esenial ntr-un program. Din punctul de vedere al programelor PASCAL , urmtoarele caractere au semnificaii deosebite: punct (.), punct i virgul (;), virgula (,) acoladele ({ i}) i combinaiile de paranteze rotunde i asteriscuri ((* i *)). Instruciunile pot fi separate sau fragmentate n interiorul unui program , cu condiia ca spaierea s nu survin n interiorul unui identificator sau n interiorul unui element compus (cum este de exemplu simbolul de atribuire :=). Spaierea nu afecteaz execuia programului dar poate influena n bine lizibilitatea.
Caracterul punct plasat dup un END dintr-un program ncheie un program PASCAL. Caracterul punct i virgul se folosete pentru separarea a dou enunuri consecutive dintrun program PASCAL. Notai c n programul volumul cele mai mulete dar nu toate liniile se termin cu punct i virgul. Mai nti, cuvintele cheie BEGIN i END nu sun enunuri PASCAL. n conseciin, dup aceste cuvinte nu este necesar s punei punct i virgul; nici dup cuvntul BEGIN pentru a-l separa de enunul care urmeaz nici nainte de END pentru a-l separa de cuvntul care l precede n al doilea rnd, trebuie s nelegem c folosim simbolul punct i virgul la finele unui enun dac acesta este urmat de un alt enun (simbolul punct i virgul separ dou enunuri consecutive!). n programul volumul simbolul punct ;I virgul nu este necesar dup enunul Writeln(Volumul paralelipipedului=,volum:9:5,metri cubi) Deoarece urmtoarea linie (END) nu este un enun. Simbolul punct i virgul este obligatoriu numai pentru a separa dou enunuri consecutive. Caracterul ; pus acolo unde nu este necesar (nu separ dou enunuri) Va genera o insruciune vid, ca n exemplul urmtor: Writeln(---); {instruciune vid} END. Cele trei pri principale ale unui program: antetul, declaraiile i partea principal a programului sunt fiecare considerate drept cte un enun. Deci, punct i virgul este folosi pentru separarea acestora. n programele simple zoma de declaraii va consta tocmai din declararea variabilelor. Astfel de programe vor avea forma: PROGRAM ..; VAR.; BEGIN
Enun1; Enun2; Enun n END. Caracterul Virgul este folosit pentru a separa elementele dintr-o list cum ar fi variabilele de acela tip dintr-un enun de declarare, sau mai multe elemente care apar ntr-un ennu write/writeln, ca i pentru read/readln. Spaiile libere i fragmentarea. n genereal, o linie poate ncepe n orice loc dar alegerea cu atenie a acestui punct poate influena n bine lizibilitatea programului. Trecerea la un rnd nou este echivalenta (din punctual de vedere al compilatorului) cu inserarea unui blanc, deci aceasta se poate face oriunde este permis un separator . n general, programatorul poate mprtia spaiile libeara n tot programul dup cum dorete. Atta timp ct compilatorul este active, singurele reguli care trebuie urmate sunt: Cel puin un blanc trebuie s separe oricare dou cuvinte distincte din program; Nu trebuie plasat nici un balnc n interiorul cuvintelor sau nter caracterele simbolurilor compuse (:=,.., <>, <=,>=). Scierea n fierstru (indentat) se recomand pentru mrirea lizibilitii programului. Este important s se foloseasc o schem consecvent de fragmentare. De altfel pn acum am aplicat stilul de scriere n fierestru la scrierea enunurilor ntre BEGIN i END (vezi de exemplu programul VOLUMUL). n final, trebiue subliniat faptul c gradul de lizibilitate este destinat numai ochiului uman. Punctele i virgulele spun compilatorului cnd un enun se ncheie i ncepe enunul urmtor. Deci programul VOLUMUL ar putea rula perfect chiar dac ar fi scris astfel:
PROGRAM volumul;{calculeaz I afiaz volumul unui paralelipiped} VARlungime, lime, nlime, volum : real;BEGIN writeln ( introducei valori: lungime, lime, nlime); readln(lungime, lime, nlime);volum:=lungime*lime*nlime; writeln (volumul paralelipipedului= volume:9:5 metri cubi) END.{volumul} Comentariile reprezint acele mesaje simple adresate celui care lectureaz programul. Ele pot exdplica scopul programului sau funciile programului. Pentru a intoduce un comentariuse folosesc acoladele { } sau combinaia de paranteze i asterix (* *). ntruct un comentariu nu este consideart un enun nu este nevoie de nici un simbol punct i virgul auxiliar. Se recomand ca dup antetul programului s plasai un comentariu pentru a explica scopul general al programului.
Multe pri distincte ale unui program PASCAL trebuie s fie botezate. nsui programul PASCALar trebui s aib un nume (programul pe care l-am analizat mpreun se numete volumul). Variabilele au de asemenea nevoie de un nume. n PASCAL orice nume pe care l folosim se numete identificator. Numele programului si numele de variabile constituie exemple de identificatori. Un identificator trebuie s nceap cu o liter (majuscul sau minuscul) i poate conine numai litere, cifre i liniue de subliniere (_). Pentru definirea identificatorilor proprii trebuie s inei cont de o serie de reguli (n general specifice fiecrui compilator), dar este recomandat s respectai i anumite convenii, care mresc lizibilitatea sursei programului.
Diagrama de sintax a identificatorilor Regulile de formare a unui identificator PASCAL se exprim cu ajutorul diagramelor de sintax. Simbolurile utilizate ntr-o diagram de sintax ct i diagrama de sintax a unui identificator PASCAL sunt ilustrate mai jos. Simbol Semnificaie Conine un cuvnt cheie Indic declaraii sau prelucrri Conine un caracter sau un simbol avnd o semnificaie particular Sensul de parcurs al diagramei de sintax By-Pass (ci alternative) Restricie: nici un cuvnt rezervatnu poate fi utilizat ca identificator normal.
Nu exist o restricie standard n privina lungimii identificatorilor, dar ar trebui s verificai compilatorul PASCAL pe care l utilizai n ceea ce privete regulile impuse. De exemplu: n (Borland) PASCALun identificator este reinut prin primele 63 de caractere, n sensul c toi identificatorii care au primele 63 de caractere identice sunt considerai identici! Diagrama de sintax a unui identificator PASCAL:
lite r
lite r Cifr
<liter>
A
... Z ...
...
. ..
a z
...
<cifr>
1 2 9 0
...
n tabelul de mai jos sunt prezentai comparativ identificatori corect i greit definii: Corect AdunareMatrice Celebrul702 ABCDEFG Greit Adunare..Matematic 912..AGA 123,45
Produs
Polinom..E
Remarc: identificatorul a-b este ilegal, ntruct cratima(-)este un operator folosit la scdere. Convenii privind alegerea identificatorilor: Identificatorii nu trebuie s fie lungi. Numele prea lungi nu numai c ridic probleme la tastare, dar ncarc programul, lipsindul de lizibilitate. ncercai s creai identificatori concii cu nu mai mult de 10 caractere.
Identificatorii trebuie s nu fie lipsii de semnificaie. (Evident ca pentru raza unui cilindru este indicat s definii raza ca identificator n loc delibelula sau numele_tatlui, de exemplu!). Semnificaia unui identificator exist n mintea programatorului!
Este bine s fie evitat utilizarea literelor i cifrelor ambigue (exemplu: litera o i cifra 0).
2.2.6.Declaraii
Un programator PASCAL trebuie s separe cu grij datele programului de aciunile care se execut asupra datelor. Elementele de primul tip (descrierea obiectelor asupra crora vor avea loc prelucrrile) se numesc declaraii i sunt plasate n program chiar dup header, grupate n seciuni distincte, astfel: LABEL CONST TYPE VAR PROCEDURE/FUNCTION subprogramelor declararea etichetelor declararea constantelor definirea tipurilor de date declararea variabilelor definirea
Pentru o prezentare detaliat a acestor seciuni, urmai legturile de mai jos. Zona de declaraii Constante Tipuri de date primitive (standard) Variabile
Zona de declaraii
Zona de declaraii cuprinde mai multe seciuni (LABEL etichete; CONST constante; TYPE tipuri de date; VAR variabile; PROCEDURE/FUNCTION - subprograme), dar n cele ce
urmeaz vom discuta numai pe acelea n care sunt definite constantele (CONST) i variabilele (VAR). Aplicaie S facem diferena ntre o constant i o variabil. Considerm urmtorul program PASCAL n care am utilizat declaraiile de tip: CONST i VAR. PROGRAM exemplu; {Calculeaz i afiaz 2*Pi} CONST Pi=3.4159265; VAR r:real; 2:integer; BEGIN Writeln (2*Pi); End {exemplu}. S analizm acest program care conine o ciudenie dar i n acela timp i o greal foarte serioas. Greala foarte mare provine de la confuzia dintre o constant i o variabil.
Poate unui compilator mai puin atent (ceea ce nu este cazul) i-ar putea scapa faptul c litera r este declarat i neutilizat (neglijarea declarrii unui identificator constituie tot impul o eroare, dar definirea i neutilizarea unui identificator nu are efecte observabile asupra multor compilatoare PASCAL). Constante
Constanta reprezint un iidentificator a cror valoare poate fi schimbat in timpul rilarii programului. Asemenea identificatori au valorile date n zona de declaraii a programului, ntr-o seciune care ncepe cu cuvntul CONST. La sfritul acestei seciuni vei putea s v verificai cunotiinele privind declararea constantelor printr-un test. Iat o seciune CONST tipic: Exemplu: CONST max=800; epsilon=0,00001; b=max; {b=800}; min=-max; {min=-800}; primaliter= a; blank= ; nume= Ionescu da=true;{constant pedefinit}; nu=false{ constant pedefinit}; ntreg-maxim=maxint{ constant pedefinit}; ntreg-maxLongint=MaxLongintA{ constant pedefinit}; s-max=3*max{valoarea este determinat in momentul compilarii programului 3*800}; O constant trebuie s fie un numr(vezi 800 sau 0,0001), un identificator predefinit n prealabil (vezi max), negaia unei constante definite anterior (vezi min) un singur caracter (vezi a sau ) sau un ir de caractere (vezi IONESCU). O constant poate fi definit de programator sau poate fi una din constantele PASCAL predefinite: true, false, maxint, maxlonglint. Penultimele constante sunt recunoscute de compilatorul limbajului PASCAL
versiunea 7.0 i reprezint valorile maxime pentru datele de tip integer (32767) respectiv longint (2147483647). Folosirea unei constante nu nseramn nimic altceva dect scrierea simpl a identificatorului constantei, ori de cate ori este nevoie.
Cnd se folosesc constantele? Exist dou motive principale pentru care se folosesc constantele n seciunea CONST: 1. Unei constante i se poate da un nume semnificativ, cu un neles care sporete lizibilitatea programului; 2. Unei constante i se d o valoare o singur dat n seciunea CONST a programului, ceea ce uureaz schimbarea valorii ei mai trziu. Imagini-v ct btaie de cap ar fi, dac ar trebui s gasim i apoi s modificm, de exemplu, 50 de apariii ale constantei 2 cu 3 ntr-un program. Odat definit valoarea printr-un nume simbolic n seciunea CONST, lucrurile devin chiar plcute! Variabile Spre deosebire de constante, variabilele pot primi n timpul execuiei programului diferite valori. Vaoarea unei variabile poate
fii scimbat dinamic, prin citirea unei noi valori de la tastatur, dintr-un fiier etc. sau ca rezultat al evalurii unei expresii. Numele i tipul varabilelor se stabilesc n seciunea VAR. Valoarea unei variabile poate fii de asemenea modificat cu ajutorul unei instruciuni de atribuire, ca n programul VOLUMUL. Volum:=lungime*lime*nlime; Observai c, operatorul de atribuire este := i nu = care au un neles total diferit. n limbajul PASCAL simbolul de atribuire este := (fra blank ntre :i =). Dac semnul = ar fi fost utilizat pentru aciunea primitiv de atribuire, atunci enunul i=i+1 ar putea fi interpretat ca o egalitate imposibil- nici un numr nu poate fi el nsui i simultan el nsui adunat cu 1! Numele i tipul variabilelor se stabilesc n secuinea VAR. Secunea VAR se termin fie cu BEGIN (vezi programul principal) fie cu un alt cuvnt rezervat, ce definete o nou seciune (PROCEDURE sau FUNCTION, de pild). Seciunea VAR , cunoscut sub denumirea de seciune de declarare a variabilelor, poate conine oricte declaraii, n care variabilele de acela tip pot fi grupate ca n exemplul urmtor. Exemplu: VAR a,b,c,d:integer; pas:real; c1,c2,c3:char; admis:boolean; raza,generatoarea:real; Remrci: Virgula este folosit pentru a separa variabilele de acela tip;
Doua puncte se folosesc pentru a separa o list de varaibilele de tipul lor; Punct i virgul se folosesc pentru a separa dou enunuri consecutive; Ordinea seciunilor de declarare este liber;
Aplicaia
1.Dndu-se un tablou bidimensional cu elemente ntregi, s se afieze, pe rnduri separate pe ecran, coninutul acelor linii care nu au elemente strict negative.
Program matrice; var a:array[1..100,1..100] of integer; n,m,I,j:integer; g:boolean; begin write(m=); readln(m); write (n=); readln (n); for i:=1 to m do for j:=1 to n do begin write(a[I,j]=); readln(a[I,j]);
end; for i:=1 to m do begin g:= true; for j:=1 to n do if a[i,j]<0 then g:=false; if g then begin for i:= 1 to m do write (a[I,j], ); writeln; end; end; readln;
2.
end.
Fiind dat un vector v cu n elemente ntregi, s se afieze de cte ori gsim dou elemente consecutive egale ntre ele.
Program numere; var v:array[1..100] of integer; n,I,nr: integer; begin write(n=); readln (n); for i:=1 to n do begin write (v[,I,]=); readln (v[i]); end; nr:=0; for i:= 1 to n do if v[i]=v[i+1] then nr:= nr+1;
BIBLIOGRAFIE
1.S. Tudor- Turbo Pascal, Algoritmi n limbaje de programare, Ed. TEORA, Bucureti, 1995. 2.G.D. Mateescu, P.F.Moraru- Informatic pentru liceu i Bacalaureat- Ed. DONARIS, Sibiu, 2001. 3.B. Ptru, M. Miloescu- Informatic- Manual pentru clasa a IX-a,
Ed. TEORA.
CUPRINS
1. Cap. I. Introducere. 2. Cap. II. Structura general a unui Program PASCAL. 3. Cap. III. Aplicaia.
4.
Bibliografie