Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Instructiunile limbajului PASCAL - GOTO, WHILE, CASE, REPEAT

pascal



+ Font mai mare | - Font mai mic



o       Instructiunile limbajului PASCAL

Blocul executabil al programelor, procedurilor si functiilor se compune din instructiuni; acestea descriu actiunile ce vor fi executate asupra datelor. Tipurile de instructiuni definite in TURBO PASCAL rezulta din urmatoarea clasificare.



Instructiuni simple

Sunt instructiuni care nu contin alte instructiuni. Instructiunile simple se incheie cu ; daca nu urmeaza END.

1. Instructiunea de atribuire. Inlocuieste valoarea curenta a unei variabile cu o noua valoare specificata sub forma unei expresii. Simbolul instructiunii de atribuire este : = (este ilegala separarea caracterelor : si =).

Observatii:

a. Prin executia unei instructiuni de atribuire se evalueaza expresia din dreapta si se transmite valoarea calculata variabilei din stanga, anterior declarata la rubrica de declaratii variabile.

b. Valoarea expresiei trebuie sa fie de acelasi tip cu variabila sau de tip compatibil. Doua tipuri distincte sunt compatibile daca ambele sunt subdomenii ale aceluiasi tip de baza sau unul este subdomeniu celuilalt. (Exemplu: tipul intreg este subdomeniu al tipului REAL).

c. Deoarece operatorii + - * se utilizeaza atat pentru numere intregi cat si reale, intr-o expresie pot sa apara atat operanzi intregi cat si reali, rezultatul fiind real.

O expresie reprezinta o formula care defineste modul de calcul pentru o valoare prin aplicarea unor operatori asupra unor operanzi: constante, variabile, functii. Evaluarea unei expresii se face conform unor prioritati fixe, in sensul ca daca intr-o expresie apar mai multi operatori, in absenta parantezelor vor fi aplicati intai operatorii cu prioritate mai mare; pentru operatorii de aceeasi prioritate evaluarea se face de la stanga la dreapta. In PASCAL exista patru niveluri de prioritate pentru operatori:

Nivel de prioritate operatori

NOT

* DIV MOD AND

+ - OR

= <> > < >= <= IN

Folosirea parantezelor modifica ordinea de evaluare, expresia din paranteza fiind cea care va fi evaluata mai intai. Se recomanda folosirea fara restrictii a parantezelor. La scrierea expresiilor se recomanda urmatoarele precautii:

- sa nu se omita operatorul de inmultire intre operanzi;

- sa nu apara doi operanzi consecutivi (x* -y gresit; corect x*(-y)).

- toti operanzii care intra intr-o expresie sa aiba valori definite in prealabil; in caz contrar valoarea expresiei va fi nedefinita.

2. Apelul de procedura

Procedurile sunt secvente de program (subprograme) care se executa sub comanda programului principal.

-Proceduri standard de intrare/iesire (READ, WRITE).

Orice program, pentru a efectua prelucrari, necesita date. Acestea sunt transmise programului prin intermediul unui periferic de intrare (tastatura, cititor de cartele, disc flexibil) folosind in acest scop o operatie de intrare specificata in program prin apelul la procedura READ (citeste).

Rezultatele prelucrarile obtinute prin executia programului se transfera din memoria calculatorului la un periferic de iesire (imprimanta, display) printr-o operatie de iesire specificata in program prin apelul la procedura WRITE (scrie).

In PASCAL sunt predeclarate fisierele text de intrare/iesire IMPUT si OUTPUT; acestea pot fi specificate in antetul programului.

-Procedura READ

Transferul datelor din fisierul standard IMPUT in memorie se face prin apelul procedurii READ.

-Procedura WRITE

Transferul datelor din memorie in fisierul OUTPUT (si afisarea lor pe ecran) se realizeaza prin apelul procedurii WRITE

Exemplu: PROGRAM MEDIE;

VAR : X1, X2, X3 : INTEGER;

M : REAL;

BEGIN

WRITE ('INTRODUCETI NOTELE');

READ (X1, X2, X3);

M (X1+X2+X3)/3;

WRITELN;

WRITE ('MEDIA ESTE:', M);

END.

Programul calculeaza media a trei numere intregi (note) care vor fi introduse de la tastatura. La tastarea notelor, aceasta vor fi separate prin blanck.

La rularea programului se afiseaza:

INTRODUCETI NOTELE

9 8 7 [notele se introduc de la tastatura]

MEDIA ESTE : 8.00000000

- Se observa ca mesajele puse intre semne apostrof in procedurile WRITE se transcriu pe ecran in aceeasi forma, iar pentru variabile se scrie valoarea.

- La citirea datelor s-au facut atribuirile:

X1 :=9

X2 :=8

X3 := 7

- Daca cele 3 numere intregi sunt scrise 9 8 7 (fara a fi separate prin blanck) se face atribuirea:

X1 :=987

si calculatorul asteapta celelalte doua numere.

- Pentru a limita numarul cifrelor din partea fractionara se poate utiliza varianta:

WRITE ('MEDIA ESTE :', M : 4 : 2);

Rezultatul: MEDIA ESTE : 8.00

(s-a specificat ca partea intreaga sa fie limitata la 2 cifre iar partea fractionara la 2 cifre).

- Media se poate calcula direct, astfel:

WRITE ('MEDIA ESTE :', (X1+X2+X3)/3 :4 :2);

In acest mod se elimina instructiunea de atribuire

M =(X1+X2+X3)/3;

3) Instructiunea de salt (GOTO).

Transfera executia programului la instructiunea precedata de eticheta specificata de GOTO.

Utilizarea instructiunii GOTO permite executarea instructiunilor programului intr-o ordine diferita decat cea in care sunt scrise in program. La executarea instructiunii, programul continua cu instructiunea marcata cu eticheta din instructiunea GOTO.

- Orice instructiune GOTO trebuie sa se refere in mod obligatoriu la eticheta unei instructiuni aflate in acelasi bloc, eticheta fiind declarata in sectiunea LABEL a blocului respectiv. Nu este permis saltul dintr-un bloc in altul (de exemplu din programul principal intr-un subprogram sau invers). Un astfel de salt poate avea efecte imprevizibile, mai ales ca nu este tratat ca eroare de catre compilator.

Exemplu: PROGRAM GW;

Label 12, ABC;

VAR X, Y : REAKL;

BEGIN

READLN;

READ (X, Y);

GOTO ABC;

WRITE (X, Y);



ABC : X := X*X+Y;

WRITE (X, Y);

END.

In exemplul de mai sus, instructiunea marcata cu nu se va executa, deoarece instructiunea GOTO ABC transfera executia direct la X :=X*X+Y.

Instructiuni structurate.

Instructiunile structurate sunt constructii formate din alte instructiuni, executate secvential, conditional sau repetitiv.

1)Instructiunea compusa.

Reprezinta o secventa de instructiuni considerate ca un bloc si executate in ordinea in care sunt scrise. Instructiunile din secventa sunt separate intre ele prin ";" si sunt cuprinse intre cuvintele cheie BEGIN si END.

Exemplu: BEGIN

A :=2;

B :=4.6;

X := (A*B +2*A)/B

END;

Observatie:

Dupa ultima instructiune, semnul ";" poate lipsi.

Instructiunea compusa este tratata sintactic ca o singura instructiune PASCAL, fapt esential in cazurile in care sintaxa instructiunilor structurate permite doar o singura instructiune.

2)Instructiuni conditionate

Aceste instructiuni selecteaza pentru executie o singura instructiune din doua sau mai multe instructiuni componente. In cazul selectiei din doua instructiuni, decizia este determinata de valoarea de adevar a unei conditii. In cazul selectiei din mai multe instructiuni, decizia este determinata de o eticheta; se alege pentru executie instructiunea a carei eticheta este egala cu valoarea curenta a unei expresii folosite ca selector.

Instructiunea IF.

Efectul instructiunii IF:daca expresia cu valoarea logica notata "Conditie" are valoarea "adevarat" (TRUE) se executa numai "instructiunea 1", iar daca are valoarea "fals" (FALSE) se executa numai "instructiunea 2"; instructiunea 2 poate lipsi, caz in care lipseste si cuvantul FALSE.

Observatii:

- Delimitatorul ";" nu trebuie utilizat in interiorul instructiunii IF, deoarece poate schimba efectul instructiunii sau se semnalizeaza eroare de catre compilator,

- Cele doua blocuri "instructiune" din diagrama sintactica trebuie sa fie formate dintr-o singura instructiune PASCAL; daca sunt necesare mai multe instructiuni aceasta se reprezinta printr-o instructiune compusa, caz in care, intre delimitatorii BEGIN si END pot sa apara delimitatorii ";"

- Instructiunea IF poate contine ca "instructiune 1" sau "instructiune 2" tot o instructiune IF; in acest caz delimitatorul ELSE se asociaza cu cel mai apropiat IF.

Exemplul 1:

IF X> = 0 THEN

X 12.0

ELSE

X :=-12.0

Exemplul 2:

PROGRAM ECUATIE;

VAR a, b, c, delta : REAL;

x1, x2 : REAL;

BEGIN

READ (a, b, c);

delta := b*b -4*a*c;

IF delta > = 0 THEN

BEGIN

x1 := (-b + SQRT (delta))/2/a;

x2 := (-b - SQRT (delta))/2/a;

WRITELN;

WRITELN ('x1=', x1, 'x2', x2)

END

ELSE

WRITELN (,Ec. are radacini complexe')

END.

Programul calculeaza radacinile ecuatiei de gradul 2, in cazul ca sunt reale; daca radacinile sunt complexe se afiseaza mesajul

,Ec. are radacini complexe'.

Instructiunea CASE.

Selecteaza pentru executie o singura instructiune dintr-un grup de instructiuni etichetate; selectorul este o expresie de tip ordinal iar etichetele sunt constante din domeniul selectorului (domeniul maxim al selectorului este -32768 . 32767).

Se executa instructiunea etichetata de constanta egala cu valoarea selectorului; daca toate constantele sunt diferite de valoarea selectorului se executa instructiunea precedata de ELSE, iar daca lipseste optiunea ELSE (fiind facultativa), se trece la urmatoarea instructiune din program fara a se executa nici una din instructiunile din lista.

Observatii:

a. Etichetele CASE nu pot fi referite de instructiunea GOTO si nu se declara la rubrica LABEL.

b. O instructiune din lista poate avea mai multe etichete separate prin virgula sau specificate prin valoarea maxima si minima separate de ".." (TURBO PASCAL 6.0).

c. Dupa cuvantul cheie ELSE nu se pune ";" (TURBO PASCAL 6.0).

Exemple:

1. CASE N MOD 5 OF

0 : WRITELN ('NUMARUL N SE DIVIDE PRIN 5');

1, 2, 3, WRITELN ('NUMARUL N NU SE DIVIDE PRIN 5');

2. CASE I OF

0, 2, 4, 6, 8 : WRITELN ('cifra para');

1, 3, 5, 7, 9 : WRITELN ('cifra impara');

100 : WRITELN ('numar intre 10 si 100');

ELSE

WRITELN (,Numar negativ mai mare ca 100');

END;

3)Instructiuni repetitive

Instructiunile repetitive permit executarea repetata a unui grup de instructiuni. Limbajul PASCAL pune la dispozitia utilizatorilor trei tipuri de instructiuni repetitive: WHILE, REPEAT si FOR. Primele doua sunt utile in cazul cand numarul de repetari nu este apriori cunoscut, el depinzand de valoarea de adevar a unei conditii. Instructiunea FOR se utilizeaza in cazul cand numarul de repetari este cunoscut inainte de executia instructiunii.

Instructiunea WHILE.

Determina executia repetata a blocului de instructiuni atat timp cat este adevarata o expresie logica.

Efectul instructiunii: se evalueaza conditia (expresia) cu valoarea logica; daca valoarea ei este "adevarat" se executa blocul "instructiune" o singura data, dupa care se evalueaza din nou valoarea conditiei, si asa mai departe. Instructiunea se incheie cand valoarea conditiei este "fals", caz in care nu se mai executa blocul "instructiune". Numarul de repetari trebuie sa fie finit; de aceea trebuie ca blocul "instructiune" sa actioneze asupra componentelor din "conditie" astfel ca dupa un numar finit de repetari conditia sa ia valoarea "fals", evitandu-se construirea unor cicluri infinite. Daca de la prima testare conditia are valoarea "fals", blocul "instructiune" nu se executa nici o data si se trece la instructiunea urmatoare din program.



Blocul "instructiune" poate contine o singura instructiune PASCAL sau un grup de instructiuni caz in care ele se organizeaza ca instructiune compusa fiind incadrate de BEGIN si END.

Exemple:

I 1;

P 1;

WHILE I <=20 DO

BEGIN

P P*I;

I I+1;

END;

Se calculeaza produsul P=1.2.3.4 ..20 prin executia repetata a blocului de instructiuni:

P : = P*I;

I := I+1;

2): x :=0.5*a;

WHILE ABS (x-a/x) > 1.0E - 7 DO

x :=0.5*(x+a/x);

Se calculeaza radacina patrata din numarul a utilizand formula lui Heron:

xn+1=(x2n+a)/2xn  ;

Se evalueaza precizia:

Xn+1-xn=(a-x2n)/2xn=a/2xn-xn/2=1/2x(a/xn-xn); calculele se incheie cand precizia este mai buna decat 0.00000005.

Instructiunea REPEAT

Determina executia repetata a unui grup de instructiuni pana cand o expresie logica devine adevarata.

Efect: Se executa grupul de instructiuni si apoi se calculeaza valoarea de adevar a expresiei "conditie"; daca este "FALSE" se repeta executia pana cand conditia ia valoarea TRUE spre deosebire de WHILE, grupul de instructiuni se executa cel putin o data. De asemenea, grupul de instructiuni fiind incadrat de cuvintele REPEAT si UNTIL, nu se mai incadreaza cu BEGIN, END.

Observatii: Este necesar ca grupul de instructiuni sa actioneze asupra variabilelor din "conditie", pentru evitarea ciclurilor infinite.

Exemplu: I := 1;

S := 0;

REPEAT

S :=S+I;

I := I+1;

UNTIL I>100;

Calcularea celui mai mare divizor comun a doua numere intregi se poate face cu algoritmul lui Euclid, astfel:

REPEAT

R := A MOD B;

A := B;

B R

UNTIL B=0

WRITE ('CMMD INTRE A si B ESTE:', A);

Instructiunea FOR

Determina executia unei instructiuni in mod repetat (de un numar de ori precizat) prin atribuirea unei succesiuni de valori unei variabile de control .

Blocul "contor" contine identificatorul variabilei de control de tip simplu (exceptand tipul real), declarata in blocul care contine instructiunea FOR; "expresie initiala" si "expresie finala" sunt expresii cu valori compatibile cu tipul contorului, care determina domeniul de valori al contorului. Blocul "instructiune" contine o singura instructiune PASCAL; daca sunt necesare mai multe instructiuni, aceasta se incadreaza intre BEGIN si END formand astfel o instructiune compusa.

Efect: Instructiunea situata dupa cuvantul cheie DO se executa pentru fiecare valoare a variabilei contor din domeniul determinat de valorile expresiilor (initiala si finala). Variabila contor ia la inceput valoarea expresiei initiale: daca se utilizeaza cuvantul TO, valoarea variabilei contor este inlocuita cu succesorul sau, dupa fiecare executie a blocului "instructiune", pana cand contorul atinge valoarea expresiei finale (variabila contor este modificata in sens "crescator"); daca se utilizeaza cuvantul DOWNTO, valoarea variabilei contor este inlocuita cu predecesorul sau dupa fiecare executie a blocului "instructiune", pana cand contorul atinge valoarea expresiei finale (variabila contor este modificata in sens "descrescator").

Observatii: Nu este permisa modificarea valorii contorului in interiorul blocului "instructiune", adica:

- nu se fac atribuiri variabilei contor;

- nu se apeleaza proceduri sau functii in care variabila contor este modificabila;

- variabila contor a unei instructiuni FOR nu poate fi utilizata de o alta instructiune FOR inclusa in prima;

- La iesirea din instructiunea FOR, variabila contor nu este definita (valoarea ei finala este distrusa).

Exemple:

1) Utilizand instructiunea FOR, se calculeaza

suma S= 12+22+32+.+102;

S :=0;

FOR I := 1 TO 10 DO

S:= S+I*I;

2) Utilizand instructiunea FOR se scriu pe ecran literele alfabetului iar variabila nr__car va contine numarul de caractere scrise:

nr__car :=0;

tFOR caracter :='Z' DOWNTO ,A' DO

BEGIN

WRITE (caracter);

nr__car :=nr__car +1;

END;

In acest caz variabila contor este de tip caracter, valoarea initiala fiind ,Z' iar finala ,A'; contorul ia pe rand toate valorile caracter de la Z catre A.

Instructiunea WITH

Permite o referire prescurtata la campurile unui articol (campurile variabilelor de tip RECORD). In interiorul instructiunii WITH campurile uneia sau mai multor variabile de tip RECORD pot fi accesate folosind numai numele campurilor lor, fara numele variabilelor RECORD.

Blocul "instructiune" contine o singura instructiune PASCAL (simpla sau compusa); in cadrul instructiunii referirea la campurile variabilelor de tip RECORD specificate dupa WITH se face doar prin scrierea identificatorilor de camp.

Exemplu: Secventa de program:

DATA.ZIUA :=15;

DATA.LUNA :8;

DATA.ANUL :=DATA.ANUL +1;



este echivalenta cu secventa:

WITH DATA DO

BEGIN

ZIUA : = 15;

LUNA :=

ANUL :=ANUL+1;

END;

In interiorul instructiunii WITH, la intalnirea unui nume de variabila, se testeaza mai intai daca variabila poate fi interpretata ca un nume de camp al unei variabile RECORD. Daca da, variabila va fi interpretata ca atare chiar daca in acel moment este accesibila si alta variabila avand acelasi nume.

4)Proceduri si functii in PASCAL

Procedurile si functiile sunt secvente de program (subprograme) care se executa sub controlul unui program principal. Procedurile si functiile prezinta aceeasi structura in trei sectiuni (antet, sectiune de declaratii, sectiune de instructiuni) ca si programul principal de oricate ori. De aici rezulta si avantajul principal al utilizarii subprogramelor: anumite prelucrari de date care sunt utilizate de mai multe ori intr-un program pot fi organizate ca proceduri sau functii, scrise o singura data si utilizate de un numar de ori pentru diferite seturi de date. Principala deosebire intre procedura si functie este aceea ca functia intoarce programului principal o singura valoare (valoarea functiei), in timp ce procedura intoarce programului principal mai multe valori, care pot fi de tipuri diferite (intreg, real, caracter, boolean, tablou, articol, . etc.).

Exemplu:

PROCEDURE P1 (N : INTEGER; VAR x, y, z : REAL);

VAR I, J : INTEGER

BEGIN

I := N-1;

J :=N+1;

x := x+y+z;

y := I+J;

z := x*y*z;

END.

La apelare, procedura primeste patru valori: pentru N, (care este constanta pentru procedura) si pentru x, y, z, care sunt variabile procedura va transmite programului principal trei valori: valorile x, y, z.

In utilizarea procedurilor apar doua tipuri de parametrii: parametrii formali si parametrii actuali sau efectivi.

Parametrii formali sunt necesari la definirea procedurii pentru a rezerva loc in memorie in vederea memorarii valorilor ce vor fi transmise la sau de la programul principal in momentul apelarii procedurii; este strict necesara precizarea tipului de date la intocmirea listei parametrilor formali.

Parametrii formali trebuie sa fie acelasi tip cu parametrii actuali cu care vor fi inlocuiti.

Parametrii valoare sau constanti servesc pentru transmiterea de date din programul principal catre procedura; de aceea se mai numesc parametri de intrare. Acestia pot fi considerati constante ale procedurii, deoarece daca in interiorul procedurii li se atribuie alte valori, atribuirile nu au efect.

Parametrii variabili servesc pentru transmiterea rezultatelor in exteriorul procedurii, catre programul principal (apelant); de aceea se mai numesc parametri de iesire.

In concluzie, procedurile se definesc cu un numar de parametrii formali specificati prin identificator si tip in lista de parametrii formali specificati prin identificator si tip in lista de parametrii in ordinea aratata de schema sintactica. Cand un program utilizeaza o procedura, instructiunea de apel la procedura contine numele procedurii si lista parametrilor actuali ce vor inlocui parametrii formali din definitie.

Corespondenta dintre cele doua liste se caracterizeaza prin:

- acelasi numar de parametri;

- aceeasi pozitie in lista;

- acelasi tip de date;

Exemplu: Programul AP1 calculeaza aria unui triunghi cand se dau lungimile laturilor, utilizand o procedura cu numele ARIA:

PROGRAM AP1;

VAR S1 : REAL; L, M, N : REAL;

PROCEDURE ARIA (A, B, C : REAL; VAR S : REAL);

VAR P : REAL;

BEGIN

P := (A+B+C)/2

S SQRT (P*(P-A)*(P-B)*(P-C));

END;

BEGIN

READ (L, M, N);

ARIA (L, M, N, S1);

WRITELN;

WRITELN ('ARIA ESTE :', S1);

END.

In programul de mai sus, parametrii formali sunt A, B, C, S, unde A, B, C sunt parametri valoare iar S este parametru variabila, deoarece valoarea lui este calculata de procedura (cu formula lui Heron).

Parametrii actuali sunt: L, M, N, S1, unde L, M, N sunt valori citite de la tastatura prin instructiunea READ (parametri de intrare) iar S1 este variabila in care procedura va transmite valoarea ariei. Rubrica declaratiilor si definitiilor din blocul procedurii contine numai declararea variabilei P = perimetrul ce va fi folosit la calculul ariei. Corespondenta intre parametrii formali si actuali este:

L=A; M=B; N=C; S1=S;

Observatii:

- Parametrul actual corespunzator unui parametru valoare poate fi o expresie a carei valoare insa nu trebuie sa fie de tip fisier sau sa apartina unui tip structurat care implica in definitie un tip fisier.

- Tipurile fisier pot fi transmise numai ca parametri variabila. Specificarea faptului ca un parametru formal este de tip variabila se realizeaza prin utilizarea cuvantului rezervat VAR in fata listei de parametrii.

Functii.

Functiile sunt proceduri particulare care descriu calculul ce conduce la o valoare unica - valoarea functiei, care se asociaza identificatorului functiei. Prin urmare, declararea functiilor are o sintaxa similara cu a procedurilor:

Identificatorul de functie este numele functiei, stabilit de programator si utilizat la apelarea functiei. Lista de parametri formali are aceeasi structura ca la proceduri, cu deosebirea ca singurul parametru variabila este valoarea functiei. De aceea, dupa lista de parametri (daca exista), in mod obligatoriu se specifica tipul rezultatului, adica tipul valorii functiei.

In partea executabila a blocului functiei trebuie sa apara cel putin o instructiune de atribuire catre identificatorul functiei, pentru a se defini in acest fel valoarea functiei. Daca o asemenea instructiune nu exista sau nu este executata, valoarea functiei ce trebuie intoarsa programului apelat, nu este definita.

Exemplu: programul FACTORIAL calculeaza produsul

n!= 1.2.3.n adica factorialul unui numar natural, cand n este cunoscut utilizand functia FACT:

PROGRAM FACTORIAL;

VAR N : INTEGER;

FUNCTION FACT (N : INTEGER) : INTEGER;

VAR I, F : INTEGER;

BEGIN

F :=

FOR I := 2 TO N DO F :=F*I;

FACT :=F;

END;

BEGIN

WRITE ('N='); READLN (N);

WRITELN ('FACTORIAL =', FACT (N));

END.

Partea executabila a programului principal este formata din ultimele 4 linii.

Apelul functiei FACT(N) se face in penultima linie a programului principal, pentru scrierea valorii ei. Apelul unei functii consta in executia partii de instructiuni din blocul executabil al functiei dupa inlocuirea parametrilor formali cu cei actuali. (In cazul din exemplu, functia FACT are un singur parametru formal, N, care este inlocuit la apelare cu valoarea introdusa de la tastatura prin executia instructiunii READLN (N)).





Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 12609
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved