Instructiuni Simple

  • Instructiunea If:

1. Definitie:
          Structura alternativa dirijeaza executia unei secvente de instructiuni in functie de valoarea unei conditii plasate in blocul de decizie.
2. Sintaxa :

       daca  (expresie logica)     atunci  secventa1 de operatii
      
altfel     secventa 2 de operatii
3. Sintaxa :
        if (conditie_logica)    instructiune1;
       else  instructiune 2;
5.Mecanismul de executie:
  - se evalueaza conditia logica
 - daca e adevarata conditia logica se executa instructiune 1 altfel se executa instructiunea2
6.Observatii:
  - structura alternativa cu o singura ramura - numai cea adevarat
 -structura alternativa imbricata - secventele de operatii(instructiunile) de pe orice ramura pot avea subordonate alte structuri alternative

Diagrama de sintaxa:

Exemplu de program:

program p7;
  var varsta : integer;
         gen : char;
begin
  write ('Ce varsta aveti ? ');
  readln (varsta);
  write ('Sunteti baiat sau fata ? (M / F) : ');
  readln (gen);
  If (gen = 'f') or (gen = 'F') Then WriteLn ('gen feminin')
  Else WriteLn ('gen masculin');
  If varsta > 17 Then WriteLn('Persoana majora');
  ReadLn;
End.

  • Instructiunea Case:

Instrucţiunea CASE este o instrucţiune alternativă multiplă care permite selectarea unei instrucţiuni dintr-o listă de instrucţiuni marcate, în funcţie de valoarea unui selector.

Instrucţiunea case are două forme:                          
1)CASE expresie de tip ordinal OF
    Listă de constante1: instrucţiune1;
    Listă de constante2: instrucţiune2;
    .......................................................
    Listă de constanten: instrucţiunen;
  end;
2)CASE expresie de tip ordinal OF
    Listă de constante1: instrucţiune1;
    Listă de constante2: instrucţiune2;
    .......................................................
    Listă de constanten: instrucţiunen
    ELSE instrucţiune(n+1)
  end;

Atenţie: în cazul folosirii acestei sintaxe, semnul " ; " (punct şi virgula) inainte de "else" este strict interzis;
"instructiune1", "instructiune2" şi "instructiunen" sunt instrucţiuni Pascal.

Diagrama de sintaxa:

Exemplu de program:

program p10;
  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.
       

  • Instructiunea Repeat:         

 Instrucţiunea REPEAT este un ciclu cu test final care indică repetarea unei secvenţe de instrucţiuni în funcţie de valoarea unei expresii booleene.
Instrucţiunea repeat are forma:                         
REPEAT   secvenţă
  UNTIL condiţie;
                         unde secvenţă reprezintă instrucţiunile din corpul instrucţiunii REPEAT, trebuie să fie de tip boolean.

Atenţie: spre deosebire de While, ieşirea din această instrucţiune se face atunci cînd valoarea condiţiei este True.
  Pentru o instrucţiune infinită se va folosi:
  Repeat
    Instrucţiune;
  until False;
Principiul de execuţie:

  •     se execută secvenţa de instrucţiuni;
  •     se evaluează expresia logică;
  •     dacă rezultatul evaluării este FALSE atunci se execută din nou secvenţa   de instrucţiuni, în caz contrar se trece mai departe;
  •     secvenţa de instrucţiuni se execută cel putin o dată, după care se pune problema reluării sau nu a execuţiei, după evaluarea expresiei logice.

 Principiul de execuţie:

  •  se evaluează expresia de tip ordinal (integer, char, Boolean,byte,word,longint, sau definită de utilizator ca subdomeniu sau enumerare);
  •   se obţine o valoare v care reprezintă valoarea selectorului utilizată pentru selecţia uneia dintre alternative. Apoi se caută în lista de constante, constanta egală cu valoarea evaluată. Dacă se localizează această constantă într-una dintre liste, se execută instrucţiunea asociată acestei liste;
  •  dacă nu există nici o instrucţiune care să conţină eticheta v, atunci dacă este prezent cuvîntul 'ELSE' se execută instrucţiunea care urmează după aceasta,în caz contrar nu se execută instrucţiunea CASE şi se trece la secvenţa imediat următoare.

Atenţie: Dacă secvenţele cuprind mai mult de 2 instrucţiuni,acestea trebuie cuprinse între BEGIN şi END;

Exemplu de program:

Program p5;
  var cnt : integer;
begin
  cnt := 1;
  Repeat
    WriteLn(cnt);
    cnt:=cnt + 1;
  Until cnt > 20;
  ReadLn;
end.

  • Instructiunea While:

Instrucţiunea WHILE este ciclul cu test iniţial care conţine o expresie booleană care controlează execuţia repetată a altei instrucţiuni.

   Instrucţiunea WHILE are forma:                                                                                                              

while <expresie> do <instrucţiune>;
                                                       unde <expresie> trebuie sa fie de tip boolean, iar <instrucţiune> poate fi orice instrucţiune Pascal , ce se va executa atît timp cît <expresie> ia valoarea TRUE. Dacă iniţial <expresie> are valoarea false, <instrucţiune> nu se va executa niciodată.                     

Principiul de execuţie:

  • se evaluează expresia logică; 
  • dacă valoarea expresiei este False, se iese din instrucţiunea WHILE,dacă valoarea expresiei este True, se execută instrucţiunea,apoi se revine la 1;
  •  instrucţiunea cere execuţia repetată a unei instrucţiuni PASCAL în funcţie de valoarea de adevăr a expresiei logice. Dacă valoarea iniţială este FALSE, instrucţiunea WHILE nu se execută nici o dată.

                 De remarcat că ieşirea din instrucţiune se va face doar cînd condiţia va returna valoarea False.

Diagrama de sintaxa:

Exemplu de program:

PROGRAM P3;
     var cnt : integer;
   begin
      cnt := 1;
      While cnt <= 20 Do
         Begin
            WriteLn(cnt);
            cnt := cnt + 1;
          End;
     ReadLn;
    end.   

  • Instructiunea For:

Diagrama de sintaxa a instructiunii FOR este urmatoarea:

in care:variabila control este un identificator de variabila iar valoare initiala si valoare finala sunt cate o expresie.
Instructiunea FOR face ca instructiune( care poate fi o instructiune compusa) sa se execute repetat cat timp variabilei de control i se atribuie o progresie de valori.
Cand se intra intr-o instructiune FOR valorile initiala si finala sunt determinate o data pentru tot restul executiei instructiunii FOR.Instructiunea se executa o data pentru fiecare valoare a variabilei de
control
.

Exemplu de program:

program p6;
  var cnt:integer;
begin
  For cnt:=1 To 20 Do
  WriteLn(cnt);
  ReadLn;
End.

Instructiuni Structurate

  • String:

STRING reprezinta un tip de variabila care reprezinta o succesiune de maxim 255 caractere. (Litere de la A la Z; cifre; simboluri si spatii)
INSTRUCTIUNI:
- length(a)  reprezinta lungimea STRING-ului (adica a numarului de caractere)
- copy(a,b,c) unde "b" reprezinta pozitia, "c" reprezinta numarul de caractere. Formeaza un nou cuvant prin preluarea din "a" incepand de la pozitia "b", a unui anumit numar de caractere precizate adica "c"
- concat(a,b,c,...)   formeaza un cuvant prin alipirea cuvintelor a,b,c... .
- pos("caracter",a)   calculeaza prima pozitie pe care apare caracterul precizat in cuvantul a. (0 daca nu apare)
Exemplu de program:

Se dau doua cuvinte. Formati un cuvant din primele 3 caractere ale primului si ultimele 3 caractere din al doilea.

              Program P_string_re_1;
              var a,b,c,d,e:string;
              n:integer;
              Begin
              write('a=');   readln(a);
              write('b=');   readln(b);
              c:=copy(a,1,3);
              n:=length(b);
              d:=copy(b,n-2,3);
              e:=concat(c,d);
               write(e); end.

  • Tipul Inregistrare(Record)

Cum am vazut deja la tipul string,  exista posibilitati de a stoca in memorie cantitati mari de date, cu elemente de acelasi tip. Ce se intampla in cazul in care vreau sa stochez mai multe tipuri de date intr-un singur element ? Un caz concret ar fi varstele unor oameni. Avem nevoie de un loc pentru nume si de un loc pentru varsta ... o variabila string si o variabila byte. Tipul record (inregistrare) permite crearea unui tip de date care sa permita gruparea unor date de tipuri diferite.Mulţimea de valori ale unui tip de date record este constituită din  înregistrări . Inregistrarile sînt formate din componente, denumite câmpuri. Spre deosebire de componentele unui tablou, câmpurile pot fi de tipuri diferite. Fiecare câmp are un nume ( identificator de câmp ).
 Un tip de date articol se defineşte printr-o structură de forma
  type <nume tip> = record
           <nume câmp 1>  : T1;
 <nume câmp 2> : T2;
 . . . . . . . . . . . . . . . . . .
 <nume câmp n> : Tn;            

end;
       unde T1,T2,…,Tn specifică tipul câmpurilor respective. Tipul unui nume de câmp este arbitrar, astfel un câmp poate să fie la rândul său tot de tip articol.

Exemplu de program:

Program p1;
Type Restanta=record
Nume,prenume:string;
Clasa:integer;
med:real;
var A:array[1..1000]of integer;
begin
writeln('introduceti nr. de elevi');
for i:=1 to n do begin
writeln('introduceti elevul',i);
writeln('introduceti numele');
readln(A[i].nume);
writeln('introduceti prenumele');
readln(A[i].prenume); end;
writeln('nume:',A[i].nume);
writeln('prenume:',A[i].prenume); end;
k:=0;
for i:=1 to n do
if A[i].med<5.00 then begin
k:=k+1;
write('nume:',A[i].nume);
write('prenume:',A[i].prenume);
write('clasa:',A[i].clasa);
write('med:',A[i].med); end;
writeln('restantieri sint',k);
readln; end.

Diagrama de sintaxa:

  • Tablouri Unidimensionale:

Un sir de elemente de acelaşi tip, în care contează ordinea elementelor, se numeşte vector sau tablou unidimensional.
Un tablou este o structura formata dintr-un număr fixat de componente de acelaşi tip, numit tip de baza. Numărul de componente este determinat de numărul de valori ale indicilor, care sunt obligatoriu tipuri ordinale. Poziţia unui element se mai numeşte si indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului.

Sintaxa declarării tipului tablou este :
type_nume=array[tip_ordinal1,......tip_ordinaln] of tip_oarecare
Blocul de introducere:
For i:=1 to n do begin
writeln('A[,'i',]=');
readln(A[i]);
end;

Blocul de afisare:
For i:=1 to n do
write(A[i]:3);

Exemplu de program:

Program p1;
var A :array[1..100]of integer;
i,n,p,s:integer;
begin
writeln('introduceti nr. de elemente');
readln(n);
For i:=1 to n do begin
writeln('A[,'i',]=');
readln(A[i]);
end;
For i:=1 to n do
write(A[i]:3);
s:=o;n:=1;
For i :=1 to n do
s:=s+A[i];
p:=p*A[i];
end;
writeln('suma este',s);
writeln('produsul este',p);
readln;
end.

  • Tablouri Bidimensionale:

Tablou bidimensional = succesiune de locaţii de memorie recunoscute prin acelaşi
identificator şi prin poziţia fiecăreia în cadrul şirului. Poziţia este dată printr-o suită de două numere pozitive (indecşi), care reprezintă cele două dimensiuni (linie şi coloană).Tabloul are un numar bine determinat de elemente si se identifica printr-un singur nume.
*Valorile atribuite elementelor tabloului trebuie sa fie de acelasi tip.
*Tablourile bidimensionale se numesc MATRICE.Citirea elementelor unui tablou nu este posibila decat prin citirea fiecarui element. De aceea, la fel ca si in cazul vectorilor, operatia de citire a matricelor impune folosirea a doua secvente ciclice suprapuse. Acestea corespund indicelor liniei (i), respectiv coloanei (j).
*Exemplu:   Declararea  unei  matrice cu 10 linii şi 9 coloane, cu elemente de tip intreg este: Int a[10][9];
Sintaxa de declarare a unei matrice este: tip nume[m][n], unde:
 * tip – tipul de data folosit; poate fi unul din tipurile de baza (int, float, char, …) sau
   un tip definit de utilizator (articole, obiecte)
 * nume – numele prin care va fi referita matricea
 * m – numarul de linii din matrice
 * n- numarul de coloane din matrice
Matricea cu m linii si n coloane arata astfel:

Blocul de introducere:
For i:=1 to n do
For j:=1 to m do
write('A[,'i,j',]=');
readln(A[i,j];
end;

Blocul de afisare:
For i:=1 to n do begin
For j:=1 to m do
write(A[i,j]:4);
writeln;
end;

Exemplu de program:

Program p1;
var A:array[1..100,1..100]of integer;
i,j,n,m,s:integer;med:real;
begin
writeln('introduceti n,m');
readln(n,m);
For i:=1 to n do
For j:=1 to m do
write('A[,'i,j',]=');
readln(A[i,j];
end;
For i:=1 to n do begin
For j:=1 to m do
write(A[i,j]:4);
writeln;
end;
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+A[i,j];
med:=s/(n*m);
write('suma='s,'media='med);
readln;end.