Sunteți pe pagina 1din 21

Recapitulare Capitolul

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.

1.1. Structura programelor Pascal


n descrierea unui program Pascal se difereniaz aciunile de efectuat i descrierea da-
telor de prelucrat. n structura unui program Pascal intr:
antetul programului (opional) conine cuvntul rezervat Program urmat de
numele programului;
declaraie (opional) a numelor unit-urilor care se vor folosi n program, introdu-
s de cuvntul rezervat uses;
parte obligatorie format dintr-un bloc, urmat de caracterul punct ('.').

Un unit este o colecie de declaraii de constante, tipuri, variabile i subprograme.


Un unit se compileaz i se utilizeaz n programele n care se dorete folosirea aces-
tor constante, tipuri, variabile i subprograme. Folosirea unit-urilor permite scrierea
unor programe mari care pot depi 64K. Dimensiunea unui program, ca i cea a unui
unit nu poate s depeasc 64K. Unit-urile standard, oferite de mediul Borland Pascal
sunt: System, Dos, Graph, Crt etc. Unit-ul System este ncorporat n toate progra-
mele Pascal fr s fie necesar includerea declaraiei uses. Acest unit cuprinde pro-
cedurile i funciile cel mai des folosite.
26 1. Recapitulare

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:

{ Intre acolade vom scrie comentarii. }


{ Acestea sunt texte explicative care nu se compileaza. }
{ Enuntul problemei: }
{ Fie a, b si c lungimile laturilor unui triunghi oarecare. }
{ Sa se calculeze perimetrul triunghiului si aria sa. }
{ Observatie: }
{ a, b si c sunt numere naturale strict pozitive. }

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.2. Vocabularul limbajului


Setul de caractere al limbajului cuprinde: literele mari i mici ale alfabetului englez,
cifrele din baza 10 i caracterele speciale: +, -, *, /, ^, <, >, (, ), [, ], {, }, . , ,, :, ;,
#, $, @, _ i spaiul (blancul).
Identificatorii sunt formai din litere, cifre i caracterul '_' (liniua de subliniere),
dar primul caracter dintr-un identificator nu poate fi o cifr. Este indicat ca numele
unui identificator s fie ales dup semnificaia lui n program. Lungimea numelui
identificatorului nu influeneaz lungimea codului obiect. Compilatoarele Pascal nu
fac distincie ntre literele mari i literele mici.
Identificatorii min, max2, _Sum13a, prod sunt acceptai de compilatorul Pascal, n
schimb a+b, 5a, z y nu sunt identificatori (primul exemplu este o expresie, al doilea
ncepe cu cifr, iar al treilea conine un spaiu).
Identificatorii pot desemna nume de programe, constante, tipuri, variabile, subpro-
grame, parametri, unit-uri etc. Identificatorii care au semnificaie fixat, i care nu pot
fi folosii dect n contextul n care sunt definii n limbaj, alctuiesc mulimea cuvin-
telor rezervate ale limbajului.
Identificatorii creai i referii de utilizator trebuie declarai n program ntr-o linie
surs scris anterior referirii.

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

un ir de caractere de control (care au codurile ASCII ntre 1 i 31), exprima-


te fiecare printr-un caracter precedat de ^ (^A este Ctrl+A);
iruri obinute prin concatenarea irurilor definite anterior;
constante simbolice.

Dac dorim caracterul apostrof, atunci acesta trebuie dublat n ir:


'Windows''98'.
Constantele simbolice sunt desemnate printr-un identificator. Dac folosim aceste
constante oferim programului claritate i independen fa de eventualele modificri
ale acestor constante. O constant simbolic nu poate fi modificat n timpul execuiei
programului.

1.4. Tipuri standard de date


Prin dat nelegem o entitate asupra creia poate opera calculatorul. Limbajele de ni-
vel nalt folosesc tipurile de date pentru abstractizarea reprezentrii unei date. Tipul de
dat precizeaz mulimea de date i operaiile care se pot efectua cu ea.

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.

Compararea valorilor ordinale x i y se poate face cu ajutorul operatorilor rela-


ionali: = (egal), <> (diferit), <, >, <=, >=. Rezultatul comparrii este de tip Boolean,
adic poate avea valorile true sau false.
Prin reguli stabilite n limbaj, tipurile simple de date stau la baza alctuirii tipurilor
structurate.

1.4.1. Tipul Boolean (logic)


O variabil de tip Boolean poate avea dou valori: adevrat sau fals. Exist mai muli
operatori logici care pot fi aplicai asupra datelor booleene. Expresia va avea rezultat
de tip Boolean:
Operatori binari:
and i logic
or sau logic
xor sau exclusiv (x xor y este true numai dac x<>y)
not negaie logic (operator unar)

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).

1.4.2. Tipul Char


Setul extins de caractere ASCII reprezint domeniul de valori pentru o dat de tip
Char. O dat de tip Char se reprezint pe un octet (8 bii).
Exemple de date de tip Char: 'k', #10 (caracterul avnd codul ASCII 10), ''''
(caracterul apostrof), ^A caracterul care se obine prin apsarea tastelor Ctrl+A.
Funciile care sunt definite n unit-ul System pentru date de tip ordinal se pot utili-
za i pentru datele de tip Char.
Succ('b') furnizeaz caracterul 'c'
30 1. Recapitulare

Pred('c') furnizeaz caracterul 'b'


Ord('C') furnizeaz codul ASCII al caracterului 'C', codul returnat este 67
Chr(68) furnizeaz caracterul 'D'
Funcia Chr(n) returneaz caracterul al crui cod ASCII este egal cu numrul n.
Numrul n trebuie s se ncadreze n intervalul [0, 255]. Dac valoarea lui n este mai
mic dect 0, atunci funcia Chr genereaz caracterul care are codul ASCII egal cu
k 256 + n, unde k este cel mai mic numr natural pentru care expresia k 256 + n este
mai mare sau egal cu 0. Dac numrul n este mai mare dect 255, atunci funcia Chr
returneaz caracterul avnd codul ASCII egal cu restul mpririi ntregi a lui n la 256.
O valoare de tip Char se poate scrie i se poate citi. Datele de tip Char se pot compara
utiliznd operatorii relaionali.

1.4.3. Tipuri ntregi


n Pascal exist cinci tipuri ntregi predefinite: Shortint, Integer, Longint, Byte,
Word. Domeniul de valori i modul de reprezentare se pot vedea n meniul Help.
Asupra datelor de tip ntreg se pot aplica urmtorii operatori aritmetici: + (aduna-
rea), (scderea), * (nmulirea), div (mprirea ntreag), mod (restul mpririi n-
tregi a primului operand la al doilea) i operatorii pe bii: not (negaie, fiecare bit egal
cu 1 devine 0 i fiecare bit egal cu 0 devine 1), and (i logic face conjuncia bit cu bit
ntre operanzi), or (sau logic face disjuncia bit cu bit ntre operanzi), xor (sau exclu-
siv ntre operanzi), shl (deplaseaz la stnga un numr de poziii binare egal cu valoa-
rea celui de-al doilea operand; primii bii se pierd, n locul ultimilor bii se genereaz
valoarea 0), shr (deplaseaz la dreapta un numr de poziii binare egal cu valoarea ce-
lui de-al doilea operand; ultimii bii ai primului operand se pierd, pe primele poziii se
copiaz valoarea 0).
Operaia de deplasare la stnga cu o poziie este echivalent cu o nmulire a primu-
lui operand cu 2, iar deplasarea spre dreapta cu o poziie a unui numr pozitiv este
echivalent cu o mprire ntreag la 2. Aceste operaii de deplasare la stnga i la
dreapta a valorii biilor se realizeaz mult mai rapid dect atunci cnd se utilizeaz
operatorii * sau div.
Tipurile ntregi sunt tipuri ordinale. Fiecare numr ntreg are asociat un numr de
ordine care coincide cu valoarea respectiv. Operanzilor de tip ntreg li se pot aplica
funciile Succ, Pred, Ord i operatorii relaionali. Alte funcii care se pot aplica ope-
ranzilor de tip ntreg sau real i care returneaz un rezultat de tip ntreg sunt:
Abs(n) returneaz valoarea absolut a argumentului n;
Sqr(n) determin ptratul argumentului n;
Trunc(n) furnizeaz cel mai mare ntreg mai mic sau egal cu n pentru n > 0, sau
cel mai mic ntreg, mai mare sau egal cu n, pentru n < 0;
Round(n) furnizeaz cel mai apropiat ntreg fa de argumentul n.
1. Recapitulare 31

1.4.4. Tipuri reale


Datele de tip real primesc valori reale aparinnd domeniului de valori corespunztor
tipului respectiv. Calculele cu valori ntregi modeleaz exact aritmetica ntregilor, dar
operaiile cu date de tip real produc rezultate aproximative. Aceste aproximri provin
din erorile de rotunjire generate de numrul finit de cifre semnificative folosite n re-
prezentarea valorilor reale. Tipurile reale care exist n limbajul Pascal sunt: Real,
Single, Double, Extended, Comp. Domeniul de valori i modul de reprezentare se
pot vedea n meniul Help. Valorile datelor de tip Comp sunt numere ntregi cuprinse n
intervalul [0, 263-1]. Dac din doi operanzi cel puin unul este de tip Real, atunci pu-
tem aplica operatorii: + (adunare), (scdere), * (nmulire), / (mprire cu rezultat de
tip real; acest operator se poate aplica i operanzilor de tip ntreg, ns rezultatul va fi
de tip real). Dac aplicm operatorii relaionali asupra unor operanzi de tip real vom
obine un rezultat de tip Boolean.
Tipurile reale nu sunt ordinale, prin urmare asupra valorilor reale nu putem aplica
funciile Ord, Succ, Pred.
Valorile reale pot fi citite i scrise. Principalele funcii standard de lucru cu valori
reale sau ntregi se gsesc prezentate n meniul Help (Abs, Sqr, Sin, Cos, Arctan,
Ln, Exp, Sqrt, Int, Frac, Pi).

1.4.5. Tipuri ordinale definite de utilizator


n limbajul Pascal utilizatorul poate s defineasc tipuri ordinale proprii: tipul enume-
rat i tipul subdomeniu.
Tipul enumerat modeleaz cazurile n care exprimarea nu este numeric. De exem-
plu, atunci cnd lucrm ntr-un program de tip agend cu zilele sptmnii, programul
va fi mult mai lizibil dac se lucreaz chiar cu denumirea zilelor sptmnii i nu cu
numerele de ordine corespunztoare lor.
Un tip enumerat definete o mulime ordonat de valori prin enumerarea identifica-
torilor care vor desemna valorile. Primul identificator desemneaz cea mai mic valoa-
re, cu numrul 0. Ceilali identificatori au numerele urmtoare, conform succesiunii
lor. Prelucrarea datelor de acest tip se face rapid, deoarece valorile corespunztoare se
reprezint n memorie prin numerele lor de ordine. Aceti identificatori sunt tratai n
program la fel ca i constantele.
Fiind un tip special, diferit de orice alt tip, nu putem utiliza identificatorii unui tip
enumerat n definiia altui tip enumerat.
Asupra datelor de tip enumerat nu se pot aplica operatori aritmetici. Datele de tip
enumerat se comport similar constantelor simbolice, de asemenea, nu se pot citi sau
scrie. Iniializarea datelor de tip enumerat se face prin atribuiri. Dac, de exemplu, am
declarat tipul:
type Saptamana=(luni,marti,miercuri,joi,vineri,sambata,duminica)
apelul Ord(marti) returneaz 2, Pred(marti) returneaz luni.
32 1. Recapitulare

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.

Pentru fiecare variabil declarat n program se aloc o zon de memorie n timpul


compilrii. Dimensiunea zonei de memorie pentru variabila respectiv depinde de ti-
pul variabilei.

1.6. Definirea constantelor


Constantele simbolice se definesc de ctre utilizator n seciunea const. Constantele
simbolice reprezint valori care nu se modific pe parcursul execuiei programului.
Constantele simbolice pot fi de mai multe tipuri: ntreg, real, boolean, ir de caractere.

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.8. Citirea i scrierea datelor


Datele de intrare ale unui program se pot citi de la dispozitivul standard de intrare sau
dintr-un fiier (o colecie de date stocat n memoria extern a sistemului de calcul).
Datele de ieire n urma execuiei unui program se pot afia la dispozitivul standard de
ieire sau ntr-un fiier reinut n memoria extern a sistemului de calcul.
Citirea datelor se realizeaz prin executarea procedurilor standard Read i ReadLn.
Scrierea datelor se realizeaz prin executarea procedurilor Write i WriteLn. Aces-
tea sunt declarate n unit-ul System.
Sintaxa apelului procedurii Read este: Read(list_de_variabile), unde list_de_
variabile poate conine variabile de tip ntreg, real sau ir de caractere.
n urma apelrii fiecrei variabile prezente n lista de variabile i se atribuie o valoa-
re. Valorile se iau de pe suportul extern, ncepnd din punctul n care s-a ajuns dup
citirea anterioar. Valorile sunt luate astfel nct s corespund tipului variabilei res-
pective. Dac acest lucru nu este posibil se va semnala eroare n execuie. De exemplu,
dac x este o variabil de tip ntreg, iar u i v sunt variabile de tip caracter, atunci in-
struciunea Read(x,u,v) atribuie o valoare ntreag variabilei x i cte o valoare de
tip caracter variabilelor u i v.
Dac pe suportul extern se afl '125 A', atunci x va primi valoarea 125, variabila
u va primi valoarea ' ' (caracterul spaiu), iar v va primi valoarea 'A'. Dac suportul
extern conine '12.4 A', atunci execuia se va termina cu un mesaj de eroare ntruct
valoarea 12.4 nu are tipul ntreg. Tot cu eroare se va termina execuia dac pe supor-
tul extern avem 'text 15', deoarece prima valoare ntlnit nu este un numr ntreg.
34 1. Recapitulare

Procedura Write asigur transferul informaiei din memoria intern pe suportul


extern. Apelul procedurii are forma general: Write(list_de_expresii). Lista de ex-
presii Pascal poate conine expresii de orice tip, cu excepia tipurilor structurate.
Efectul acestui apel este evaluarea expresiilor prezente n list, apoi tiprirea valo-
rilor obinute.
Pe suportul extern datele de transferat se afl scrise sau vor fi tiprite pe o succesi-
une de nregistrri. Considerm c o nregistrare este constituit dintr-o secven de
date, urmat de marca de sfrit de linie. n cazul apelrii procedurilor Read i Write,
atunci cnd se epuizeaz o nregistrare se ncepe o alt nregistrare. Dar, adeseori este
necesar s se treac la o alt nregistrare nainte de a fi epuizat precedenta. Pentru
aceasta se pot folosi procedurile ReadLn i WriteLn care au sintaxa i semnificaia
procedurilor Read i Write, dar cer n plus ca la terminarea execuiei lor s se treac
la nceputul unei noi nregistrri.

1.9. Instruciuni

1.9.1. Instruciunea de atribuire


Instruciunea de atribuire are scopul de a da valori unor variabile. Ea are sintaxa:
variabila:=expresie;
unde variabila i expresie sunt de acelai tip. variabila i expresie pot fi de tip ntreg,
real, boolean, enumerare sau orice alt tip structurat cunoscut n programul n care apa-
re instruciunea, cu excepia tipului fiier.
Instruciunea mai nti evalueaz expresia din partea dreapt a semnului de atribui-
re ':='. Dac tipul expresiei i cel al variabilei sunt identice, atunci valoarea expresi-
ei este atribuit variabilei din stnga semnului de atribuire. Dac tipul variabilei i cel
al expresiei difer, atunci se semnaleaz eroare, dar exist i excepii:
1. Dac tipul expresiei este Integer, iar cel al variabilei este Real, atunci se conver-
tete valoarea ntreag a expresiei ntr-o valoare real care se atribuie variabilei.
2. Dac tipul variabilei i cel al expresiei sunt de tip enumerat sau subdomeniu cu
acelai tip de baz i dac valoarea expresiei aparine tipului variabilei, aceast va-
loare se atribuie variabilei.
3. Dac variabila i expresia sunt de tip mulime, atunci este posibil ca unul sau am-
bele tipuri s fie subdomenii ale aceluiai tip ordinal. Atribuirea este permis dac
valorile din mulimea rezultat sunt incluse n tipul de baz al variabilei din stnga
semnului de atribuire.
4. A patra excepie se refer la tipul string (ir de caractere); tipul variabilei i cel al
expresiei putnd fi tipuri string diferite (iruri de caractere de lungimi diferite).
Atribuirea este corect dac valoarea ei se poate atribui variabilei din stnga atribu-
irii.
1. Recapitulare 35

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.

1.9.2. Instruciunea compus


Sintaxa unor instruciuni impune folosirea, n cadrul ei, a unei singure instruciuni.
Pentru a putea include n aceste locuri grupuri de instruciuni, n Pascal le vom grupa
ntr-o entitate simpl. Aceast entitate se numete instruciune compus i are sintaxa:

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.

1.9.3. Instruciuni condiionale


Exist dou instruciuni Pascal care permit execuia unor instruciuni n funcie de
ndeplinirea unor condiii: instruciunile if i case. Instruciunea if are sintaxa:
if condiie then instruciune;
sau
if condiie then instructiune1 else instructiune2;
unde condiie este o expresie logic, iar instruciune1 i instruciune2 sunt instruciuni
Pascal. n ambele variante instruciunea mai nti evalueaz expresia logic condiie.
Dac valoarea obinut este true, atunci se execut instruciunea instruciune1 cu care
se ncheie execuia instruciunii if. Dac valoarea obinut este false atunci, n
cazul variantei a doua se execut instruciunea instruciune2, iar n cazul primei va-
riante nu se execut nimic.

Exemplu
if x < 0 then v:=-x
else v:=x;
36 1. Recapitulare

Instruciunea case permite selectarea unei instruciuni dintr-o mulime de instruc-


iuni marcate, n funcie de valoarea unui selector. Sintaxa instruciunii este:

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;

1.9.4. Instruciuni repetitive


n Pascal exist trei instruciuni care execut repetat o instruciune; acestea sunt: for,
while i repeat.

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. Probleme propuse


Problemele propuse n aceast seciune pot fi rezolvate n cadrul unei evaluri/testri
efectuate de profesor, dup recapitulare, cu scopul stabilirii nivelului de cunotine a
elevilor. Problemele sunt grupate pe 3 niveluri:
1. nceptori
2. avansai
3. exceleni

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.

Fiierul de intrare STRAND.IN are urmtorul format:


pe prima linie este scris numrul n al copiilor nscrii; copiii sunt identificai cu nu-
mere cuprinse ntre 1 i n.
pe linia a doua este scris numrul k al copiilor eliminai;
pe linia a treia avem k numere, indicnd copiii eliminai;
pe linia a patra sunt scrise n k numere care reprezint timpii celor rmai n con-
curs, n ordinea numerelor primite la nscriere;
pe linia a cincia avem n k numere indicnd vrstele celor rmai n concurs, n or-
dinea numerelor primite la nscriere.

n fiierul de ieire STRAND.OUT se va afia ordinea final a copiilor participani la


concurs. Pe fiecare linie se va scrie unul sau mai multe numere, astfel nct numrul
de ordine a liniei s fie egal cu poziia pe care copiii scrii pe linia respectiv au
terminat concursul.

Exemplu
STRAND.IN STRAND.OUT
7 6
2 2 5
1 3 4
60 55 58 55 70 7
8 14 10 10 9

F. Drumul spre coal


Gigel este un elev cruia nu-i prea place coala i ar face orice s nu mai ajung acolo.
n a 43-a zi a anului colar mama sa l-a trimis la coal la ora P i P' minute. El trebuia
s ajung la coal la ora S i S' minute.
1. Recapitulare 41

n drum spre coal el se ntlnete cu civa prieteni care l in de vorb de la ora


D i D' minute pn la ora DD i DD' minute. Dac discut mai mult de 43 de minute,
atunci ei vor mai discuta nc 43 de minute.
Scriei un program care verific dac Gigel ajunge la timp la coal i n cazul n
care ajunge, s se determine ora i minutul la care a ajuns.
Durata deplasrii de acas pn la coal este de 43 de minute.

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

A. Numere prime... cu divizori


Elevii clasei a V-a au nvat la matematic despre numerele prime c au exact doi
divizori: 1 i numrul nsui. La informatic au nvat c numerele se pot reprezenta
i n alte baze, nu doar n baza 10. Cei doi profesori (cel de matematic i cel de
informatic) s-au gndit s le dea o tem copiilor de clasa a V-a, care s combine cele
dou informaii nvate. Ei vor trebui s gseasc toate numerele mai mici dect un
numr dat n, care au proprietatea c scrise n baza 10 nu sunt prime, dar scrise n alt
baz i citite n baza 10, sunt prime.
Scriei un program care gsete aceste numere, precum i bazele n care au aceast
proprietate.
42 1. Recapitulare

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

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