Sunteți pe pagina 1din 17

1.

Structura programelor Pascal


Un program Pascal are doua parti: partea declarativa si partea operativa. In prima apare numele programului, si declaratiile elementelor ce vor fi folosite in program: constante, variabile etc. Partea operativa este programul propriu-zis, acesta cuprinde instructiunile care vor fi executate, cuprinse intre cuvintele begin si end. Iata un program simplu:

Programul sursa program CalculArie; const pi=3.1415926; var raza, aria: Real; begin ReadLn(raza); if raza<=0 then WriteLn('imposibil') else begin aria := pi * Sqr(raza); WriteLn('aria este: ', aria) end end.

Explicatia numele programului declarare constanta declarare variabile se incepe un grup de instructiuni se citeste valoarea variabilei raza daca raza este mai mica decat 0 atunci scrie imposibil altfel incepe un nou grup de instructiuni aria ia valoarea pi * (raza la patrat) scrie aria este si valoarea variabilei aria se incheie al doilea grup de instructiuni se incheie primul grup de instructiuni

2.Identificatori
Un identificator este numele unui element dintr-un program, fie el o variabila, un tip, un subprogram, un camp, un unit sau chiar programul insusi. Identificatorul este o succesiune de litere (mici sau mari), cifre si simbolul _. Un identificator incepe obligatoriu cu o litera sau cu _. Exemplu: a, b, c, d, delta, x, y, x2_ab, viteza Cuvinte cheie si directive standard

and array asm begin

else end file for 1

interface label mod nil

record repeat set shl

uses var while with

case const constructor destructor div do downto

function goto if implementation in inherited inline

not object of or packed procedure program

shr string then to type unit until

xor

break exit continue

Directive standard
absolute external forward near public

Separatori si comentarii
Separatorii de unitati sintactive sunt spatiul si caracterele TAB, Enter, la care se adauga si comentariul. Separatorul pentru instructiuni si declaratii este ; . Exemplu: {aici este un comentariu} (* alt comentariu *) {***************** Comentariu pe mai multe linii ******************} Dimensiunea maxima a unei linii in Turbo Pascal este de 126 caractere.

3.Tipuri de date
Tipuri simple standard Tipuri intregi
Tip Domeniu 2 Format

ShortInt Integer LongInt Byte Word

-128..127 -32768..32567 -2147483648..2147483647 0..255 0..65535

8 biti cu semn 16 biti cu semn 32 biti cu semn 8 biti fara semn 16 biti fara semn

Operaii
Cu datele de tip intreg se pot realiza urmatoarele operatii:

+ * div

adunarea: 2+3=5; -2+(-10)=-12 sau operator unar: +2=2 scaderea: 2-6=4; sau oparatorul unar de schimbare a semnului inmultirea: 2*3=6 impartirea intreaga: x div y = catul impartirii lui x la y 7 div 3 = 2

mod restul impartirii intregi a lui x la y: 7 mod 3 = 1 not and xor shl shr negatie (operator unar pe biti) si aritmetic (operator binar pe biti) sau exclusiv (operator binar pe biti) shift left (deplasare spre stanga) shift right (deplasare spre dreapta) Functii care opereaza pe tipul intreg:

Ord Succ Pred Odd

numarul de ordine = functia identica succesorul Succ(x) = x + 1 predecesorul Pred(x) = x - 1 Odd(x) = adevarat sau fals, dupa cum x este impar sau par 3

Lo Hi Swap

Lo(x) = octetul inferior al lui x Hi(x) = octetul superior al lui x Swap(x) schimba intre ei octetii inferior si superior ai lui x

4.Tipuri ordinale definite de utilizator


-Tipul enumerat Exemple: (luni, marti, miercuri, joi, vineri, sambata, duminica); (False, True); Asupra datelor de tip enumerat se pot aplica functiile Ord, Succ si Pred. De exemplu: Ord(luni)=0, Ord(marti)=1, iar Pred(vineri)=joi. Sunt permise si comparatiile. De exemplu, primavara<toamna. -Tipul subdomeniu Acesta reprezinta o succesiune de valori consecutive extrase dintr-un tip ordinal definit anterior (tip de baza). Exemple: 1..10, luni..vineri

Definirea tipurilor
type natural = 0..MaxLongInt; saptamana = (luni, marti, miercuri, joi, vineri, sambata, duminica); semafor = (rosu, galben, verde);

Tipul caracter
Acesta este denumit de identificatorul char. Domeniul acestui tip este: multimea caracterelor, adica a tuturor cifrelor, a literelor mari si mici, precum si a caraterului spatiu sau a simbolurilor speciale: +-$(;,@! etc. Acestea trebuie sa fie cuprinse intre apostrofuri. Toate caracterele au o ordine predefinita, ele fiind asezate in lista ASCII. Deci fiecare caracter are un cod al sau. Exemple: Ord('A')=65; Ord('b')=98; Succ('A')='B'; Pred('b')='a'; Chr(65)='A'; UpCase('a')='A';

- Tipuri logice
4

Tipurile logice (booleene) pot avea numai valorile True si False. Exista 4 tipuri logice predefinite: Boolean, ByteBool, WordBool, LongBool. Ord(False)=0; Ord(True)=1; Succ(False)=True; Pred(True)=False; O variabila de tip Boolean si ByteBool ocupa un octet, pe cand WordBool necesita 2 octeti, iar LongBool necesita 4 octeti. Ultimele 3 tipuri au fost introduse din motive de compatibilitate cu mediul Windows. Operaii specifice:

not

False True

True False

and False True

False False False

True False True

or/xor False True

False False True

True True True/False

Tipuri reale
Tipul Real Single Double Domeniul valorilor absolute 2.9E-39..1.7E38 1.5E-45..3.4E38 5.0E-324..1.7E308 Format 6 octeti 4 octti 8 octeti Numar de cifre semnificative 11-12 7-8 15-16

Extended 3.4E-4932..1.1E4932 Comp 0..263-1

10 octeti 19-20 8 octeti 19-20

Valorile datelor de tip Comp sunt intregi, dar se bucura de operatiile cu tipurile reale. 5

Functii ce pot fi aplicate datelor de tip real sau care au ca rezultat numere real sunt prezentate mai jos:

Functia Abs Sqr Sin

Tipul argumentului (Real/Intreg) RR RR R/I R

Rezultat de tip real/intreg Abs(x)= | x | patratul argumentului sinusul valorii argumentului exprimat in radiani cosinusul valorii argumentului exprimat in radiani Arctan(x)=unghiul exprimat in radiani a carui tangenta este x logaritmul natural al argumentului Exp(x) = ex, unde e=2.718281828459... Sqrt(x) = radicalul lui x Int(x) = partea intreaga a lui x partea fractionara a argumentului Trunc(x) = valoarea trunchiata la un numar de tip LongInt a lui x Round(x) = cel mai apropiat numar intreg pentru x, de tip LongInt

Cos

R/I R

Arctan Ln Exp Sqrt Int Frac Trunc

R/I R R/I R R/I R R/I R RR R/I R RI

Round

RI

Exemple: Round(3.4)=3, Round(-3.4)=-3, Round(3.6)=4, Trunc(3.4)=3, Int(3.6)=3.0

5.Constante
Constantele sunt informatii (date) ale caror valoare nu se poate schimba pe parcursul programului.

Constante intregi
Exemple: 30, +7, 6553, $A12, $FFF. 6

Ultimele doua numere sunt in baza 16 (hexazecimal) , fiind precedate de $. Pentru valorile 23767, respectiv 2147483647 se pot folosi constantele si

6.Variabile
Prin variabila se intelege o informatie a carei valoare se schimba pe parcursul programului. Multimea de valori pe care le poate lua o variabila formeaza tipul acesteia. Declarea variabilelor: var v_1, v_2, v_3: tip_1; w_1, w_2, w_3: tip_2; ......................

7.Expresii
O expresie este fie o constanta, fie o variabila, fie un apel de functie, fie o combinatie corecta de expresii mai simple. Combinarea se realizeaza cu ajutorul operatorilor. Elementele care se combina se numesc operanzi. Prioritatile operatorilor:

Prioritate 1 (maxima) 2 3 4 (minima)

Operator NOT, +, - (operatori unari) AND, *, /, DIV, MOD, SHR, SHL (operatori multiplivativi) OR, XOR, +, - (operatori aditivi) =, <>, >, <, <=, >=, IN (operatori relationali)

8.Structuri de control
Structura liniara
Exemple: program Ex; var i: integer; begin WriteLn('Dati o valoare pt i'); ReadLn(i); i:=i+1; Writeln('Noua valoare a lui i este ',i) end.

9.Instruciunea de decizie IF
Sa consideram problema determinarii perimetrului unui triunghi cu lungimile laturilor a, b si c. Calculul perimetrului este simplu, dar se pune intrebarea: intotdeauna trei numere reale pot forma laturile unui triunghi? Desigur ca nu; in primul rand ele trebuie sa fie strict pozitive, in al doilea rand trebuie ca fiecare din ele sa fie strict mai mari decat suma celorlalte doua. Acest lucru face necesara instructiunea IF. Sintaxa: if cond then instr1 else instr2 Ramura cu else este optionala. cond este o conditie (expresie booleana), iar cond1 si cond2 sunt instructiuni. Sematica: se determina ce valoare de adevar are expresia booleana cond. Daca ea este True, atunci se executa instructiunea instr1, dupa care se trece la instructiunea ce ar urma dupa intrega structura IF. Cand cond este False se executa, in cazul in care exista, instr2. Exemple: if (a > 0) and (b > 0) and (c > 0) then if (a < b + c) and (b < a + c) and (c < a + b) then WriteLn('Formeaza triunghi...') else Writeln('O latura e prea mare!') else WriteLn('Laturi negative!'); program EcuatiaDeGradul_1; var a,b,x: Real; begin WriteLn('Rezolvam ec. de gradul I ax+b=0',Chr(7)); Write('Dati a = '); ReadLn(a); Write('Dati b = '); ReadLn(b); if a=0 then if b=0 then WriteLn('Nedeterminare') else WriteLn('Imposibilitate') else begin x:=-b/a; WriteLn('Solutia este: x= ',x:7:3) end; ReadLn end.

10.

Instruciunea de selecie multipl CASE

Sintaxa: case expresie_ordinala of caz1: intr1; 8

.............. cazn: instrn else instrn_ end Exemple: case Ch of 'A'..'Z', 'a'..'z': WriteLn('Litera'); '0'..'9': WriteLn('Cifra'); '+','-','*','/': WriteLn('Operator') else WriteLn('Caracter special') end; program TestEminescu; var an:integer; begin Write('In ce an s-a nascut Eminescu? '); ReadLn(an); case an of 1850: WriteLn('Foarte bine!'); 1849,1851: WriteLn('Aproape bine!'); 1845..1848: WriteLn('Cu ',1850-an, ' ani mai tarziu!'); 1852..1855: WriteLn('Cu ',an-1850, ' ani mai devreme!'); 1800..1844, 1856..1899: WriteLn('Ati nimerit secolul!') else WriteLn('Cultura dumneavostra are lacune grave!') end; ReadLn end.

11.
Sintaxa: while conditie do instr

Instructiunea repetitiv WHILE

O structura de genul urmator urmator: while cond do instr; instr_urm trebuie interpretata astfel: -se evalueaza conditia cond; -daca este adevarata, atunci se executa instr, apoi se revine la evaluarea conditiei (care intre timp s-ar fi putut modifica) si asa mai departe; -daca la un moment dat conditia este falsa, atunci se termina ciclul si se trece la instructiunea succesoare ciclului, adica la instr_urm; -daca de la bun inceput cond era falsa, se trecea la instr_urm. Pe scurt, cat timp conditia cond este adevarata, se executa instructiunea instr. Dupa ciclu, se executa instructiunea instr_urm. 9

Exemplu: Programul urmator calculeaza suma S=1+2+3+...+n. Plecam cu S=0 si adunam 1, apoi 2, apoi 3 s.a.m.d. pana adunam si pe n. De fapt, adunam i, unde i porneste cu 1 si ajunge sa fie n. La fiecare pas, el creste cu o unitate. Programul complet este: program CalculSuma; var i,s,n: Integer; begin WriteLn('Calculam 1+2+...+n'); WriteLn('Dati limita n !'); ReadLn(n); s:=0; i:=0; while i <> n do begin s:=s+i; i:=i+1 end; WriteLn('Suma este = ',S); ReadLn end.

12.

Instructiunea repetitiv cu contor FOR

Sintaxa: -cu contorul in crestere: for v:=e1 to e2 do instr -cu contorul in descrestere: for v:=e1 downto e2 do instr In ambele forme, v este o variabila de tip scalar, numita contor, iar e1 si e2 sunt doua expresii de aceleasi tip cu v, numite respectiv expresie initiala si expresie finala, iar instr este orice gen de instructiune, chiar si o alta instructiune for. Semantica: V primeste valoarea expresiei e1. Apoi, se verifica daca s-a depasit valoarea e2. Daca da, ciclul se incheie, iar daca nu, atunci se executa instructiunea instr, apoi v crste la succesorul sau, apoi se reia verificarea conditiei de continuare a ciclului. In forma cu downt, avem un test invers de continuare. Exemple: - S=1+2+3+...+(2n-1) S:=0; for i:=1 to n do s:=s +2*i-1; - Un dreptunghi format din caractere '#' intre coltul (x1,y1) si coltul (x2,y2) se poate realiza usor astfel:

10

for x:=x1 to x2 do for y:=y1 to y2 do begin GoToXY(x,y); Write('#'); end;

13.

Instructiunea repetitiv cu test final REPEAT

Sintaxa: repeat instr1; instr2; ....... instrn until cond Sematica: Sensul acestei instructiuni este: repeta instructiunile instr1, ..., instrn, pana cand este indeplinita conditia cond. Intructiunile se repeta cel putin o data. Exemple: Vom calcula cel mai mare divizor comun pentru doua numere cu algoritmul lui Euclid. program Euclid_cmmdc; var a, b, deimp, imp, rest, cmmdc: Integer; raspuns: Char; begin repeat WriteLn('Dati cele doua numere !'); ReadLn(a,b); deimp:=a; imp:=b; repeat rest:=deimp mod imp; deimp:=imp; imp:=rest until imp=0; cmmdc:=deimp; WriteLn('C.m.m.d.c. = ',cmmdc); WriteLn; WriteLn('Repetam ? d/n'); ReadLn(raspuns) until raspuns='n' end.

14.

Procedurile Break si Continue

Aceste proceduri pot aparea in cadrul unor cicluri, uneori fiind necesare pentru a scrie mai simplu anumite secvente.

Break
Termina o instructiune for, while ori repeat. Determina iesirea imediata din cel mai apropiat ciclu in care se afla. Este similara unui salt catre prima instructiune de dupa ciclu. 11

Exemplu: var x:integer; begin while True do begin ReadLn(x); if x=0 then Break; WriteLn(x) end end.

Continue
Aceasta procedura continua o instructiune for, while ori repeat. Cauzeaza trecerea imediata la o noua iteratie in cadrul celei mai apropiate instructiuni for, while ori repeat. Exemplu: var c: Char; begin for c:='a' to 'z' do if (c='a') or (c='e') or (c='i') or (c='o') or (c='u') or (c='y') then Continue else Write(c) end. Aceasta secventa afiseaza doar consoanele.

15.

Tablouri unidimensionale (vectori)

Un tablou (array) este o structura formata dintr-un numar fixat de componente de acelasi tip, numit tip de baza. Sintaxa: type id_de_tip_tablou = array[tip_ordinal] of tip_de_baza Citirea unui vector for i:=1 to n do begin Write('Dati x[',i,']='); ReadLn(x[i]) end; Scrierea unui vector for i:=1 to n do Write(x[i],' '); Inversarea unui vector intr-un alt vector Vom inversa vectorul x in vectorul y, de acelasi tip cu x: for i:=1 to n do y[i]:=x[n+1-i] 12

Inversarea unui vector in el insusi for i:=1 to n div 2 do begin aux:=x[i]; x[i]:=x[n+1-i]; x[n+1-i]:=aux end; Afisarea elementelor impare de pe pozitii pare ale unui vector de numere intregi for i:=1 to n do if (not odd(i)) and odd(i) then WriteLn(x[i]) Inserarea unui element intr-un vector Sa inseram pe pozitia p un element nou m. n este numarul de elemente ale vectorului. for i:=n+1 downto p+1 do x[i]:=x[i-1]; x[p]:=m; n:=n+1;

16.

iruri de caractere

Exemple: const nume='Papoescu' {constanta simbolica} sir: String[5]=' '; {variabila initializata} var a, b: String; t: String[20];

17.

Tablouri bidimensionale (matrici)

Sintaxa: type id_tip_tablou = array[id_tip_sc1, id_tip_sc2] of id_tip; Exemple: type orar=array[1..4,1..5] of String; var OrarulMeu: orar; program CelMaiBunElev; uses Crt; var Medie: array[1..30, 1..30] of Real; m,n,clasa,elev,i0,j0: integer; maxim: real; begin ClrScr; WriteLn('CEL MAI BUN ELEV LA INVATATURA'); Write('Dati numarul de clase din scoala: '); 13

ReadLn(m); Write('Dati numarul de elevi pe o clasa: '); ReadLn(n); WriteLn; WriteLn('Dati mediile!'); for clasa:=1 to m do begin Write('Clasa nr. ',clasa,' dati mediile!'); WriteLn; for elev:=1 to n do begin Write('elevul ',elev,': media:'); ReadLn(Medie[clasa,elev]) end; end; maxim:=Medie[1,1]; i0:=1; j0:=1; for clasa:=1 to m do for elev:=1 to n do if Medie[clasa,elev]>maxim then begin maxim:=Medie[clasa,elev]; i0:=clasa, j0:=elev end; WriteLn('Unul din cei mai buni elevi este:'); WriteLn('Elevul nr. ',j0,' din clasa nr. ',i0,' .'); WriteLn('Media maxima (obtinuta de el) este: ',maxim:5:2); ReadLn end.

18.

Tipul inregistrare

Sintaxa: type id_tip_inreg = record lista_de_campuri_1: id_tip_1; lista_de_campuri_2: id_tip_2; .............................. lista_de_campuri_n: id_tip_n end; Exemple: type clasa = record diriginte: String; sef: elev; n: Integer; EL: array[1..36] of elev end; var cls10A: clasa; Accesarea unui camp se face astfel: cls10A.diriginte:='Nume dir'; Inregistrari cu variante

14

Sintaxa: type id_tip = record lista_campuri: tip; case camp : tip_camp of caz1: campuri; caz2: campuri end; Exemple: type student = record nume: String[30]; case bursier: Boolean of True: (bursa:100000..200000); False: () {vid} end; var X:student;

Instructiunea WITH
Este folosita pentru a usura accesul la campurile unei structuri. Exemplu: with X do ReadLn(nume);

19.
Sintaxa: type id_tip_multime = set of id_tip;

Tipul mulime

id_tip este un tip ordinal cu cel mult 256 elemente. Reuniunea program ex; var Par, Impar, Cifra: set of byte; begin Par:=[0,2,4,6,8]; Impar:=[1,3,5,7,9]; Cifra:=Par + Impar end. Intersecia program ex; var Vocala, Cuvant, Inters: set of Char; begin Vocala:=['a','e','i','o','u','y']; Cuvant:=['l','i','t','o','r','a','l']; Inters:=Vocala * Cuvant end. Diferena 15

program ex;

var Vocala, Cuvant, Dif1, Dif2, DifSimetrica: set of Char; begin Vocala:=['a','e','i','o','u','y']; Cuvant:=['g','e','r','o','v','i','t','a','l']; Dif1:=Vocala-Cuvant; Dif2:=Cuvant-Vocala; DifSimetrica:=Dif1+Dif2 end. Apartenena program ex; var Vocala: set of Char; lit: Char; begin Vocala:=['a','e','i','o','u','y']; repeat Write('Dati litera: '); ReadLn(lit); if lit in Vocala then WriteLn('Este vocala!') else WriteLn('Nu este vocala!') until lit in ['.','/'] end.

16

SUMAR
1.Structura programelor Pascal.................................................................................................................1 2.Identificatori...........................................................................................................................................1 3.Tipuri de date.........................................................................................................................................2 4.Tipuri ordinale definite de utilizator......................................................................................................4 5.Constante................................................................................................................................................6 6.Variabile.................................................................................................................................................7 7.Expresii...................................................................................................................................................7 8.Structuri de control.................................................................................................................................7 9.Instruciunea de decizie IF.....................................................................................................................8 10.Instruciunea de selecie multipl CASE..............................................................................................8 11.Instructiunea repetitiv WHILE...........................................................................................................9 12.Instructiunea repetitiv cu contor FOR..............................................................................................10 13.Instructiunea repetitiv cu test final REPEAT...................................................................................11 14.Procedurile Break si Continue............................................................................................................11 15.Tablouri unidimensionale (vectori)....................................................................................................12 16.iruri de caractere...............................................................................................................................13 17.Tablouri bidimensionale (matrici)......................................................................................................13 18.Tipul inregistrare................................................................................................................................14 19.Tipul mulime.....................................................................................................................................15

17

S-ar putea să vă placă și