Postat de: Carmen Anton | 24/11/2013

Pregatire pentru teza

Liste probleme: probleme while

Exercitii:

e_info_intensiv_pascal_si_001

e_info_intensiv_pascal_si_002

e_info_intensiv_pascal_si_003

e_info_intensiv_pascal_si_005

e_info_intensiv_pascal_si_006

e_info_intensiv_pascal_si_007

e_info_intensiv_pascal_si_008

e_info_intensiv_pascal_si_009

e_info_intensiv_pascal_si_010

e_info_intensiv_pascal_si_011

TEORIE

Structuri de control

                Clasificare:

•             secvenţiale: atribuire, instrucţiunea compusă, apeluri de funcţii sau proceduri;

•             alternative: if – then, if – then – else, şi case;

•             repetitive: while, repeat, for.

 

1.            Instrucţiunea de atribuire: utilizează semnul := şi are sintaxa: 

Var := expresie

unde  expresie poate fi o valoare constantă, altă variabilă sau o expresie de tipul variabilei var. (! Excepţii: – variabila de tip real şi expresie de tip întreg, variabila de tip string şi expresie de tip char, valoarea expresiei este dintr-un interval iar variabila este întreagă sau reală)

 

Cele trei tipuri de atribuire:

Var := valoare; mai poartă numele şi de iniţializare;

Var := var + 1; mai poartă numele şi de incrementare;

Var := var – 1; mai poartă numele şi de decrementare;

Var := expresie;

Var1 := var2;

 

EX:   var x, y, z : integer;  a : real;

x := 7;    x := x + 1;       x := x – 1;    a := (y + 5) / z;    z := x;

 

2.            Instrucţiunea compusă: utilizează cuvintele rezervate: begin   ……….  end;  între care se trec instrucţiuni de orice fel, executarea instrucţiunii compuse constă în execuţia tuturor instrucţiunilor dintre begin şi end în ordinea în care apar.

OBS:

             orice program are cel puţin o instrucţiune compusă;

             caracterul ; desparte instrucţiunile.

 

EX: Ionel primeşte de la bunica lui o sumă de bani şi de la bunicul lui altă sumă de bani.

Să se determine ce sumă de bani are Ionel în total.

Program suma;

Var a, b, c : integer;

Begin

Write(‘Suma de la bunica: ’);readln(a);

Write(‘Suma de la bunicul: ’);readln(b);

c := a+b;

Writeln(‘Suma totala este de: ‘,c);

Readln;

End.

 

3.            Instrucţiunea if – then  are următoarea sintaxă:

 

IF  conditie THEN instructiune;

 

Funcţionare: se evaluează condiţia iar dacă rezultatul ei este true atunci se execută instrucţiunea de după then, iar dacă valoarea e false atunci se trece la următoarea instrucţiune de după if.

OBS: Dacă se vrea să se pună mai multe instrucţiuni după then atunci acestea se încadrează cu o instrucţiune compusă.

 

EX: Citindu-se distanţa parcursă de o maşină şi timpul necesar parcurgerii (valori întregi) se cere să se determine viteza cu care aceasta se deplasează (numai dacă timpul este mai mare decat 0).

Program ex_compusa;

Var distanta,timp: integer;  viteza:real;

Begin

Write(‘dati timpul:’);

Readln(timp);

Write(‘dati distanta:’);

Readln(distanta);

If timp>0 then begin Viteza:=distanta/timp;

Writeln(‘Viteza masinii este:’,viteza);

End;

Readln;

End.

 

4.            Instrucţiunea if – then – else are sintaxa:

 

IF conditie THEN  instr1  ELSE   instr2;

 

Funcţionare: se evaluează condiţia iar dacă rezultatul ei este true atunci se execută instrucţiunea de după then  instr1, iar dacă valoarea e false atunci se execută instrucţiunea de după else instr2, după  oricare din cazuri se trece la instrucţiunile de după if.

 

EX: Să se scrie un program care verifică dacă un număr citit de la tastatură este divizibil cu un număr a dat.

Program divizibil;

Var n,a:integer;

Begin

Write(‘Dati nr.:’);readln(n);

Write(‘Dati posibilul divizor:’);readln(a);

If n mod a=0       then writeln(‘ Numarul ‘,n,’ este divizibil cu ‘,a)

else writeln(‘ Numarul ‘,n,’ nu este divizibil cu ‘,a);

readln;

end.

 

5.            Instrucţiunea case are sintaxa:

 

Case expresie_ordinala of

C1 : instr1;

C2 : instr2;

………….

Cn : instrn

[ else instr]

end;

 

Funcţionare: se evaluează expresia ordinală şi se caută printre c1, c2, . . . , cn (constante case) o valoare egală cu cea a rezultatului; dacă se gaseşte se execută instrucţiunea corespunzătoare acesteia, iar  dacă nu şi există else atunci se execută ceea ce este după else, iar dacă nu există se trece la următoarea instrucţiune din program.

OBS:

–             constantele trebuie să aibă acelaşi tip cu expresia ordinală şi să fie distincte;

–             pot fi folosite maxim 255 de astfel de constante;

 

EX: Se dă un număr şi se cere să se tipărească ziua din săptămâna corespunzătoare numărului citit.

Program saptamana;

Var n:byte;

Begin

Write(‘Dati numarul: ‘);readln(n);

Case n of

1: writeln(‘Luni’);

2: writeln(‘Marti’);

3: writeln(‘Miercuri’);

4: writeln(‘Joi’);

5: writeln(‘Vineri’);

6: writeln(‘Sambata’);

7: writeln(‘Duminica’)

else  writeln(‘Numarul nu corespunde nici unei zile din saptamana’);

end;

readln;

end.

 

6.            Instrucţiunea while (structura de ciclare cu număr necunoscut de paşi cu test iniţial) are sintaxa:

 

WHILE   conditie   DO  instructiune;

 

–              unde conditie poate fi o expresie logică sau condiţională deci rezultatul ei poate fi true sau false;

–              instructiune poate fi orice instrucţiune Pascal;

–              dacă se doreşte ca după DO să se execute mai multe instrucţiuni atunci acestea se vor pune într-o instrucţiune compusă.

Funcţionare:

Pas 1: se evaluează condiţia;

Pas 2: dacă rezultatul ei este true atunci se execută instrucţiunea şi se trece la pasul 1;

Pas 3: dacă rezultatul este false atunci execuţia instrucţiunii while se termină.

OBS: Condiţia va depinde de o variabilă care trebuie să îndeplinească următoarele două cerinţe:

a.            înainte de scrierea instrucţiunii, while va fi iniţializată;

b.            în cadrul instrucţiunii de după DO i se va modifica valoarea; dacă acest lucru nu este îndeplinit atunci instrucţiunea while se poate executa la infinit.

 

EX: Să se scrie un program care face suma primelor n numere naturale: S=1+2+3+……+n.

Program suma;

Var s,i,n:integer;

Begin

Write(‘n=’); readln(n);

i:=1;

s:=0;

while i<=n do begin

s:=s+i;

i:=i+1;

end;

writeln(‘Suma este ‘,s);

end.

Discuţii:

–              dacă nu se iniţializa s;

–              daca nu se iniţializa i, sau dacă nu se incrementa;

–              dacă nu se punea begin şi end

–              alegerea condiţie;

–              ce se întâmpla dacă scriam i := i+1 şi apoi s:=s+i ;

–              ce se întâmpla dacă condiţia este falsă de la început;

 

Probleme:

Să se calculeze următoarele expresii, în cazul în care n este citit de la tastatură:

a). S=1+3+5+…..+n;

b). S=2+4+6+..…+n;

c). P=1*2*3*…….*n;

d). P=1*3*5*…..…*n;

e). P=2*4*6*…….*n;

f).  E=1/2+1/3+…..+1/n;

g). E=13+23+33+………+n3;

h). E=1/2+2/3+3/4+4/5+……..+(n-1)/n;

i).  E=1*2+2*3+3*4+……+(n-1)*n;

j).  E=1/4+4/13+……+k/(3*k+1);

k). E=-1+2-3+………+(-1)n*n;

l).  E=1*2*3+2*3*4+……..;

m). E=1/(1*3)+1/(3*)+1/(5*7)+…..

 

7.            Instrucţiunea repeat (structura de ciclare cu număr necunoscut de paşi cu test final) are sintaxa:

 

REPEAT instructiuni  UNTIL conditie;

 

Unde conditia este o expresie condiţională sau logică, deci rezultatul poate fi true sau false; iar instrucţiunile pot fi orice instrucţiuni pascal.

Funcţionare:

Pas 1: se execută instrucţiunile;

Pas 2: se evaluează condiţia;

Pas 3: dacă rezultatul ei este false atunci se trece la pasul 1;

Pas 4: dacă rezultatul este true atunci execuţia instrucţiunii repeat se termină.

OBS: Condiţia va depinde de o variabilă care trebuie să îndeplinească următoarele două cerinţe:

a.            înainte de scrierea instrucţiunii repeat va fi iniţializată;

b.            în cadrul instrucţiunii de după REPEAT i se va modifica valoarea; dacă acest lucru nu este îndeplinit atunci instrucţiunea repeat se poate executa la infinit.

 

EX: Să se scrie un program care face suma primelor n numere naturale: S=1+2+3+……+n.

Program suma;

Var s,i,n:integer;

Begin

Write(‘n=’); readln(n);

i:=0;

s:=0;

repeat

s:=s+i;

i:=i+1;

until i>n;

Discuţii:

–              de ce s-a iniţializat i cu 0 şi nu cu 1;

–              condiţia;

–              de ce s-a făcut incrementarea după calculul sumei;

–              instrucţiunile se excută cel puţin o dată;

 

8.            Instrucţiunea for (structura de ciclare cu număr cunoscut de paşi) are două forme una dintre acestea având sintaxa:

 

FOR   v := vi  TO  vf DO instructiune;

 

Unde v este o variabilă ordinală, iar vi şi vf sunt constante, variabile sau expresii de tipul variabilei v, iar instrucţiunea putând fi orice instrucţiune pascal iar dacă se doresc mai multe, acestea vor fi încadrate într-o instrucţiune compusă. Există două cazuri:

a.            dacă  vi > vf instrucţiunea nu se va executa niciodată;

b.            dacă vi <= vf instrucţiunea se va executa de vf – vi + 1 ori cu variabila v luând valori crescătoare între aceste limite.

 

A doua forma a instrucţiunii este:

 

FOR   v := vf  DOWNTO  vi  DO instructiune;

 

Semnificaţia obiectelor fiind aceeaşi ca la prima formă. Şi aici există două cazuri:

a.            dacă  vf < vi instrucţiunea nu se va executa niciodată;

b.            dacă vf >= vi instrucţiunea se va executa de vf – vi + 1 ori cu variabila v luând valori descrescătoare între aceste limite.

OBS:

a.            valorile vi şi vf se evaluează o dată la începutul execuţiei instrucţiunii, modificarea lor nu influenţează numărul de paşi care se vor executa;

b.            pentru variabila v se recomandă să nu i se modifice valoarea în cadrul instrucţiunilor care ţin de FOR;

c.             la ieşirea din for variabila v va rămâne cu ultima valoare din ciclu;

 

EX: Să se scrie un program care face suma primelor n numere naturale: S=1+2+3+……+n.

Program suma;

Var s,i,n:integer;

Begin

Write(‘n=’); readln(n);

s:=0;

for i:=1 to n do s:=s+i;

writeln(‘Valoarea sumei este: ‘, s);

readln;

end.

sau

 

Program suma;

Var s,i,n:integer;

Begin

Write(‘n=’); readln(n);

s:=0;

for i:=n downto 1 do s:=s+i;

writeln(‘Valoarea sumei este: ‘, s);

readln;

end.

 


Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

Categorii

%d blogeri au apreciat asta: