Sunteți pe pagina 1din 133

Limbajul de programare Turbo Pascal si prelucrarea statistica a datelor experimentale

Prof.univ.dr. Anioara Constantinescu Facultatea de Fizica a Universit !ii din "ucureti Februar# $% &''(

&

Cuprins
) *+T,-.UC/,/ ).) /ditorul Turbo Pascal ............................................................................ ).& Unitati lexicale ....................................................................................... ).1 2tructura programelor 3n Turbo Pascal ............................................... T*PU,* ./ .AT/ 4)5 &.) *nteger% ,eal% C6ar% "oolean ................................................................ &.).) tipul *+T/7/, ......................................................................... &.).& tipul ,/AL ................................................................................. &.).1 tipul C9A, ................................................................................ &.).$ tipul "--L/A+ ........................................................................ &.& enumerare% interval ............................................................................... &.&.) tipul enumerare ........................................................................ &.&.& tipul interval ............................................................................. /:P,/2** 1.) -peratori% nivele de prioritate ............................................................. *+2T,UC;*U+* $.) atribuire% procedura% goto ..................................................................... $.).) instruc!iuni de atribuire ............................................................ $.).& instruc!iuni de apelare a unei proceduri ................................. $.).1 instructiunea goto .................................................................... $.& ,/A.% <,*T/ ....................................................................................... $.&.) ,/A.% ,/A.L+..................................................................... $.&.& <,*T/% <,*T/L+ ................................................................. $.1 *nstructiuni structurate .......................................................................... 0 0 )) )1 )0 )0 )0 )8 )8 &' &' &) &) &1 &1 &0 &0 &( &( &8 &8 &8 1' 1&

&

1 $

4 $.1.) $.1.& $.1.1 =

CUPRINS instruc!iunea compusa .............................................................. instruc!iunea condi!ionala ........................................................ instruc!iuni repetitive .............................................................. 11 11 1(

T*PU,* ./ .AT/ 4&5 $0 =.) set............................................................................................................. $0 =.& arra#......................................................................................................... =' =.&.) Tablouri cu o dimensiune ........................................................ =' =.&.& Tablouri cu mai multe dimensiuni .......................................... =) =.&.1 Constantele tablou multidimensionale ....................................... =) =.1 string........................................................................................................ =( =.$ record....................................................................................................... >1 =.$.) *nstructiunea <*T9 .................................................................. >= =.$.& Constante de tip ,/C-,. ..................................................... >> =.= file............................................................................................................ >0 =.=.) Conceptul de fisier ................................................................... >0 =.=.& 2crierea fisierelor ..................................................................... >( =.=.1 Citirea fisierelor ........................................................................ >8 =.=.$ C?teva proceduri pentru manipularea fisierelor .......................>8 =.=.= Functii standard asupra fisierelor ........................................... 0' =.=.> Fisiere de tip Text .................................................................... 0& P,-C/.U,* @* FU+CT** 00 >.) Proceduri ................................................................................................. 00 >.).) Aariabile locale si globale ....................................................... 08 >.).& .omeniul de valabilitate al obiectelor .................................. () >.).1 Parametri ................................................................................... (& >.& Functii .................................................................................................... (8 >.1 Parametri functii si parametri proceduri ............................................ 81 >.$ .efinitii recursive .................................................................................. 8( U+*TBuri Turbo Pascal )') 0.) 7,AP9....................................................................................................)'> 0.).) *nitializare mod grafic .............................................................. )'> 0.).& /rori grafice ................................................................................ )'( 0.).1 .efinire ferestre .......................................................................... )'( 0.).$ ,eprezentare puncte ................................................................... ))'

>

CUPRINS 0.).=

,eprezentare linii% culori% stiluri si grosimi% deplasarea 3n fereastra grafica......................................................................))) 0.).> ,eprezentare cerc% arc de cerc% elipsa% sector de cerc% model de umplere a suprafetelor 3nc6ise ....................))1 0.).0 ,eprezentare poligoane .............................................................. ))= 0.).( 2crierea grafica ........................................................................... ))0

( 2tatistica )&1 (.) Aaloare medie% varianta% abatere standard% fluctuatie ........................)&1 (.& Propagarea erorilor .................................................................................. )&= (.1 .istributii .................................................................................................. )&0 (.1.) .istributia normala .................................................................... )&( (.1.& .istributia Poisson ..................................................................... )1) (.$ Cetoda celor mai mici patrate pentru o dreapta ..................................)1$ (.= Ccmmp pentru o parabola si pentru un polinom de grad 1 . . )1(

>

CUPRINS

Capitolul 1 INTRODUCERE
Limbajul PA2CAL este un limbaj de programare de nivel 3nalt% proiectat de +iDlaus <irt6 de la Universitatea Te6nica din Euric6 3n )80) si numit astfel 3n cinstea lui "laise Pascal% celebrul matematician si filozof francez. TU,"- PA2CAL contine o serie de facilitati fata de limbajul PA2CALF mediu integrat% ordonare libera a sectiunilor in partea de declaratie a pro B gramului% etc. ).) /ditorul Turbo Pascal

/ditorul Turbo Pascal se activeaza tastand turbo si /+T/,. Pe ecran apare urm toarea figuraF F*L/ /.*T 2/A,C9 ,U+ C-CP*L/ ... program conversieG

F) 9/LP F& 2AA/ F1 -P/+ ALTBF8 C-CP*L/ F)' C/+U

Primul r?nd contine un meniu. /l este activat ap sand tasta F)' si deplasanduBne cu tastele s geti la sr?nga sau la dreapta pe una din compo nente. Ap sand tasta /+T/, se desc6ide o fereastra cu un submeniu 3n care 7

CAPITOLUL 1. INTRODUCERE

ne deplasam cu tastele sageti 3n sus sau 3n jos pana la comanda dorita. Ap sarea tastei /+T/, activeaza comanda selectata din submeniu. .e exemplu iesirea din editor se face tastand F)'% deplasanduBne pe F*L/% tastand /+T/,% deplasanduBne pe /:*T si tastand /+T/, 4 sau direct cu ALTB:5. *n r?ndul de jos sunt date actiunile unor taste 4 cel mai des folosite 5F F1 -P/+ desc6ide un fisier cu extensia .PA2 din directorul curent% F& 2AA/ salveaz programul 3n fisierul curent% ALTBF8 C-CP*L/ compileaz progra B mul% F)' C/+U activeaza r?ndul de sus. Alte taste de interes suntF ALTBF= determina iesirea temporar din editor pentru a vedea rezultatele unui calcul. ,evenirea 3n editorul TP se face tastand /+T/,. ALTBn determina trecerea 3n fereastra n 4) HI n HI 85 ALTBF1 determina 3nc6iderea ferestrei curente. CT,LBF8 determin lansarea 3n executie a programului din fereastra curenta. *ntre r?ndul de sus si cel de jos se afla ecranul ca o pagina alba de scris textul programului 3n Turbo Pascal. ,amanand 3n editorul TP putem edita mai multe programe cu F)'% F*L/% +/<G fiecare program este editat 3ntrBo pagina si paginile sunt numerotate de la ) la 8. *ncercati urmatoarele programe pentru a va familiariza cu editorul TP. ). Programul converteste un ung6i dat 3n radiani 3ntrBun ung6i 3n grade% minute% secunde /:).PA2 program conversieG const piI1.)$)=8G var gfr% mfr% radian F realG grade% minute% secunde F integerG begin Jriteln4K introdu ung6iul in radianiK5G readln4radian5G J6ile radian L &Mpi do radianFIradian B &MpiG gfrFIradianM)('.'NpiG gradeFItrunc4gfr5G mfrFI4gfrBgrade5M>'.'G minuteFItrunc4mfr5G secundeFItrunc44mfrBminute5M>'.'5G Jriteln4radian%K radianiIK%grade%K grade K%minute%K minute K% secunde%K secundeK5G readlnG end.

l.l. EDITORUL TURBO PASCAL


&. Fiind date )' valori x% programul calculeaza valoarea medie si abaterea lor standard. /:&.PA2 program valmedieG const nI)'G var x F arra#O)..nP of realG s% xm% sigx F realG i F integerG begin Jriteln4K introdu K% n% K valori xK5G for iFI) to n do read4xOiP5G sFI'G for iFI) to n do sFIsQxOiPG xmFIsNnG sFI'G for iFI) to n do sFIsQ4xmBxOiP5M4xmBxOiP5G sigxFIsRrt4sNn5G Spentru valori n mariT Jriteln4K xIK% xm% K QNBK% sigx5G end. 1. Programul calculeaz o radacin a ecuatiei x $ U 8x 1 U &x & Q )&'x U )1' I '% 3n intervalul Oa%bP citit% prin metoda 3njumat tirii intervalului.

/:1.PA2 program rezec$G label )'% &'% 1'G const epsI)./B'=G var a% b% c F realG function f4xFreal5FrealG begin fFIsRr4x5MsRr4x5B8MsRr4x5MxB&MsRr4x5Q)&'MxB)1'. endG "/7*+ &'F Jrite4K introdu limitele intrevalului% Oa% bP K5G readln4a% b5G if aIb t6en goto 1'G Spentru terminarea calculului trebuie introdus aIbT if f4a5Mf4b5 L ' t6en begin Jriteln4K intervalul nu contine o radacina K5G goto &'G endG )'F cFI4aQb5N&G if f4c5I' t6en begin Jriteln4K xI K%c5G goto &'G endG if f4a5Mf4c5 H ' t6en bFIc else aFIcG

10 if abs4bBa5 H eps t6en begin Jriteln4K xI K%4aQb5N&5G goto &'G end else goto )'G readlnG 1'F end.

CAPITOLUL 1. INTRODUCERE

$. Acest program simplifica o fractie% aNb% 4a si b sunt numere 3ntregi5 prin 3mpartirea cu cel mai mare divizor comun al numerelor a si b. Cel mai mare divizor comun al numerelor 3ntregi a si b se calculeaza folosind algoritmul lui /uclid. /:$.PA2 program fractieG var a% b% x% #% z F integerG procedure cmmdcG begin if x H # t6en begin zFIxG xFI#G #FIzG endG J6ile # HL ' do Simpartiri repetateT begin zFIx mod #G xFI#G #FIzG endG endG Send cmmdcT Sprogramul principalT "/7*+ Jriteln4K introdu a si b ca numere intregi% pozitiveK5G read4a%b5G Jriteln4K fractia nesimplificataF K% a % KNK% b5G xFIaG #FIbG cmmdcG S apelare procedura cmmdc T if x L ) t6en S simplificare T begin aFIa div xG bFIb div xG Jriteln4K fractia simplificataF K% a% KNK%b5G end else Jriteln4K fractia nu se poate simplificaK5G end.

).&. ).&

UNITI LEXICALE
Unit ti lexicale

11

Un program 3n TP poate fi considerat ca un text care specific actiunile executate de catre un procesor. Acest text este format din caractere grupate 3n unitati lexicaleG acestea constituie cele mai mici unit ti ale programului. Caracterele 4simboluri de baza5 folosite 3n TP suntF V literele alfabetului latinF A...E% a...z si B4subliniere5 V cifrele arabeF '...8 V simboluri specialeF Q BMN I HL ST OP. %F GWX blanc V perec6i de caractereF HI% LI% FI% ... *n Turbo Pascal% 3n scrierea programului% se pot folosi litere mici sau mariG compilatorul nu face distinctie 3ntre ele. Unitatile lexicale ale unui program 3n Turbo Pascal suntF V identificatori V numere V siruri de caractere V delimitatori V comentarii i5 identificatori si cuvinte rezervate *dentificatorii noteaza etic6ete% constante% tipuri de date% variabile% functii% proceduri% unitBuri% programe si campuri 3n 3nregistr ri. Un identificator poate avea orice lungime dar sunt semnificative doar primele >1 caractere 4primele ( 3n Pascal standard5. .esi putem alege oricum identificatorii% e bine ca ei sa fie alesi astfel 3ncat sa sugereze semnificata marimilor pe care le desemneazaG de exemplu t sau timp pentru timp% v sau viteza pentru viteza% l sau lungime pentru lungime. Un identificator trebuie sa 3nceap cu o litera sau cu caracterul Y 4subli B niere5 si nu poate contine blancuri. .upa primul caracter sunt permise litere% cifre si caractere Y .

12

CAPITOLUL l. INTRODUCERE

Anumiti identificatori% cunoscuti ca identificatori standard% sunt preB declarati. Astfel suntF A"2% A,CTA+% "--L/A+% C9A,% C9,% C-2% /-F% /-L+% /:P% FAL2/% 7/T% *+PUT% *+T/7/,% *+% CA:*+T% +/<% -..% -,.% -UTPUT% PACZ% PA7/% P,/.% PUT% ,/A.% ,/A.L+% ,/AL% ,/2/T% ,/<,*T/% ,-U+.% 2*+% 2[,% 2[,T% 2UCC% T/:T% T,U/% T,U+C% U+PACZ% <,*T/% <,*T/L+% etc. Programatorul poate redefini functia lor. Limbajul Turbo Pascal interzice 3nsa ca anumite cuvinte% numite cuvinte rezervate% sa fie folosite 3n alt context decat cel prevazut la definirea limba B jului. Cuvintele rezervate nu pot fi folosite ca identificatori. /le suntF A"2-LUT/% A+.% A,,A\% "/7*+% CA2/% C-+2T% .*A% .-% .-<+T-% /L2/% /+.% /:T/,+AL% F*L/% F-,% F-,<A,.% FU+CT*-+% 7-T-% *F% *CPL/C/+TAT*-+% *+% *+L*+/% *+B T/,FAC/% *+T/,,UPT% LA"/L% C-.% +*L% +-T% -F% -,% PACZ/.% P,-C/.U,/% P,-7,AC% ,/C-,.% ,/P/AT% 2/T% 29L% 29,% 2T,*+7% T9/+% T-% T\P/% U+*T% U+T*L% U2/2% AA,% <9*L/% <*T9% :-, ii5 numere Pentru numerele care sunt constante de tip 3ntreg sau real se foloseste notatia zecimala obisnuit . Constantele de tip 3ntreg trebuie sa fie 3n dome niul B&)$0$(1>$(...&)$0$(1=$0 4adic U& 1) ..& 1) U )5. Constantele zecimale pot fi scrise cu exponentG ele trebuie s fie 3n intervalul &.8 /B1(..).0/1(. - constanta 3ntreag 6exazecimala foloseste semnul X ca prefix. /a trebuie sa fie 3n domeniul X''''''''..XFFFFFFFF 4 $ octeti 5. iii5 siruri de caractere. Un sir de caractere este o secventa de zero 4sirul vid5 sau mai multe carac B tere scrisa pe o linie de program si inclusa 3ntre apostrofuri. .oua apostrofuri succesive 3ntrBun sir de caractere semnifica un singur caracter% apostroful% ca 3n exemplulF ]#ou^ll see].

).1.

STRUCTURA PROGRAMELOR N TURBO PASCAL 13

iv5 delimitatori. .elimitatorii servesc la separarea unitatilor lexicale. /i pot fiF unul sau mai multe blancuri% comentarii% semne de punctuatie% operatori% cuvinte re zervate. *ntre perec6i de identificatori sau numere trebuie sa existe cel putin un separator% spatiile libere 4blancuri5 nu pot apare 3n interiorul unitatilor lexicale cu exceptia sirurilor de caractere. v5 comentarii. Urm toarele constructii sunt comentarii si sunt ignorate de compilatorF S -rice text intre acolade este un comentariu T 4M-rice text ce contine M in dreapta si stanga parantezelor ronde este un comentariuM5 AT/+T*/ Un comentariu care 3ncepe cu semnul dolar4X5 imediat dup desc6iderea cu S sau cu 4M este o directiva de compilare. Astfel SX+BT este o directiva de compilare cu generare cod softJare floating point iar SX+QT este o directiva de compilare cu generare cod ('(0 floating point 4pentru variabile reale cu precizie 3nalta5. vi5 etic6ete.

- etic6et este o succesiune de cifre 3n domeniul '..8888 sau un identi B ficator. Eerourile din fata nu sunt semnificative. /tic6etele sunt folosite cu instructiuni 7-T-.

).1

2tructura programelor 3n Turbo Pascal

.iagrame de sintaxa. ,eprezentarea sintaxei prin diagrame de sintax utilizeaza ca graficaF V dreptung6iuri pentru desemnarea categoriilor sintactice V ovaluri sau cercuri pentru cuvintele c6eie sau simbolurile terminale Ca exemplu% structura unui program 3n Turbo Pascal se poate reprezenta

14 astfelF program antetYprogram

CAPITOLUL l. INTRODUCERE

bloc

Un program este compus dintrBun bloc precedat de un antet. antetBprogram _ P,-7,AC identificator Yprogram

Un bloc contine o parte declarativa care defineste proprietatile datelor folosite de program si o parte executabil care specifica actiunile asupra datelor conform algoritmului de calcul. bloc parteYdeclarativa U` parteYexecutabila

-biectele 4etic6ete% constante% tipuri de date% variabile% proceduri% functii5 declarate 3n partea declarativa a blocului sunt locale acestui bloc. .au mai jos diagrama de sintaxa a p rtii declarative a unui program 3n Pas cal. parteYdeclarativa declarareYetic6ete definireYconstante definireYtipuri

declarareYvariabile declarareYproceduriYsiYtFunctii

*n Turbo Pascal declaratiile sunt scrise 3n orice ordine 4spre deosebire de Pascal standard unde ordinea declara!ilor este stricta si precizat de dia grama de sintaxa de mai sus5.

).1.

STRUCTURA PROGRAMELOR N TURBO PASCAL 15

.iagramele de sintax pentru fiecare din sectiunile de mai sus suntF 16 declarareYetic6eteY esteF LA"/L CAPITOLUL l. INTRODUCERE etic6et a

/xempluF LA"/L )% =% unu% cinciG G S singurele etic6ete permise in program sunt )% =% unu% cinci T Fiecare etic6et trebuie sa marc6eze doar o singur instructiune. /xemplu de program simplu 3n Turbo PascalF /:=.PA2 definireYconstant

P,-7,AC cercG S antetul programului T S calculeaza aria cercului de diametru dat T /xempluF C-+2T nI)'G epsI'.)/B'=G Spartea declarativaT C-+2T pi I 1.)$)=(G S definirea constantei pi T AA, diam% arie F ,/ALG S declararea variabilelor definireYtip YYYYYY definireYtip T\P/ diam si arie de tip real T /xempluF S partea executabila T T\P/ varaI4iunie% iulie% august5G "/7*+ literaIKK..KEKG Jrite 4 K introdu diametrul K5G S scrie mesaj pe ecranul matricepIA,,A\O)..n% )..nP -F ,/ALG readln 4 diam 5G

de lucruT

S citire valoare diametrul cercului introdusa de la tastatura T ' S calcul arie T arie FI pi M 2[,4diam5N$.' declarareYvariabilaY declarareYvariabile AA, S afisare rezultat pe monitor Jriteln4K arieIK%arie5G S ramane in ecranul de lucru T readlnG

/xempluF S tasteaza /+T/, pentru a reveni in ecranul de editare T /+.. AA, i% j F *+T/7/,G sezon FvaraG lit F literaG a% b% c F,/ALG

.iagrama de sintaxa a partii executabile a unui program 3n Turbo Pascal

Capitolul 2
T*PU,* ./ .AT/ 4)5

&.)

Tipuri de date nestructurate predefiniteF *+T/7/,% ,/AL% C9A,% "--L/A+

*n memoria calculatorului% la nivel de cod masina% datele se reprezinta ca siruri de cifre binare. Trecerea de la datele de intrare la aceasta reprezentare binara si invers% trecerea de la reprezentarea interna a datelor la cea a datelor de iesire% nu ne intereseaza 3n detaliuG pentru calculator informatia asupra acestei transform ari e data de tipul de date. Un tip de date defineste o multime finita de valori si o multime finita de operatii asociate. Fiecarei date i se asociaza un tip unic. *n limbajul PA2CAL se pot defini tipuri de date structurate pe baza unor tipuri de date nestructurate si a unor tipuri definite de programator. /xista patru tipuri de date nestructurate reprezentate prin identificatorii de tip predefinitiF *+T/7/,% ,/AL% C9A,% "--L/A+. &.).) tipul *+T/7/,

Tipul *+T/7/, reprezinta o submultime a multimii numerelor 3ntregi de B pendent de implementare. *n Turbo Pascal exist = tipuri 3ntregi predefinite si anumeF

17

CAPITOLUL 2. TIPURI DE DATE (1) 2.l. INTEGER, REAL, CHAR, BOOLEAN )8 Tip .omeniu memorie (Bbit cu semn &.).&s6ortint tipul ,/AL B)&(..)&0 integer B1&0>(..1&0>0 )>Bbit cu semn Tipul ,/AL reprezinta o submultime finit a numerelor reale. *n Turbo Pascal longint B&)$0$(1>$(..&)$0$(1>$0 1&Bbit cu semn exist = tipuri reale predefinite dar 3n directiva de compilare SX+BT selectata b#te '..&== (Bbit f ra semn implicit% vom lucra doar cu variabile de tip real carora li se aloca > Jord '..>==1= )>Bbit f r semn octetiNvariabil % au domeniul de valori &.8 /B1(..).0/1( si ))B)& cifre semni B -peratiile aritmetice cu operanzi de tip 3ntreg folosesc precizia (Bbit% )>B bit ficative. sau 1&Bbit conform urmatoarelor reguliF V operatorii binari pentru tipul ,/AL suntF Q% B% M% N 18 V V tipul unei constante de tip 3ntreg este L+% predefinit tip 3ntreg cuC-2% domeniul cel functiile standard suntF A"2% 2[,% /:P% 2[,T% 2*+% A,CB mai mic care include valoarea constantei 3ntregi. TA+ V functiile de transfer suntF V pentru un operator binar% ambii operanzi sunt convertii la tipul lor comun T,U+C pentru conversia 3n 3ntreg cu trunc6ierea partii fractionare a 3nainte de operatie. Tipul comun este predefinit ca tipul 3ntreg cu cel mai argumentului si mic domeniu care include toate valorile posibile ale ambelor tipuri. ,-U+. pentru conversia 3n 3ntreg cu rotunjirea partii fractionare a -peratia este realizata folosind precizia tipului comun si tipul rezultatului argumentului este tipul comun. ,-U+.4x5 I T,U+C4xQ'.=5 pentru xLI' ,-U+.4x5 I T,U+C4xB'.=5 pentru xH' V expresia din partea dreapt a unei instructiuni de atribuire este eva luata de domeniul si tipul variabilei stanga.de ordonare deci nu V independent pe multimea valorilor reale nu este definit din o relatie pot fi folosite functiile 2UCC si P,/. V daca rezultatul operatiei 3ntre valori 3ntregi se situeaz 3n afara dome B &.).1 C9A, niuluitipul reprezentand tipul 3ntreg apare o eroare 3n faza de executie a programului. Tipul C9A, reprezint o multime finita si ordonata de caractere din setul A2C** 4 American 2tandard Code for *nformation *nterc6ange 5 extins. *ncercati V operatorii programulF binari pentru operanzi 3ntregi suntF Q% B% M% .*A% C-. V/:>.PA2 functii pentru operanzi 3ntregi suntF A"2% 2[, program caractere A2C**G var i% begin V jFintegerG operatorii relationali suntF I% HL% LI% HI% L% H for iFI) to > do Jrite4iF&%KFK%c6r4i5F&%KGK5G JritelnG for de iFI)$ to &1 do pentru fiecare V tipul 3ntreg defineste o succesiune ordonata valori deci Jrite4iF1%KFK%c6r4i5F&%KGK5G JritelnG readlnG for iFI&5to do beginun succesor si un valoare 4cu exceptia capetelor intervalului se&$ pot defini predecesor cu functiileF 2UCC4x5IxQ) P,/.4x5IxB)

20

CAPITOLUL 2.

TIPURI DE DATE (1)

for jFI)'MiQ$ to )'MiQ)1 do Jrite4jF1%KFK%c6r4j5F&%KGK5G JritelnG endG for iFI&=$ to &== do Jrite4iF1%KFK%c6r4i5F&%KGK5G JritelnGreadlnG end. V Fiecare caracter are o anumita reprezentare intern B valoarea carac B terului B si o anumita pozitie. .in punct de vedere extern o valoare tip caracter se reprezinta prin caracterul respectiv inclus 3ntre apos trofuri. Pozitia sau numarul de ordine al unui caracter se obtine cu functia -,.. Functia inversa este C9,. .e exemplu -,.4]A]5 I >=G C9,4>=5 I ]A] V Functiile standard P,/. si 2UCC se definesc astfelF P,/.4c5 I C9,4-,.4c5B)5 2UCC4c5 I C9,4-,.4c5Q)5 V Cei > operatori relationali se pot aplica pentru a compara operanzi de tip caracter obtinanduBse rezultate booleene. &.).$ tipul "--L/A+ Tipul "--L/A+ este un tip enumerare cu & elemente FAL2/ HT,U/ ceea ce permite aplicarea asupra variabilelor de acest tip a V operatorilor logiciF +-T% A+.% -, V operatorilor relationaliF I% HL% HI% LI% H% L V relatiilor de ordineF -,.4FAL2/5 I 'G -,.4T,U/5 I )G 2UCC4FAL2/5 I T,U/G P,/.4T,U/5 I FAL2/

&.&

Tipuri de date definite de programatorF enumerare% interval

Consider?nd ca tipurile standard nu 3i sunt suficiente pentru a descrie datele programului% programatorul poate saBsi defineasca propriile tipuri de date. .intre acestea prezint aici doar dou F tipul enumerare si tipul interval.

2.2. ENUMERARE, INTERVAL &.&.) tipul enumerare

21

Tipul enumerare este descris de enumerarea componentelor sub forma unei liste ordonate de valori pe care le poate lua o variabil a de tipul respectiv. /xempluF T\P/ culoareI4alb% rosu% galben% verde% albastru5G V -rdinea 3n care sunt enumerati identificatorii 3n lista defineste relatia 3ntre componente permit and aplicarea operatorilor relationali precum si a functiilor P,/.% 2UCC si -,. 4AtentieF num rul de ordine al primei componente este '5 -,.4alb5 I 'G -,.4rosu5 I ) P,/.4rosu5 I albG 2UCC4alb5 I rosu%... Tipul standard "--L/A+ este ec6ivalent cu tipul enumerare 4FAL2/% T,U/5 &.&.& tipul interval

Tipul interval este un subdomeniu de valori dintrBun tip primitiv 4 cu exceptia celui ,/AL5 sau al unui tip enumerare% denumit tip de baz a. V .efinitia unui interval 4 sau subdomeniu 5 specific valorile cea mai mic si cea mai mare 3n interval separate prin simbolul .. Ambele con B stante trebuie s fie de acelasi tip ordinal. /xempleF '. .88 subdomeniu al tipului de baza "\T/ B)&(..)&0 subdomeniu al tipului de baza 29-,T*+T ]C]..],] subdomeniu al tipului de baza C9A, rosu..albastru subdomeniu al tipului de baza enumerare definit mai sus V - variabil de tip interval are toate proprietatile variabilelor tipului de baza dar valoarea sa 3n timpul executiei programului trebuie sa fie 3n intervalul specificat.

V AtentieF o ambiguitate sintactica apare cand pentru capetele interval B ului se folosesc expresii constante ca 3n urmatorul exempluF C-+2T :I='G \I)'G T\P/ scalaI4xB#5M&..4xQ#5M&G

22

CAPITOLUL 2.

TIPURI DE DATE (1)

2intaxa Turbo Pascal spune ca daca o definitie de tip 3ncepe cu o paran B teza% tipul este enumerare. Ambiguitatea sintactic de mai sus se poate evita fie scriind T\P/ scalaI&M4xB#5..&M4xQ#5G fie% cand o astfel de variant nu este posibil % prin C-+2T xI='G # I )'G u I &M4xB#5G v I &M4xQ#5G T\P/ scala I u..vG Tipurile predefinite *+T/7/,% C9A, si "--L/A+ si cele definite% enu B merare si interval% definesc multimi finite si ordonate% motiv pentru care se mai numesc si tipuri scalare sau ordinale.

3.1. OPERATORI, NIVELE DE PRIORITATE 25 26 24 CAPITOLUL 3. EXPRESII CAPITOLUL 3. EXPRESII -P/,AT-,* valoare tip"--L//+* 2T,*+7G cand ele urmatoarele sunt comparate valoarea tip C9A, este La scrierea expresiilor se iau precautiiF tratat a ca o valoare tip 2T,*+7 de lungime ). V sa nu seoperatie omita operatorul 3nmultirii%tip M% rezultat 3ntre doi operanzi. operator tip operanzi not negatie boolean FU+CT** 2TA+.A,.F f boolean FA U U L " xMU# V sa nu apara doi operatori consecutivi e scrisa gresit and si logic boolean boolean xM4B#5 e scrisa corect V or functii matematiceF sau logic boolean boolean sin% cos% arctan% exp% sRrt% AI Sreal% integerT% " I SrealT abs% sRr%definite AI V sa fiesau sigur ca totiln% operanzii reprezentati prin variabile au valori xor exclusiv boolean boolean Sreal% integr T% " Iexpresiei. A anterior evaluarii /:P,/2** A,*TC/T*C* V-P/,AT-,* functii de 2T,*+7 transferF -P/,AT-,UL trunc% round% A I SrealT% " I SintegerT

Capitolul 3

operator operatie tip operanzi tip rezultat V functii scalareF Q concatenare c6ar sir ord% A reprezinta I Sinteger% c6ar% enumerare% intervalT% " I SintegerT - expresie operator operatie o formula ce defineste tip operanzi calculul tip unei rezultat valori prin aplicarea sir enumerare% sir pred% A I Sinteger% c6ar% interval T% " I real A c6r% unor operatori unor operanziF constante% variabile% functii% multimi. Qsucc% asupra adunare integer% real integer% A I Sinteger T% " expresii I /valuarea unei se face integer% de la stanga dreapta respectand niste B scSc6ar adereT real la integer% real reguli de prioritate ale operatorilor. *n Turbo Pascal exista $ M 3nmultire integer% real integer% real nivele de pri B -P/,AT-,* /:0.PA2 ./ ,/LAT*/ oritate siN anumeF 3mp rtire integer% real real program operatiiG div 3mp rtire 3ntreaga integer integer operator operatie tip operanzi tip rezultat var i%Ij% mod D% l% m% sl% restul sr F integerG n% o Fb#teG begin integercompatibile% integer egal 3mpartiriitipuri simple boolean set% string -peratori% nivele de prioritate i 1.) FI X)&1G j FIXffG -P/,AT-,* L-7*C* DFI i and jG Jriteln neegal 4i%K and K% j% K I K% D5G lFI i or jG Jriteln4i%K HL boolean -peratori or K% j%K i xor jG Jriteln4i% K xor K%Prioritate j% K I K% m5G H I K% l5G mFI mai mic boolean tipuri simple compatibile% string b nG % not mai 3nalta5 nFIX1$G oFI not Jriteln4K not K% n% Kprima4cea I K% o5G srFI X1$ s6r $G operator operatie tip operanzi tip rezultat M % N % div% mod% K%and% s6l% a doua X1$ I K% Jriteln4Ks6r sr5G slFI s6r X1$ s6l $G Jriteln4Ks6l L not X1$ Imai mare boolean negatie bit cu bit integer integer Q % B% or% xor a treia sl5G end. HI and mai mic sau egal boolean si logic integer integer I % HL% H% L% HI% LI% inbit cu bit a patra LI or mai mare sau egal boolean sau logic bit cu bit integer integer HI subset al tipuri set compatibile boolean /xista trei reguli de baza pentru prioritate 3ntrBo expresie si anumeF xor sau exclusiv bit cu bit integer integer LI s6l superset al boolean deplasare integer este legat V un operand aflat 3ntre stanga doi operatori integer de prioritati diferite de in s6r membru al dreapta boolean operand stangaForice tip integer ordinal%t deplasare integer operatorul de prioritate mai 3nalta. operand dreaptaFsetul a c arui baz a un operand aflat 3ntre doi not operatori de prioritati egale este legat de VV daca operandul operatorului este un tip 3ntreg% este de estede compatibil a cu trezultatul operatorul din staga sa. acelasi tip 3ntreg expresiile din paranteze evalueaz prioritar fiind tratate un un singur VV dac ambii operanzi ai se operatorilor or%s xor de ca cate tip V la compararea tipurilor simple e necesar caaand% tipurile fie sunt compatibileG operand. 3ntreg% tipul rezultatului tipul comun al celor operanzi totusi daca un operand esteeste de tip real% celalalt poatedoi fi de un tip 3ntreg V operatiile i s6l j i s6r j deplaseaza valoarea lui i ronde% la de stanga re B a V compararea sirurilor sesiface conform cu ordonarea setului V intrBo expresie se folosesc numai parantezele 45% si% pentru spectiv% la dreapta cu j biti. caractere A2C**. -ricare doua valori string pot fi comparate sc6imba prioritatea operatiilor. deoarece toate valorile string sunt compatibile. - valoare tip Tipul rezultatului este acelasi cu tipul lui i. C9A, este compatibila cu o 23

Capitolul 4 INSTRUCIUNI
.iagrama de sintaxa pentru o instructiune este urmatoareaF

$.)

*nstruc!iuni simple

.iagramele de sintax pentru instructiunile simple sunt urmatoareleF

27

28

CAPITOLUL 4. INSTRUCIUNI

$.).) instructiuni de atribuire Yc .iagrama de sintaxa pentru instructiunea de atribuire este urmatoareaF

/xempleF radian FI ).=G gfr FI radianM)('.'NpiG grade FI trunc4gfr5G 4 din /:).PA2 5 sau f FI sRr4x5M sRr4x5 B 8M sRr4x5M x B &M sRr4x5 Q )&' Mx B)1'.G 4 din /:1.PA2 5 *nstructiunea de atribuire 3nlocuieste valoarea curenta a unei variabile cu o valoare specificat ca o expresie. Aaloarea expresiei trebuie sa fie de acelasi tip sau de un tip compatibil cu tipul variabilei. $.).& instruc!iuni de apelare a unei proceduri

.iagrama de sintaxa a instructiunii procedura este urmatoareaF

/xemplu cmmdc din /:$.PA2 *nstructiunea procedura specific activarea unei proceduri notate prin identificatorul procedurii. .aca declararea procedurii contine o lista de parametrii formali atunci instructiunea procedura trebuie sa aibe aceeasi list de parametrii actuali.

4.2. READ, WRITE $.).1 instructiunea goto .iagrama de sintaxa a instructiunii goto este urmatoareaF etic6et /xempleF goto )'G goto &'G goto 1' din /:1.PA2 *nstructiunea goto transfera executia programului la instructiunea ce are ca prefix etic6eta referentiat 3n instructiunea goto. La folosirea instructiunii goto se urmareste regula ca etic6eta referita 3n instructiunea goto s fie obli gator 3n acelasi bloc ca si instructiunea goto. Cu alte cuvinte nu este posibil a face transfer 3n sau 3n afara unei proceduri sau functii.

$.&

*nstructiunile de transfer de dateF ,/A.% ,/A.L+% <,*T/% <,*T/L+

*ntrBun program 3n Turbo Pascal se considera predeclarate fisierul stan dard de intrare 4*+PUT% tastatura5 si fisierul standard de iesire 4-UTPUT% ecranul monitorului5.

$.&.)

,/A.% ,/A.L+

Transferul datelor din fisierul standard de intrare 3n memorie se face prin apelarea procedurii ,/A. conform diagramei de sintaxaF

Aariabilele din lista pot apartine doar tipurilor simple *+T/7/,% ,/AL% C9A,. Prin executia operatiei de intrare se preiau valori din fisierul standard de intrare si se atribuie variabilelor 3n ordinea data de lista de variabile.

30

CAPITOLUL 4. INSTRUCIUNI

.atele de intrare sunt considerate de program ca un flux continuuG o operatie de intrare preia o valoare de pe mediul de intrare din punctul imediat urmator ultimei valori preluate prin operatia de intrare precedenta. - form deosebita a operatiei de intrare are sintaxaF ,/A.L+ listaYvariabile si se realizeaza% dupa transferul de valori din fisierul de intrare la lista de variabile% o pozitionare la 3nceputul liniei urmatoare ignor?nduBse prin aceasta informatia ramasa 3n linia curent . Procedura ,/A.L+ f ra listaYdeYvariabile nu realizeaza un transfer de informatie ci doar pozitionarea la 3nceputul liniei urm toare. $.&.& <,*T/% <,*T/L+

-peratia de iesire se realizeaza prin apelarea procedurii <,*T/ conform diagramei de sintaxaF operatie simpl de iesire YYYYYYYYYYYYYYYY listaYiesireY

<,*T/

listaYiesire

expresie

2pre deosebire de lista de intrare 4 care este o lista de variabile5 3n lista de iesire pot apare expresii. Ca si la intrare datele de iesire sunt transferate 3n flux continuu. /le pot fi structurate pe linii folosind procedura <,*T/L+ cu diagrama de sintaxaF <,*T/L+ list desire Forma <,*T/L+ 4f ra listaYiesire 5 realizeaza doar trecerea la linia urmatoare 3n timp ce <,*T/L+4 lisajesire 5 scrie 3n linia curenta valorile

4.2. READ, WRITE expresiilor din list desire dup care face trecerea la linia urmatoare.

31

V o valoare boolean apare la iesire sub forma sirului de caractere T,U/ sau FAL2/ V o valoare 3ntreaga apare ca un sir de cifre precedat% eventual% de semnul B 4minus5 V o valoare reala apare la iesire 3n virgula mobil normalizat continand o mantisa si un exponent. -peratia de iesire permite specificarea numarului de pozitii 3n care se transfera valoarea de iesire. V 3n cazul 3n care valoarea de iesire este de tip *+T/7/,% C9A, sau "--L/A+ se poate specifica un singur parametru si anume lungimea total a zonei ca o expresie 3ntreag . *n acest caz valoarea respectiva va fi plasata 3n linia de iesire aliniata la dreapta 3n zona de lungime specificata. .aca lungimea zonei este mai mica decat lungimea valorii de tip rit% zona va fi extinsa pentru a afisa 3ntreaga valoare.

V cand valoarea de iesire este de tip ,/AL sunt necesari doi parametriF lungimea totala a zonei si lungimea fractiei. .ac sunt specificati am bii parametri% valoarea reala e scrisa far exponent% cu punct zecimal si semn 3n zona rezervata% aliniata la dreapta% avand partea fractionar rotunjit la numarul de cifre precizat ca lungime a fractiei. /xempluF valoarea din memorie xIB)=.(>$ va apare cu <,*T/4xF>F)5 ca B)=.8 .aca se specifica doar lungimea zonei% valoarea de tip ,/AL va fi afisat normalizat avand mantisa rotunjit sa 3ncapa 3n lungimea to tala a zonei minus >. /xempluF <,*T/4xF(5 afiseaza% pentru aceeasi valoare x de mai sus% B).> /Q') 4unde B este semnul numarului% ).> este mantisa iar ') puterea lui )' cu care trebuie 3nmultita mantisa pentru a avea valoarea din memorieG deci U).> M )' ) 5 .iagrama de sintaxa esteF

32

CAPITOLUL 4. INSTRUCIUNI

/:(.PA2 program rac6etaG var ore% min% sec% tzbor F '..maxintG begin Jrite4K dati ora lansarii rac6etei in oreNminuteNsecundeK5G readln4 ore% min% sec 5G Jriteln4Klansare K% oreF&% KNK%minF&%KNK%secF&5G Jrite4Kdati in secunde durata de zbor a rac6eteiK5G readln4tzbor5G Jriteln4Kdurata de zborF K%tzborF>%K secundeK5G sec FI sec Q tzborG min FI min Q sec div >'G sec FI sec mod >'G ore FI ore Q min div >'G min FI min mod >'G ore FI ore mod &$G S afisare moment sosire T Jriteln4K sosireF K%oreF&% KNK%minF&%KNK%secF&5G end. .atele% 3ntregi% cerute de acest program se introduc fie cate una pe un rand 4 valori numerice pentru ora /+T/,% minut /+T/,% secund /+T/,5 fie toate valorile numerice separate cu blanc pe un singur rand.

$.1

*nstructiuni structurate

*nstructiunile structurate sunt constructii formate din alte instructiuni execu B tate fie secvential 43n instructiunea compusa 5 fie conditional 43n instructiunile conditionale 5 fie iterativ 4 3n instructiunile repetitive 5.

34

CAPITOLUL 4. INSTRUCIUNI 4.3. INSTRUCIUNI STRUCTURATE

33

instructiunea compus V$.1.) daca instructiune) sauNsi instructiune& sunt formate din mai multe instructiuni% ele se reprezinta ca instructiuni compuse *nstructiunea compusa reprezinta o secventa de instructiuni considerat ca un Vtot 3n si general un /L2/ este asociat celsunt mai apropiat *F neasociat deja cu un executata 3n ordinea 3n cu care scrise instructiunile 3n secventa. alt /L2/. Ambiguitatea sintactica ce apare prin din constructii caF 3n parantezele de *nstructiunile din secventa sunt separate G si 3ncadrate if expresie) t6en if expresie& t6en instructiune) else instructiune& instructiune "/7*+ si /+. conform diagramei de sintax F se rezolv interpretand constructia astfelF instructiune compus e"/7*+ instructiune IEND if expresie) t6en begin -L if expresie& t6en instructiune) else instructiune& *nstructiunea compusa este tratata sintactic ca o singura instructiune. Partea end executabil a a unui program poate fi astfel considerata ca o singur a 4instructiune nu era necesara paranteza begin..end 5 sau% 3n cazul urmator neceB sitand compusa. pentru interpretarea corecta paranteza begin..end% F $.1.& instructiunea if expresie) t6en begin conditionala if expresie& t6en instructiune) - instructiune conditionala selecteaza pentru executie o singur end 4 sau nici o instructiune 5 din instructiunile sale componente. else instructiune&

instructiune

instructiunea *F /xemple de folosire a instructiuni *F ).se considera trei valori reale pozitive aHIbHIc. 2a se stabileasca dac .iagrama de sintaxa instructiunii urmatoareaF ele pot reprezenta laturile aunui triung6i *F si%este 3n caz afirmativ% sa se precizeze natura triung6iului 4 oarecare% dreptung6i% isoscel sau ec6ilateral5. Conditia ca numerele a% b% c% care satisfac conditia de mai sus% s formeze laturile unui triung6i este ca ! " # Q b5 /:8.PA2 P,-7,AC triung6iG 3n care expresie este o expresie boolean ce trebuie sa dea un rezul tat de tip Sstabileste natura triung6iului format cu trei numere date boolean. .aca rezultatul evaluarii expresiei este T,U/ se exe cuta ca laturi aHIbHIcT instructiune). .aca rezultatul evaluarii expresiei este FAL2/ si este prezent AA, a% b% c F ,/ALG /L2/ se executa instructiune&. .aca rezultatul evalu rii expre siei este FAL2/ si nu este prezent /L2/ atunci se trece la instructiunea urmatoare instructiunii *F. AtentieF delimitatorul G nu trebuie pus 3naintea lui /L2/ deoarece ar duce la terminarea deciziei fara a considera si cea de a doua alternativa.

4.3. INSTRUCIUNI STRUCTURATE ec6l% isos% drept F "--L/A+G "/7*+ <,*T/ 4K introdu 1 valori reale si pozitive% aHIbHIcK5G ,/A.L+4a% b% c5G <,*T/L+4aF>F&%K K% bF>F&%K K% cF>F&5G *F c H a Q b T9/+ begin <,*T/4 K numerele date formeaza un triung6i K5G ec6l FI 4aIb5 A+. 4aIc5G isos FI 4aIb5 -, 4aIc5 -, 4bIc5G drept FI cMc I aMa Q bMbG *F ec6l T9/+ <,*T/L+4K ec6ilateralK5 /L2/ *F isos T9/+ <,*T/L+4KisoscelK5 /L2/ *F drept T9/+ <,*T/L+ 4Kdreptung6iK5 /L2/ <,*T/L+ 4KoarecareK5 end /L2/ <,*T/L+4Knumerele date nu formeaza un triung6iK5G ,/A.L+G /+.. &.fiind citita o litera s se scrie daca ea este o vocala sau o consoana. /:)'.PA2 P,-7,AC vocalaYconsoanaG AA, cFC9A,G "/7*+ <,*T/4Kintrodu o literaK5G ,/A.L+4c5G *F4cIKaK5 -, 4cIKAK5 -, 4upcase4c5IK/K5 -, 4upcase4c5IK*K5 -, 4upcase4c5IK-K5 -, 4upcase4c5IKUK5 T9/+ <,*T/L+4c% K este o vocalaK5 /L2/ <,*T/L+4c% Keste o consoanaK5G /+..

35

1. fiind citit un sir de cifre reprezentand un num r 3ntreg si pozitiv% sa se scrie sirul de cifre ce reprezinta numarul r sturnat. .e exemplu% fiind introdus num rul =$)1% rezultatul va fi 1)$=. /:)).PA2

36

CAPITOLUL 4. INSTRUCIUNI

P,-7,AC calculYinversareYcifreG LA"/L )G AA, mF *+T/7/,G "/7*+ <,*T/4K introdu un numar intreg si pozitivK5G ,/A.L+4m5G )F<,*T/4m mod )' F&5G m FI m div )'G *F m HL ' T9/+ goto )G <,*T/L+G ,/A.L+G /+.. instructiunea CA2/ .iagrama de sintaxa a instructiunii CA2/ este urm toareaF

*nstructiune CA2/ permite alegerea si executia unei singure instructiuni dintre mai multe instructiuni componente 3n functie de valoarea unei expresii scalare 4 expresie din diagrama de sintaxa5 numita expresie selector. *nstructiunile componente sunt precedate de una sau mai multe constante distincte ce au valori de acelasi tip simplu 4 *+T/7/,% C9A,% "--L/A+% enumerare% interval 5 ca si tipul expresiei selector. -rdinea acestor ]etic6ete] este arbitrara .

4.3. INSTRUCIUNI STRUCTURATE

37

/xpresia selector% de tip ordinal% poate lua valori 3ntre B1&0>( si 1&0>0 si deci nu poate fi de tip L-+7*+T% <-,. sau 2T,*+7. *nstructiunea CA2/ execut instructiunea prefixata de o constant CA2/ egal a cu valoarea expresiei selector sau prefixat a de un domeniu CA2/ ce contine valoarea expresiei selector. .aca nu exista o astfel de constanta CA2/ si este prezenta parteaY/L2/ se executa instructiunea ce urmeaza pe /L2/. .aca nu exista parteaY/L2/ nu se execu niciBo instructiune. /xemple ). Fiind introdus de la tastatur un caracter sa se scrie daca este o litera mare% o liter a mic a% un blanc sau un alt caracter. /:)&.PA2 P,-7,AC testcase)G AA, c F C9A,G "/7*+ <,*T/4K introdu un caracter oarecareF K5G ,/A.L+4c5G CA2/ c -F KAK..KEK F <,*T/L+4K litera mareK5G KaK..KzK F <,*T/L+4K litera micaK5G KK F <,*T/L+4K blancK5G Saici poate apare G spre deosebire de instructiunea *F cu /L2/T /L2/ <,*T/L+4K alt caracter K5G /+.G Send CA2/T ,/A.L+G /+..

&. Fiind citita sub forma zi% luna% an 4 3n cifre 5 data zilei de azi sa se scrie data zilei de maine. /:)1.PA2 P,-7,AC maineG Scalculeaza data zilei de maine din data zilei de aziT AA, an F &'''..&)''G

38

CAPITOLUL 4. INSTRUCIUNI luna F )..)&G zi F )..1)G ultimaYzi F &8..1)G bisect F booleanG "/7*+ <,*T/4 K introdu in cifre zi% luna% an% data zilei de azi K5G ,/A.L+4zi% luna% an5G <,*T/L+4KaziF K% zi% KNK%luna%KNK%an5G Sbisect ia valoarea T,U/ daca anul este bisectT bisect FI 4an C-. $ I '5 A+. 4 an C-. )'' HL '5 -, 4an C-. $'' I '5G S gasirea ultimei zile din luna respectivaT CA2/ luna -F )% 1% =% 0% (% )'% )& F ultimaYzi FI 1)G $% >% 8% )) F ultimaYzi FI 1'G & F *F bisect T9/+ ultimaYzi FI &8 /L2/ ultimaYzi FI &(G /+.G Send CA2/T S gasirea datei zilei de maineT *F zi H ultimaYzi T9/+ zi FI zi Q ) /L2/ *F zi L ultimaYzi T9/+ <,*T/L+ 4Kdata incorectaK5 /L2/ begin zi FI )G Sluna urmatoareT *F luna I )& T9/+ begin luna FI )G Sanul urmatorT an FI an Q )G end /L2/ luna FI luna Q )G endG <,*T/L+4K maineF K% zi% KNK% luna%KNK% an5G /+..

$.1.1

instructiuni repetitive

*nstructiunea repetitiva specifica faptul ca anumite instructiuni urmeaza a se executa repetat. .aca numarul de repet ri e cunoscut dinainte este folosita instructiunea F-, altfel vor fi folosite instructiunile <9*L/ sau ,/P/AT.

4.3. INSTRUCIUNI STRUCTURATE instructiunea ,/P/AT...U+T*L .iagrama de sintaxa a instructiunii ,/P/AT este urmatoareaF ,/P/AT instructiune U+T*L expresie

in careF expresie controleaza repetarea executiei succesiunii de instructiuni din cadrul instructiunii ,/P/AT. /xpresie trebuie sa dea un rezultat de tip "--L/A+. *nstructiunile 3ntre cuvintele rezervate ale limbajului Pascal% ,/P/AT si U+T*L% se executa 3n succesiune repetat pana cand expresie evaluat da rezultatul T,U/. 2uccesiunea de instructiuni este executata cel putin o data deoarece ex presie este evaluata dup executia succesiunii de instructiuni. /xempleF ). secventa de program ce calculeaza cel mai mare divizor comun 3ntre doua numere 3ntregi% i si j% cu algoritmul lui /uclidF ,/P/AT D FI i C-. jG i FIjG j FIDG U+T*L jI'G &. secventa de program ce cere introducerea unui numar 3ntre ' si 8F ,/P/AT <,*T/4K introdu o valoare in intervalul '..8K5G ,/A.L+4i5G U+T*L 4i LI '5 A+. 4i HI 85G instructiunea <9*L/... .iagrama de sintax a instructiunii <9*L/ este urm toareaF

<9*L/

expresie

.-

instructiune

40

CAPITOLUL 4. INSTRUCIUNI

si contine o expresie care controleaz repetarea executiei unei instructiuni 4 care poate fi o instructiune compusa5. /xpresie trebuie sa fie de tip "--L/A+ si este evaluata 3nainte ca instructiune s fie executata. *nstructiune este executata repetat cat timp expresie da rezultatul T,U/G daca expresie da FAL2/ la 3nceput % instructiune nu se executa nici o data. /xempleF ). o secventa de program ce contorizeaza 3n variabila% nr% num rul de blancuri alaturate dintrBun sir introdus de la tastaturaG nr FI 'G ,/A.4c5G <9*L/ c I K K.begin nr FI nr Q )G ,/A.4c5G endG &. secventa de program ce calculeaza cel mai mare divizor comun al numerelor x si # prin algoritmul lui /uclid 4 /:$.PA25 <9*L/ # HL ' .- Simpartiri repetateT begin z FI x mod #G xFI#G #FIzG endG /xemple de programe ce folosesc si instructiunile repetitive ,/P/AT si <9*L/ ). Fiind citit un numar 3ntreg% n sa se stabileasca dac el reprezinta un palindrom adica dac el este egal cu numarul obtinut citinduBl pe n de la dreapta la stanga. .e exemplu nI)&) este un palindrom dar nI)&& nu este. AlgoritmF se repet compararea cifrelor cea mai semnificativ si cea mai putin semnificativa ale num rului fie p?na cand cele dou cifre difer fie pana c?nd sBa efectuat numarul suficient de comparatiiG 3n primul caz numarul nu este un palindrom. /:)$.PA2

P,-7,AC palindromG

4.3. INSTRUCIUNI STRUCTURATE

41

T\P/ cifraI'..8G AA, n% r% mare F *+T/7/,G p% R FcifraG "/7*+ <,*T/ 4K introdu un numar intreg% nI5G ,/A.L+4n5G <,*T/4n5G r FI nG mare FI )G <9*L/ r LI )' .begin mare FI mare M )'G S mare I )' la puterea 4mB)5% m I numar de cifre in nT r FI r .*A )'G endG *F mare I ) T9/+ <,*T/ 4K este K5 S orice numar dintrBo cifra este palindromT /L2/ begin ,/P/AT p FI n .*A mareG S separa cifra cea mai semnificativa T R FI n C-. )'G S separa cifra cea mai putin semnificativaT n FI n C-. mareG S suprima cifra cea mai semnificativa T n FI n .*A )'G S suprima cifra cea mai putin semnificativaT mare FI mare .*A )''G U+T*L 4p HL R5 -, 4 mare H )'5G *F p I R T9/+ <,*T/ 4K este K5 /L2/ <,*T/4K nu este K5G endG <,*T/L+4K palindrom K5G /+.. &. 2a se calculeze valoarea integraleiF

pentru a si b date stiind ca aceasta integrala reprezint limita comun a sirurilor Su n T si Sv n T generate de relatiile de recurent F
u

n 4u nB) Q v nB) 5N&% v n d u nB) M v nB)

pornind cuF

42 Calculul se opreste cand

CAPITOLUL 4. INSTRUCIUNI

eu n U v n e H e cu e I ).'/ U '= /:)=.PA2 P,-7,AC valYintegralaYsirG AA, a% b% u% v% u) F,/ALG i F *+T/7/,G C-+2T epsI)./B'=G "/7*+ <,*T/4K introdu a% bF K5G ,/A.L+4a% b5G u FI )NA"24a5G v FI )NA"24b5G ,/P/AT u) FIuG u FI 4uQv5 N &G v FI 2[,T4u) M v5G inc4i5G U+T*L A"24 u B v 5 H epsG <,*T/L+4K ulim IK% u% K vlimIK% v% K la K%i%K iteratiiK5G /+..

instructiunea F-,... .iagrama de sintaxa a instructiunii F-, este urmatoareaF

in careF variabilaYcontrol este un identificator de variabila iar valoareYinitial valoareYfinal sunt c?te o expresie.

si

V *nstructiunea F-, face ca instructiune 4 care poate fi o instructiune compus 5 sa se execute repetat cat timp variabilei de control i se atribuie o progresie de valori.

4.3. INSTRUCIUNI STRUCTURATE

43

V Aariabila de control trebuie sa fie de unul din tipurile ordinale si vaB loareYinitial si valoareYfinal trebuie sa fie de un tip compatibil din punct de vedere atributiv cu tipul variabilei de control. V Cand se intra 3ntrBo instructiune F-, valorile initiala si finala sunt determinate o data pentru tot restul executiei instructiunii F-,. *nstructiunea se execut o data pentru fiecare valoare a variabilei de control. V Aariabila de control 3ncepe 3ntotdeauna cu valoarea initiala. Cand instructiunea F-, foloseste T- valoarea variabilei de control creste cu unu la fiecare repetare. .aca valoarea initiala este mai mare dec ?t valoarea finala% instructiune nu se execut . Cand instructiunea F-, foloseste .-<+T-% valoarea variabilei de control scade cu unu la fiecare repetare. .aca valoarea initiala este mai mica decat valoarea final a% instructiune nu se execut a. +ot F este eroare daca instructiune sc6imba valoarea variabilei de control. /xemple de programe ce folosesc instructiunea F-, ). programul valYmedie din /:&.PA2 &. fiind citit un numar 3ntreg n s se calculeze suma s I ) Q )N&Q)N1Q... Q )Nn /:)>.PA2 P,-7,AC evalYsirG S evaluare suma )N) Q )N& Q...Q )Nn% n fiind cititT AA, i% n F *+T/7/,G s F ,/ALG "/7*+ <,*T/4K introdu n K5G ,/A.L+4 n 5G s FI 'G F-, iFI n .-<+T- ) .- s FI s Q )NiG <,*T/L+4K suma )N) Q )N& Q ... Q )NK%n%K I K%s5G /+.. Alte exemple ). Fiind dat un num r sub forma unui sir de caractere 6exazecimale% sa se g aseasc a reprezentarea sa zecimal a.

4.3. INSTRUCIUNI STRUCTURATE 44

45 CAPITOLUL 4. INSTRUCIUNI

i FI )G <,*T/4K introdu n H $'% nIK5G ,/A.L+4n5G /:)0.PA2 <9*L/ i HI n .- begin P,-7,AC j FIiG Spentru aconvY6exYzecG elimina numerele duble% de exemplu 1% $% = si $% 1% =T <9*L/ j HI n .S calculeaza valoarea zecimala a unui sir de caractere begin 6exazecimale% numar intregT z FI 2[,T4v5G v FI 2[,4i5 Q 2[,4j5G AA, cFC9A,G dF*+T/7/,G *F z L )''.' T9/+ jvalF'..)=G FI )'' /L2/ *F F,AC4z5 I ' . ' T9/+ "/7*+ <,*T/L+4iF=% jF=% KBBLK% zF=F'5G j FI j Q )G endG introdu numarul in forma 6exazecimala% litere mariK5G dFI'G i <,*T/L+4K FI i Q )G endG /+.. ,/A.4c5G <,*T/4c5G <9*L/ 4 c LI K'K5 A+. 4 c HI K8K 5 -, 4cLI KAK5 A+. 4c HI KFK5 .- begin 1. Un program care afiseaza divizorii unui numar si numarul acestora. .aca *F 4c LI K'K5 A+. 4 c HI K8K5 T9/+ val FI -,.4c5 B -,.4K'K5 numarul este prim se afiseaza un mesaj corespunz tor. /L2/ CA2/ c -F /:)8.PA2 P,-7,AC divizoriG AA, contor F "\T/G KAK val F I )' i% nr F <-,.G K"K val F I )) "/7*+ KCK val F I )& <,*T/L+G contor FI 'G K.K val F I )1 <,*T/4K introdu numarulF K5G ,/A.L+4nr5G K/K exclus val F) si I numarul )$ F-, i FI & T- nr .*A & .- S sBau insusiT KFK val F I )= *F nrNi I nr .*A i T9/+ S se verifica daca i divide nrT begin endG Send inc4contor5G <,*T/L+4i5G endG CA2/T d FI )> M d Q valG S contributia cifrei 6exa T ,/A.4c5G Sciteste urmatorul caracterT *F contor I ' T9/+ <,*T/L+ 4nr% K este numar primK5 /L2/ <,*T/L+4 nr% K<,*T/4c5G areK% contor% K divizoriK5G endG S end instructiunea compusa din <9*L/T /+.. <,*T/L+G S trece la linia urmatoare T <,*T/L+4d5 S scrie numarul in reprezentarea zecimalaT $. Un program care afiseaza numerele prime cuprinse 3ntre a si b precum si /+.. num arul lor. &. Un program care afiseaza toate numerele pitagorice pana la un numar dat% n% 4n H $'5 excluzand dublele. /:)(.PA2 P,-7,AC numereYpitagoriceG AA, i% j% n F "\T/G v% z F ,/ALF "/7*+

46 /:&'.PA2

CAPITOLUL 4. INSTRUCIUNI

P,-7,AC numereYprimeG LA"/L saltG C-+2T nr F <-,. I 'G AA, a% b% i% j F<-,.G "/7*+ <,*T/4K aIK5G ,/A.L+4a5G <,*T/4K bIK5G ,/A.L+4b5G <,*T/L+G <,*T/L+4K numere prime cuprinse intre K% a% Ksi K%b5G F-, i FI a Tb .- begin F-, j FI & T- i .*A & .*F iNj I i .*A j T9/+ goto saltG <,*T/L+4i5G inc4nr5G saltF endG <,*T/L+G <,*T/L+4K avem K% nr% K numere prime intre K% a% Ksi K%b5G /+.. =. Un program care scrie anotimpurile /:)1''.PA2 program exYcaseG t#pe anI4ian%feb%mar%apr%mai%iun%iul%aug%sep%oct%nov%dec5G var lunaFanG begin for lunaFIian to dec do case luna of ian%feb%decF Jriteln4Kiarna K5G mar%apr%maiF Jriteln4Kprimavara K5G iun%iul%augF Jriteln4Kvara K5G sep%oct%novF Jriteln4Ktoamna K5G endG readlnG end.

Capitolul 5 TIPURI DE DATE (2)

Tipuri structurate de date sunt F set% arra#% string% record% file Un tip structurat de date este caracterizat prin tipul 4tipurile5 compo nentelor si prin metoda structurarii sale.

=.)

Tipul set4multime5

Tipul set se defineste 3n raport cu un tip de baza. Tipul de baz trebuie sa fie un tip ordinalF C9A,% "\T/% "--L/A+% enumerare% interval. Cu toate c tipurile 3ntregi sunt ordinale nu este permis ca tip de baza decat "\T/. .anduB se un asemenea tip de baza% valorile posibile ale tipului set sunt formate din multimea tuturor submultimilor posibile ale tipului de baz % inclusiv multimea vida. +ot F daca tipul de baz are n valori% tipul set va avea & n valori cu restrictia nHI&==. +umarul maxim de elemente pentru o multime este &=> iar valorile ordinale asociate apartin domeniului '..&==. .e aici restrictia de a lua dintre tipurile 3ntregi doar tipul "\T/. .iagrama de sintaxa a definirii acestui tip este urmatoareaF

tipYmultimeY

2/T -F

tipYbaza

47

48 /xempleF T\P/ literaI4A% "% C5G litI 2/T -F literaG AA, m F litG

CAPITOLUL $. TIPURI DE DATE 2%

m va putea lua ca valori una din urm toarele multimiF O P% OAP% O"P% OCP% OA% "P% OA% CP% O"% CP% OA% "% CP T\P/ examenI4analiza% mecanica% fizica% c6imie5G expromI2/T -F examenG AA, stud)% stud& F expromG valorile variabilelor stud)% stud& pot fi multimea vida O P 4 niciBun examen pro B movat5% un examen promovat OanalizaP sau OmecanicaP sau OfizicaP sau Oc6imieP% doua examene promovate Oanaliza% mecanicaP sau orice alta combinatie de & materii din cele din tipul de baz a% trei examene promovate Oanaliza% mecanica% fizicaP sau orice alta combinatie de 1 materii sau $ examene promovate Oanaliza% mecanica% fizica% c6imieP. .e exempluF stud) FI Oanaliza% fizicaPG stud& FI O PG V o valoare tip multime poate fi specificata printrBun constructor 4ge B nerator5 de multime. Un constructor contine specificarea elementelor separate prin virgula si 3nc6ise 3ntre paranteze p trate. Un element poate fi o valoare precizata sau un interval de forma inf..sup% unde valorile inf si sup precizeaz valorile inferioara si superioara. Atat va loare c?t si limitele de interval pot fi expresii. .aca sup H inf nu se genereaza niciBun element. V operatiile cu valori tip set suntF

Q reuniune

o valoare de tip ordinal c este in a Q b daca c este in a sau in b

=.). 2/T B M diferenta o valoare de tip ordinal c este in a B b daca ea este in a si nu este in b intersectie o valoare de tip ordinal c este in a M b daca ea este in a si in b

$8

relatiile referitoare la multimiF dac a si b sunt operanzi de tip set atunci aIb a HI b a LI b x in a este adevarata numai daca a si b contin exact aceleasi elementeG altfel a HL b. este adevarata daca fiecare element al lui a este de asemeni un element al lui b este adevarata daca fiecare element al lui b este de asemeni un element al lui a este adevarata daca x apartine lui a. .aca x este de tipul ordinal t% a este de tip multime cu tipul de baza compatibil cu t

/xemplu Fiind citite elementele a dou multimi ml si m& 4 ce au tipul de baza "\T/ 5 sa se scrie elementele multimilor m)Qm&% m)Mm&% m)Bm&. /:&).PA2 P,-7,AC setopG T\P/ multI2/T -F "\T/G AA, m)% m&% int% un% dif F multG nrm)% nrm&% x% iF"\T/G "/7*+ <,*T/4K introdu numarul de elemente din multimea m)% nrm)IK5G ,/A.L+4nrm)5G m) FI O PG F-, i FI ) T- nrm) .- begin Jrite4K elementul tip "\T/ K%i%K esteFK5G readln4x5G m) FI m) Q OxPG endG <,*T/4K introdu numarul de elemente din multimea m&% nrm&IK5G ,/A.L+4nrm&5G m& FI O PG F-, i FI ) T- nrm& .-

='

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

begin Jrite4K elementul tip "\T/ K%i%K esteFK5G readln4x5G m& FI m& Q OxPG endG Scalculul elementelor multimilor intersectie% reuniune% diferentaT int FI m) M m&G un FI m) Q m&G dif FI m) B m&G Sscrierea rezultatelorT <,*T/4K -perandul stang esteF OK5G F-, i FI ' T- &== .- *F i in m) T9/+ Jrite4i%K%K5G <,*T/L+4KPK5G <,*T/4K -perandul din dreapta esteF OK5G F-, i FI ' T- &== .- *F i in m& T9/+ Jrite4i%K%K5G <,*T/L+4KPK5G <,*T/4K m) K%W&18% K m& I OK5G F-, i FI ' T- &== .- *F i in int T9/+ Jrite4i%K%K5G <,*T/L+4KPK5G <,*T/4K m) U m& I OK5G F-, i FI ' T- &== .- *F i in un T9/+ Jrite4i%K%K5G <,*T/L+4KPK5G <,*T/4K m) B m& I OK5G F-, i FI ' T- &== .- *F i in dif T9/+ Jrite4i%K%K5G <,*T/L+4KPK5G /+..

=.& =.&.)

Tipul arra# 4tablou5 Tablouri cu o dimensiune

Tipul tablou este o structura omogen format dintrBun num r fix de com B ponente de acelasi tip numit tip de baza. .iagrama de sintax a ce defineste acest tip esteF A,,A\ tipdndice tipYbaz

3n care tipYindice este un tip ordinal iar tipYbaz este orice tip.

=.&. A,,A\

=)

Tabloul este o structur a cu acces direct% timpul de acces la orice componenta a tabloului fiind acelasi. Fiecare component a a unui tablou este selectat a printrBun indice care ia valori 3ntrBo multime finit numit tipul indicelui. Tipuridndice valabile sunt toate tipurile ordinale cu exceptia lui L-+7*+T si a subdomeniilor de L-+7*+TG tipdndice nu poate fi un tip structurat. /xempleF T\P/ vectorIarra#O)..)'P of realG Sdefineste tipul structurat vector reprezentand multimea tablourilor ce au )' componente de tip realT AA, u% v F vectorG Tipul de baza poate fi orice tip nestructurat sau structurat. Accesarea unei componente a tabloului se face prin identificatorul tabloului si valoarea indicelui sau o expresie al c rui rezultat trebuie s se afle 3n domeniul definit de tipdndice.

=.&.&

Tablouri cu mai multe dimensiuni

Componentele unui tablou pot fi de orice tip% inclusiv de tip tablou. Astfel daca tipYbaza este un tip tablou se poate trata rezultatul ca un tablou de tablouri sau ca un tablou cu mai multe dimensiuni. Astfel A,,A\ O"--L/A+P -F A,,A\O)..)'P -F A,,A\O)..&P -F ,/ALG este interpretat de compilator ca A,,A\ O"--L/A+% )..)'% )..&P -F ,/ALG Accesarea unui element al tabloului multidimensional se face specificand valorile indicilor din parantezele drepte. Astfel AA, aFA,,A\O)..)'P -F A,,A\O)..&'P -F ,/ALG defineste o matrice cu )' linii si &' coloane. /lementul din linia i si coloana j se identifica prin aOiPOjP sau aOi% jP. =.&.1 Constantele tablou multidimensionale

Constantele tablou multidimensionale sunt definite prin includerea constan B telor fiecarei dimensiuni 3n seturi separate de paranteze% separate prin virgula. Constantele cele mai interne corespund dimensiunii din extrema dreapta.

=&

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

AstfelF T\P/ cubIarra#O'..)% '..)% '..)P of integerG C-+2T tabel F cub I 444'% )5%4&%155%44$% =5% 4>% 0555G da pentru tabel initializarea laF tabel O'% '% 'P I ' tabel O'% '% )P I ) tabel O'% )% 'P I & tabel O'% )% )P I 1 tabel O 1% '% 0P I $ tabel O 1% '% 1P I = tabel O 1% )% 0P I > tabel O 1% )% 1P I 0 sau C-+2T cifra F arra#O'..8P -F c6ar I O % ' % % % ) % % % & % % % 1 % % % $ % % % = % % % > % % % 0 % % % ( % % % 8]PG sau C-+2T cifra F arra#O'..8P -F c6arI]')&1$=>0(8]G da pentru cifra initializarea la cifra O'P I ]']G cifra O)P I ])]G cifra O&P I ]&]G... /xemple de programe ce folosesc tipul A,,A\F ). Fiind dat un sir de valori 3ntregi xOiP% iI)%n% n HI 1'% sa se g seasca xmin si xmax si pozitia lor 3n sir /:&&.PA2 program minmaxG const nI1'G var xFarra#O)..nP of integerG xmin% xmax% imin% imax% iFintegerG begin Jriteln4K introdu K% n% K valori intregi K5G for iFI) to n do read4xOiP5G xmaxFIxO)PG xminFIxO)PG iminFI)G imaxFI)G for iFI& to n do begin if xmax H xOiP t6en begin xmaxFIxOiPG imaxFIiG endG

=.&. A,,A\ if xminLxOiP t6en begin xminFIxOiPG iminFIiG endG endG Jriteln4K i xOiP K5G for iFI) to n do Jriteln4iF1%xOiPF)'5G Jriteln4K xminI K% xminF)'% K in pozitia K% iminF15G Jriteln4K xmaxI K% xmaxF)'% K in pozitia K% imaxF15G readlnG end.

=1

&. Fiind dat un sir de valori 3ntregi xOiP% iI)%n% n HI )''% sa se ordoneze crescator sirul. Ca algoritm se foloseste compararea elementelor xOiP cu xOiQ)P 4 cu i mergand de la ) la nB)5 si trecerea pe locul cu indice superior a valorii mai mari. La sfarsitul unei parcurgeri a sirului 3n xOnP se va afla valoarea cea mai mare din sir. ,elu m compararea elementelor xOiP cu xOiQ)P cu i mergand de la ) la nB&. *n xOnB)P se va afla valoarea cea mai mare dintre valorile ramase (x[n U )P H xOnP5G continuam pan la compararea lui xO)P cu xO&P cu asezarea 3n xO&P a celei mari mari valori dintre xO)P si xO&P. Acum sirul va fi ordonat. /:&1.PA2 program ordonareG var xFarra#O)..)''P of integerG i% j% nFb#teG aFintegerG begin Jrite4K introdu numarul de elementeFK5G readln4n5G for iFI) to n do begin Jrite4K introdu elementul intreg xOK%iF1%K PIK5G readln4xOiP5G endG for jFInB) doJnto ) do Sasigura scaderea dimensiunii siruluiT for iFI) to j do if xOiPL xOiQ)P t6en begin aFIxOiPG xOiPFIxOiQ)PG xOiQ)PFIaG

=$

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

endG Jriteln4K sirul ordonat esteFK5G for iFI) to n do Jriteln4xOiPF=5G readlnG end. 1. Fiind data o matrice% s se scrie programul ce calculeaza puterea p a matricii 4 p este un numar natural5. /:&$.PA2 P,-7,AC matriceG S ridicarea unei matrice la o putere naturalaT C-+2T nI1G Sdimensiunea fixata pentru matriceT T\P/ matricepIA,,A\O)..n% )..nP of realG LA"/L )G AA, a% b% c F matricepG s F realG i% j% D F )..nG L% p% o F"\T/G "/7*+ ScitireNafisare matriceT for i FI ) to n do begin Jriteln4K introdu liniaK%iF&5G for j FI) to n do read4aOi% jP5G endG Jriteln4K matricea initiala esteFK5G for i FI) to n do begin for j FI ) to n do Jrite4aOi%jPF)'5G JritelnG endG )F Jrite4K introdu puterea K5G readln4p5G Sinitializare b cu matricea unitateT for i FI) to n do for j FI ) to n do if iHLj t6en bOi% jP FI' else bOi% jP FI)G Sinmultire repetataT

=.&. A,,A\

==

for L FI ) to p do begin for i FI) to n do for j FI ) to n do begin s FI 'G for D FI) to n do s FI s Q aOi%DP M bOD% jPG cOi% jP FI sG endG b FI cG endG S end inmultire repetataT Safisare rezultatT Jriteln4K matricea la puterea K%p%K esteFK5G for i FI ) to n do begin for j FI) to n do Jrite4bOi% jPF)'5G JritelnG Strecerea la randul urmatorT endG Jriteln4K doriti ridicarea matricii la alta puteref5G Jriteln4K introdu ) pentru da K5G readln4o5G if oI) t6en goto )G /+.. $. Fiind data o suma 3n lei sa se afiseze numarul minim de bancnote si monezi pentru ac6itarea ei. "ancnotele sunt de )''% ='% )'% ) lei iar monezile sunt de '.=' si '.)' lei. Pentru a pastra valori intregi cerute de instructiunea F-, din program introducem valorile inmultite cu )'''. /:&=.PA2 P,-7,AC retributieG Sexprima o suma cu numar minim de bancnote si moneziT T\P/ bancmonI4osutamii% cincizecimii% zecimii% omie% cincisute% osuta5G baniIarra#ObancmonP of longintG C-+2T valoriFbaniI4)'''''% =''''% )''''% )'''%=''%)''5G AA, retrib% totretrib F baniG v F bancmonG numesalFstringG suma% total F longintG

=>

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

nsal F )..)'''G S numar salariatiT i F )..)'''G numesalFstringG "/7*+ for vFIosutamii to osuta do totretribOvPFI'G SinitializareT total FI 'G JritelnG Jrite4K introdu numar de salariati% nsalIK5G readln4nsal5G for i FI ) to nsal do begin Jrite4K introdu nume salariatF K5G readln4nsal5G Jrite4K introdu suma de plata pentru salariatFK5G readln4suma5G total FI total Q sumaG for v FI cincisutemii to osuta do begin retribOvP FI suma .*A valoriOvPG suma FI suma C-. valoriOvPG Jrite4retribOvPF)'5G totretribOvP FI totretribOvP Q retribOvPG endG JritelnG endG JritelnG Jriteln4K totaluri K5G Jrite4totalF)'5G for v FI cincisutemii to osuta do Jrite4totretribOvPF)'5G /+..

=. Programul calculeaz numarul studentilor ce au promovat fiecare ex B amen dintrBo sesiune si pentru fiecare student cate examene a promovat. /:&>.PA2 P,-7,AC studentYexamenYpromovatG C-+2T nI= S numarul studentilor considerati aiciT T\P/ examenI4analiza% mecanica% molecula% programare5G expromI set of examenG AA, stud F A,,A\O)..nP of expromG nexprom F A,,A\O)..nP of "\T/G i% anal% mec% mol% prog F "\T/G

=.&. A,,A\
j

=0

examenG

"/7*+ Oanaliza% programarePG studO)P Omecanica% molecula% programarePG studO&P OPG studO1P Oanaliza% mecanica% molecula% programarePG studO$P Omolecula% programarePG studO=P Sinitializare contori la zeroT anal FI 'G mec FI 'G mol FI 'G prog FI'G S calculul numarului de studenti ce au promovat fiecare examenT for i FI ) to n do begin I anal Q )G if analiza in studOiP t6en anal I mec Q )G if mecanica in studOiP t6en mec I mol Q )G if molecula in studOiP t6en mol prog Q )G if programare in studOiP t6en prog endG din K% n% K studenti K5G Jriteln4K au promovat analiza F KanalF&5G Jriteln4K molF&5G au promovat fizica moleculeiF K Jriteln4K au promovat mecanicaF K%mecF&5G Jriteln4K au promovat Limbaje de programareF K%progF&5G Jriteln4K studenti K5G Jriteln4K for i FI for ) to n do nexpromOiP FI 'G i FI begin ) to n do for j if j FI analiza to programare do in studOiP t6en nexpromOiP FI nexpromOiP Q )G Jriteln4Kstudentul K% i% Ka promovat K% nexpromOiP% K examene K5G endG readlnG /+..

=(

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5 Tipul string 4sir de caractere5

=.1

Tipul string este specific limbajului Pascal. Aaloarea unei variabile de acest tip este format a dintrBun num ar de caractere. Tipurile string sunt tipuri structurate 3ntrBun mod asem nator cu tipul A,,A\ cu diferenta majora c numarul de caractere 3ntrBun sir poate varia dinamic 3ntre zero si limita superioar specificata 43ntre ) si &==5. .iagrama de sintaxa ce defineste acest tip este urmatoareaF 42T,*+75

3ntregd raYsemn este o constanta 3ntreag 3n domeniul )..&== si d lungimea maxima a sirului de caractere. .aca nu e specificat se ia &==. /xempleF

T\P/ nume I 2T,*+7O)$PG AA, s)% s& F numeG


sau direct AA, s)% s& F 2T,*+7O)$P Stip anonim T Aariabilele de tip 2T,*+7 ocupa 3n octeti lungimea maxim plus un octet 4primul5 ce contine lungimea curent a variabilei. Caracterele individuale 3ntrBun sir sunt indiciate de la ) la lungimea sirului. /xpresiile 2T,*+7 constau din constante siruri% variabile tip 2T,*+7% nume de functii si operatori -peratia de concatenare se realizeaza cu operatorul Q sau cu functia concat. .aca lungimea sirului rezultat depaseste &== apare o eroare la executie. Aplicarea operatorilor de relatie 4prioritate mai mica decat Q 5 se face caracter cu caracter de la stanga la dreapta conform valorilor A2C** asociate. .aca sirurile au lungimi diferite dar sunt egale pana la ultimul caracter din sirul mai scurt% atunci sirul mai scurt este considerat mai mic. 2irurile sunt egale numai daca lungimile si continutul sirurilor sunt identice.

=.1. 2T,*+7 - valoare tip C9A, este compatibila cu o valoare tip 2T,*+7 conB sideranduBse un string de lungime ). Asignarea sirurilorF age FI ]optsprezece]G +otaF daca prin asignare se depaseste lungimea maxima a variabilei de tip 2T,*+7% caracterele 3n exces sunt trunc6iate%

=8

Proceduri pentru siruriF ./L/T/ sintaxaF delete 42t% Pos% +um5 scopF sterge un substring de +um caractere 3ncepand cu pozitia Pos din sirul 2t 2t B variabila tip 2T,*+7 Pos% +um B expresii de tip 3ntreg B dac Pos L Lengt642t5 nu se sterge niciBun caracter B daca Pos Q +um L Lengt642t5 sunt sterse doar caracterele din sir B dac Pos L &== apare o eroare 3n timpul executiei exempluF delete4]abcde]%1%&5 da sirul ]abe] *+2/,T sintaxaF insert 4-bj% Target% Pos5 scopF 3nsereaz sirul -bj 3n sirul Target 3ncepand cu Pozitia Pos -bj% Target B variabile tip 2T,*+7 Pos B expresie tip 3ntreg B daca Pos L Lengt64Target5 atunci -bj este concatenat la Target B daca rezultatul L lungimea maxima a lui Target% caracterele 3n exces vor fi trunc6iate exempluF daca 2tI]abcdef] atunci insert4]xx]% 2t% 15 da pentru 2t valoarea ]abxxcdef] daca lungimea lui 2t permite. 2T, sintaxaF 2tr4value% 2t5 scopF converteste valoarea numerica value 3ntrBun sir si rezultatul este me B morat 3n 2t. value B variabila de tip 3ntreg sau real

>'

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

st B variabila tip 2T,*+7 exempluF 2tr4=.&=%st5 da stI]=.&=] AAL sintaxaF Aal42t% Aar% Code5 scopF converteste expresia de tip string 2t 3ntrBo valoare 3ntreag Nreal 3n functie de tipul lui Aar5 si o memoreaza 3n var. 2t B tip 2T,*+7 Aar B tip 3ntreg sau real Code B tip 3ntregG daca nu sunt detectate erori% code are valoarea zero altfel este pozitionat pe primul caracter ce produce eroarea si valoarea lui var este nedefinit a. exempluF Aal4])&.&=]%var% code5 da varI)&.&= si codeI' Funtii pentru siruriF Cop# sintaxaF cop# 4 2t% Pos% +um5 scopF da un subsir continand +um caractere din sirul 2t 3ncepand cu pozitia Pos. 2t B tip 2T,*+7 Pos% +um B tip 3ntreg B dac Pos L Lengt642t5 functia d un sir vid B daca Pos Q +um L Lengt642t5 functia da doar caracterele din sir B daca Pos este 3n afara domeniului )..&== functia d eroare 3n timpul executiei exempluF daca 2tI]abcdefg] atunci cop#42t%$%&5 da subsirul ]de] iar cop#42t% $% )'5 d subsirul ]defg] Lengt6 sintaxaF lengt642t5 scopF d lungimea real a lui 2t 2t B tip 2T,*+7 rezultat B tip 3ntreg exempluF lengt64]abcd]5I$ Pos sintaxaF Pos4obj% target5 scopF scaneaza sirul target pentru a gasi sirul obj 3n target obj% target B tip 2T,*+7

=.1. 2T,*+7 rezultatul este un 3ntreg si arata pozitia 3n target a primului caracter din objG dac obj nu e gasit% Pos da valoarea zero exempluF daca 2t este ]abcdefg] atunci Pos4]de]% 2t5 d valoarea $. /:&0.PA2 P,-7,AC sirG AA, s) F 2T,*+7O)'PG s& F 2T,*+7O&'PG l F *+T/7/,G "/7*+ s) FI KturboKG s& FI Ks) Q K pascalKG l FI lengt64s&5G Jriteln4s&5G Jriteln4K lungimea reala I K% l5G /+.. /:&(.PA2 P,-7,AC reversieYsirG AA, str F 2T,*+7G i F "\T/G "/7*+ Jrite4K introdu un sir de caractereFK5G readln4str5G Jriteln4K sirul inversat esteFK5G for i FI lengt64str5 doJnto ) do Jrite4strOiP5G readlnG /+.. /:)1)).PA2

>)

program testYstringG uses crtG var sFstringO))PG s)%s&%s=FstringO)'PG s1%s$FstringG v)%v&FstringG v1%codeFintegerG v$FrealG c)%c&FstringG begin clrscrG sFIKoptsprezeceKGs)FIsGs&FIs)Gs1FIsG s$FIsGs=FIs)G Jriteln4K var. stringO))P% sIK%sF))5G

>&

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

Jriteln4K var. stringO)'P% s)IK%s)F)'5G readlnG delete4s)%&%05G Jriteln4K delete4s)%&%05IK%s)F)'5G delete4s&%)&%05GJriteln4Kdelete4s&%)&%05IK%s&F)'5G JritelnG insert4KabcK%s1%&5GJriteln4K insert4KKabcKK%s1%&5IK%s1F)'5G insert4KabcK%s=%&5GJriteln4K insert4KKabcKK%s=%&5IK%s=F)'5G insert4KabcK%s$%)=5GJriteln4K insert4KKabcKK%s$%)=5IK%s$F)'5G JritelnG v1FI)$Gstr4v1%v)5G Jriteln4Kv1IK%v1F)'%KG str4v1%v)5IK%v)F)'5G v$FI&.)=Gstr4v$%v&5G Jriteln4Kv$IK%v$F)'F1%KG str4v$%v&5IK%v&F)'5G JritelnG val4v)%v1%code5GJriteln4KcodeIK%codeF15G Jriteln4K val4v)%v1%code5IK%v1F)'5G val4v&%v$%code5GJriteln4KcodeIK%codeF15G Jriteln4K val4v&%v$%code5IK%v$F)'F15G JritelnG v)FIK)&bcKGv&FIK&.)aKG val4v)%v1%code5GJriteln4KcodeIK%codeF15G Jriteln4K val4v)%v1%code5IK%v1F)'5G val4v&%v$%code5GJriteln4KcodeIK%codeF15G Jriteln4K val4v&%v$%code5IK%v$F)'F15G JritelnGreadlnG c)FIcop#4s%&%$5G Jriteln4Kcop#4s%&%$5IK%c)F)=5G c)FIcop#4s%lengt64s5Q&%$5G Jriteln4Kcop#4s%lengt64s5Q&%$5IK%c)F)=5G c)FIcop#4s%&%)(5G Jriteln4Kcop#4s%&%)(5IK%c)F)=5G JritelnG Jriteln4K pos4KKoptKK%s5IK%P-24KoptK%s5F)=5G Jriteln4K pos4KKoprKK%s5IK%P-24KoprK%s5F)=5G JritelnG Jriteln4Kconcat4KKeu am KK%s%KKaniKK5IK%concat4Keu am K%s%K aniK55G Jriteln4K KKeu am Q s Q aniIKK K%Keu am K Q s Q K aniK5G readlnG end.

=.$. ,/C-,. =.$ Tipul record43nregistrare5

>1

Tipul 3nregistrare este un tip compus format dintrBun numar de componente% numite campuri. 2pre deosebire de variabilele de tip A,,A\% campurile% elemente ale variabilelor de tip ,/C-,.% pot fi de tipuri diferite. Fiecare camp are un nume% identificatorul de camp. +umarul componentelor poate fi fix sau variabil. *n primul caz se spune ca avem o structura fix % 3n cel de al doilea caz avem o structura cu variante. .iagrama de sintaxa a definirii tipultui ,/C-,. este urmatoareaF

,/C-,.

listaYcampurilor

/+.

unde listaYcampurilor 3n structura fixa are diagrama de sintaxaF

,eferirea la o componenta din 3nregistrarea cu structura fixa se face conform urm toarei diagrame de sintaxaF variabilaYtipY3nregistrare UUM /xempleF T\P/ dataI,/C-,. an F )8''..&)''G Stip intervalT luna F 4ian%feb% mar% apr% mai% iun% iul% aug% sep% oct% nov%dec5G Stip enumerareT zi F )..1)G Stip intervalT endG AA, astazi F dataG Aariabila astazi este o variabila de tipul 3nregistrare% definit ca data% compo B nentele ei pot fi selectate astfelF astazi.an% astazi.luna% astazi.zi
/:&8.PA2

identificator Ycamp

>$

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

P,-7,AC exrecordG T\P/ dataI,/C-,. an F )8''..&)''G luna F 4ian% feb% mar% apr% mai% iun% iul% aug% sep% oct% nov% dec5G zi F )..1)G endG AA, astazi F dataG i% j F "\T/G "/7*+ astazi.an FI &''1G astazi.luna FI novG astazi.zi FI1G for i FI ' to )) do if -,.4astazi.luna5Ii t6en j FI i Q )G Jriteln4astazi.ziF&%KNK%jF&%KNK%astazi.anF$5G /+.. +otaF dac doua variabile de tip 3nregistrare sunt de acelasi tip 4ca 3n exem B plul AA, data)% data& F dataG5 atunci copierea unei 3nregistr ri 3n cealalta se poate face printrBo singura instructiune de atribuire 4 data) FI data&5. Alte exemple% folosite 3n grafica% suntF T\P/ vieJportt#peI,/C-,. x)% #)% x&% #& F integerG clip F booleanG /+.G T\P/ pointt#peI,/C-,. x% # F integerG /+.G Componentele unei 3nregistrari pot fi la r?ndul lor 3nregistr?ri 4tipuri *mbricate5 ca 3n exemplulF T\P/ dataI,/C-,. an F )8''..&)''G lunaF4ian% feb% mar% apr% mai% iun% iul% aug% sep% oct%

=.$. ,/C-,. nov% dec5G ziF)..1)G /+.G carteI,/C-,. titluFA,,A\O)..&'P autorFA,,A\O)..)=P dateautorFdataG /+.G

>=

of of

c6arG c6arG

.eclaratia de variabile AA, cFcarteG permite referirea la campurile vari B abilei de tip 3nregistrare% c% astfelF c.autorO1P reprezinta a 1Ba litera a numelui autorului c rtii c c.dateautor.zi reprezint ziua nasterii autorului cartii c. =.$.) *nstructiunea <*T9

*nstructiune <*T9 permite o referire prescurtat la campurile unei variabile de tip 3nregistrare. .iagrama de sintaxa a instructiunii este urm toareaF lista variabile 3nregistrare separate prin % *n cadrul unei instructiuni <*T9% la 3ntalnirea unui nume de variabila% prima data se testeaza daca variabila poate fi interpretat ca un nume de camp al unei 3nregistrari. .aca da% variabila va fi interpretat asa c6iar dac o variabila cu acelasi nume este de asemeni accesibila. *ata un exempluF T\P/ punctI,/C-,. x% # F integerG /+.G AA, xF punctG # F integerG <*T9 x .- begin de tip instructiune

>>

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5 x FI )'G # FI&=G endG

x 3ntre <*T9 si .- se refera la variabila de tip punct iar 3n instructiunea compus x si # reprezinta campurile x.x si x.# .ac a selectarea unei variabile de tip 3nregistrare necesit a efectuarea indicierii unei variabile de tip tablou atunci operatia este efectuata 3nainte de executarea instructiunii situate dup cuvantul c6eie .-. *ata un exempluF T\P/ punctI,/C-,. x%# F *ntegerG /+.G tabelIA,,A\O)..)'P of punctG AA, t F tabelG ... <*T9 tO=P .- begin x FI )G # FI &G endG este ec6ivalenta cu tO=P.x FI )G tO=P.# FI&G

=.$.&

Constante de tip ,/C-,.

.eclararea unei constante de tip 3nregistrare specifica identificatorul si val B oarea fiec rui camp% incluse 3n paranteze si separate prin G *ata un exempluF T\P/ punctI,/C-,. x% # F realG /+.G dataI,/C-,. ziF)..1)G lunaF)..)&G

=.=. F*L/ anF)8''..&)''G /+.G vectorIarra#O'..)P of punctG C-+2T origine F punct I 4xF'.'G #F'.'5G linieFvector I 44xFB1.)G #F).=5%4xF=.(G #F1.'55G aziFdataI4ziF1G lunaF))G anF&''15G

>0

Campurile trebuie sa fie specificate 3n aceeasi ordine 3n care ele apar 3n definitia tipului 3nregistrare.

=.=

Tipul file

*n paragraful $.& am vazut c exist doua fisiere standard predeclarateF fisierul standard de intrare 4tastatura5 si fisierul standard de iesire 4ecranul monitorului5. .aca vrem sa citim sau sa scriem date folosind un fisier de pe discul magnetic atunci trebuie sa definim o variabila de tip F*L/ pe care sa o punem 3n corespondenta cu fisierul dorit. =.=.) Conceptul de fisier

Fisierele constau dintrBo secventa de componente de acelasi tip. +umarul de componente 3ntrBun fisier 4dimensiunea fisierului5 nu este determinat prin definirea fisierului. Tipul unui fisier este definit de cuvantul rezervat F*L/ -F si urmat de tipul componentelor fisierului. Componentele unui fisier pot fi de orice tip exceptand tipul file. .iagrama de sintax este urmatoareaF
ti

ggs i er BBBBBBBBBBBg F*L/ -F ' y tip /xempleF T\P/ fIfile of b#teG gIfile of realG AA, a%bFfG cFgG

>(

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

Corespondenta 3ntre variabila tip fisier si numele fisierului se face apeland procedura A22*7+4FilAar% 2tr5 unde FilAar este numele variabilei tip fisier iar 2tr este numele fisierului. /xempleF A22*7+4f%Kdate.inK5G A22*7+4g%Kxdat.outK5G .upa asignarea numelui fisierului variabilei tip fisier 3n instructiunile ,/A. sau <,*T/ va interveni doar numele variabilei tip fisier.

=.=.&

2crierea fisierelor

Un fisier este pregatit pentru scriere prin apelarea procedurii standard ,/<,*T/4g5. 2crierea valorilor 3n fisier se face cu procedura <,*T/4g% x\, ...,x n ) unde 3n prima pozitie apare numele variabilei tip fisier iar valorile xi%...% x n trebuie sa fie de acelasi tip cu cel al componentelor fisierului g. /:1'.PA2 program testfile)G T\P/ fIF*L/ -F realG AA, aFfG xFarra#O)..)'%)..=P of realG i%jFb#teG "/7*+ assign4a%Ktestfile.datK5G reJrite4a5G for iFI ) to )' do for jFI ) to = do begin xOi%jPFI).MiMjG S ). transforma iMj intrBo valoare realaT Jrite4a%xOi%jP5G endG close4a5G /+..

=.=. F*L/ =.=.1 Citirea fisierelor

>8

Pregatirea unui fisier pentru citire se face apeland procedura ,/2/T4f5. Citirea datelor dintrBun fisier se face cu procedura standard ,/A.4f%a%b%c5 unde variabilele a%b%c trebuie sa fie de acelasi tip cu cel al componentelor fisierului f. /:1).PA2 program testfile&G T\P/ fIF*L/ -F realG AA, aFfG xFarra#O)..)'%)..=P of realG i%jFb#teG "/7*+ assign4a%Ktestfile.datK5G reset4a5G Sciteste datele din fisierul Ktestfile.datKT for iFI) to )' do for jFI) to = do read4a% xOi% jP5G S scrie datele citite pe ecran% o linie a matricii x pe un randT for i FI ) to )' do begin for j FI ) to = do Jrite4xOi%jPF>F)5G JritelnG endG close4a5G readlnG /+.. =.=.$ C?teva proceduri pentru manipularea fisierelor

2//Z 2intaxaF 2eeD4FilAar% n5 2eeD mut pointerul de fisier la a nBa componenta a fisierului asignat lui FilB Aar. n este o expresie de tip 3ntreg. Prima componenta a fisierului are nI'. /xtinderea fisierului asignat lui FilAar se poate face cu procedura 2//Z 3n care n are valoarea num rul de componente din fisier plus unu sau cu 2eeD4FilAar% File2ize4FilAar55

0'

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

CL-2/ 2intaxaF Close4FilAar5 Fisierul asignat lui FilAar este 3nc6is. Close este necesar si asupra fisierelor desc6ise pentru citire. =.=.= Functii standard asupra fiierelor

/of 2intaxaF /of4FilAar5 Functia 3ntoarce valoarea T,U/ dac pointerul de fisier este pozitionat la sfarsitul fisierului% peste ultima componenta a fisierului. Altfel 3ntoarce FAL2/. FilePos 2intaxaF FilePos4FilAar5 Functia 3ntoarce pozitia curenta a pointerului de fisier. Prima componenta are numa rul zero. File2ize 2intaxaF File2ize4FilAar5 Functia 3ntoarce num rul de 3nregistrari din fisier. /:1&.PA2 program testfile1G var f F file of b#teG nume F stringG i% j F b#teG "/7*+ Jrite4Kintrodu nume fisierF K5G readln4nume5G assign4f% nume5G reJrite4f5G for i FI ) to )= do begin j FI i M iG Jrite4f% i% j5G endG close4f5G reset4f5G J6ile not eof4f5 do begin read4f% i% j5G Jriteln4i F 1% j F$5G

=.=. F*L/ endG Jrite4Kfilesize4f5IK%filesize4f55G JritelnG close4f5G reset4f5G seeD4f% )'5G Spozitionare pointer la sfarsitul inregistrarii )'T Jriteln4Kfilepos4f5IK% filepos4f55G Sscrie pozitia pointerului in fisierT read4f% i% j5G Jriteln4i% KFK% j5G S scrie inregistrarile )) si )&T close4f5 /+.. /:&)'.PA2 program testYtruncateG var fFfile of *+T/7/,G i%jFintegerG "/7*+ assign4f%Ktest.intK5G reJrite4f5G for iFI) to > do Jrite4f%i5G Jriteln4K fisier inainte de trunc6iereK5G reset4f5G J6ile not eof4f5 do begin read4f%i5G Jriteln4i5G endG reset4f5G for iFI) to 1 do read4f%i5G Sciteste primele 1 inregistrariT truncate4f5G S sterge restul fisierului din pozitia curenta a pointerului de fisierT JritelnG Jriteln4K fisierul dupa trunc6iereK5G reset4f5G J6ile not eof4f5 do begin read4f%i5G Jriteln4i5G endG close4f5G erase4f5G Ssterge fisierul test.int din directorul curentT end.

0)

0&

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5 Fisiere de tip Text

=.=.>

Fisierele descrise mai sus pot fi scrise sau citite doar 3ntrBun program 3n Turbo Pascal nu cu un editor .-2. Fisierele de tip T/:T pot fi 3ns scrise sau citite si 3n .-2. Fisierele de tip T/:T sunt structurate 3n linii% fiecare linie se termina cu /ndB-fBLine 4/-L5 iar fisierul se termina cu /nfB-fBFile 4/-F5. Fisierele de tip T/:T sunt fisiere secventiale. -peratiile cu caractere se fac cu pro B cedurile ,/A. si <,*T/. Liniile din fisier sunt procesate cu procedurile ,/A.L+ si <,*T/L+. 2intaxa de declarare a unei variabile de tip fisier text esteF AA, fFT/:TG /:)1'>.PA2 program testYtextG var fFtextG sFarra#O)..&'P of stringG iFb#teG numeFstringO)=PG begin Jriteln4Kintrodu nume fisier outputK5G readln4nume5G assign4f%nume5GreJrite4f5G Jriteln4f%Ktextul de inceputK5G close4f5G append4f5GJriteln4f%Ktext adaugatK5GJriteln4f%Ktext &K5G close4f5G reset4f5G iFI'G J6ile not eof4f5 do begin iFIiQ)G readln4f%sOiP5G Jriteln4sOiP5G Sscrie pe ecran randurile din fisierT endG close4f5G Jriteln4KiIK%i5G Sscrie pe ecran numarul de randuri din fisierT readlnG end. /:11.PA2 program testfile$G const nI)'G var f F textG numeFstringG

=.=. F*L/ x% #% z% m F arra# O)..nP of realG xcm% #cm% zcm% mtot% sxm% s#m% szm% sm F realG "/7*+ Jrite4Kintrodu nume fisier cu x% #% z% m ale celor n puncte materialeK5 readln4nume5G assign4f%nume5G reset4f5G for iFI ) to n do readln4f% xOiP% #OiP% zOiP% mOiP5G close4f5G Sscrie pe ecran datele cititeT Jriteln4K i x # z m K5G for iFI ) to n do Jriteln4iF=%xOiPF)'F&%#OiPF)'F&%zOiPF)'F&%mOiPF)'F&5G sxm FI 'G s#m FI'G szm FI 'G sm FI 'G Sinitializare sumeT for i FI ) to n do begin sxm FI sxm Q xOiP M mOiPG s#m FI s#m Q #OiP M mOiPG szm FI szm Q zOiP M mOiPG sm FI sm Q mOiPG endG xcmFIsxmNsmG #cmFIs#mNsmG zcmFIszmNsmG mtotFIsmG Jriteln4Kcoordonatele centrului de masa suntF5G Jriteln4KxcmIK% xcm% K#cmIK% #cm% KzcmIK%zcm5G Jriteln4Kmasa totalaIK% mtot5G readlnG append4f5G Sdesc6ide fisierul si adauga la sfarsitul sauT Jriteln4f%KxcmIK% xcm% K #cmIK% #cm% K zcmIK% zcm5G Jriteln4f% K mtotIK% mtot5G close4f5G /+..

01

Urm atorul program citeste din fisierul text lista.in numarul de elevi dintrBo clasa% numarul de teste si elevii cu notele la teste. -rdoneaza alfabetic elevii pastrand informatia despre notele lor si face media 2crie pe ecran informatia citita din lista.in si scrie rezultatele in lista.out program ordstringG uses crtG label unuG var numeFarra#O)..1'P of stringO&'PG prenumeFarra#O)..1'P of stringO&'PG noteFarra#O)..1'%)..)'P of b#teG auxFstringO&'PG ivec6iFarra#O)..1'P of b#teG

0$

CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

mediaFarra#O)..1'P of realG i% j% D% m% n% iauxFb#teG sFrealG f%gFtextG begin clrscrG Sintroducerea datelorT assign4f%Klista.inK5G reset4f5G readln4f%n5G readln4f%m5G Jriteln4nF$%mF$5G for iFI) to n do begin readln4f%numeOiP%prenumeOiP5G for jFI) to m do read4f%noteOi%jP5G readln4f5G endG Sscrie datele introduseT Jriteln4Kdatele initiale suntFK5G for iFI) to n do begin Jriteln4numeOiP% prenumeOiP5G for jFI) to m do Jrite4noteOi%jPF=5G JritelnG endG Sordonare alfabetica crescatorT for iFI) to n do ivec6iOiPFIiG unuF DFI'G for iFI) to nB) do if numeOiPLnumeOiQ)P t6en begin auxFInumeOiPG iauxFIivec6iOiPG numeOiPFInumeOiQ)PG ivec6iOiPFIivec6iOiQ)PG numeOiQ)PFIauxG ivec6iOiQ)PFIiauxG DFIDQ)G end else if numeOiPInumeOiQ)P t6en if prenumeOiPLprenumeOiQ)P t6en begin auxFIprenumeOiPG iauxFIivec6iOiPG

=.=. F*L/ prenumeOiPFIprenumeOiQ)PG ivec6iOiPFIivec6iOiQ)PG prenumeOiQ)PFIauxG ivec6iOiQ)PFIiauxG DFIDQ)G endG if DHL' t6en goto unuG for iFI) to n do begin sFI'G for jFI) to m do sFIsQnoteOivec6iOiP%jPG mediaOiPFIsNmG endG assign4g%Klista.outK5G reJrite4g5G Jriteln4g%K elev note for iFI) to n do begin Jrite4g%numeOiPQprenumeOiPF$'5G for jFI) to m do Jrite4g%noteOivec6iOiP%jPF15G Jriteln4g%mediaOiPF>F&5G endG close4g5G Saltfel nu scrie ultimul rand in fisierhT readlnG end. Fisierul lista.in poate arata asaF )' = ionescu alexandra )' )' )' )' )' adam ion )' 8 )' ( 8 adam alexandru = > ( $ = andrei violeta ( ( 8 0 ( ionescu ioana )' 8 > 8 )' popescu mi6ai > 0 ( = ) constantinescu ana

0=

mediaK5G

0( 0>

CAP*T-LUL >. P,-C/.U,* @* FU+C;** CAP*T-LUL =. T*PU,* ./ .AT/ 4&5

Capitolul > P,-C/.U,* @* FU+CT**


o 'o &o o $ o (o 'o (o 'o
' >

corpYprocedur? )' ( 8 )' ( constantinescu ioan )' )' )' )' )' matei alexandru ( ( 0 ( 8 matei marin 8 >=)( V *n antetul procedurii scriem identificatorul procedurii si% daca Atunci lista.out va arata asaF exista% parametri formali. Procedura este apelata 3n cadrul programului prin numele ei urmat% daca exista% de parametri actuali.

V *n locul blocului poate sa apar declaratia F-,<A,.. 2e stie ca unaelev din regulile de bazanote ale limbajului media este ca locul de defini!ie al adam alexandru = > ( $ = = unui nume trebuie sa preceada textual .utiliz rile numelui respectiv. adam ion ) 8 ) ( 8 8 ,espectarea acestei reguli 3ntampina greut ti 3n unele cazuri. .e ' ' . andrei violeta permit ( ( 8 0 ( programelor ( Procedurile si functiile structurarea complexe% fiecare exemplu un program declara doua proceduri P si [ 3nsa P apeleaza . constantinescu ana ) ( 8 ) o sarcina ( 8 '' procedur sau functie realizand complet concreta 3n cadrul progra B procedura [ si [ apeleaza procedura . P. /ste clar ca 3n acest caz mului constantinescu 3n care apare. Fiecare ioan ' )declaratie ) ) ' ) de procedura ) sau functie% ce apare 3n oricare ar fi forma programului utilizarea numelui unei proceduri ' ' ' ' ' partea declarativ ionescu alexandra a unui program% ) ) ) are ) un) antet urmat de un bloc 4 ca 3n precede locul ei de definire. a rezolva aceasta problema sBa ' ' > ' Pentru ' ' activat /:1.PA2 si ionescu /:$.PA2 ioana 5. - ) procedura 8 8 este) ( printrBo instructiune de introdus directiva F-,<A,. prin care se pot separa fizic cele doua ' ' . procedura matei 4 cmmdc alexandrua din /:$.PA25G ( ( 0 o functie ( 8 ( este activat ca orice functie componente de baza ale declaratei unei proceduri sau functiiF antetul si . standard 4 f4a5matei sau f4b5 marin 3n /:1.PA25. 8 > = ) ( = corpul procedurii sau functiei. Aom aveaF popescu mi6ai > 0 ( = ) . = . P,-C/.U,/ [4x% #% z F *+T/7/,5G F-,<A,.G P,-C/.U,/ P4u% v% J F *+T/7/,5G >.) "/7*+ Proceduri [4)%&% 15 - declaratie de procedur asociaza un identificator cu un bloc de procedura. .iagrama de sintax a pentru cazurile simple% pe care le vom studia% este /+.G urm atoareaF P,-C/.U,/ [G S nu se repet declararea parametrilor lui [T declaratieYdeYprocedura. antetYprocedur corpYprocedura "/7*+ in careF P4=% 0% 85G P,-C/.U,/ iden tiigpiu cedur o )- )

antet /+.G

B listaYparam. B

00

>.). P,-C/.U,* >.).) Aariabile locale si globale

08

2 amintim programul fractie din /:$.PA2 ce utiliza procedura de calcul al celui mai mare divizor comun 4cmmdc5 pentru a simplifica o fractie rationala exprimata ca un raport de doua numere 3ntregi% aNb. .eoarece algoritmul lui /uclid% folosit pentru gasirea celui mai mare di B vizor comun al numerelor a si b% modifica numerele a si b% ele vor fi copiate 3n x si #. /tapele programului vor fiF V citirea si afisarea numar torului a si numitorului b V copierea lui a 3n x si a lui b 3n # V algoritmul lui /uclid cere x > y V calculul cmmdc 3ntre x si # V daca cmmdc L ) atunci a si b se 3mpart la el V afisarea numar torului si numitorului simplificate /:$P.PA2 P,-7,AC fractieG Ssimplificare fractie aNb prin impartire cu cmmdcT AA, a% b% x% #% z F *+T/7/,G P,-C/.U,/ cmmdcG Scalcul cmmdc cu algoritmul lui /uclidT begin if x H # t6en S asigurare x L # T begin zFIxG xFI#G #FIzG endG J6ile #HL' do Simpartiri repetateT begin zFIx mod #G xFI#G #FIzG endG endG Send procedura cmmdcT "/7*+ Sprogramul principalT Jriteln4Kintrodu numaratorul si numitorul ca numere intregi pozitiveK5G read4a%b5G Jriteln4Kfractie nesimplificataF K%a%KNK%b5G

('

CAP*T-LUL >. P,-C/.U,* @* FU+C;** xFIaG #FIbG cmmdcG Sapelare procedura cmmdcT if xL) t6en Ssimplificare fractieT begin aFIa div xG bFIb div xG Jriteln4Kfractie simplificataF K%a%KNK%b5G end else Jriteln4Kfractia nu se poate simplificaK5G /+..

*n exemplul dat mai sus declaratia de procedura nu contine partea de declaratie de aceea toate variabilele% declarate 3n programul principal% sunt variabile globale. /xista posibilitatea de a scrie o parte de declaratie 3n interiorul procedurii la fel ca 3n orice program 3n Turbo Pascal. *dentificatorii introdusi 3n partea de declaratie a procedurii sunt locali% ei pot fi referiti si cunoscuti numai 3n blocul 3n care au fost declarati% acesta reprezentand domeniul acestor identificatori. *ata cum arata programul de mai sus cu variabile locale. /:$2.PA2 P,-7,AC fractie&G AA, a% b% c F integerG Svariabile globaleT P,-C/.U,/ cmmdcG AA, x% #% z F integerG Svariabile localeT begin xFIaG #FIbG if x H # t6en begin zFIxG xFI#G #FIzG endG J6ile # HL ' do begin zFI x mod #G xFI#G #FIzG endG cFIxG S cmmdc e transmis intrBo variabila globalaT endG Send cmmdcT "/7*+ Sprogramul principalT Jriteln4Kintrodu numaratorul si numitorul ca numere intregi pozitiveK5G read4a%b5G Jriteln4Kfractie nesimplificataF K%a%KNK%b5G

>.). P,-C/.U,* cmmdcG Sapelare procedura cmmdcT if cL) t6en Ssimplificare fractieT begin aFIa div cG bFIb div cG Jriteln4Kfractie simplificataF K%a%KNK%b5G end else Jriteln4Kfractia nu se poate simplificaK5G /+.. >.).& .omeniul de valabilitate al obiectelor

()

Fiecare corp de procedura poate contine 3n partea sa de declaratie o declarare de procedura sau functie 4 numita procedura sau functie inclus sau locala5. Prin obiecte 3ntelegem constante% tipuri% variabile% proceduri% functii identificate prin identificatorul asociat. /xista cateva reguli ce determina domeniul de valabilitate si durata de viata ale unui identificator. /le sunt urmatoareleF ). domeniul unui identificator 3l constituie blocul 3n care a fost declarat si toate blocurile incluse 3n el &. daca un identificator a% declarat 3ntrBun bloc x% este redeclarat 3ntrBun bloc # atunci blocul # si blocurile incluse lui se exclud din domeniul de valabilitate al identificatorului a declarat 3n x /:1$.PA2 program testYvarG var x% #FrealG procedure cititYscrisG var x% uFrealG begin Jrite4K introdu x si u% numere realeF K5G readln4x% u5G Jriteln4K xIK%xF=F)G KuIK%uF=F)5G endG begin Jrite4K introdu x si #% numere realeF K5G readln4x% #5G cititYscrisG Jriteln4KxIK%xF=F)% K#IK%#F=F)5G end.

(&

CAP*T-LUL >. P,-C/.U,* @* FU+C;** .aca am introdus xI).=% #I&.= si apoi xI)'.= si uI&'.= pe ecran va apareF xI )'.= uI &'.= valorile citite si scrise in procedura cititYscris xI ).= #I &.= valorile citite inainte de apelarea procedurii si scrise dupa apelarea ei 1. identificatorii de proceduri se supun acelorasi reguli de domeniu ca si ceilalti identificatori% deci o procedura poate fi folosita doar 3n blocul 3n care ea a fost declarata si 3n blocurile incluse 3n acesta $. o procedura se poate referi la ea 3nsasi 4apelare recursiva5

Aceste reguli determina si durata de viata a identificatorilorG o variabil declarat ca local 3ntrBo procedura exista numai 3n timpul executiei proce B durii fiind creata la activarea procedurii prin alocarea de memorie si distrus la iesirea din procedura prin eliberarea memoriei ocupate. >.).1 Parametri formali permite apelarea acelorasi proceduri 3n diferite ale variabilelor. reprezinta un obiect local al procedurii. Lista diagrama de sintax urmatoareF

Folosirea parametrilor puncte diferite cu valori Un parametru formal parametrilor formali are

>.). P,-C/.U,* /xista trei feluri de parametri 4valoare% variabile% variabile far tip5 caracterizag astfelF

(1

). un grup de parametri separat prin virgul % f ra a fi precedati de cuvantul c6eie AA, dar urmati de identificatorul de tip este o lista de parametri valoare &. un grup de parametri separat prin virgula% precedati de cuvantul c6eie AA, si urmat de identificatorul de tip este o lista de parametri vari B abile 1. un grup de parametri separat prin virgula% precedati de cuvantul c6eie AA, dar neurmat de identificatorul de tip este o lista de parametri variabile f ar a tip Actiunea lor este urm toareaF ). Un parametru formal valoare actioneaza ca o variabila locala pentru procedura cu diferenta ca la activarea procedurii 3si ia valoarea initiala din parametrul actual corespunzator. .in aceasta cauza se mai numeste si parametru de intrare. Codific rile f cute asupra parametrului formal valoare 3n procedura nu afecteaz valoarea parametrului actual corespunzator. Parametrul actual trebuie sa fie de un tip compatibil atributiv cu tipul parametrului formal valoare. &. Un parametru formal variabil este folosit cand valoarea trebuie tran B sferat de la procedura la programul apelant. Parametrul actual core B spunzator 3n instructiunea procedura 4 care activeaza procedura 5 tre B buie sa fie o referire de variabila. -rice sc6imbari ale parametrului formal variabil sunt reflectate 3n parametrul actual. Tipul parametru B lui actual trebuie sa fie identic cu tipul parametrului formal variabila 4aceast restrictie se poate evita prin folosirea unor parametri formali far tip5. 1. Cand un parametru formal este o variabila f ra tip% parametrul actual corespunzator poate fi orice referire de variabila indiferent de tipul ei. 2a rescriem programul fractie& cu procedura cmmdc cu parametri valoare si apoi cu parametri valoare si variabile 4/:1=.PA2 si% respectiv% /:1>.PA25.

($

CAP*T-LUL >. P,-C/.U,* @* FU+C;**

/:$T.PA2 P,-7,AC fractie1G AA, a% b% c F integerG P,-C/.U,/ cmmdc4x% #Finteger5GSx si # sunt parametrii valoareT AA, zFintegerG begin if x H # t6en begin zFIxG xFI#G #FIzG endG J6ile # H L ' do begin zFIx mod #G xFI#G #FIzG endG cFIxG S cmmdc e transmis intrBo variabila globala cT endG S end cmmdcT "/7*+ Sprogram principalT Jriteln4K introdu a si b% numere intregi% pozitiveK5G readln4a%b5G Jriteln4Kfractie nesimplificataF K%a%KNK%b5G cmmdc4a%b5G if c L ) t6en begin aFI a div cG bFIb div cG Jriteln4Kfractia simplificataF K%a%KNK%b5G end else Jriteln4KcmmdcIK%c5G readlnG /+.. /:$[.PA2 P,-7,AC fractie1primG AA, x% #% c F integerG P,-C/.U,/ cmmdc4x% #Finteger5GSx si # sunt parametrii valoareT AA, zFintegerG begin if x H # t6en begin zFIxG xFI#G #FIzG endG

>.). P,-C/.U,* J6ile # H L ' do begin zFIx mod #G xFI#G #FIzG endG cFIxG S cmmdc e transmis intrBo variabila globala cT endG S end cmmdcT "/7*+ Sprogram principalT Jriteln4K introdu x si #% numere intregi% pozitiveK5G readln4x%#5G Jriteln4Kfractie nesimplificataF K%x%KNK%#5G cmmdc4x%#5G Sx si # nu sunt modificati in proceduraT if c L ) t6en begin xFI x div cG #FI# div cG Jriteln4Kfractia simplificataF K%x%KNK%#5G end else Jriteln4KcmmdcIK%c5G readlnG /+.. /:$C.PA2 P,-7,AC fractie$G AA, a% b% c FintegerG P,-C/.U,/ cmmdc4x% # FintegerG AA, JFinteger5G AA, zFintegerG P,-C/.U,/ sJapG begin zFIxG xFI#G #FIzG endG Send sJapT begin Sbegin cmmdcT if x H # t6en sJapG J6ile # H L ' do begin zFIx mod #G xFI#G #FIzG endG JFIx endG Send cmmdcT "/7*+ Sprogram principalT

(=

(>

CAP*T-LU L &. PROCEDURI 'I (UNCII

Jrite4K introdu a% b numere intregi% pozitiveK5G readln4a% b5G Jriteln4 Kfractia nesimplificataF K%a%KNK%b5G cmmdc4a% b% c5G if c L ) t6en begin aFI a div cG bFIb div cG Jriteln4Kfractie simplificataFK% a% KNK%b5G end else Jriteln4KcmmdcIK%c5G readlnG /+.. .ar adeva rata folosire a unei proceduri cu parametri valoare 4apelarea ei 3n diverse locuri din program cu valori de intrare diferite5 este ilustrata de /:10.PA2. Programul converteste o suma 43ntre ' si 8885 din cifre 3n cuvinte. /:1=.PA2 P,-7,AC leiYcuvinteG T\P/ sumaI'..888G AA, leiFsumaG P,-C/.U,/ convincuv4xFsuma5G Sconverteste un numar L' si H888 in cuvinteT T\P/ cifraI'..8G AA, sute% zeci% unitateFcifraG rangF4unu% zece% suta5G P,-C/.U,/ unitati4cFcifra5GSscrie in cuvinte o singura cifraT begin case c of 'F G )F if rangIsuta t6en Jrite4KoK5 else Jrite4KunK5G &F if rangIunu t6en Jrite 4KdoiK5 else Jrite4KdouaK5G 1F Jrite4KtreiK5G $F Jrite4KpatruK5G =F Jrite4KcinciK5G >F Jrite4KsaseK5G 0F Jrite4KsapteK5G (F Jrite4KoptK5G 8F Jrite4KnouaK5G endG Send caseT endG Send unitatiT

>.). P,-C/.U,*

(0

begin Sbegin convincuvT Sscrie numarul complet in cuvinteT Ssepararea cifrelor numaruluiT suteFI x div )''G zeciFI x mod )'' div )'G unitateFI x mod )'G Sprelucrarea cifrei sutelorT if sute L ' t6en begin rangFIsutaG unitati4sute5G if sute I ) t6en Jrite4K suta K5 else Jrite4K sute K5G endG Sprelucrarea cifrei zecilorT if zeci L ' t6en begin rangFIzeceG if zeci H L ) t6en begin unitati4zeci5G Jrite4K zeci K5G endG endG Sprelucrarea cifrei unitatilorT if unitate L ' t6en begin rangFIunuG if zeci L ) t6en Jrite4K si K5G unitati4unitate5G if zeci B ) t6en Jrite4Ksprezece K5G end else if zeciI) t6en Jrite4K zece K5G end Send convincuvT "/7*+ Sprogramul principalT Jrite4K introdu suma in cifre H 888FK5G readln4lei5G convincuv4lei5G Jriteln4K leiK5G readlnG /+.. Alt exemplu de proceduri cu parametri valoare sunt cele din programul ce realizeaza trecerea unui numar real din baza )' intrBo alta baz data de utilizator. /:1>.PA2 program bazaG

((

CAP*T-LUL >. P,-C/.U,* @* FU+C;** label )% &% 1G const nI)''G t#pe sirIarra#O)..nP of c6arG var nrFrealG baFb#teG taFc6arG procedure intgr4nrFrealG baFinteger5G var de% re% im% i% mFintegerG xFsirG aFc6arG begin i FI )G m FI 'G de FI trunc4nr5G repeat re FI de mod baG im FI de div baG if re LI )' t6en xOiP FI c6r4ord4KAK5Q4re mod )'55 else xOiP FI c6r4reQ$(5G i FI iQ)G m FImQ)G de FI imG until deI'G for i FIm doJnto ) do Jrite4xOiP5G Jrite4K.K5G endG Send procedure intgrT procedure frac4nrFrealG baFinteger5G var de% m% re% iFintegerG xFsirG aFc6arG ra% imFrealG begin i FI )G m FI 'G de FItrunc4nr5G ra FI nrBdeG repeat im FIraMbaG re FI trunc4im5G if re LI )' t6en xOiP FIc6r4ord4KAK5Q4re mod )'55 else xOiP FI c6r4reQ$(5G ra FI imBreG i FI iQ)G m FI mQ)G until mI)'G for iFI) to m do Jrite4xOiP5G endG S end procedure fracT "/7*+ S programul principalT )F Jriteln4Kintroduceti numarul in baza )' K5G read4nr5G Jriteln4Kintroduceti baza in care doriti sa treceti numarulK5G read4ba5G Jriteln4K+umarul scris in baza K% ba% KesteFK5G intgr4nr% ba5G frac4nr% ba5G JritelnG &F Jriteln4Kdoriti reluarea programuluif4dNn5K5G readln4ta5G if upcase4ta5IK+K t6en goto 1G if upcase4ta5IK.K t6en goto ) else goto &G 1F readlnG

8' >.&. FU+C;**

CAP*T-LUL >. P,-C/.U,* @* FU+C;** (8

/+.. ). Un program ce gaseste pentru ecuatiaF /xempleF x 4 - 9x 3 - 2x 2 Q )&'x B )1'. I '. >.& Functii o r dacina 3n intervalul Oai%biP dat 4 programul rezec$ din /:1.PA25. Acum sa scriem programul ce gaseste toate cele patru r dacini reale ale *n afara functiilor standard programatorul 3i poate defini functii proprii. ecuatiei fiind date intervalele 3n care ele se afla. .iagrama de sintaxa pentru declararea unei functii este urmatoareaF /:10.PA2 Yf unc tie BBBBBBBBBBBBBBM antet functie UUM corpYfunctie P,-7,AC rezec$G LA"/L in careF zeroG AA, a% b F realG iFb#teG aiFarra#O)..$P of realG Slimita inferioara a intervaluluiT biFarra#O)..$P of realG S limita superioara a intervaluluiT FU+CT*-+ f4xFreal5FrealG begin fFIsRr4x5MsRr4x5 B 8MsRr4x5Mx B &MsRr4x5 Q )&'.Mx B )1'. endG P,-C/.U,/ solutie4a%bFrealG iFb#te5G label unu% doiG C-+2T epsI)./B'=G var cFrealG begin unuF cFI4aQb5N&G if f4c5I' t6en begin Jriteln4K x4K%iF&%K5IK%c5G goto doiG endG if f4a5Mf4c5 H ' t6en bFIc else aFIcG if abs4bBa5Heps t6en begin +otaF Jriteln4K x4K%iF&%K5IK%4aQb5N&5G goto doiG end else goto unuG doiF endG V lista parametrilor formali contine doar parametri valoare 4ei avand "/7*+ Smain programT Jriteln4K introdu limitele a% b pentru cele $ rolul datelor de intrare din declaratia de procedur 5 si parametri intervale K5G Jriteln4Kin care se afla o radacinaFK5G variabil far tip.
d ec la ra tie

V tipYrezultat apare 3n plus fata de declaratia de procedura si specifica tipul rezultatului transmis prin numele functiei. Corpul functiei fiind un bloc poate include declaratii de constante% tipuri% variabile% proceduri si functii locale. *n partea executabila a functiei trebuie sa apara cel putin o atribuire prin care se transfer identificatorului functiei valoarea rezultatului calculat. Apelarea 4activarea5 functiei se face conform urmatoarei diagrame de sintaxaF id.Yfunc DHL listaYpar.Yactuali

>.&. FU+C;** Jriteln4K 4B$.% B1.5% 4).% &.5% 4$.% =.5% 40.% (.5 K5G for iFI ) to $ do begin zeroF readln4a% b5G S verifica corectitudinea intervalelorT if f4a5Mf4b5 L ' t6en begin Jriteln4K interval dat gresit% reintrodu a si bF K5G goto zeroG endG aiOiPFIaG biOiPFIbG endG for iFI) to $ do solutie4aiOiP% biOiP%i5G readlnG /+..

8)

&. Un algoritm mai general de g asire a r ad acinilor unui polinom este metoda "irgeBAieta 4vezi N$N% pag.$>B$8 5. Programul /:1(.PA2 foloseste & functii% b' si c) pentru a calcula valoarea polinomului si a derivatei sale pentru o valoare x'. /:1(.PA2 program "irgeYAietaG label )'% &'% 1'G const epsI)./B'=G itermaxI1'G var x'% xFrealG Svariabile globaleT a%bFarra#O'..&'P of realG i% iter% m% icFb#teG function b'4xFreal5FrealG var jFb#teG Svariabila localaT begin bOmPFIaOmPG for jFImB) doJnto ' do bOjPFIbOjQ)PMxQaOjPG b'FIbO'PG endG function c)4xFreal5FrealG var DFb#teG Svariabile localeT cFarra#O)..&'P of realG begin cOmPFIbOmPG

8&

CAP*T-LUL >. P,-C/.U,* @* FU+C;**

for DFImB) doJnto ) do cODPFIcODQ)PMxQbODPG c)FIcO)P endG "/7*+ Jrite4K introdu gradul polinomului%mIK5Greadln4m5G Jriteln4K introdu coef. polinom amMximQ...Qa)MxQa'K5G for iFIm doJnto ' do begin Jrite4K introdu a4K%iF&%K5IK5G readln4aOiP5G endG Jriteln4Kpolinomul dat esteFK5G Jriteln4aOmP%KMxiK%m%KQK%aOmB)P%KMxiK%mB)%KQ...K%aO'P5G 1'F Jrite4K introdu x' IK5G readln4x'5G for iterFI) to itermax do begin &'F xFIx'Bb'4x'5Nc)4x'5G if abs4xBx'5Heps t6en goto )' else begin x'FIxG goto &'G endG endG )'F Jriteln4 K la iteratia K%iterF&%K radacina este K%xF)'F=5G Jrite4K introdu ) pentru alta radacinaK5G readln4ic5G if icI) t6en goto 1'G readlnG end.

1. Un program ce calculeaz a
C

k _ )* m (m U

k)\k\ folosind functia fact4n5. /:18.PA2 P,-7,AC combYmDG SUses C,TGT AA, m% DFintegerG cFrealG

>.1. PA,AC/T,* FU+C;** @* PA,AC/T,* P,-C/.U,* FU+CT*-+ fact4nFinteger5FlongintG AA, iFintegerG fFlongintG begin Sbegin factT fFI)G for iFI) to n do fFIfMiG factFIfG endG Send factT "/7*+ Smain programT SclrscrGT Ssterge ecranulT Jrite4K introdu m si D% numere intregi% pozitiveG mLD5G readln4m%D5G cFIfact4m5Nfact4D5Nfact4mBD5G Jriteln4K comb. de K%mF1%K luate cate K%DF1%K I K% c5G readlnG /+.. >.1 Parametri func!ii si parametri proceduri

81

- procedura sau functie poate apela o alta procedura sau functie dac aceasta din urma a fost deja declarata. 2unt 3nsa situatii 3n care numele si efectul procedurii sau functiei apelate nu sunt cunoscute la scrierea procedurii sau functiei apelante ci doar 3n mo B mentul executiei programului. *n aceste cazuri numele proceduriiNfunctiei apelate va fi transmis ca parametru. Astfel functia ce calculeaz prin metoda 2impson integrala f b f4x5dx a va avea antetulF FU+CT*-+ 2impson4a% bFrealG nFintegerG fFfct5FrealG Tipul fct este definit 3n programul apelant astfelF T\P/ fctIfunction4xFreal5FrealG Parametrii formali functii si procedur pot fi numai parametri de tip valoare. Functiile si procedurile standard nu pot fi transmise ca parametri actuali. La apelarea unei functiiNproceduri care are printre parametri formali o functie sau procedura% parametrul actual corespunzator trebuie sa fie un identificator de functie sau procedura. -bserva!ieF Folosirea parametrilor de tip procedura sau functie se face

8$

CAP*T-LUL >. P,-C/.U,* ;* FU+C;**

sub controlul directivei de compilare SXFQT asezata fie 3nainte de antetul programului fie 3naintea declararii functiei actuale si% 3n acest ultim caz% se foloseste la sfarsitul declar rii functiei directiva de compilare SXFBT. /xemple ). 2a se calculeze% folosind metode 2impson% integrala

pentru 8 I 1' si >' grade. /:$'.PA2 Program calculYintYsimpsonG uses crtG const piI1.)$)=8G t#pe fctIfunction4xFreal5FrealG var a% b% t)% t&% t% s)% s&FrealG SXFQT function D4xFreal5FrealG begin DFI)NsRrt4)Bsin4t5Msin4t5Msin4x5Msin4x55 endG SXFBT function simpson4a% bFrealG nFintegerG fFfct5FrealG var s% 6FrealG iFintegerG begin 6FI4bBa5NnN&G sFIf4a5Qf4b5G iFI)G J6ile iH&Mn do begin if i mod &I' t6en sFIs Q &Mf4aQiM65 else sFIs Q $Mf4aQiM65G iFIiQ)G endG simpsonFIsM6N1G endG Send simpsonT "/7*+ S incepe programul principalT clrscrG aFI'G bFIpiN&G

>.1. PA,AC/T,* FU+C;** @* PA,AC/T,* P,-C/.U,* t)FI1'G tFIt)MpiN)('G s)FIsimpson4a% b% )'% D5G t&FI>'G tFIt&MpiN)('G s&FIsimpson4a% b% )'% D5G Jriteln4K Z4K%t)F$F)%K5IK%s)5G Jriteln4K Z4K%t&F$F)%K5IK%s&5G readlnG /+..

8=

-bserva!ie 2alvati functia simpson 3ntrBun fisier cu numele simpson.inc. .e c?te ori aveti nevoie de ea folositi directiva de copmpilare SXi simpson.incT 3nainte de "/7*+ 4programul principal5G 3n acest fel nu mai este nevoie sa o tastati 3n program. &. Pentru a calcula integrala
T =

f Q ) xA ) B x & dx J-i 4& B x5 )1N&

se vor folosi functiile xp4xFrealG pFinteger5Freal pentru ridicarea lui x la o putere 3ntreaga% fs pentru functia de sub semnul integralei si simpson pentru calculul integralei. Cu observata de mai sus programul se scrieF

/:$).PA2 Program calculYintegralaG uses crtG t#pe fctIfunction4xFreal5FrealG var a% b% s)FrealG function xp4xFrealG pFinteger5FrealG var iFintegerG pxFrealG begin pxFI)G for iFI) to p do pxFIpxMxG xpFIpxG endG SXFQT function fs4xFreal5FrealG begin fsFIxp4x%05MsRrt4)BsRr4x55NsRrt4xp4&Bx%)155G endG SXFBT SXi simpson.incT "/7*+

8>

CAP*T-LUL >. P,-C/.U,* ;* FU+C;**

clrscrG s)FIsimpson4B).%).%)'%fs5G Jriteln4K integrala esteF K%s)5G readlnG /+.. Urmatorul program calculeaza produsul a & matrici cu ajutorul procedurii promat4aFmatriceGla%caFb#teG bFmatriceGlb%cbFb#teG Aar cFmatriceG Aar lc%ccFb#te5G salvata in fisierele promat.pas si promat.inc .atele sunt citite din fisierul promat.in 4 pe prima linie la si ca% apoi ele mentele matricii a pe linii 4 ca linii5% apoi lb si cb si cb linii cu elementele matricii b5. Catricile a si b si matricea produs sunt scrise in fisierul proB mat.out procedure promat4aFmatriceGla%caFb#teGbFmatriceGlb%cbFb#teG Aar cFmatriceGAar lc%ccFb#te5G var i% j% DFb#teG sFrealG begin if caHLlb t6en begin Jrite4Kmatricile nu se pot inmulti% caHLlbK5G 6altG end else begin for iFI) to la do for jFI) to cb do begin sFI'G for DFI) to ca do sFIsQaOi%DPMbOD%jPG cOi%jPFIsG endG endG endG Send proceduraT

/:$&.PA2

>.1. PA,AC/T,* FU+C;** @* PA,AC/T,* P,-C/.U,*

80

program matriciG Scalculeaza produsul matricilor ma si mb% rezultat in mcT t#pe matriceIarra#O 1.. 10% 1.. 10P of realG var ma%mb%mabFmatriceG la%ca%lb%cb%lab%cabFb#teG i%jFb#teG f%gFtextG SXi promat.incT begin assign4f%Kpromat.inK5G reset4f5G readln4f%la%ca5G for i :=1 to la do begin for j :=1 to ca do read4f%maOi%jP5Greadln4f5G endG readln4f%lb%cb5G for i :=1 to lb do begin for j :=1 to cb do read4f%mbOi%jP5G readln4f5G endGclose4f5G assign4g%Kmatr.outK5GreJrite4g5G Jriteln4g%K matricea a esteFK5G for i :=1 to la do begin for j :=1 to ca do Jrite4g%maOi%jPF 6F 15G Jriteln4g5G endG Jriteln4g5G Jrite4g% Kmatrice b esteFK5G for i :=1 to lb do begin for j :=1 to cb do Jrite4g%mbOi%jPF 6F 15G Jriteln4g5G endG Jriteln4g5G promat4ma%la%ca%mb%lb%cb%mab%lab%cab5G Jriteln4g%K matricea produs esteFK5G for i :=1 to lab do begin for j :=1 to cab do Jrite4g%mabOi%jPF 6F 15G Jriteln4g5G endG close4g5G

8( >.$. ./F*+*;** ,/CU,2*A/. CAP*T-LUL >. P,-C/.U,* @* FU+C;** 88


*ata doua exemple pentru aceste doua posibilitati. end. ). Fiind dat un numa 3ntreg si pozitiv sa se scrie numarul obtinut prin citirea cifrelor Fiierul poate ar ta 4numarul aa dacrasturnat5. vrem s verific m rezultatul numaruluipromat.in dat de la dreapta la stanga 3nmul!irii matricii a cu matricea unitateF /:$1.PA2 1 1 program nrYrasturnatG 1 2 1 uses crtG var mFlongintG 1 $ = procedure invers4nFlongint5G 1 2 6 begin 1 1 Jrite4n mod 105G 1 0 0 if n div 10 HL 0 t6en invers4 n div 105G endG 0 1 0 begin clrscrG 0 0 1 Jrite4Kintrodu numarul intregF K5Greadln4m5G Jriteln4Knumarul dat este K%m5G Jrute4Knumarul rasturnat esteF K5G invers4m5G readlnG end. >.$ .efini!ii recursive. &. *ntroduceti 3n /:$'.PA2 forma recursiva a functiei fact4n5.

Un obiect este recursiv daca este definit 3n functie de el 3nsui. FU+CT*-+ fact4nFinteger5FlongintG ,ecursivitatea este un instrument puternic 3ndeosebi 3n definirile begin matematice. if n =0 t6en fact :=1 else factFInMfact4nB 15G endG /xempleF
,ecursivitatea poate fi 3ntotdeauna transformat 3n 1 iteratie. *n majoritatea V numerele naturale% factorialul 4 nhInM4nB 5h cu 0!=1 si + , 05 cazurilor forma nerecursiv a unui program este mai eficienta decat forma recursiva 3n ceea ce V polinoamele Legendre priveste timpul de executie si memoria ocupata. Aarianta recursiv este preferat acolo unde 3nlocuirea ei cu iteratia ar cere un efort deosebit sau te6nici speciale de programare% algoritmul claritatea exprim P) -%pierzanduBsi I U Ou4 2m B 15P m Bi4C5 B rii. ) B 15PmB 24j5P ) Un astfel de exemplu 3n care folosirea functiei recursive e justificat este problema cu P -% I ) si P -% I partitiilor. unui num r 1 natural +% prin care se 3ntelege totalitatea posibilit tilor de exprimare a numarului + cafolosirea o suma numelui de alte numere naturale% fiecare ele Apel recursiv 3nseamna procedurii 4functiei5 3n din cadrul nedepasind o valoare C. textului procedurii 4functiei5G apelul recursiv este permis 3n Turbo Pascal.

Puterea recursiv st 3n posibilitatea de a defini o multime infinita de obiecte printrBo declaratie finit G un numar infinit de calcule poate fi descris printrBun program recursiv finit c6iar daca programul nu contine repetitii explicite. Pentru terminarea programului apelarea recursiv a a unei proceduri trebuie conditionata fie printrBo conditie ce la un moment dat devine falsa fie asociind procedurii un parametru n si apelandBo recursiv cu parametrul nB 1.

)''

CAP*T-LUL >. P,-C/.U,* @* FU+C;**

Algoritmul este urmatorulN)NF se ataseaza o functie P4n% m5 numarului de partitii% valoarea ei fiind data de urmatoarele reguliF daca mI) sau nI) dac n HI m P4n% m5 I P4n% mB)5 Q P4nBm% m5 daca n L m Aarianta iterativa ar fi greoaie 3n timp ce varianta recursiva este foarte simpl a. /:$$.PA2 P4n% m5 I ) P4n% m5 I ) Q P4n% nB)5

program partitiiG uses crtG var l% DFintegerG function p4n% mFinteger5FlongintG begin if 4nI 15 or 4mI 15 t6en p :=1 else if nHIm t6en p :=1 Q p4n% nB 15 else pFI p4n% mB 15 Q p4nBm% m5G endG Send function pT begin Sprogram principalT clrscrG Jrite4Kintrodu n si m% intregi si pozitive% nLm K5G readln4L% Z5G Jriteln4K numar de partitii p4K% LF1%K%K% ZF1%K5IK% p4L%Z55G readlnG end.
/xemple cunoscute de apelare recursiv a justificat a sunt programele ce rezolva probleme ca turnurile din 9anoi si asezarea pe tabla de sa6 a opt regine% probleme descrise 3n N)N.

Capitolul 0 U+*TBuri Turbo Pascal% unitBul 7,AP9


Primele versiuni ale compilatorului Turbo Pascal nu permiteau scrierea pro gramelor mai mari de >$ Db#tes deoarece procesorul ('(> limita dimensiunea unui segment la aceasta valoare. *ncepand cu versiunea a $Ba sBa introdus notiunea de unit. Prin unit se 3ntelege o colectie de constante% declaratii de tip si variabile% proceduri si functii% care poate fi compilata separat si care poate fi utilizata de un program principal sau de un alt unit prin specificarea numelui unitBului 3ntrBo clausa uses. Lungimea unui unit r mane limitata la >$Zb dar un program poate folosi un numar arbitrar de unitBuri functie doar de memoria disponibila a calculatorului folosit. Prin utilizarea unitBurilor creste viteza de compilare. /xisa opt unitBuri standard 3n Turbo Pascal% fiecare cu un profil si o struc tura bine delimitateF 2\2T/C% .-2% -A/,LA\% C,T% 7,AP9% P,*+T/,% 7,AP91% TU,"-1.

V UnitBul 2#stem contine toate procedurile si functiile standard din Turbo Pascal. /l se 3ncorporeaz automat 3n toate programele far? a fi nece sar o clauza Uses pentru elG V UnitBul .os contine proceduri si functii ec6ivalente cu apelurile .-2 cele mai obisnuiteF citire de date% sistemul de 3ntreruperi% etc. Folosirea lui se face cu clauza Uses .osG

V UnitBul -verla# permite folosirea te6nicii de scriere a programelor mari din bucati. 2e foloseste cu clauza Uses -verla#G.

)')

)'&

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL Aceste trei unitBuri se gasesc 3n fisierul Turbo.tpl V UnitBul Crt 4c6aracter5 permite utilizarea functiilor si procedurilor pentru comanda functionarii ecranului alfanumericF stergerea ecranului cu procedura clrscr 4clear screen5% functiile Ze#PressedFbooleanG si ,eadZe#Fc6arG 2e foloseste cu clauza Uses crtG dupa antetul pro B gramului. V UnitBul 7rap6 contine procedurile si functiile grafice. Acest unit se afla 3n fisierul 7rap6.tpu. 2ubprogramele din acest unit au nevoie de informatiile din fisierele M."7* si M.C9, UnitBul 7rap6 se foloseste cu clauza Uses 7rap6G V UnitBul Printer permite redirectarea scrierilor 3n fisierul text cu numele lst direct la imprimant a. V UnitBurile 7rap61 si Turbo1 permit folosirea subprogramelor grafice din versiunea a 1Ba a compilatorului Turbo Pascal.

/xempluF Uses .os% Crt% 7rap6G Programele 3n Turbo Pascal permit atat folosirea unitBurilor standard enumerate mai sus cat si scrierea si folosirea unor unitBuri scrise de progra B mator. 2tructura unui unit este aseman toare cu a unui program dar exista cateva diferente semnificative. unit identificatorYunitG interface uses list de unitBuriG S optional T S declaratii publice T implementation uses lista de unitBuri S optional T S declaratii locale T S implementarea procedurilor si functiilor T begin S codul de calcul T end. Antetul unitBului 3ncepe cu cuvantul rezervat unit urmat de numele unitului 4un identificator5 ca si un program 3n Turbo Pascal. *mediat dupa

)'1 antet urmeaza cuvantul c6eie interface care semnaleaza 3nceputul sectiunii interface a unitBului adica a partii vizibile pentru orice program ce foloseste acest unit. Un unit poate folosi alte unitBuri specificanduBle 3ntrBo clauz uses. V Clauza uses poate apare imediat dup cuvantul c6eie interfaceG 3n acest caz orice constanta sau tip de date declarate 3n sectiunile interface ale acelor unitBuri poate fi folosita 3n sectiunea interface a acestui unit. V Clauza uses poate apare imediat dupa cuvantul c6eie implementationG 3n acest caz declaratiile din acele unitBuri pot fi folosite doar 3n sectiunea implementation. Partea ]publica] a unui unit 3ncepe cu cuvatul rezervat interface si se termina la cuvantul rezervat implementation. Aceasta parte este ]vizibila] oricarui program ce foloseste acest unit. *n aceasta sectiune declaratiile de constante% tipuri de date% variabile% proceduri% functii pot fi facute 3n orice ordine ca si 3ntrBun program. Procedurile si functiile sunt declarate aici dar corpul lor se gaseste 3n sectiunea implementation far? a fi necesara declaratia forJard. Asa dar 3n interface apare doar antetul procedurilor si functiilor. 2ectiune implementation 4partea ]privata]5 a unui unit 3ncepe cu cu B vantul rezervat implementation. Tot ce sBa declarat 3n interface este vizibil 3n implementation. Cai mult aici pot fi facute si declarai suplimentare proprii% invizibile pentru programul ce foloseste unitBul dar folosite la scrierea procedurilor si functiilor declarate 3n interface. /xemplu F unit sirG interface t#pe vectorIarra#O 1.. 100P of realG procedure ordonare4xFvectorG nFb#teG AA, xoFvector5G function xmin4xFvectorG nFb#te5FrealG function xmax4xFvectorG nFb#te5FrealG implementation

)'$

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

procedure ordonareG var i% jFb#teG auxFrealG begin for jFIn -1 doJnto 1 do for i :=1 to j do if xOiP L xOiQ 1P t6en begin auxFIxOiPG xOiPFIxOiQ 1PG xOiQ 1PFIauxG endG for i :=1 to n do xoOiPFIxOiPG endG function xminG var iFb#teG xmFrealG begin xmFIxO 1PG for i :=2 to n do if xm L xOiP t6en xmFIxOiPG xminFIxmG endG function xmaxG var iFb#teG xmFrealG begin xmFIxO 1PG for i :=2 to n do if xm H xOiP t6en xmFIxOiPG xmaxFIxmG endG end.
2alvam fisierul sub numele sir.pas apoi trecem 3n fereastra C-CP*L/ si sc6imbam .estination Cemor# 3n .estination .isD plasanduBne pe .estinaB tion Cemor# si tastand /+T/,. Compilarea programului din fisierul sir.pas va conduce la crearea fisierului sir.tpu Urmatorul program foloseste unitBul sir pentru a ordona vectorul a si a gasi valorile minima si maxima din vector. +umarul de elemente ale vectorului a si valorile elementelor sale sunt citite dintrBun fisier creat de utilizator astfelF pe prima linie este scrisa valoarea lui n iar pe liniile urmatoare valoarea cate

)'=
unui element al vectorului a. *n total nQ) linii. /:$=.PA2

program testYunitYsirG uses sirG var a% aordFvectorG Stipul vector e definit in unit sirT i% j% nFb#teG fFtextG numeFstringG amin% amaxFrealG begin Jrite4K introdu nume fisier inputF K5G readln4nume5G assign4f% nume5G reset4f5G readln4f% n5G for i :=1 to n do readln4f% aOiP5G close4f5G Jriteln4K sirul ordonat esteF K5G ordonare4a% n% aord5G for i :=1 to n div 8 do begin for jFI 8M4iB 1)+1 to 8M4iB 1)+8 do Jrite4aordOjPF8F&%K K5G JritelnG endG for iFIn +1 B n mod 8 to n do Jrite4aordOiPF8F1%K K5G JritelnG S pentru a vedea ca vectorul a este parametru valoare si deci nu e mdificat in procedura ordonare% saBl scriemT Jriteln4K sirul initial esteF K5G for i :=1 to n div 8 do begin for jFI 8M4iB 1)+1 to 8M4iB 1)+8 do Jrite4aOjPF8F&%K K5G JritelnG endG for iFInQ) B n mod 8 to n do Jrite4aOiPF8F1%K K5G aminFIxmin4a%n5G amaxFIxmax4a%n5G JritelnG Jriteln4K aminIK%aminF8F15G Jriteln4K amaxIK% amaxF8F15G readlnG end.

)'> 0.)UnitBul 7,AP9

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

Programele care utilizeaza subprogramele din acest unit trebuie s aibe directiva Uses 7rap6G dup antetul programului. 2ubprogramele din unitBul 7rap6 realizeaz aF ). initializarea modului grafic &. tratarea erorilor grafice 1. definirea de ferestre si pagini $. reprezentarea punctelor =. reprezentarea liniilor >. reprezentarea de cercuri si alte curbe 0. reprezentarea de poligoane si 6asurari (. scrierea grafica /cranul grafic pentru plac A7A 4>$'x$(' pixeli5 esteF

4'% '5

4>18% '5

4'% $085

4>18% $085

0.).)

*nitializare mod grafic

Pentru initializarea modului grafic se poate folosiF

procedure grstartG begin gdFIdetectG *nit7rap64gd% gm% KkTPk"7*K5G *f grap6result HLgroD t6en 6alt4)5G endG

0.). 7,AP9

)'0

cu antetul procedurii *nit7rap6F procedure *nit7rap64 var gdFintegerG var gmFintegerG cdFstring5G 3n care gd si gm reprezinta codul corespunzator driverului si modului grafic iar cd reprezint calea spre fisierele de grafic . Aariabila gd a fost initializata cu constanta predefinita const detect =0 pentru a se omite apelarea procedurii .etect7rap6 3naintea apelarii procedurii *nit7rap6. Procedura .eB tect7rap6 cu antetulF procedure .etect7rap64var gd% gmFinteger5G determina valorile pentru variabilele gd si gm. Functiile 7etCax: si 7etCax\ dau valorile maxime pentru : si% res B pectiv% \ 3n modul grafic actual. Pentru placa A7A cu >$'x$(' pixeli aceste valori sunt respectiv >18 si $08. Functia 7et.river+ame% apelata dupa activarea procedurii *nit7rap6% d numele driverului grafic actual. Antetul ei esteF function 7et.river+ameFstringG Functia 7et7rap6Code da codul modului grafic actual. Antetul ei esteF function 7et7rap6CodeFintegerG Aaloarea ei variaza 3ntre ' si = 3n functie de driverul grafic actual. Procedura 7etAspect,atio da rezoluta ecranului grafic din care se poate calcula raportul :aspN\asp ce d a alungirea formelor circulareG rapor tul :aspN\asp e necesar la unele ]rotunjiri] 3n trasarea cercurilor% sectoarelor de cerc% arcelor. Procedurile folosite pentru aceasta suntF 7etAspect,atio4var :asp% \aspFJord5G 2etAspect,atio4:asp% \aspFJord5G ,evenirea la ecranul alfanumeric se face cu procedura Close7rap6 /:$>.PA2 Program verifgrap6G Uses dos% grap6G Aar ggm% gd% gmFintegerG :aspect% \aspectFJordG aspratioFrealG

)'(

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

gdnFstringG Procedure grstartG begin gdFIdetectG *nit7rap64gd% gm% KktpkbgiK5G if grap6,esult HLgroD t6en 6altG endG "egin grstartG ggmFI7et7rap6CodeG gdnFI7et.river+ameG 7etAspect,atio4:aspect% \aspect5G aspratioFI:aspectN\aspectG Close7rap6G Jriteln4Kgrap6driverIK% gdn5G Jriteln4Kgrap6modeIK% ggm5G Jriteln4KaspectratioF K% aspratioF 2F 25G readlnG /nd. 0.).& /rori grafice

/rorile 3n modul grafic sunt returnate de functia 7rap6,esult sub forma unui cod de eroare. .aca codul returnat este zero 3nseamna ca operatia grafica a reusitG daca codul este mai mic decat zero 3nseamna ca operatia grafica a esuat. Antetul functiei esteF function 7rap6,esultFintegerG Cateva valori predefinite ale functiei suntF Const gr'ZI'G Soperatie grafic reusita% nici o eroareT gr+o*nit7rap6IB)G S grafica "7* neinstalat cu *nit7rap6T gr+ot.etectedIB&G Sgrafica 6ardJare nedetectat T grFile+otFoundIB1G Sfisierul driver M."7* nu a fost gasitT .e notat ca 7rap6,esult e pus la zero dupa ce este apelat asa ca rezultatul trebuie stocat 3ntrBo variabila temporara pentru a fi testat.

0.).1

.efinire ferestre

Pentru a defini si lucra cu ferestre% prin fereastr 3nteleganduBse o zona drep B tung6iulara a ecranului 43n particular tot ecranul5% se folosesc procedurileF

0.). 7,AP9

)'8

procedure 2etAieJPort4x)%#)%x&%#&FintegerG clipFboolean5G undeF x)% #) sunt coordonatele absolute stangaBsus ale ferestrei active x&% #& sunt coordonatele absolute dreaptaBjos ale ferestrei active clip determina daca liniile din afara ferestrei sunt sau nu vizibile. Constantele predefinite pentru stabilirea valorii variabilei clip suntF const cliponItrueG St ierea este activaG exterior invizibilT clipoffIfalseG St ierea este pasiv G exterior vizibilT Procedura defineste fereastra grafica. procedure 7etAieJ2ettings4var infoferFAieJPortT#pe5G permite obtinerea de informai referitoare la fereastra actual si felul taierii. Aariabila infofer este de tipul predefinit AieJPortT#pe si va contine informai referitoare la fereastr . T#pe AieJPortT#pe I ,/C-,. x 1% # 1% x 2% # 2 F integerG clip F booleanG /+.G procedure Clear.eviceG sterge ecranul grafic actual si pozitioneaza pointerul 3n pozitia 4'% '5. procedure ClearAieJPort sterge fereastra grafica actual . Culoarea ferestrei va fi culoarea de fondG este apelata procedura rectangle pentru trasarea unui dreptung6i corespunzator ferestrei si pointerul este mutat 3n coltul stangaBsus al ferestrei% punctul de coordonate relative 4'% '5.
/:$0.pA2

program exYvieJportG uses grap6G var gd%gm%centrux%centru#%iFintegerG infFvieJportt#peG cx)%c#)%cx&%c#&FstringO=PG begin gdFIdetectG initgrap64gd%gm%KktpkbgiK5G centruxFIgetmaxx div 2G centru#FIgetmax# div 2G rectangle4centruxB)08% centru#B)>8% centruxQ)08% centru#B)5G

))'

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

setvieJport4centruxB)('%centru#B)0'% centruxQ)('%centru#% clipon5G Sincercati si clipoffT randomizeG readlnG for i :=1 to 10 do lineto4random4getmaxx5B )('%random4getmax#5B)('5G getvieJsettings4inf5G readlnG str4inf.x 1%cx 15G str4inf.# 1%c# 15G str4inf.x 2%cx 25G str4inf.# 2%c# 25G outtextx#4)'%1'%cx)5G outtextx#4)'%='%c#)5G outtextx#4 10% 100%cx 25G outtextx#4 10% 120%c# 25GreadlnG setvieJport4 0% 0%getmaxx%getmax#%clipon5G rectangle4centruxB )08%centru#Q)'%centrux%centru#Q)0'5G Sa doua fereastraT setvieJport4centruxB )('%centru#Q)'%centrux%centru#Q)0'%clipon5G randomizeG readlnG for i :=1 to 10 do lineto4random4getmaxx5B)('%random4getmax#5B)('5G readlnG setvieJport4 0% 0%getmaxx% getmax#%clipon5G rectangle4centruxQ)'%centru#Q)'% centruxQ)()%centru#Q)0)5GreadlnG setvieJport4centruxQ)'%centru#Q)'%centruxQ)()%centru#Q)0)%clipon5G readlnG for i :=1 to 10 do lineto4random4centrux5%random4centru#55G readlnG clearvieJportG readlnG cleardeviceG readlnG closegrap6G end. 0.).$ ,eprezentare puncte

Pentru a desena puncte se foloseste proceduraF procedure PutPixel4x% #FintegerG culFJord5G care pune un punct% de culoarea dat de variabila cul 3n punctul de coor donate x% #. Aariabila cul ia valori 3ntre zero si valoarea data de functia 7etCaxColor. 4maxI)= pentru placa A7A5. Antet functieF function 7etCaxColorFJordG /:$(.PA2 program testYpixelG uses grap6G

0.). 7,AP9 var gd% gmFintegerG xCax% #Cax% CaxColorFintegerG iFJordG x% #% culoare FJordG procedure grstartG begin gdFIdetectG *nit7rap64gd% gn%KktpkbgiK5G if grap6result HL gr-Z t6en 6alt4)5G endG function ranCulFJordG begin randCulFIrandom4CaxColor5Q)G endG "/7*+ grstartG xCaxFIgetCax:G #CaxFIgetCax\G CaxColorFIgetCaxColorG randomizeG iFI 0G J6ile i H 100 do begin iFIiQ)G putpixel4random4xCax5Q)% random4#Cax5Q)% randCul5G endG readlnG closegrap6G Jriteln4Kprogram executatK5G /+..

)))

0.).=

,eprezentare linii% culori% stiluri si grosimi% de plasarea 3n fereastra grafic

Pentru a desena linii se folosesc procedurileF Line4x)%#)%x&%#&Finteger5F deseneaza o linie 3ntre punctele de coordonate 4x)% #)5 si 4x&% #&5. AtentieF pointerul nu ramane 3n punctul de coordonate 4x&% #&5 ci revine la pozitia 4'% '5. Culoarea 3n care este desenata linia poate fi stabilita cu proceduraF 2etColor4colorFJord5F Culorile de desen merg de la ' la )= si sunt functie de driverul grafic curent si de modul grafic curent. /le sunt definite de constanteleF C-+2T

))&

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

blacDI'G blueI)G greenI&G c#anI1G redI$G magentaI=G broJnI>G lig6tgra#I0G darDgra#I(G lig6tblueI8G lig6tgreenI)'G lig6tc#anI))G lig6tredI)&G lig6tmagentaI)1G #elloJI)$G J6iteI)=G blinDI)&(G iar stilul si grosimea se stabilesc cu proceduraF 2etLine2t#le4linest#leFJordG patternFJordG t6icDnessFJord5G Constantele pentru Line2t#le suntF C-+2T solidlnI'G dottedlnI)G centerlnI&G ds6edlnI1G userbitlnI$G SuserBdefine line st#leT iar pentru grosimeF C-+2T normJidt6I)G t6icDJidt6I1G

Aariabila pattern este ignorata cat timp linest#le este diferit de $. Cand linest#le I $% linia este trasata folosind un model )>Bbit definit de parametrul Pattern. .e exemplu daca patternIXAAAA atunci modelul )>Bbit arat astfelF

1010101010101010 Spentru normJidt6T 1010101010101010 1010101010101010 1010101010101010 Spentru t6icDJidt6T /:$8.PA2

program exYlineG uses grap6G var gd%gm%iFintegerG x 1%# 1%x 2%# 2FintegerG "/7*+ gdFIdetectG *nit7rap64gd%gm%KktpkbgiK5G line4'%'%)''%'5G outtextx#4)='%'%KstandardK5G setlinest#le4dottedln% 0%normJidt65G line4'%='%)''%='5G outtextx#4)='%='%Kdottedline% normJidt6K5G setlinest#le4dottedln% 0%t6icDJidt65G

0.). 7,AP9

))1

line4'%)''%)''%)''5G outtextx#4)='%)''%Kdottedline% t6icDJidt6K5G setlinest#le4userbitln%Xc1%t6icDJidt65G line4'%)='%)''%)='5G outtextx#4)='%)='%K userbitln% t6icDJidt6K5G for iFI' to 1 do begin setcolor4iQ&5G setlinest#le4i%'%normJidt65Gline4)'%&'MiQ&='%&)'%&'MiQ&='5G setlinest#le4i%'%t6icDJidt65Gline41)'%&'MiQ&='%=)'%&'MiQ&='5G endG readlnG closegrap6G end. LineTo4x% #Finteger5G deseneaza o linie din pozitia curenta a pointerului pana la un punct de co B ordonate 4x% #5. Aceleasi observai pentru culoare si stil ca la procedura Line. Line,el4.x% .#Finteger5G deseneaza o linie din pozitia curent a pointerului pana la un punct definit de distantele .x% .#. Aceleasi observai pentru culoare si stil ca la procedura Line. .eplasarea pointerului 3n punctul de coordonate 4x% #5 se face cuF CoveTo4x% #Finteger5F .aca este definit o fereastr % valorile 4x% #5 sunt relative la fereastra. Cove,el4.x% .#Finteger5G muta pointerul din pozitia curenta la un punct definit de distantele .x% .#.

0.).>

,eprezentare cerc% arc de cerc% elips % sector de cerc% model de umplere a suprafetelor 3nc6ise

Pentru a desena un cerc% un arc de cerc% un arc de elips sau un sector de cerc se folosesc urm toarele proceduri. procedure Circle4x% #FintegerG razaFJord5G deseneaza un cerc cu centru 3n punctul de coordonate 4x% #5 si cu raza dat . procedure Arc4x% #FintegerG ustart% ufinal%rFJord5G deseneaza un arc de cerc cu centrul 3n punctul de coordonate 4x% #5 si raza data 3ncepand de la ung6iul ustart si sfarsind la ung6iul ufinal% ambele ung6iuri date 3n grade si mergand 3n sens trigonometric. procedure /llipse4x%#FintegerGustart%ufinalFJordGxraza%#razaFJord5G deseneaza un arc de elipsa% 4x% #5 sunt coordonatele centrului% ustart% ufinal

))$

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

sunt ung6iurile de 3nceput si sfarsit luate 3n sens trigonometric% xraza% #raza sunt axele orizontala si% respectiv% vertical ale elipsei. procedure Pie2lice4x% #FintegerG ustart% ufinal%rFJord5G deseneaza si 6asureaza un sector de cerc. Codelul si culoarea de 6asurat sunt definite cuF procedure 2etFill2t#le4patternFJordG colorFJord5G Codelul implicit este compact 4solid5 si culoarea implicit este culoarea cu cod maxim din paleta . Constantele de 6asurare suntF C-+2T empt#fillI 0G Sumple in culoarea de fondT solidfillI 1G Sumple cu culoarekT linefillI 2G Sumple aria cu modelul B B BT ltslas6fillI1G Sumple aria cu modelul NNN T slas6fillI$G Sumple aria cu modelul NNN mai groase T bDslas6fillI=G Sumple aria cu modelul kkk T ltbDslas6fillI 6G Sumple aria cu modelul kkk dar mai subtiriT 6atc6fillI0G Sumple aria cu modelul eee T x6atc6fillI 8G Sumple aria cu modelul xxx T userfilI 12G Smodelul e dat de programator T

procedure 2etFillPattern4patternFFillPatternT#peG colorFJord5G umple figura grafica cu un model definit de programator 3n culoarea definita de parametrul color. T#pe FillPatternT#peIarra#O)..(P of b#teG Cotivul de umplere se bazeaza pe valoarea celor 8 b#tes 4octeti5 continuti 3n vectorul patternG fiecare octet corespunde la 8 pixeli de motiv. .aca un bit are valoarea 1 pixelul are culoarea cernelii% daca el are valoarea 0 pixelul are culoarea fondului.
/:='.PA2

program exYsetmodelG uses grap6G const dungiFfillpatternt#peI4Xaa%X==%Xaa%X==%Xaa%X==%Xaa%X==5G var gd%gm%iFintegerG

0.). 7,AP9

))=

begin gdFIdetectG *nit7rap64gd%gm%KcFktpkbgiK5G setcolor4$5G setfillpattern4dungi%15G pieslice4)''%)''%'%&0'%)''5G for iFI' to )) do begin setfillst#le4i%i5Gpieslice41''%&''%'%&0'%)''5GreadlnG endG readlnG closegrap6G end. procedure Fill/llipse4x% #FintegerG xraza% #razaFJord5G deseneaza si 6asureaza o elipsa 3n culoarea curenta si modelul de 6asurare definit de procedurile 2etFill2t#le sau 2etFillPattern.

0.).0

,eprezentare poligoane

Pentru a desena poligoane se folosesc urma toarele proceduri. rectangle4x 1% # 1% x 2% # 2Finteger5G deseneaz a un dreptung6i cu 4x)% #)5 coordonatele coltului stangaBsus 4x&% #&5 coordonatele coltului dreaptaBjos "ar4x)% #)% x&% #&Finteger5G deseneaza un dreptung6i si 3l 6asureaza 3n culoarea si modelul stabilite cu procedurile 2etFill2t#le sau 2etFillPattern. 4x)% #)5 si 4x&% #&5 au aceeasi semnificare ca 3n procedura rectangle. "ar1d4x)% #)% x&% #&FintegerG adFJordG topFboolean5G deseneaza un paralelipiped dreptung6i si 3l 6asureaza 3n culoarea si modelul curente. 4x)% #)5 si 4x&% #&5 au aceeasi semnificare ca 3n procedurile rectangle si bar ad este adancimea corpului top I T,U/ 3nseamn ca deasupra paralelipipedului se poate aseza un alt paralelipiped top I FAL2/ 3nseamn ca deasupra paralelipipedului nu se poate aseza alt paralelipiped. /xista predefinite constanteleF C-+2T topon I T,U/G topoffIFAL2/G .raJPol#4nrpctFJordG var puncte5G deseneaz o linie poligonal 3n culoarea si stilul curente.

))>

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

nrpct reprezint a num arul varfurilor liniei poligonale puncte este un parametru variabila far tip care contine coordonatele fiec rui varf 3n linia poligonal . .e notat ca pentru a desena o figura 3nc6isa cu n varfuri trebuie s se transmita nQ) coordonate si puncte4nQ 15Ipuncte4 15
/:=).PA2

program exYpoligonG uses grap6G const triung6iFarra#O)..$P of pointt#peI 44xF='G#F)''5% 4xF&''G #F)''5% 4xF&''G #F&='5% 4xF='G #F)''55G var gd% gmFintegerG "/7*+ gdFIdetectG *nit7rap64gd% gm% KktpkbgiK5G if grap6result HL gr-Z t6en 6alt4)5G draJpol#4sizeof4triung6i5 div sizeof4poitt#pe5% triung6i5G readlnG closegrap6G /+.. +otaF functia 2izeof4x5 d numarul de octet ocupat de argumentG x poate fi o referire de variabila sau un identificator de tip. procedure FillPol#4nrpctFJordG var puncte5G deseneaza si 6asureaz un polinom 3n culoarea si modelul curente.
/:=&.PA2

program exYpoligon 2G uses grap6G const triung6iFarra#O)..$P of pointt#peI44xF='G#F)''5%4xF&''G#F)''5% 4xF&''G#F&='5%4xF='G#F)''55G triung6i)Farra#O)..$P of pointt#peI44xF&='G#F)''5%4xF$''G#F)''5% 4xF$''G#F&='5%4xF&='G#F)''55G var gd%gm%iFintegerG "/7*+ gdFIdetectG *nit7rap64gd%gm%KktpkbgiK5G draJpol#4sizeof4triung6i5 div sizeof4pointt#pe5% triung6i5G circle41='%)''%)''5G readlnG for i :=1 to 11 do begin

0.). 7,AP9 setfillst#le4i%i5G fillpol#4sizeof4triung6i5 div sizeof4pointt#pe5%triung6i 15G fillellipse41''%1''%='%='5G readlnG endG readlnGclosegrap6G end. 0.).( 2crierea grafic

))0

Pentru scrierea textelor 3n modul grafic sunt incluse fonturi 4tipuri de carac tere5 (M( bitBmapped si fonturi vectoriale. Un caracter (M( bitBmapped este definit de o matrice (M( pixeli. Un font Aectorial] este definit de o serie de vectori care spun sistemului grafic cum sa deseneze caracterul. 2crierea si selectia caracterelor se face cu urmatoarele proceduriF 2etText2t#le4fontFJordG directionFJordG c6arsizeFJord5G constantele pentru caracter% directie si dimensiune suntF

C-+2T .efaultFontI'G TriplexFontI)G 2mallFontI&G 2ans2erifFontI1G 7ot6icFontI$G 9oriz.irI'G Aert.irI)G userC6ar2izeI'G permite programatorului sa varieze largimea si 3naltimea caracterului 3n cazul folosirii fonturilor vectoriale. Aceasta se face cuF 2etC6ar2ize4mult:% div:% mult\% div\FJord5G 3n careF mult: F div: este raportul cu care trebuie 3nmultita latimea normal pentru fontul activ mult\ F div\ este raportul cu care trebuie 3nmultita m rimea normala pentru fontul activ .e exemplu% pentru a face fontul de & ori mai lat se foloseste & pentru mult: S 8*8 bitBmapped fontT Sfont vectorialT Sfont vectorialT Sfont

))(

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

si ) pentru div:. Apelul acestei proceduri pune marimea caracterului curent la valoarea data. Textul grafic se realizeaza apeland una din procedurile urmatoareF -utText4textFstring5G unde text este textul trimis la iesire la pozitia curenta a pointerului folosind fontul curent pus cu 2etText2t#le. -utText:\4x% #FintegerG textFstring5G textul este scris 3ncepand din punctul de coordonate 4 3n pixeli5 4x% #5. /:=1.PA2

program exYfontG uses grap6G var gd% gmFintegerG "/7*+ gdFIdetectG *nit7rap64gd% gm% KktpkbgiK5G if grap6result HL gr-Z t6en 6alt4)5G setvieJport4'% '% >''% $''% clipon5G settextst#le48% '% 15G outtextx#4 10% 100,'8 M 8 bitBmapped fontK5G readlnG for i FI ) to $ do begin clearvieJportG setvieJport4'% '% >''% $''5 settextst#le4i% '% $5G outtextx#4)'% &'% K normalK5G setuserc6arsize4)% 1% )% )5G outtextx#4)'% ='%Ki n g u s tK5G setuserc6arsize4=% )% =% )5G outtextx#4)'% )''% Kmarit K5G endG readlnG closegrap6G /+..
Alte programe cu diferite marimi de fonturi. Functiile Text9eig6t4Text2tringFstring5FJord si Text<idt64Text2tringFstring5FJord dau 3naltimea si% respectiv% latimea stringBului Text2tring 3n pixeli prin 3nmultirea numarului de pixeli pentru fontul curent 4pus cu 2etText2t#le5 cu numarul de caractere din string. 2unt utile la asezarea textului pe linii 3n modul grafic.

0.). 7,AP9
/:=$.PA2

))8

program fonturiG uses grap6G var gd% gm% #% size F integerG "/7*+ gd FI detectG *nit7rap64gd% gm% KktpkbgiK5G if7rap6,esult HL groD t6en 6alt4)5G # FI 20G for size FI 1 to 6 do begin 2etText2t#le4.efaulFont% 9oriz.ir% 2ize5G -utText:\4'% #% K2ize I KQ c6r4size Q $(55G Sc6r4$(5IK'K in A2C**T *nc4#% Text9eig6t4K9K5 Q ='5G Screste # cu inaltimea unui caracter Q=' pixeliT endG readlnG closegrap6G /+..
/:==.PA2

program dimYfontG uses grap6G var gd% gm F integerG n6% nJ F JordG "/7*+ gd FI detectG *nit7rap64gd% gm% KktpkbgiK5G settextst#le4 0% 0% 15G n6 FI text6eig6t4Kfont 0% size 1K5G nJ FI textJidt64 Kfont 0% size 1K5G Jriteln4Kn6IK% n6% K nJIK% nJ5G readlnG closegrap6G /+.G
/:=>.PA2

P,-7,AC exYJriteYgrap6G uses grap6G var gd%gmFintegerG "/7*+ gdFIdetectG initgrap64gd%gm%KcFktpkbgiK5G if grap6resultHLgroD t6en 6alt4 15G

)&'

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

settextst#le4triplexfont%6orizdir%$5G Ssettextst#le4smallfont%6orizdir%$5GT Ssettextst#le4sansseriffont%6orizdir%$5GT Ssettextst#le4got6icfont%6orizdir%$5GT outtextx#4)'%&'%K Colocvviu la Limbaje de ProgramareK5G setuserc6arsize4)%1%)%)5G outtextx#4)'%>'%K in saptamana )8B&& mai &''$K5G setuserc6arsize4=%)%=%)5G outtextx#4)'%0'%K+orocK5G setfillst#le4)%$5G pieslice4=1'%&''%'%1'%)''5G pieslice4=1'%&''%>'%8'%)''5G pieslice4=1'%&''%)&'%)='%)''5G pieslice4=1'%&''%)('%&)'%)''5G pieslice4=1'%&''%&$'%&0'%)''5G line4=1'%&''%=('%1''5G line4=('%1''%>1'%$''5G setfillst#le4)%&5G Sline4=='%&('%=('%&8'5G line4=('%&8'%=8'%&('5G line4=8'%&('%=='%&('5GT pieslice4=('%1''%='%('%0'5G pieslice4>''%1$'%)='%)('%0'5G readlnG closegrap6G /+..
/:=0.PA2

program ferestreG uses grap6G const fer)FvieJportt#peI4x)F)'G#)F('Gx&F1''G#&F)''GclipFclipon5G fer&FvieJportt#peI4x)F1)'G#)F))'Gx&F>''G#&F1''GclipFclipon5G var gd%gmFintegerG begin gdFIdetectG *nit7rap64gd%gm%KcFktpkbgiK5Gsetcolor4))5G Jit6 fer 1 do Sconstanta fer 1T begin setfillst#le4&%15G setlinest#le41%'%)5G bar4succ4x 15%succ4# 15%pred4x 25%pred4# 25Q 1005G rectangle4succ4x 15%succ4# 15%pred4x 25%pred4# 25Q 1005G setvieJport4x 1%# 1%x 2%# 2Q 100%clipon5Gsetlinest#le4 0% 0% 15G rectangle4'%'%&8'%)&'5G outtextx#4)'%)'%Kprima fereastraK5G endG setcolor4)$5G setvieJport4 0% 0%getmaxx%getmax#%clipon5G Srevenirea la ecran pentru a crea un nou vieJportT

0.). 7,AP9

)&)

Jit6 fer 2 do Sconstanta fer 2T begin setfillst#le4(%&5G setlinest#le4$%Xc1%)5G bar4succ4x 15%succ4# 15%pred4x 25%pred4# 255G rectangle4succ4x 15%succ4# 15%pred4x 25%pred4# 255G setvieJport4x 1%# 1%x 2%# 2%clipon5G outtextx#4)'%='%Ka doua fereastra si in afara cadrului eifK5G setfillst#le4$%'5Gbar4='%)''%&''%)='5GsetvieJport4='%)''%&''%)='%clipoff5G setcolor405G outtextx#41&'%)&'%Ka treia fereastra si in afara eiK5G endG readlnG closegrap6G end. Urm torul program reprezinta grafic functia f 4x5 I x 4 / 01 3 / 21 2 Q )&'x B )1' si axele de coordonate. /:=(.PA2 program reprYfctG uses grap6G const nI$8G dxI'.&=G t#pe vectorJIarra#O 1..nP of JordG vectorrIarra#O 1..nP of realG var iFb#teG xp%#pFvectorJG xarg%#fFvectorrG xpmax%xpmin%#pmax%#pmin%xscal%#scal%f 1FrealG xreperFarra#O)..1P of integerG function xlap4pFb#teG xFreal5FrealG var iFb#teG xpFrealG begin xpFI 1.G for i :=1 to p do xpFIxpMxG xlapFIxpG endG function f4xFreal5FrealG begin fFIxlap4$%x5B8Mxlap41%x5B&MxMxQ)&'MxB)1'G endG procedure grYfctG

)&&

CAP*T-LUL 0. U+*TBU,* TU,"- PA2CAL

var iFb#teG gd%gmFintegerG begin gdFIdetectG *nit7rap64gd%gm%KcFktpkbgiK5G setvieJport4'%'%>18%$08%clipon5G setlinest#le4 1% 1% 15G line4'%&&=%>''%&&=5G line41''%'%1''%$''5G line4xreperO)P%&&'%xreperO)P%&1'5G outtextx#4xreperO)PB)'%&$'%KB$.K5G line4xreperO&P%&&'%xreperO&P%&1'5G outtextx#4xreperO&PB)'%&$'%K$.K5G line4xreperO1P%&&'%xreperO1P%&1'5G outtextx#4xreperO1PB)'%&$'%K(.K5G setcolor4 25G for i :=1 to n do circle4xpOiP%#pOiP% 25G outtextx#411'%='%Kf4x5Ixi$B8xi1B&xi&Q)&'xB)1'K5G readlnG closegrap6G endG "/7*+ xpmaxFI 8.G xpminFIB$.G #pmaxFIB)/1'G #pminFI)/1'G for i :=1 to n do begin xargOiPFIxpminQ4iB 15MdxG f 1FIf4xargOiP5G#fOiPFIf 1G if #pmaxHf 1 t6en #pmaxFIf 1G if #pminLf 1 t6en #pminFIf 1G endG xscalFI$''N)&.G #scalFI1''N4#pmaxB#pmin5G xreperO)PFI1''Btrunc4$Mxscal5G xreperO&PFI1''Qtrunc4$Mxscal5G xreperO1PFI1''Qtrunc4(Mxscal5G for i :=1 to n do begin xpOiPFI1''Qtrunc4xargOiPMxscal5G #pOiPFI&&=Btrunc4#fOiPM#scal5G endG grYfctG end.

Capitolul El!"!nt! #! pr!lu$rar! statisti$% a #at!lor !&p!ri"!ntal! $u pro'ra"! (n Tur)o Pas$al


(.) Aaloare medie% variant % abatere standard% fluctuatie 2copul acestei lectii nu este de a trata riguros subiectul ci de a arata cum sa folosim prelucrarea statistica pentru a obtine din datele experimentale cele mai bune rezultate si a cunoaste limit rile rezultatelor obtinute. .e asemeni cum sa folosim ceea ce am 3nvatat despre limbajul Turbo Pascal pentru a scrie programe utile 3n munca de laborator. Adesea 3n procesul de masurare a unei marimi fizice obtinem valori diferite la repetarea masur torii 3n aceleasi conditii fizice. Aceasta fie pentruca m arimea fizic a respectiva are un caracter statistic 4 de exemplu num arul de dezintegrari 3ntrBo secunda ale unui element radioactiv% lungimea drumului 3ntre doua ciocniri ale unui neutron 3n combustibilul nuclear sau 3n mediul moderator 3ntrBun reactor nuclear% etc.5 fie din cauza preciziei limitate a aparaturii de masura 4 de exemplu erorile de calibrare a ceasului% riglei% balantei folosite la masurarea intervalelor de timp% a lungimilor sau a maselor5. *n ambele cazuri repetarea m sur torilor 3n aceleasi conditii va conduce
j

)&1

)&$

CAP*T-LUL (. 2TAT*2T*Cl

la rezultate diferite. .aca aceste m sur tori se fac de un num r foarte mare de ori se constata c valorile pentru marimea fizica respectiva fluctueaza 3n jurul unei valori medii. Fie + numarul de repetari ale m suratorii marimii fizice 3n exact aceleasi conditii si 1 2 valoarea obtinut 3ntrBo m suratoare. Aaloarea medie 1 a sirului finit de + masuratori va fi media aritmetica a valorilor 1 2 F
1

iI 1 iar abaterea valorii 1 2 de la 1 va fi A i dat deF Ai I 12 U 1 g 12 I 1 Q Ai

3 X 2 4 8. ) 5

4 8. 25

Aceste abateri vor fi mai mari sau mai mici. - m sur a 3mpr stierii valorilor 1 2 fa!a de valoarea medie 1 poate fi data de ansamblul abaterilor sau de o m rime care sa descrie acest ansamblu. Aceast m rime nu poate fi abaterea medie A deoarece ea este zero indiferent care sunt valorile A i . I a A i I 45 6 1 2 i =1 i =1 i =1
1 1 1

+ A

U x5

I 7 a 12

U x

x U x

4(. 1 5

Abaterea patratica medie% varianta% este 3nsa diferita de zeroF i+ i+ Y YY I g a 4 x x)2 I g a 4 x 2U 2xi x Q x & 5 =x2x2 L 0 i =1 i =1 i =1 B . . . . 4(M$5 2 2 de unde si x L x adica media patratelor este mai mare decat patratul mediei unui sir de valori. Pentru caracterizarea 3mpr stierii se mai foloseste m rimeaF
a

:I

YYY 1 + A2 Iga

a2

81 I

4(.=5

numita abatere standard si abaterea standard relativa definit deF ex I B x

4 8. 65

numita si fluctuase.

9.2. P,-PA7A,/A /,-,*L-, (.& Propagarea erorilor

)&=

Presupunem o functie f4x% #5 de dou variabile independente. Fie :, 1 si # valorile medii ale functiei si variabilelor. Prin repetarea masuratorilor se obtin abaterile Aj si AB ale variabilelor x si # 4 i si j iau toate valorile 3ntregi 3tre ) si +% + fiind numarul de repet ri ale masuratorii5. Pe baza ipotezei ca abaterile sunt mici fata de m rimile respective% functia f4x% #5 se poate dezvolta 3 serie Ta#lor. -btinemF

neglijand termenii de ordin mai 3nalt. *dentifica mF


4(.(5

Abaterea medie patratica a functiei f este% prin definitieF

) +

4(.85

conform definitei 4(.$5 si a faptului c suma produselor Aj AB contine termeni ce se vor anula. 7eneralizand% pentru o functie f 4xi% x & % ...,1 ) % de m variabile x D 4DI 1%m5F
4(.)'5

,elatia 4 8. 105 reprezinta teorema de propagare a abaterilor stan dard sau% mai obisnuit% teorema de propagare a erorilor.

)&>

CAP*T-LUL (. 2TAT*2T*CA

2a aplicam aceasta teorema la o lucrare din laboratorul de mecanica. 2e fac + masuratori ale 3naltimii 6 de la care cade liber un corp si ale timpului de cadere t . Arem sa determinam astfel acceleratia gravitationalaF gIgI
f 46%t5 4( ))5

obtinute.

si abaterea standard a valorii

/:=8.PA2 Program propYerG Sprogramul calculeaza valoarea medie si abaterea standard pentru f4x 1% x 2%...%xm5 cu m HI 20 folosind n% n HI 100% masuratori pentru setul de variabile x 1% x 2% ... % xmT SAici programul este folosit pentru a calcula g46% t5G pentru alta functie se rescrie partea de declarare a functiei si derivatelor saleT T#pe vec)''Iarra#O)..)''P of realG vec 20Iarra#O 1.. 20P of realG Aar xmediu% sigx&Fvec&'G valxFvec 100G i% j% m% nFintegerG fmediu% sigfm 2% sig 1fm 2% sig 2fm 2FrealG Procedure medYabstd4 xFvec)''G nFintegerG Aar xm% sigx&Freal 5G Aar sxFrealG iFintegerG begin sxFI 0G for i :=1 to n do sxFIsx Q xOiPG xmFIsxNnG sxFI 0G for i :=1 to n do sxFIsx Q 4xOiP B xm5M4xOiPBxm5G sigx 2FIsxNnG Spentru n mareT endG Function f4 6% tFreal 5 F realG begin f FI 2 M 6 N 4 t M t 5G endG Function df6 4 6% t F real 5 F realG begin df6 FI f4 6% t5 N 6G

(.1. .*2T,*"U;**

)&0

endG Function dft 4 6% t F real 5 F realG begin dft FI -2 M f4 6% t5 N tG endG "/7*+ Jrite4Kintrodu numarul de variabile independente% mIK5G readln4m5G Jrite4Kintrodu numarul de seturi de masuratori% nIK5G readln4n5G for iFI 1 to m do begin Jrite4Kintrodu valorile xOK%iF 2%KPK5G for j :=1 to n do read4valxOjP5G medYabstd4valx%n%xmediuOiP% sigx 2OiP5G endG fmediu FI f4xmediuO 1P% xmediuO 2P5G sig)fm& FI 2[,4 df64xmediuO)P% xmediuO&P5 5G sig&fm& FI 2[,4 dft4xmediuO)P% xmediuO&P5 5G sigfm 2 FI sig 1fm 2 M sigx 2O 1P Q sig 2fm 2 M sigxO 2PG Jriteln4K6IK% xmediuO)PF)'F&% KQNBK% 2[,T4sigx&O)P5F)'F&5G Jriteln4KtIK% xmediuO&PF)'F&% KQNBK% 2[,T4sigx&O&P5F)'F&5G Jriteln4KgIK%fmediuF)'F&% KQNBK% 2[,T4sigfm&5F)'F&5G /+..

(.1

.istribu!ii

*n cadrul unei m sur tori se 3ncearca obtinerea valorii ]adevarate] a m rimii fizice. Ceea ce obtinem de obicei este valoarea medie care este o aproximare a valorii adevarate cu atat mai buna cu cat numarul de masur tori este mai mare. .ar valoarea pentru marimea fizica masurata desi nu este unica nu este totusi libera a fi oricare. /a are o distribuie care de obicei poate fi aproximata cu o functie matematica simpla numita functie densitate de probabilitate% p4x5% sau functie de distributie. Aceasta 3nseamn ca probabilitatea de a obtine o valoare x 3n intervalul 4x% xQdx5 este data de p4x5dx dac variabila x variaza continuu si de ; 1 2 % pentru 1 2 dac x are valori discrete.

129

CAP*T-LUL (. 2TAT*2T*CA Functia de distributie satisface conditia de normare la unitateF p4x5dx =1 8. 12% n a p 4 x i 5 =1 pentru x continuu si

i =1 pentru x discret% n fiind num arul de valori posibile pentru 1 i Parametrii important ce caracterizeaza o distributie suntF valoarea medie definit a de
1; 1%<1

4(.)15 sau

A 3 6 xip4xi5 i =1 si abaterea p tratica medie 4varianta5 definit deF 1 = v5 2 ; 1%<1 3" 1 2 , => 2 9.14% cu sau
V I a4xi U v5 p4xi5 i =1
2 2

-OG

/-OG

Htt x 2p4x5dx

(.1.)

.istributia normal

.istributia normala sau distributia 7auss este distributia cea mai des folosita 3n prelucrarea datelor experimentale. Forma sa esteF . .4 5 1 p x I Ue av 2n 4 x B C )2
4( )=5

si contine 2 parametri independent% > si ?, 4Fig.)5. .istributia 7auss are urmatoarele proprietatiF

(.1. .*2T,*"U;** ). este normata la unitate


; 1%<1 I 1

)&8

4(.)>5

&. este simetric fata de dreapta x I 7 3n sensul ca p4x ) 5 I p4x & 5 dac eg B xie I ex 2 B ge 1. admite un singur maxim% la x I g% p4g5 I gB 72g $. prin integrare numerica se poate verifica faptul c a probabilitatea ca o valoare m surat xM s apartina intervalului 4g U a% g Q a5 esteF
r M@C r4g U # H 1 H 7 Q #% 3 ; 1%<1 I '.>81 4(.)05 dC UC

analog pentru intervalele de 2# si 1a% r4u U &a H x H g Q &a5 I '% 8=$ r4g U 1a H x H 7 Q a5 I '.8801 .e unde se vede ca pentru o marime% ale carei valori sunt distribuite 7auss% valoarea ei apare cu o probabilitate deF V >8%1 m 3n intervalul 4g U #, 7 Q a5 V 8=%$ m 3n intervalul 4g U 2#, 7 Q &a5 V 88%0 m 3n intervalul 4g U 1a% 7 Q 1a5

Concludem astfel ca gresim putin 4 cu mai putin de '%1m5 dac arunc valorile ce nu apartin intervalului 4g U 1a% 7 Q 1a5. *ata un program care da valorile numerice de mai sus pentru integralele pe intervalele considerate folosind un set de valori pentru care se calculeaza g si a.

)1'

CAP*T-LUL (. 2TAT*2T*CA

/:>'.PA2 program distY7aussG uses crtG t#pe fct I function4x F real5 F realG const pi I 1.)$)=8G var x F arra#O 1.. 100P of realG s% xmediu% sigx% xmin% xmax F realG r F arra#O)..1P of realG i% n F integerG function simpson4a% b F realG n F integerG f F fct5 F realG var s% 6 F realG i F integerG begin 6 FI 4b B a5N 2NnG s FI f4a5 Q f4b5G for i FI 1 to 2 M n do if i mod 2=0 t6en s FI s Q 2 M f4aQiM65 else s FI s Q $ M f4aQiM65 G simpson FI s M 6 N 1G endG Send 2impsonT SXFQT function 7auss 4 x F real5 F realG begin gauss FI exp4B4xBxmediu5NsigxM4xBxmediu5N 2Nsigx5G endG Send 7aussT SXFBT "/7*+ Sprogramul principalT clrscrG Jrite4Kintrodu numarul de valori% nIK5G readln4n5G Jriteln4Kintrodu valorile x4i5FK5G for i FI 1 to n do read4xOiP5G s FI 0G for i FI 1 to n do s FI s Q xOiPG xmediu FI sNnG s FI 0G for i FI 1 to n do s F I s Q sRr4xOiPBxmediu5G sigx FI sRrt4sNn5G Jriteln4KxmediuIK% xmediu% K sigxIK% sigx5G for i FI ) to 1 do begin xmin FI xmediu B iMsigxG xmax FI xmediu Q iMsigxG rOiP FI simpson4xmin% xmax% 20% gauss5NsigxNsRrt4 2Mpi5G

(.1. .*2T,*"U;**

)1)

endG for iFI ) to 1 do begin Jriteln4Kr4xmediuBK%iF 1%KMsigxHIxHIxmediuQK%iF 1%KMsigx5IK%rOiP5G Jriteln4Kr este probabilitatea ca o valoare x sa cada inK5G Jriteln4Kintervalul de )% & sau 1 abateri standard in jurulK5G Jriteln4K valorii mediiK5G endG repeat until De#pressedG /+.. (.1.& .istributia Poisson

.istributia Poisson descrie aparitia evenimentelor rare% adica a evenimentelor a caror probabilitate de aparitie este foarte mica si constant . Aceasta distribuie este foarte importanta pentru masuratorile de radiatii unde se 3nregistreaza dezintegr ri putine fata de num rul foarte mare al nucleelor prezente. Forma ei esteF mD p4D5 I B D r A = )
D

4(.)(5

unde D este valoarea obtinut pentru numarul de dezintegrari 3nregistrate 3n intervale egale de timp iar m este valoarea medie data deF

m I UDBBBBBBBBBB i =0 n i

E E

) #1 C + L /

23 0 n i D i

4(.)85

) # 1 ev-,

3n care + 2 este frecventa cu care sBa obtinut valoarea D i .


B

+ I a ni i =0 este num arul total de m asur atori. Propriet ti ale distributiei PoissonF D 1! este normata la unitateG deoarece "=0 m I A ) rezultaF
a P4D5 I )

)#1

4(.&'5

4(.&)5 D =0

)1&
2! valoarea medie este m.
D

CAP*T-LUL (. 2TAT*2T*Cl

3 D, B ;

B%

ro B =A 3 42 B E B B =0 B =0 B /

/)

CF U B/l "0 4DU*5T e B m I

H(K & & 5

3! abaterea standard este kNU


2& D 2 I a Dc p4D5 p I aOD4D U 15 Q DPp4D5 D =0 D =0

CF

rU B = 2 a 4DU 25h e B m Q

CF C) B = l a 4DUT5T e B m I

-2

rezult ca4vezi si ecuatia (.$5

GB I v D2 U

#$2

I H:)

4(.&15

4! probabilitatea de a ob!ine zero evenimente 4numar de dezintegrari zero5 este diferita de zero si cu atat mai mare cu cat valoarea medie% m% a variabilei D este mai mica. 5! deoarece variabila D ia doar valori 3ntregi% reprezentarea grafica a functiei p4D5 este o 6istograma. Figura & prezinta doua 6istograme pentru diferite valori medii% m% 3ntregi. 2e vede ca distributia este mai asimetrica pentru m mai mic si ca p4mB 15 I p4m5 dac m este 3ntregF rgU)I 1 rgU)I 1 ; ) U )5 I TBBBBg A / ) I B 4 g A 4m U 15h ) ) U 15h
/ )

I U e B m I p4m5 4(.&$5 mh

6! distributia Poisson are un singur parametru independent. Acesta este valoarea medie m.

/:>$.PA2 program distrYPoissonG uses crt% grap6G Sverifica distributia Poisson si reprezint 6istogramaG valori D intre 0 si 10% valori nl intre 0 si 100T

(.1. .*2T,*"U;**

)11

t#pe vectorIarra#O 0.. 10P of integerG const DFvectorI4'% )% &% 1% $% =% 6% 0% 8% 8% )'5G nDFvectorI41=% 0'% 8(% )''% 0'% $'% 1'% &'% )'% =% &5G label unu% doi% treiG var nDmax% Dmax% snD% sDnDFintegerG cxFarra#O 0.. 10P of stringO 2PG Dmediu% sigD% sc#% sDnD 1FrealG niuDFvectorG i% scx% gd% gm% ix% i# 1% i# 2FintegerG gFc6arG "/7*+ sDnD FI 0G snD FI 0G Dmax FI 10G for i FI 0 to Dmax do begin sDnD FI sDnDQnDOiPMDOiPG snD FI snDQnDOiPG endG Dmediu FI 1. M sDnDNsnDG S 1. pentru a transforma in real rezultatulT sDnD 1 FI 0G for i FI 0 to Dmax do sDnD 1 FI sDnD 1QsRr4DOiPBDmediu5MnDOiPG sigD FI sRrt4 1.MsDnD 1NsnD5G niuDO'P FI ,-U+.4snDMexp4BDmediu55G for i FI ) to Dmax do niuDOiP FI ,-U+.4niuDOiB)PMDmediuNi5G Jriteln4K D n4D5 niu4D5 K5G JritelnG for i FI' to Dmax do Jriteln4DOiPF0% nDOiPF0% niuDOiPF05G treiF Jrite4Kdoriti 6istogramaf4dNn5K5G readln4g5G if 4gIKnK5 or 4gIK+K5 t6en goto unuG if 4gIKdK5 or 4gIK.K5 t6en goto doiG goto treiG doiF Sreprezintare 6istogramaT nDmax FI nDO 0PG if nDmax H niuDO 0P t6en nDmax FI niuDO 0PG for i :=1 to Dmax do begin if nDmax H nDOiP t6en nDmax FI nDOiPG if nDmax H niuDOiP t6en nDmax FI niuDOiP endG scx FI ='G sc# FI 1''.NnDmaxG gd FI detectG *nit7rap64gd% gm% KktpkbgiK5G

)1$

CAP*T-LUL (. 2TAT*2T*Cl

setlinest#le4 0% 0% 15G S cu linie continua nD% cu linie intrerupta niuDT line4)'% 11'% )'QscxM4DmaxQ)5% 11'5G Slinia de jos a 6istogrameiT line4)'% 11'% )'% 11'B round4sc#MnDO'P55G moveto4)'% 11'Bround4sc#MnDO'P55G linerel4scx% '5G for i FI 1 to Dmax do S6istograma in nDT begin ix FI )'YiMscxG i#) FI 11'Bround4sc#MnDOiB)P55G i#& FI 11'Bround4sc#MnDOiP55G line4ix% i# 1% ix% i# 25G moveto4ix% i# 25G linerel4scx% 05G endG moveto44DmaxQ)5MscxQ)'% i#&5G lineto44DmaxQ)5MscxQ)'% 11'5G setlinest#le4)%'%)5G line 4)'%11'%)'%11'Bround4sc#MniuDO'P55G moveto4)'% 11'B round4sc#MniuDO'P55G linerel4scx% '5G for i FI 1 to Dmax do S6istograma in niuDT begin ix FI 10QiMscxG i#) FI 11'Bround4sc#MniuDOiB)P5G i#& FI 11'Bround4sc#MniuDOiP5G line4ix% i# 1% ix% i# 25G moveto4ix% i# 25G linerel4scx% 05G endG moveto44DmaxQ)5MscxQ)'% i#&5G lineto44DmaxQ)5MscxQ)'% 11'5G for i FI 0 to Dmax do begin str4i%cxOiP5G outtextx#41=QiMscx% 11=% cxOiP5G endG repeat until De#pressedG closegrap6G unuF /+..

(.$

Cetoda celor mai mici p trate pentru o dreapta valorile unei marimi fizice Q b 5 si obtinem valorile lui # punctele nu se aseaz dreapta printre punctele

Presupunem ca masuram 3n punctele xO)P..xOnP # ce stim ca depinde liniar de x 4 # I aMx #O 1P..#OnP. .in cauza erorilor # 2 % 3n masurarea perfect pe o dreapta. Cum trecem totusi experimentale si cum

(.$. C/T-.A C/L-, CA* C*C* PlT,AT/ P/+T,U - .,/APTl 13$ ob!inem parametrii eif .in considerente statistice se spune c dreapta care descrie cel mai bine punctele experimentale este cea care satisface conditiaF 2 I a 4Ai B a B %)2 I mm iIl # 2 .in I ' rezult F da
n n x2 a a :& Q > a : I a :F 23l a 2 23l # 2 23l # 2
+

4(.&=5

4(B&>5

si din df I 0 rezult F

+ + i:i %
%

A 1 A V2

n Ai

72 7 a2 E &2
Q

* -L 1

un sistem de & ecuatii cu & necunoscute% a si b. +otand -7 I ; 2 I ponderea U i unei m sur tori% sistemul se scrieF n n n aaPi: 2 Q bapi:i I a Pi:iAi iIl iIl iIl n n n #7P2X2 Q bapi I a Pi Ai iIl iIl iIl
2olutiile suntF
a

4(.&05

I / Pi / Pi x iAi B / Pi: / Pi Ai /Pi /Pi: 2 B 4/Pi:i )2

4( &(5 .

b I / Pi: 2 / PiAi B / Pi:i / Pi:iAi / Pi / Pi: 2 B 4 / Pi:i )2 .ac a l I a 2 I ... I a n atunci P l I P 2 I ... I P n si expresiile pentru a si b devin cele 3ntalnite adesea 3n fitul cu o dreapta prin metoda celor mai mici patrateF 4(.&85 n / : 2 B 4 / :i )2
/

>

x 2 / Ai B / :i / :iAi gx 2 B 4/ :i )2

)1>

CAP*T-LUL (. 2TAT*2T*CA

Pentru a gasi erorile cu care sunt determinati parametrii a si b ai dreptei aplicam teorema de propagare a erorilor 4ec. (.)'5F # I a4x% J% g a% 4da \2

K Oax L
# M

M s#

4da \2
#

4(.1'5

I 4%5g bI
b x #

2 1bK 2 a % Q N/O/JP #

Cum am presupus ca erori se fac doar 3n # rezulta ca # 1 I ' siF

a#

a cu
ay1

I ay2 I ... U

aynCumF

Q da
p#i rezultaF a
#

S v %
2

2 an 2 a

da

4(.1)5

+12 U / 12 j/x ,2

U 4/ 12% 2 _
n

4(.1&5

j/x U 4/ 12 5
2
E

## 2

4(.115

La fel dinF K db Y d# i

x2 Y Y k K S1 U ii i j/x 2 U 4/ 12% 2
1 '2 a#

4(.1$5

rezult a

\+1

'

U 4 12 5

4(.1=5

/:>).PA2 program fitYdreaptaG Smetoda celor mai mici patrateT uses crt% grap6G label unu% doi% trei% patruG var x% #% z F arra#O 1.. 100P of realG sx% s#% sx#% sx 2% sig#% num% a% bFrealG

(.$. C/T-.A C/L-, CA* C*C* PlT,AT/ P/+T,U - .,/APTA 13T siga% sigb% #max% scx% sc#FrealG i% n% gd% gm% px% p#.sigp#FintegerG gFc6arG "/7*+ Jrite4Kintrodu numar de puncte4x%#5 masurate% nI5G readln4n5G Jriteln4Kintrodu valorile xOiP% #OiP% iI 1%n% inK5G Jriteln4K ordineaFxO 1PHxO 2PH...Hx OnPK5G Jriteln4Kcate o perec6e xOiP% #OiP pe linieK5G for i FI 1 to n do readln4xOiP% #OiP5G Jrite4Kintrodu eroarea in #% sig#IK5G readln4sig#5G sx FI 0G s# FI 0G sx# FI 0G sx 2 FI 0G Sinitializare pentru sumeT for i :=1 to n do begin sx FI sx Q xOiPG s# FI s# Q #OiPG sx# FI sx# Q xOiPM#OiPG sx 2 FI sx 2 Q xOiTMxOiPG endG num FI nMsx 2 BsxMsxG Scalcul numitor si verificare cu zeroT if num I 0 t6en goto unuG Scalcul parametrii dreptei si erorile lorT a FI 4nMsx# B sxMs#5NnumG b FI 4sx 2Ms# B sxMsx#5NnumG siga FI 2[,T4nNnum5Msig#G sigb FI 2[,T4sx&Nnum5Msig#G for i FI 1 to n do zOiP FI aMxOiT Q bG Spunctele de pe dreaptaT <riteln4K i x # #IaxQb K5G Sscrie rezultateT for i FI ) to n do Jriteln4iF1% xOiPF(F&% #OiPF(F&% zOiPF(F&5G Jriteln4Kparametrii dreptei #IaxQb suntFK5G Jriteln4KaI K%aF 8F 2% KQNBK%sigaF 8F 25G Jriteln4KbI K%bF 8F 2% KQNBK%sigbF 8F 25G treiF Jrite4Kdoriti reprezentare graficaf4dNn5K5G readln4g5G if 4gIKnK5 or 4gIK+K5 t6en goto doiG if 4gIKdK5 or 4gIK.K5 t6en goto patru else goto treiG Sreprezentare grafica a dreptei si punctelor experimentaleT patruF #max FI #O 1PG if #max H zO 1P t6en #max FI zO 1PG for i :=2 to n do begin if #max H #OiP t6en #max FI #OiPG if #max H zOiP t6en #max FI zOiPG endG scx FI >''. NxOnPG sc# FI 1''.N#maxG Sfactori de scalareT

)1(

CAP*T-LUL (. 2TAT*2T*Cl

gdFIdetectG *nit7rap64gd%gm%KktpkbgiK5G line4=%=%=%1''5G line4=% 1''% >''% 1''5G Saxele de coordonate% -# si -xT for i FI 1 to n do begin px FI round4scxMxOiP5G p# FI 1'' B round4sc#M#OiP5G sigp# FI round4sc#Msig#5G circle4px% p#% sigp# div 15G putpixel4px% p#% )=5G endG line4=% 1''Bround4sc#Mb5% round4scxMxOnP5% 1''Bround4sc#MzOnP55G repeat until De#pressedG closegrap6G goto doiG unuF Jriteln4Kcalcul imposibilK5G doiF /+..

(.= Ccmmp pentru o parabol si pentru un polinom de grad 1 .aca punctele experimentale se ateapt s descrie o parabol # I #F Q #, 11 Q
G 2U atunci plecand tot de la conditiaF n 2 I g&4# 2 = # . = # 1 1 2 = # 2 1 i)2 3 )2+ 2 =1

obtinem urmatorul sistem de 1 ecuatii cu 1 necunoscute 4a ' % a 1 i a & 5 din anularea derivatelor partiale / V = % si / V = F L /L FGWX F#H , <# 2
A(' ) )

n n n #F+ @ #742 X2 @ #742 1 2 3 42 J2 23 1 231 23 1


+ + + + # F D l 1 2 Q a1 a x2 Q a2 a x3 I a xi#i i =1 i =1 i =1 i =1 nnn a o a x 2 Q a1 a x 3 Q a2 a x4 I a x&#i i=1 i=1 i=1

(.=. CCCCP P/+T,U - PA,A"-LA @* P/+T,U U+P-L*+-C./ 7,A. 3130 .aca punctele experimentale se asteapt sa descrie un polinom de grad 1 & A I ao Q a l x Q a & x Q a 1 x 1

atunci conditia de minim pentru suma p tratelor distantelor punctelor ex B perimentale fata de curbaF n 2 I a 4# B a 0 B a i x i B a 2x 2 B a 3x 3)2 I min iIl conduce prin aceeasi procedura ca mai sus la un sistem de $ ecuatii algebrice liniare 3n necunoscutele a ' % a l % a 2 si a 1 . 2istemul de ecuatii algebrice lineare se rezolv prin metoda 7aussB dordan folosind procedura gaussj4var aFglnpb#npG n%npFintegerG var bFglnpb#mpG m%mpFinteger5 din Nref.bib. +umerical ,ecipiesN Procedura cere ca programul principal ce o foloseste sa defineasca tipurileF t#pe glnpb#npIarra#O 1..np% 1..npP glnpb#mpIarra#O 1..np% 1..mpP glnpIarra#O 1..npP of integerG of of realG realG

a este matricea coeficientilor si are dimensiunea np x np n este numarul de ecuatii ale sistemului% n H nP b este matricea termenilor liberi% de dimensiune np x mp atunci cand cu aceeasi matrice a se rezolva mai multe sisteme de ecuatii ce difer prin ter B menii liberi 43n cazul nostru matricea b are o singura coloana5. m este numarul sistemelor de ecuatii de rezolvat pentru aceeasi matrice a. .atele experimentale se scriu 3ntrBun fisier de tip text. Urmatoarele & programe citesc datele din fisierele respective% realizeaz fitul cu parabol si% respectiv% polinom de grad 1 si reprezinta grafic curbele si punctele experimentale. /:>&.PA2 program fitYparabolaG Smetoda celor mai mici patrateT uses grap6G const npI)'G mpI)'G nI1G t#pe glnpb#npIarra#O 1..np% 1..npP of realG

)$'

CAP*T-LUL (. 2TAT*2T*CA

glnpb#mpIarra#O 1..np% 1..mpP of realG glnpIarra#O 1..npP of integerG label doi% trei% patruG var x% #% zFarra#O 1.. 100P of realG fFtextG gFc6arG sx% sx&% sx1% sx$% s#% sx#% sx&#% sig#% ap% bp% cpFrealG aFglnpb#npG bFglnpb#mpG #max% #min% scx% sc#FrealG i% npct% gd% gm% px% p#% sigp#FintegerG SXi gaussj.incT "/7*+ assign4f%Kparabola.datK5G reset4f5G readln4f% npct5G for i :=1 to npct do readln4f% xOiP% #OiP5G sxFI'G sx&FI'G sx1FI'G sx$FI'G s#FI 0G sx#FI 0G sx 2#FI 0G Sinitializare pentru sumeT for i :=1 to npct do begin sxFIsxQxOiPG sx&FIsx&QxOiPMxOiPG sx1FIsx1QsRr4xOiP5MxOiPG sx$FIsx$QsRr4xOiP5MsRr4xOiP5G s#FIs#Q#OiPG sx#FIsx#QxOiPM#OiPG sx 2#FIsx 2#QsRr4xOiP5M#OiPG endG Sformarea matricilor a si b pentru sistemul de ecuatii algebrice liniareT aO)%)PFInpctG aO)%&PFIsxG aO)%1PFIsx&G bO)%)PFIs#G aO&%)PFIsxG aO&%&PFIsx&G aO&%1PFIsx1G bO&%)PFIsx#G aO1%)PFIsx&G aO1%&PFIsx1G aO1%1PFIsx$G bO1%)PFIsx&#G gaussj4a% n% np% b% 1% mp5G Sapelare procedura gaussjT Scalculul punctelor la xOiP de pe parabola cu parametrii obtinutiT for iFI) to npct do zOiPFIbO)%)PQbO&%)PMxOiPQbO1%)PMxOiPMxOiP Sscrie rezultateleT Jriteln4K i x # #IbO)%)PQbO&%)PMxQbO1%)TMxi& K5G for iFI) to npct do Jriteln4iF1%xOiPF(F&% #OiPF(F&% zOiPF(F&5G Jriteln4Kparametrii parabolei #IaQbxQcx *2 suntFK5G Jriteln4KaIK%bO)%)PF)'F1%K bIK%bO&%)PF)'F1%K cIK%bO1%)PF)'F15G readlnG treiF Jrite4Kdoriti reprezentare graficaf4dNn5K5G readln4g5G if upcase4g5IK+Kt6en goto doiG if upcase4g5IK.Kt6en goto patru else goto treiG

(.=. CCCCP P/+T,U - PA,A"-Ll @* P/+T,U U+ P-L*+-C ./ 7,A. 3141 Sreprezentare grafica a parabolei si punctelor experimentaleT patruF #maxFI#O 1PG #minFI#O 1PG if #max H zO 1P t6en #maxFIzO 1PG if #min L zO 1P t6en #minFIzO 1PG for i :=2 to npct do begin if #max H #OiP t6en #maxFI#OiPG if #max H zOiP t6en #maxFIzOiPG if #min L #OiP t6en #minFI#OiPG if #min L zOiP t6en #minFIzOiPG endG scxFI1''.N4xOnpctPBxO)P5G S aici a fost nevoie de ordonarea crescatoare a lui xOiP ceruta in dateT sc#FI 200.N 4#maxB#min5G Sscx si sc# sunt factorii de scalareT gdFIdetectG *nit7rap64gd% gm% KktpkbgiK5G line4=% =% =% 1''5G line4=% 1''% >''% 1''5 Saxele de coordonateT outtextx#4>&'%1''%KxK5G outtextx#4)'% =% K#K5G sigp#FIround4sc#Msig#5G for i :=1 to npct do begin pxFIround4scxMxOiP5G p#FI1''Bround4sc#M#OiP5G circle4px% p#% sigp#5G putpixel4px% p#% )=5G pxFIround4scxM4xOiPQ 0. 255G p#FI1''Bround4sc#M4bO)%)PQbO&%)PM4xOiPQ'.&5QbO1%)PMsRr4xOiPQ'.&555 putpixel4px%p#%=5G endG readlnG closegrap6G doiF /+..

Fisierul ]parabola.dat]arata% de exemplu% astfelF 8 0! 1! 2! 3! ).= $.= 8.= )1.=

)$&
4! 5! 6! 7! 8!

CAP*T-LUL (. 2TAT*2T*CA &=.= 1>.= $(.= >$.= ('.= '.=

Parametrii parabolei # I a Q 6x Q cx 2 ce fiteaz aceste puncte suntF aIB'.$8> bI&.(>& cI'.8'0 /:>1.PA2 program mcmpYpolinomG uses grap6G const npI 10G mpI 10G t#pe glnpb#npIarra#O 1..np% 1..npP of realG glnpb#mpIarra#O 1..np% 1..mpP of realG glnpIarra#O 1..npP of integerG var x% #% #tFarra#O)..1'P of realG aFglnpb#npG bFglnpb#mpG i% j% nFb#teG gd% gmFintegerG px% p#%p#tFintegerG scx% sc#% #min% #maxFrealG sx 6% sx=% sx$% sx1% sx&% sx% sx1#% sx&#% sx#% s#FrealG a'% a)% a&% a1Freal fFtextG numefFstringG SXi gauss.incT "/7*+ Jrite4Kintrodu nume fisier cu date de intrareFK5G readln4numef5G assign4f%numef5G reset4f5G readln4f%n5G for i :=1 to n do readln4f% xOiP% #OiP5G close4f5G sx>FI'G sx=FI'G sx$FI'G sx1FI'G sx&FI'G sxFI'G sx1#FI'G sx&#FI'G sx#FI'G s#FI'G for i :=1 to n do begin sx 6FIsx 6QsRr4xOiP5MsRr4xOiP5MsRr4xOiP5G sx=FIsx=Q sRr4xOiP5MsRr4xOiP5MxOiPG sx$FIsx$QsRr4xOiP5MsRr4xOiP5G sx1FIsx1QsRr4xOiP5MxOiPG sx&FIsx&QsRr4xOiP5G

(.=. CCCCP P/+T,U - PA,A"-LA @* P/+T,U U+ P-L*+-C ./ 7,A. 3143 sxFIsxQxOiPG sx1#FIsx1#QsRr4xOiP5MxOiPM#OiPG sx 2#FIsx 2#QsRr4xOiP5M#OiPG sx#FIsx#QxOiPM#OiPG s#FIs#Q#OiPG endG aO)%)PFInG aO)%&PFIsxG aO)%1PFIsx&G aO)%$PFIsx1G bO 1% 1PFIs#G aO&%)PFIsxG aO&%&PFIsx&G aO&%1PFIsx1G aO&%$PFIsx$G bO 2% 1PFIsx#G aO1%)PFIsx&G aO1%&PFIsx1G aO1%1PFIsx$G aO1%$PFIsx=G bO1%)PFIsx&#G aO$%)PFIsx1G aO$%&PFIsx$G aO$%1PFIsx=G aO$%$PFIsx>G bO$%)PFIsx1#G Jriteln4Kmatricea a esteFK5G for iFI) to $ do begin for jFI) to $ do Jrite4aOi% jPF)0F)5G JritelnG endG readlnG Jriteln4Kmatricea b esteFK5G for iFI) to $ do Jriteln4bOi%)PF)=F=5G readlnG gaussj4a%$%np%b%)%mp5G Jriteln4Kparametrii poligonului #Ia'Qa)MxQa&Mxi&Qa1Mxi1 suntFK5G a'FIbO)%)PG a)FIbO&%)PG a&FIbO1%)PG a1FIbO$%)PG Jriteln4Ka 0I K % a 0% K a 1I K % a 15 G Jriteln4Ka&IK%a&%K a1IK%a15G readlnG Jriteln4K i x # #tK5G f o r i :=1 to n do #tOiPFIa'Qa)MxOiPQa&MxOiPMxOiPQa1MsRr4xOiP5MxOiP G for i :=1 to n do Jriteln4iF1% xOiPF)'F)% #OiPF)'F=% #tOiPF)'F=5G #minFI)./1'G #maxFIB)./1'G for i :=1 to n do begin if #min L #OiP t6en #minFI#OiPG if #min L #tOiT t6en #minFI#tOiPG if #max H #OiP t6en #maxFI#OiPG if #max H #tOiP t6en #maxFI#tOiPG

)$$

CAP*T-LUL (. 2TAT*2T*CA

endG Jriteln4K#minIK% #min% K #maxIK% #max5G ,/A.L+G sc#FI1''N4#maxB#min5G scxFI 6. gdFIdetectG *nit7rap64gd% gm% KktpkbgiK5G setcolor415G for i :=1 to n do begin pxFItrunc4scxMxOiPQ'.=5G p#FI$''Qtrunc4sc#M#minQ'.=5Btrunc4sc#M#OiPQ'.=5G p#tFI$''Qtrunc4sc#M#minQ'.=5Btrunc4sc#M#tOiPQ'.=5G circle4pxQ=% p#% &5G putpixel4pxQ=% p#t% &5G endG readlnG p#tFI$''Qtrunc4sc#M#minQ'.=5B trunc4sc#Q'.=5G line4trunc4scxMxO)P5Q=% p#t% trunc4scxMxOnP5Q=% p#t5G line4trunc4scxMxO)P5Q=% $''Qtrunc4sc#M#minQ'.=5% trunc4scxMxO)P5Q=% $''B trunc4sc#M#minQ'.=5Btrunc4sc#M#maxQ&'.=55G readlnG closegrap6G /+..

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