Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

pascal



+ Font mai mare | - Font mai mic



INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI



Aceste instruc iuni fac parte din categoria instruc iunilor executabile i au rolul de a dirija execu ia programului in func ie de anumite condi ii care la randul lor pot fi adevarate sau false, in func ie de valorile datelor implicate.

Dar pentru ca am lasat mai sus un semn de intrebare sa trecem la:

INSTRUCTIUNEA FOR

Aceasta instruc iune ne ofera posibilitatea executarii unei instruc iuni (sau mai multe) de un numar fixat de ori.

Formatul general al instruc iunii este urmatorul:

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

FOR variabila:= primul TO ultimul DO instruc iune

sau

FOR variabila:= ultimul DOWNTO primul DO instruc iune

Mod de func ionare: variabila (care se mai nume te variabila de control) este ini ializata cu valoarea din primul. Apoi cat timp variabila nu a ajuns inca la ultimul, se executa instruc iune i se incrementeaza (sau decrementeaza in cazul doi) variabila de control. Cand variabila a ajuns la ultimul (primul) se continua execu ia programului cu instruc iunea imediat urmatoare FOR‑ului.

Astfel exemplul anterior devine echivalent cu:

program tablou;

var A:array[1..5] of integer;

B,I:integer;

begin

for I:=1 to 5 do readln(A[I]);

B:=0;

for I:=1 to 5 do B:=B+A[I];

writeln('B= ',B);

end.

Observam ca irul de instruc iuni readln(A[.]) s‑a transformat in instruc iunea:

for I:=1 to 5 do readln(A[I])

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Avantajul se vede in cazul in care am fi avut de citit, de exemplu 100 de numere i nu 5, caz in care vom schimba valoarea finala (ultimul) din 5 in 100.

Obs. ‑ variabila de control nu poate fi de tip real.

‑ primul i ultimul pot fi: constante intregi, variabile intregi, expresii a caror evaluare duce la un rezultat de tip intreg sau, dupa caz, apar ine unei mul imi predefinite sau enumerate.

Ex:

for i:=a+23 to v‑2*h do ;

‑ la ie irea din instruc iunea for, variabila de control are o valoare nedefinita (nu are ultima valoare intotdeauna).

In exemplul de mai sus, am fi tenta i sa credem ca la ie irea din instruc iunea for, I va avea valoarea 6. Nu se stie! De ce? Sa luam alt exemplu:

program litere;

var L:array[a..z] of char;

ch:char;

begin

for ch:= a to z do readln(L[ch]);

for ch:= a to z do write(L[ch]);

end.

Observam ca variabila tablou L este indexata nu cu numere naturale, dar cu literele de la a la z. La

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

ie irea din instruc iunea for variabila de control ar trebui sa aiba ca valoare, o litera dupa z, dar aceasta nu exista!

Sa presupunem acum ca avem de executat de un numar fixat de ori un numar de instruc iuni mai mare decat una, cum ar fi exemplul urmator:

write('elementul nr: ',I,':');

readln(A[I]);

Aceasta secven a o putem utiliza la introducerea valorilor elementelor unui vector (variabila tablou A).

Am vazut ca in instruc iunea for putem repeta o singura instruc iune. Cum se poate rezolva acest caz ? Utilizam:

INSTRUCTIUNEA COMPUSA (BLOCK)

Instruc iunea compusa (sau blocul) este tratata de catre compilatorul PASCAL din punct de vedere logic ca o singura instruc iune, ea fiind din punct de vedere fizic alcatuita din mai multe instruc iuni.

Forma general a instruc iunii compuse este urmatoarea:

begin

.

.

end;

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

unde intre cuvintele rezervate begin i end pot fi plasate oricate instruc iuni acceptate de PASCAL (inclusiv alte instruc iuni compuse).

Astfel instruc iunea for din exemplul anterior va arata astfel:

for i:=1 to 10 do begin

write('elementul nr: ',I,':');

readln(A[I]);

end;

Acum instruc iunea for incepe cu cuvantul rezervat for i se termina cu end‑ul corespunzator begin‑ului de dupa do. Acest fapt este important deoarece pot exista cazuri cand in corpul instruc iunii for exista alte instruc iuni compuse delimitate de begin i end.

Exemplu:

for i:=1 to 10 do

begin

for j:=1 to 25 do

begin

.

.

instruc iuni

.

end;

.

instruc iuni PASCAL

.

end;

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Aici instruc iunile dintre primul begin i ultimul end deci corpul instuc iunii for dupa i (din exemplu) vor fi executate de 10 ori, in timp ce instruc iunile dintre al doi‑lea begin i penultimul end (corpul instruc iunii for dupa j) vor fi executate de 25 de ori (pentru fiecare valoare a lui i).

Instruc iunea compusa se utilizeaza pentru a structura programul, pentru a‑l impar ii in blocuri logice i fizice (pentru programe mari).

INSTRUCTIUNEA IF‑THEN‑ELSE

Instruc iunea if ne ofera posibilitatea executarii unei instructuni sau a alteia in func ie de valoarea de adevar a unei expresii logice (care poate fi adevarata sau falsa).

Formatul instruc iunii este:

IF expresie logica THEN instruc iune.1

[ELSE instruc iune.2];

Mod de func ionare:

‑ se evalueaza expresia logica

‑ daca rezultatul evaluarii este adevarat (true) se executa instruc iune.1

‑ daca rezultatul evaluarii este fals (false) se executa instruc iune.2

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

- se trece la instruc iunea imediat urm toare

instruc iunii if.

Observam ca in acest caz, se executa sau instruc iune.1, sau instruc iune.2, i in nici un caz ambele instruc iuni.

Exemplu:

if a>b then c:=a‑b

else c:=b‑a;

Exista i o alt forma a instruc iunii if (forma scurta), adica:

IF expresie logica THEN instruc iune;

In acest caz se va executa instuctunea (situata dupa cuvantul rezervat then) doar in cazul in care expresia logic va fi evaluata la valoarea de adevar true (adevarat), altfel se va trece direct la instruc iunea imediat urmatoare instruc iunii if.

i in cazul instruc iunii for, daca avem de executat pe o ramur sau pe ambele ramuri ale instruc iunii if, mai mult decat o instruc iune, vom utiliza instruc iunea compusa (block)

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Exemplu:

IF conditie THEN BEGIN

.

.

END

ELSE BEGIN

.

.

END;

Un exemplu simplu de utilizare a instruc iunii if este in problema urmatoare: Se dau doua numere (intregi) a i b. Sa se calculeze i sa se afi eze distan a dintre cele doua numere c:=|a‑b|.

program modul;

var a,b,c:integer;

begin

write('a='); read(a);

write('b='); read(b);

if a > b then c:=a‑b

else c:=b‑a;

writeln('c=',c)

end.

In acest exemplu observam ca am scris doua instruc iuni diferite (write i read) pe acela i rand. Se poate scrie mai multe instruc iuni pe un rand. Conditia este

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

urmatoarea: indiferent dac se afla sau nu pe acela i rand, doua instruc iuni diferite trebuie sa fie separate printr‑un semn ';'. Deci caracterul ';' este un semn special utilizat in PASCAL, care separa doua instruc iuni diferite. El se numeste separator.

INSTRUCTIUNEA REPEATUNTIL..

In exemplele precedente (de la instruc iunea for) am vazut cum putem repeta un anumit grup de instruc iuni de un numar fixat de ori. Numar fixat de ori insemna ca in momentul inceperii grupului de instruc iuni ce trebuia repetat , acest numar era cunoscut (fixat).

Exista in realitate, cazuri cand avem de reluat un grup de instruc iuni de un numar necunoscut de ori, sau mai bine spus, numarul de reluari nu este cunoscut in momentul inceperii executarii acestui grup de instruc iuni. Oprirea reluarii execu iei respectivului grup de instruc iuni va avea loc in momentul in care o anumita condi ie va fi indeplinita (adevarata).

Formatul instruc iunii este:

REPEAT

.

. instruc iuni

.

UNTIL conditie;

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Mod de func ionare:

‑ se executa instruc iunile dintre cuvintele rezervate repeat i until,

‑ se evalueaza expresia logica din condi ie,

‑ daca condi ia este falsa, se reia execu ia instruc iunilor dintre repeat i until

‑ in momentul cand condi ia devine adevarata se continua cu instruc iunea imediat urmatoare instruc iunii repeatuntil

Un exemplu didactic: programul urmator va afi a la display un mesaj al programului urmat de un mesaj introdus de utilizator, pana cand mesajul introdus de utilizator va fi: 'gata'

program gata;

var s:string;

begin

repeat

readln(s);

writeln('mesajul introdus este: ',s);

until s = 'gata'

end.

Programul de mai sus, lansat in execu ie, va a tepta un ir de caractere pe care il va afi a din nou dupa mesajul:'mesajul introdus este: ' i va a tepta din nou, alt ir de caractere, i a a mai departe (repetarea instruc iunilor din blocul instruc iunii

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

repeatuntil), pan cand (until) se va introduce irul: 'gata'.

Obs: In astfel de cazuri are importan a felul literelor (mari sau mici) din componen a irului de caractere introdus. Astfel daca cerem in codi ia de la until

s = 'gata',

trebuie sa introducem irul 'gata' pentru ca programul sa se opreasca (condi ia sa fie adevarata). Daca introducem de exemplu: 'GATA' sau 'Gata', programul va afi a acest mesaj i va merge mai departe deoarece cele doua iruri nu sunt identice.

Obs: Nu mai este necesar ca insruc iunile din corpul instruc iunii repeatuntil sa fie grupate intr‑o instruc iune compusa. Deci repeatuntil are posibilitatea de a repeta de un numar nefixat (anterior) de ori un numar oarecare de instruc iuni.

O obligatie a programatorului in acest caz este ca in corpul instruc iunii repeatuntil sa se modifice ceva din conditia de sfar it a instruc iunii astfel incat condi ia sa devina la un moment dat, adevarata, moment in care execu ia programului va continua cu instruc iunea imediat urmatoare instruc iunii repeatuntil.

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Exemplul urmator:

repeat

a:=a+1;

a:=a‑b

until b=0;

este un exemplu de instruc iune repeatuntil utilizata incorect. Astfel in cazul in care b este diferit de zero programul va cicla la infinit (sau pana va da o eroare de depa ire din cauza maririi prea mult a lui a). De re inut este faptul ca aceasta secven a este corecta din punct de vedere sintactic (al scrierii unui program in limbajul PASCAL) i prin urmare nu va semnala nici o eroare in momentul compilarii, dar din punct de vedere logic programul va determina o 'bucla infinita' (fara sfar it).

Un alt lucru de re inut este ca instruc iunile din corpul unei instruc iuni repeatuntil se vor executa cel pu in o data, cazul in care condi ia de sfar it este falsa de la prima trecere. In exemplul anterior, daca la intrarea in instruc iunea repeatuntil variabila b are valoarea 0, in acest caz fericit instruc iunile dintre repeat i until vor fi executate o singura data apoi se va continua cu instruc iunea imediat urmatoare.

INSTRUCTIUNI DE CONTROL A EXECUTIEI PROGRAMULUI

Exemplul urmator reprezinta un joc simplu:

program joc;

var x,a,i:integer;

ch:char;

begin

randomize;

repeat

x:=random(100);

i:=0;

repeat

i:=i+1;

write(i,':introduceti nr: ');

readln(a);

if a > x then writeln(' prea mare');

if a < x then writeln(' prea mic');

if a = x then

writeln(' gasit in ',i,' incercari');

until a = x;

write('doriti un nou joc ? (y/n)');

readln(ch);

until ch = 'n'

end.

Programul din exemplul anterior este un joc simplu in care calculatorul 'ascunde' un numar intreg intre 1 i 100, i noi (utilizatorul) trebuie sa‑l gasim prin incercari succesive. Dupa ce l‑am gasit programul ne anun a numarul de incercari facute i ne intreaba daca dorim reluarea jocului. Succes!



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1381
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