Instrucţiuni
Instrucţiuni repetitive:
1.Instrucţiunea repetitivă cu contor
Forma generală:
A) for contor:=val_iniţială_mică to val_finală_mare do instrucţiune;
Se numeşte instrucţiune repetitivă cu contor sau cu număr cunoscut de paşi deoarece este pravăzută cu o variabilă numită contor care pleacă de la o valoare iniţială şi se incrementează în mod repetat până la o valoare finală.Pentru fiecare incrementare a contorului se execută instrucţiuni.Eecuţia instrucţiunii se face de un număr de ori care este cunoscut de la început.
Ex: suma numerelor de la 1 la n(n-citit de la tastatură)
program sumafor_a;
var
n,s,i:integer;
begin
write('n='); readln(n);
s:=0;
for i:= 1 to n do s:=s+i;
writeln('suma este',s);
readln;
end.
B) for contor;=val_iniţială_mare downto val_finală_mică do instrucţiune;
Această formă a instrucţiunii repetitive cu contor este asemănătoare cu prima variantă.Deosebirea constă în faptul că în acest caz contorul pleacă cu o valoare iniţială mai mare şi descreşte prin decrementare în mod automat până la o valoare mai mica.Astfel instrucţiunea se execută în mod repetat pentru fiecare valoare a contorului.
Ex: suma numerelor de la 1 la
program sumafordown;
var
n,s,i:integer;
begin
write('n='); readln(n);
s:=0;
for i:= n downto 1 do s:=s+i;
writeln('suma este',s);
readln;
end.
2.Istrucţiunea repetitivă cu test iniţial
Forma generală:
while(expresie) do instrucţiune;
Cât timp în urma evaluării expresiei se obţine adevărat se va executa în mod repetat instrucţiunea.Dacă încă de la început se obţine fals,în urma evaluării expresiei,atunci instrucţiunea nu se va executa niciodată.Ea este ignorată şi se trece la altă linie de program
EX: suma numerelor de la 1 la n
program sumawhile;
var
n,i,s:integer;
begin
write('n='); readln(n);
s:=0;
i:=0;
while(i<=n) do begin
s:=s+i;
i:=i+1;
end;
write('suma este',s);
readln;
end.
3.Instrucţiunea repetitivă cu test final
Forma generală:
repeat
instrucţiune1;
instrucşiune2;
……………………
instrucşiune n;
until(expresie);
Se repetă execuţia instrucţiunilor de la 1 până la n până când în urma evaluării expresiei se obţine adevărat.Altfel spus instrucşiunile se execută în mod repetat atâta timp cât în urma evaluării expresiei se obţine fals.I se spune instrucţiune repetitivă cu test final pentru că întâi se execută instrucţiunea şi apoi se evaluează expresia.Acesta înseamnă că instrucţiunile se execută cel puţin o dată chiar dacă se obţine adevărat încă de la prima evaluare a expresiei.
Ex: suma numerelor de la 1 la n
program sumarepeat;
var
n,i,s:integer;
begin
repeat
s:=s+i;
i:=i+1;
until(i>n);
writeln('suma este',s);
readln;
end.
Structura alternativa
Este o structura de calcul care permite, in functie de anumite conditii, executarea (sau neexecutarea) unei anumite instructiuni sau secventa de instructiuni. Programul de mai jos vrea sa faca suma a doua numere, in afara de cazul in care primul numar este 0 (zero), caz in care aduna al doilea numar cu el insusi :
var a, b: integer;
begin
write('Dati a: '); readln(a);
write('Dati b: '); readln(b);
If a <> 0 Then write('Suma celor doua numere este ', a+b)
Else write('Suma celor doua numere este ', b+b);
readln;
end.
Deci, am pus o conditie si in functie de ea executam o parte sau alta a codului. Parca suntem in viata. Ne ofera cineva ceva, dar noi nu acceptam decat daca pretul e mai mic sau egal cu o anumita suma, pentru ca altfel ni se pare prea mare pretul.
Instructiuni conditionale
Avem la dispozitie doua tipuri de instructiuni conditionale in Pascal: If ... Then ... [Else ... ] si Case.
1.Structura If ... Then ... [Else ... ]
Are doua sintaxe, putin diferite. Cea mai obisnuita este mai jos:
If conditie
Then instructiune1
Else instructiune2;
conditie este o comparatie sau orice altceva care returneaza o valoarea logica (True sau False), cum ar fi suma = 5 ("=" semnifica egalitate, nu atribuire !)
instructiune1 si instructiune2 pot fi orice fel de instructiuni, inclusiv instructiunea compusa.
Atentie:
In cazul folosirii acestei sintaxe, semnul " ; " (punct si virgula) nu numai ca nu este necesar dupa instructiune1, ci este interzis sa fie pus acolo.
A doua varianta a acestei structuri conditionale este cea in care nu avem ramura de else :
If conditie
Then instructiune1;
Atentie:
In cazul folosirii acestei sintaxe, semnul " ; " (punct si virgula) este strict necesar dupa instructiune1.
Sa exemplificam aceste structuri prin programul de mai jos:
var varsta: integer;
sex: char;
begin
write('Ce varsta aveti ? '); ReadLn(varsta);
write('Sunteti baiat sau fata ? (M / F) : '); ReadLn(sex);
If (sex = 'f') or (sex = 'F')
Then WriteLn('Sex feminin')
Else WriteLn('Sex masculin');
If varsta > 17 Then
WriteLn('Persoana majora');
ReadLn;
End.
Pentru a intelege programul, sa-l luam pas cu pas. Am definit doua variabile, una de tip integer (valoare numerica) denumita varsta si una de tip Char (un singur caracter) denumita sex.
Dupa citirea de la tastatura a valorilor pentru aceste doua variabile, verificam daca variabila sex e cumva litera F. De remarcat ca am folosit operatorul logic OR pentru a verifica daca variabila are valoarea f sau F, ambele insemnand faptul ca sexul este feminin, caz in care afisam acest lucru. Pe ramura de Else, stiind ca sexul nu este feminin, am pus direct afisare ca sexul este masculin, ceea ce nu este tocmai corect. Trebuia facuta o verificare si daca valoarea variabilei sex este m sau M, pentru a asigura acuratetea programului. In programul de mai sus, daca pentru variabila sex introducem litera c, progamul va afisa tot "Sex masculin", dar momentan scopul meu nu e de a crea programe fara bug-uri, ci doar de a va explica modul de functionare a structurilor conditionale.
Pentru varsta facem o singura verificare, anume daca varsta este strict mai mare decat 17 (adica minim 18), caz in care afisam "Persoana majora".
Sa refacem programul pentru a lua in calcul si alte cazuri (cum ar fi verificarea pentru sexul masculin, varste negative sau peste 150 de ani )
var varsta: integer;
sex: char;
begin
write('Ce varsta aveti ? '); ReadLn(varsta);
write('Sunteti baiat sau fata ? (M / F) : '); ReadLn(sex);
If (sex = 'f') or (sex = 'F')
Then WriteLn ('Sex feminin')
Else
If (sex = 'm') or (sex = 'M')
Then WriteLn ('Sex masculin')
Else WriteLn ('Sex necunoscut, probabil neutru');
If (varsta < 0)
Then WriteLn ('Persoana care este inca in planuri de viitor')
Else
If (varsta < 18)
Then WriteLn ('Persoana minora')
Else
If (varsta < 60)
Then WriteLn ('Persoana majora')
Else
If (varsta < 150)
Then WriteLn ('Persoana in varsta')
Else WriteLn ('Personaj biblic');
ReadLn;
End.
Dupa cum vedeti, in noul program am luat in calcul ca variabila sex poate reprezenta sex feminin, sex masculin sau un caracter care nu reprezinta nici unul din acestea doua cazuri. Pentru aceasta, am folosit instructiuni conditionale imbricate (adica una in interiorul alteia). Arata urat, nu ? In plus, e si destul de greu de inteles.
Cu toate acestea, pentru variabila varsta am facut chiar si mai multe verificari, folosind multiple instructiuni conditionale imbricate. E deja mai urat si chiar si mai greu de inteles.
Nu am de facut decat sa va recomand multa atentie cand creati sau recititi programul ... si sa va prezint instructiunea conditionala multipla, ca o alternativa la instructiunea If ... Then ... [Else ... ]
2.Structura Case
Instructiunea Case, denumita si instructiune alternativa multipla, ofera posibilitatea verificarii unei variabile pe un set mai intins de valori, fara a da dureri de cap la crearea sau recitirea programului.
Sintaxa generala:
Case variabila_simpla Of
val_posibile1 : instructiune1;
val_posibile2 : instructiune2;
...
val_posibileX : instructiuneX;
Else instructiuneY;
End;
Sa incercam sa intelegem aceasta sintaxa, care pare a fi ceva mai complicata decat sintaxa instructiunii dinainte.
Variabila_simpla desemneaza orice variabila de un tip simplu de date (vedeti tutorialul anterior). Nu poate fi folosit aici, de exemplu, tipul String, el nefiind un tip simplu de date.
Val_posibile1, Val_posibile2 si Val_posibileX tin locul unei (sau a mai multor) valori posibile pentru variabila_simpla. Daca valoarea variabilei variabila_simpla e egala (sau inclusa) cu vreuna din valorile posibile, atunci va fi executat setul corespunzator de instructiuni.
Instructiune1, instructiune2 si instructiuneX pot fi orice fel de instructiuni, inclusiv cele compuse.
Pe ramura de Else avem acelasi lucru ca si la instructiunea If ... Then ... [Else ... ], adica o anumita instructiune care se executa in cazul in care valoarea variabilei variabila_simpla nu se regaseste in optiunile de mai sus (Val_posibile1, Val_posibile2, Val_posibileX). Aceasta ramura, ca si la If ... Then ... [Else ... ], poate ramane nefolosita.
Sa refacem programul de mai sus, folosind aceasta noua instructiune.
var varsta: integer;
sex: char;
begin
write('Ce varsta aveti ? '); ReadLn(varsta);
write('Sunteti baiat sau fata ? (M / F) : '); ReadLn(sex);
Case sex Of
'f','F' : WriteLn('Sex feminin');
'm','M' : WriteLn('Sex masculin');
Else Writeln('Sex necunoscut, probabil neutru');
End;
Case varsta Of
0 .. 17 : WriteLn('Persoana minora');
18 .. 60 : WriteLn('Persoana majora');
61 .. 150 : WriteLn('Persoana in varsta');
151 .. maxint : WriteLn('Personaj biblic');
-maxint .. -1 : WriteLn('Persoana care este inca in planuri de viitor');
End;
ReadLn;
End.
Dupa cum vedeti, e mult mai usor de folosit si este mult mai clara. Singurul lucru care cred ca mai e necesar sa vi-l explic este ce inseamna, 'f','F' si 18 .. 60. Structura Case, dupa cum am explicat anterior, permite ca, pentru o anumita instructiune, sa verificam mai multe valori posibile. Aceste valori pot fi scrise una cate una si despartite prin virgula (cum a fost in cazul variabilei sex) sau pot fi scrise ca un sir de valori, in care se ofera valoarea minima si apoi valoarea maxima, aceste doua valori fiind despartite prin " .. " (doua puncte unul dupa celalalt).
Sursa: http://pascal-complete.blogspot.com/2011/10/instructiunile-limbajului-pascal.html
Sursa: http://pascal-complete.blogspot.com/2011/10/instructiunile-limbajului-pascal.html