Documente Academic
Documente Profesional
Documente Cultură
1
! Structura programelor Pascal
! Vocabularul limbajului
! Constante
! Tipuri standard de date
! Variabile
! Definirea constantelor
! Expresii
! Citirea i scrierea datelor
! Instruciuni
! Probleme propuse
Limbajul Pascal a fost conceput mai ales n scop didactic, urmrind predarea artei
programrii calculatoarelor conform principiilor programrii structurate. Limbajul
modeleaz natural concepte de baz n programare i permite implementri eficiente.
Blocul este cea mai important parte dintr-un program i cuprinde o seciune de de-
claraii (opional) i o seciune de program.
Declaraiile se pot preciza n orice ordine, pot alterna i se pot repeta. Acestea sunt
structurate astfel:
declaraii de constante;
definiii de tipuri;
declaraii de variabile;
declaraii de etichete;
declaraii de subprograme.
Instruciunile care se vor executa vor fi scrise n seciunea de program. Aici se pot
apela subprograme declarate anterior (n partea de declaraii sau n unit-uri).
Iat un exemplu de program Pascal:
Program triunghi;
type pozitiv=1..MaxLongint;
var a,b,c,peri:pozitiv;
sp,aria:Real; { sp ==> semiperimetrul triunghiului }
Begin
repeat
Write('Introduceti lungimea laturii a-->'); ReadLn(a);
Write('Introduceti lungimea laturii b-->'); ReadLn(b);
Write('Introduceti lungimea laturii c-->'); ReadLn(c);
if a*b*c=0 then
WriteLn('Cel putin o latura are lungimea 0! Reluati!)
else
if (a<0) or (b<0) or (c<0) then
WriteLn('Lungimi negative! Reluati!')
until (a>0) and (b>0) and (c>0);
if (a+b>c) and (a+c>b) and (b+c>a) then begin
peri:=a+b+c;
WriteLn('Perimetrul triunghiului este: ',peri);
sp:=peri/2;
aria:=Sqrt(sp*(sp-a)*(sp-b)*(sp-c));
WriteLn('Aria triunghiului este: ',aria:10:2)
end else
WriteLn(a,' ',b,' ',c,' nu pot fi laturile unui triunghi!')
End.
1. Recapitulare 27
n seciunea type am definit tipul de date pozitiv cu valori mari, astfel putem
calcula perimetrul i aria unui triunghi, avnd lungimile laturilor numere pozitive care
pot depi valoarea de dou miliarde, dar trebuie s fie mai mici sau egale cu valoarea
constantei MaxLongint (2147483647). Rezultatele le vom declara de tip Real, de-
oarece doar tipul acesta permite pstrarea rezultatului cu zecimale exacte.
Variabilele declarate n seciunea var sunt a, b, c, peri i au tipul pozitiv, iar
sp i aria sunt de tipul Real. Instruciunile din program apar ntre cuvintele rezerva-
te begin i end i sunt separate prin punct i virgul (;). Textele cuprinse ntre acola-
de ({}) sunt comentarii.
1.3. Constante
Tipurile de constante ntlnite n limbajul Borland Pascal sunt:
constantele ntregi (1977, 6, 3, -127 sunt numere ntregi n baza 10; $afe2
este un numr n baza 16);
constantele reale (-4.23, 0.0, 67E-2 este egal cu 6710-2 = 0.67) ;
irurile de caractere pot fi:
un ir de caractere imprimabile, cuprins ntre apostrofuri: 'elev';
un ir de numere ntregi de la 0 la 255, precedate fiecare de caracterul #, scri-
se fr separatori (concatenate);
28 1. Recapitulare
Tipurile simple de date sunt nestructurate i se mpart n: tipuri reale i tipuri ordi-
nale. Un tip ordinal definete o mulime finit i ordonat de valori. Orice tip ordinal
are o valoare minim i una maxim. Orice valoare de tip ordinal are o valoare prede-
cesor (excepie fcnd minimul) i o valoare succesor (excepie fcnd maximul).
Tipuri de date
Reale
Tipuri simple de ntregi
Predefinite n
date Boolean
unit-ul System
(scalare, Ordinale Char
nestructurale) Enumerat
Utilizator
Subdomeniu (interval)
Tablou
String
Articol
Structurate
(nregistrare)
Mulime
Fiier
Tipul reper (pointer,
referin)
n unit-ul System exist definite funciile aplicabile unei valori de tip ordinal:
1. Recapitulare 29
Succ(x) Furnizeaz succesorul lui x (dac x nu este maxim n tipul su) sau retur-
neaz prima valoare corespunztoare tipului (dac x coincide cu valoarea
maxim din tipul su); rezultatul are acelai tip ca i x.
Pred(x) Furnizeaz predecesorul lui x (dac x nu este minim n tipul su) sau ulti-
ma valoare corespunztoare tipului (dac x coincide cu valoarea minim
din tipul su); rezultatul are acelai tip ca i x.
Ord(x) Furnizeaz numrul de ordine pe care l are x n mulimea valorilor din ti-
pul lui x; rezultatul funciei este de tip ntreg.
Valoarea false are asociat numrul de ordine 0, iar valoarea true are asociat nu-
mrul de ordine 1. Valorilor booleene li se pot aplica operatorii relaionali, obinnd
orice operaie logic dorit. Operatorul = exprim echivalena logic, iar operatorul <=
exprim implicaia logic (x<=y are valoarea false dac i numai dac x este true i
y este false).
Tipul subdomeniu se obine dintr-un tip ordinal definit anterior sau predefinit,
numit tip de baz al subdomeniului. Mulimea valorilor acestui tip cuprinde un inter-
val de valori ale tipului de baz, ale crui limite se specific n definiia tipului subdo-
meniului. Constantele care reprezint limitele din stnga i dreapta ale subdomeniului
sunt de acelai tip ordinal, iar cea din stnga trebuie s fie strict mai mic dect cea din
dreapta.
Operaiile permise asupra datelor de tip subdomeniu sunt cele permise de tipul de
baz al acestuia.
1.5. Variabile
Variabilele rein date, iar coninutul unei variabile poate fi modificat pe parcursul exe-
cuiei programului. Fiecrei variabile i se asociaz un identificator i un tip de dat.
Tipul precizeaz mulimea de date din care poate lua valori variabila respectiv i ope-
raiile care pot fi efectuate cu acea variabil. Tipul se asociaz variabilei printr-o de-
claraie care poate utiliza identificatori de tip sau poate referi un tip anonim. Dou ti-
puri anonime se consider diferite, chiar dac descriu aceeai structur, dar identifica-
torii aparinnd aceleiai liste ntr-o declaraii de variabile, folosind tipuri anonime,
vor avea tipuri identice.
n limbajul Pascal se pot defini constante cu tip care sunt variabile iniializate n fa-
za de compilare. Valorile lor se pot modifica n timpul execuiei programului. Folosi-
rea constantelor cu tip poate fi avantajoas pentru iniializarea variabilelor avnd tipuri
structurate.
Exemple
const a=1977; { constanta simbolica }
Zi='marti';
Par:Boolean=Odd(a); { constanta cu tip }
1. Recapitulare 33
1.7. Expresii
O expresie descrie o regul de calcul ntr-un ir de operatori i operanzi. Fiecare ex-
presie evaluat returneaz un rezultat. n evaluarea unei expresii se respect prioritatea
operatorilor. Dac avem operatori cu aceeai prioritate, atunci se execut operaiile de
la stnga la dreapta. Dac dorim schimbarea ordinii, vom folosi paranteze rotunde).
Ordinea descresctoare a prioritii operatorilor este:
Prioritate Operator
1. (maxim) not, +, - (opratori unari)
2. and, *, / , div, mod, shl, shr (operatori multiplicativi)
3. or, xor, +, - (operatori aditivi)
4. (minim) =, <>, <, <=, >, >= (operatori relaionali)
O expresie este alctuit fie dintr-o expresie simpl, fie din dou expresii legate
printr-un operator relaional. n calculul valorii expresiei se vor evalua mai nti facto-
rii, apoi termenii, dup aceea expresiile simple, iar n final expresia relaional.
1.9. Instruciuni
n partea stng a semnului de atribuire variabila poate fi una simpl sau o compo-
nent a unui tablou sau a altui tip de dat structurat. Atribuirea A:=B este posibil da-
c A i B sunt variabile de acelai tip. n toate cazurile se cere ca partea dreapt a atri-
buirii s poat fi evaluat n mod sigur (toate variabilele s fie iniializate, sau citite,
eventual s aib valoare obinut din calcule precedente), altfel vom spune c variabila
B este neiniializat, iar atribuirea va putea genera rezultat eronat.
begin
instruciune1;
instruciune2;
...
instruciunen
end;
n limbajul Pascal caracterul punct i virgul (;) separ dou instruciuni. El nu are
rolul de a marca sfritul acestora, ca atare, acest caracter nu trebuie scris n faa cu-
vntului end, dar acest lucru nu este interzis. n acest caz se consider c ntre ; i
end se afl o instruciune vid, avnd efect nul.
Exemplu
if x < 0 then v:=-x
else v:=x;
36 1. Recapitulare
case expresie_ordinal of
lista_c: instruciune1;
lista_c: instruciune2;
...
lista_c: instruciunen
[else instruciunen+1]
end;
unde expresie_ordinal este o expresie de tip ordinal (selector), lista_c este o list de
constante case avnd tipul ordinal al expresiei expresie_ordinal. n lista_c n locul
unei constante poate s apar i un subdomeniu c1..c2 (pentru o scriere mai condensat
n cazul n care constantele sunt consecutive).
Efectul instruciunii case const n evaluarea expresiei expresie_ordinal, obi-
nndu-se o valoare v, care constituie valoarea selectorului. Apoi se caut n listele
constantelor case valoarea egal cu v i se execut instruciunea din dreptul constantei
case egale cu v.
Dac nu exist nici o instruciune cu eticheta v atunci, n prezena cuvntului else,
se execut instruciunea care urmeaz dup acest cuvnt, altfel nu se execut nici o in-
struciune.
Exemplu
case a of
'A': Write('A');
'B': Write('B');
'C': Write('C')
else
Write('alta litera!!!')
end;
A. Instruciunea for
Aceast instruciune execut repetat (n numr cunoscut de pai) o instruciune n
funcie de valoarea unui contor. Ea are sintaxa:
for v:=lim1 to lim2 do instruciune;
sau
for v:=lim1 downto lim2 do instruciune;
1. Recapitulare 37
unde v este un identificator de variabil numit contor, iar lim1 i lim2 sunt expresii.
Toate au acelai tip ordinal. Valorile lui lim1 i lim2 se calculeaz o singur dat, la
nceputul execuiei instruciunii for. Variabila contor v va lua valori ntre limitele lim1
i lim2 cresctor, dac figureaz cuvntul to i descresctor, dac figureaz cuvntul
downto. Semnificaia acestei instruciuni este dat de urmtorul algoritm:
1. se calculeaz valorile expresiilor lim1 i lim2;
2. dac valoarea lui lim1 valoarea lui lim2 atunci
v valoarea lui lim1
repet
se execut instruciune
dac v < valoarea lui lim2 atunci
v Succ(v)
sfrit dac
pn cnd v = lim2
sfrit dac
n cazul formei for v:=lim1 downto lim2 do instruciune vom schimba operatorii
cu , < cu > i funcia Succ cu Pred. Contorul v poate fi folosit n instruciune, dar
modificarea valorii sale de ctre programator nu este recomandat.
B. Instruciunea while
Aceasta este o instruciune repetitiv cu numr necunoscut de pai, anterior condiio-
nat. Sintaxa ei este:
while condiie do instruciune;
unde condiie este o expresie logic. Efectul executrii instruciunii while este:
1. Evaluarea expresiei logice condiie;
2. Dac valoarea expresiei este true, atunci se execut instruciune i se revine la pa-
sul 1, altfel execuia se termin.
Astfel se execut repetat o instruciune n funcie de valoarea de adevr a unei ex-
presii logice. Dac iniial expresia logic este fals, execuia instruciunii respective nu
va avea loc niciodat.
C. Instruciunea repeat
Instruciunea repeat permite execuia repetat n numr necunoscut de pai a unui
grup de instruciuni. Instruciunea este posterior condiionat i are sintaxa:
repeat instruciuni until condiie;
unde condiie este o expresie logic. Semnificaia instruciunii este:
1. Se execut instruciunile scrise ntre cuvintele repeat i until;
2. Se evalueaz expresia logic condiie;
3. Dac valoarea expresiei este true, atunci execuia se termin, altfel se revine la
pasul 1.
38 1. Recapitulare
Observaii
expresia condiie nu se recomand a fi foarte complicat, avnd n vedere c se
evalueaz la fiecare pas;
cel puin o variabil din expresia logic condiie trebuie s-i schimbe valoarea
n mod obligatoriu, altfel exist pericolul ca instruciunea s se transforme n
ciclu infinit.
1.10.1. nceptori
A. nvarea alfabetului
Copiii din clasele mici nva din greu alfabetul, pe cnd cei mai mari trag chiulul. n
clasa I un copil a pctuit pentru c a ncercat s vad cum este dac nu i nva
lecia pentru ora viitoare. nvtoarea l-a pedepsit, punndu-l s scrie n litere mari,
printre care acesta trebuie s scrie cel puin o dat toate literele mari pe care le-a nv-
at pn atunci.
Citii numrul de litere n pe care trebuie s le scrie copilul, precum i literele pe
care acesta le-a scris i scriei un program care verific dac n irul de litere apar sau
nu anumite litere de mai multe ori. Afiai literele care apar de mai multe ori (au nu-
mrul de apariii mai mare dect 1) i numrul apariiilor acestora.
Exemplu
Intrare Ieire
5 A 2
A B C A C C 2
B. Ghiocei i viorele
Copiii din clasa a VI-a au mers la pdure dup ghiocei. Ei au cules ghiocei i viorele,
n total un numr de n flori de primvar. Au observat c ghioceii i viorelele au
crescut dup o anumit regul: ntre dou viorele era un ghiocel, apoi cte doi i tot
aa mai departe.
Citii un numr natural n, reprezentnd numrul florilor i iniialele lor (G pentru
ghiocei, V pentru viorele) stabilii dac florile se gsesc sau nu ntr-o configuraie care
1. Recapitulare 39
corespunde regulii descrise. Afiai un mesaj corespunztor ('DA' sau 'NU'), precum
i poziiile viorelelor.
Exemple
Intrare Ieire
n = 6 DA
V G V G G V 1 3 6
Intrare Ieire
n = 5 NU
G V G G V
C. Serviciul pe clas
La nceputul anului colar dirigintele a ntocmit planificarea serviciului n clas, fiind
planificai cte doi elevi pentru fiecare zi. Deoarece, elevii au declarat c doresc s fie
de serviciu cte o fat i un biat, dirigintele a stabilit urmtoarea regul: prima fat
din catalog va sta cu primul biat, a doua cu al doilea i aa mai departe. Dirigintele
tie c are n elevi n clas, dar nu a numrat cte fete i ci biei sunt, aa c se poate
ntmpla s constate la sfrit c unii copii au rmas fr pereche.
Citii numrul de elevi, numele i genul lor ('f' pentru fete, 'b' pentru biei),
apoi stabilii dac au rmas elevi fr pereche i care sunt acetia.
Exemplu
Intrare Ieire
n=5 Fara pereche: Anca
Ana f
Ioana f
Andrei b
Anca f
Paul b
D. Tierea copacilor
Pe drumul naional E81 sunt copaci numerotai n zig-zag (pe partea dreapt a drumu-
lui copacii sunt numerotai cu numere pare i pe stnga cu numere impare). La un mo-
ment dat au fost alei copaci pentru tiere de pe fiecare parte a drumului dup urm-
toarea regul: se va tia primul acel copac care este numerotat cu un numr ale crui
cifre nsumate formeaz un ptrat perfect, apoi urmtorul copac avnd aceeai proprie-
tate i tot aa mai departe pn la captul drumului.
Citii numrul copacilor, apoi determinai ci copaci au fost alei pentru tiere, pe
care parte a drumului sunt acetia, precum i numrul cu care au fost numerotai. Nu-
merotarea copacilor ncepe de la 1.
40 1. Recapitulare
Exemplu
Intrare Ieire
n = 20 6 copaci
de pe dreapta: 4 10 18
de pe stanga: 1 9 13
E. La scldat
La trandul din ora s-a organizat un concurs de not dotat cu premii. Din dorina de a
ctiga marele premiu s-au nscris i copii care nu tiau s noate. Pentru sigurana lor
ei nu au fost acceptai n concurs. Deoarece concurenii aveau vrste diferite, s-a hot-
rt ca la timpul fiecrui concurent (msurat n secunde) s se adune vrsta acestuia.
Deoarece a nceput ploaia, s-a anunat c se ofer un abonament celui care scrie un
program care va stabili ordinea final, pentru ca premierea s aib loc ct mai repede.
Exemplu
STRAND.IN STRAND.OUT
7 6
2 2 5
1 3 4
60 55 58 55 70 7
8 14 10 10 9
Date de intrare
Datele de intrare se citesc din fiierul GIGEL.IN care are urmtorul format:
pe prima linie se afl ora P i minutul P' la care Gigel pleac de acas;
pe a doua linie se afl numrul N al prietenilor cu care se ntlnete Gigel pe drum;
fiecare dintre urmtoarele N linii conin ora D i minutul D' de ntlnire i ora DD
i minutul DD' la care se termin conversaia;
pe ultima linie este scris ora S i minutul S' la care trebuie s ajung Gigel la
coal.
Date de ieire
Rezultatul se va tipri la ieirea standard. Dac Gigel ajunge la coal n timp util, se
va afia cuvntul 'DA', iar dac nu, se va tipri cuvntul 'NU'. n cazul n care Gigel
reuete s ajung la coal, se va mai tipri ora i minutul la care ajunge.
Exemplu
GIGEL.IN Ieire
7 30 DA
2 8 16
7 32 7 34
7 36 7 37
8 43
1.10.2. Avansai
Exemplu
Intrare Ieire
n = 4 numar in baza 10: 4 nu este prim
numar in baza 3: 31 (citit in baza 10 este prim)
B. Matematica... pe calculator
La lecia de matematic profesorul le cere elevilor s efectueze o nmulire a unor nu-
mere al cror produs depete limitele matematicii. Primul care va rezolva aceast
problem va avea media 10 n acel semestru. Unul dintre ei, fiind mai iste i avnd
lng el un calculator de buzunar, a nceput s efectueze nmulirile pe calculator, dar
a observat c n acest caz nici calculatorul de buzunar nu i este de folos. Dar dac tot
este el mai iste a apelat la informaticieni i i-a rugat: Primul care mi va rezolva
problema va primi temele corecte la matematic n tot acest semestru.
Se citesc n numere ntregi. Se cere s se determine produsul acestor numere.
Date de intrare
Pe prima linie a fiierul de intrare PRODUS.IN se afl un numr natural n, iar pe urm-
toarele n linii exist cte un numr ntreg.
Date de ieire
Produsul celor n numere se va scrie n fiierul de ieire PRODUS.OUT.
Restricii i precizri
2 n 20;
-25000 xi 25000.
Exemplu
PRODUS.IN PRODUS.OUT
3 -37429274610
1234
-12345
2457
C. La pescuit
Elevii informaticieni, avnd prea multe concursuri de informatic, s-au gndit c ar fi
bine s aib o perioad de recreere i au organizat un concurs de pescuit la care au
participat foarte muli concureni. Fiecare elev a prins peti de diferite specii, speciile
fiind identificate prin numere. Numrul petilor prini este acelai pentru fiecare elev.
Se spune c ntre doi elevi exist relaie de legtur dac ei au prins cel puin un pete
de aceeai specie, astfel formndu-se grupuri dintre copiii care au n prad cel puin
un pete comun.
1. Recapitulare 43
Determinai numrul de grupuri care se vor forma i afiai membrii fiecrui grup.
Date de intrare
Datele de intrare se citesc din fiierul PESTI.IN care are urmtorul format:
pe prima linie este scris numrul n al elevilor;
pe a doua linie avem numrul k al petilor prini de fiecare elev;
pe fiecare dintre urmtoarele n linii avem cte k numere care indic specia fiecrui
pete prins de un anumit elev.
Datele de ieire
Fiierul PESTI.OUT are urmtorul format:
pe prima linie se va scrie numrul g al grupurilor formate;
pe fiecare dintre urmtoarele g linii se vor scrie numerele de ordine ale copiilor
care fac parte din cte-un grup.
Exemplu
PESTI.IN PESTI.OUT
10 4
3 1 2 9
1 2 1 3 4
1 2 2 5 6 7 10
3 3 3 8
3 4 5
7 8 7
7 8 7
8 8 7
9 9 9
1 1 2
7 7 8
1.10.3. Exceleni
A. Serviciul de gard
n vederea stabilirii serviciului de gard, la o unitate militar, comandantul nominali-
zeaz n soldai (S) i n gradai (G). Comandantul, tiind c la un moment dat n post
intr dou persoane i c ofierul responsabil i pune n pereche pe cei prevzui n lis-
t, primul cu ultimul, al doilea cu penultimul etc., stabilete ordinea n list, astfel n-
ct s nu se formeze perechi mixte (un soldat i un gradat). Comandantul mai tie c n
este numr par i va folosi aceast proprietate n momentul n care va ntocmi lista.
Scriei un program care afieaz pe ecran lista din care ofierul va forma perechi,
conform cerinei. De asemenea, programul trebuie s afieze i perechile care intr n
serviciu.
44 1. Recapitulare
Exemplu
Intrare Ieire (o soluie posibil)
n=4 Chirila
Chirila Coza
Macarie Lador
Coza Pacurar,
Domsa Domsa
Lador Macarie
Orlea Orlea
Hila Hila
Pacurar
S, S, G, G, S, G, S, G Chirila - Hila
Coza - Orlea
Lador - Macarie
Pacurar Domsa
B. Plasarea oglinzilor
Se consider un ir de n elemente care au valorile 0 i 1. Definim operaia plasare a
dou oglinzi, una n stnga elementului de pe poziia i, iar alta n dreapta elementului
de pe poziia j. Aceast operaie are ca efect interschimbarea elementelor egal deprta-
te de extreme a elementelor cuprinse ntre poziiile i i j, inclusiv.
Scriei un program care va citi dou iruri de lungime n i va stabili poziiile n care
vor trebui plasate cele dou oglinzi n cadrul primului ir, astfel nct n urma plasrii
oglinzilor, primul ir s devin identic cu al doilea ir.
Exemplu
Intrare Ieire
n = 8 2 6
0 0 1 1 0 1 1 0
0 1 0 1 1 0 1 0
C. Palindrom
Unii matematicieni au fost curioi i au nceput s se joace cu numerele; ei au
obinut tot felul de rezultate interesante. Pentru un numr oarecare x dat n baza b,
definim urmtorul proces iterativ: la primul pas se adun numrului x oglinditul su,
repetnd succesiv procedeul cu rezultatul obinut.
Exemplu
Fie n = 87 i b = 10.
pasul 1: 87 + 78 = 165;
pasul 2: 165 + 561 = 726;
pasul 3: 726 + 627 = 1353;
pasul 4: 1353 + 3531 = 4884.
1. Recapitulare 45
Ultimul rezultat este un palindrom care s-a obinut dup patru pai. ntrebarea pe
care ne-o punem este urmtoarea: pornind cu un numr oarecare, se ajunge ntotdeau-
na la un palindrom dup un numr finit de pai?
Verificai pentru un numr dat n dac se ajunge sau nu la un palindrom, procednd
conform descrierii de mai sus. Vei aplica procedeul de cel mult k ori. n cazul n care
numrul dat s-a transformat n numr palindrom n cel mult k pai afiai numrul de
pai necesari, precum numrul palindrom obinut, n caz contrar scriei n fiier 'NU'.
Exemplu
Intrare Ieire
n = 87 4
n = 10 4884
D. Numere apropiate
Se d un numr natural n (care conine cel mult 2457 de cifre). Determinai cel mai
mic numr natural m n care accept ca divizor un numr dat d (1 d 2457).
Numerele n i d se citesc de pe primele dou linii ale fiierului NUMERE.IN, iar
numrul m va fi scris pe prima linie a fiierului NUMERE.OUT.
Exemplu
NUMERE.IN NUMERE.OUT
14 15
5