joi, 13 august 2009

L6. Instructiunea PENTRU - EXECUTA

Exista trei instructiuni (structuri) repetitive folosite in toate limbajele:

  • instructiunea repetitiva cu test initial CAT TIMP (WHILE) (se foloseste cand numarul de repetitii este nedefinit)

  • instructiunea repetitiva cu test final REPETA-PANA CAND/EXECUTA CAT TIMP (DO WHILE sau REPEAT) (se foloseste cand numarul de repetitii este nedefinit)

  • instructiunea repetitiva cu un numar cunoscut de pasi PENTRU (FOR) (se foloseste cand numarul de repetitii este cunoscut - un numar fix de ori.)


Sintaxa: PENTRU contor<-exp_init,exp_fin EXECUTA instructiune

Efect: pentru fiecare valoare a contorului intre expresia initiala si expresia finala se executa instructiunea;

Exemplu: pentru i <- 1,10 executa scrie " Nu ma prinzi!";

  • pentru fiecare valoarea a variabile i, de la 1 la 10, se afiseaza " Nu ma prinzi!"

  • de 10 ori se afiseaza " Nu ma prinzi!"

  • daca secventa ce trebuie repetata contine mai multe instructiuni, acestea se vor grupa cu acolade


Observatii:

  • practic, pentru fiecare valoare a lui i, intai se testeaza daca nu s-a depasit valoarea finala 10 si apoi se executa instructiunea;

  • algoritmic, propozitia de mai sus este :

    • i<-1; cat timp (i<=10) {scrie " Nu ma prinzi!"; i<-i+1; };



  • practic , secventa de mai sus me explica faptul ca instructiunea pentru este o clona a instructiunii cat timp.

  • instructiunea este "ceruta" daca descrierea algorimului spune "de la valoarea X la valoarea Y", "pentru primele X valori", "de X ori", ...


Exemplul 1.

  • Sa se afiseze numerele pare pana la o valaore N, naturala.


intreg n,i;

citeste n;

pentru i<- 0,n executa

daca (i%2==0) atunci scrie i.

Observatii:

  • algoritmul ia fiecare valoare intre 0 si n si o testeaza daca este para (restul impartirii lui i la 2 sa fie nul :  i%2==0)

  • se efectueaza n pasi din care jumatate sunt gresiti; trebuie o varianta mai buna


Exemplul 2.

  • Aceeasi problema dar incercam sa mergem din doi in doi

    • intreg n,i; citeste n; pentru i<-0,n,2 executa  scrie i.

    • intreg n,i; citeste n; pentru i<-0,n/2 executa  scrie i*2.




Observatie:

  • in primul caz, 2-ul de dupa n (i<-0,n,2 ) stabileste cresterea lui i cu 2 si nu cu 1 asa cum este implicit

  • in al doilea caz, ne folosim de faltul ca valorile cautate sunt pare, divizibile cu 2;


Exemplul 3

  • Sa se calculeze suma primelor N numere naturale.

    • evident, stim formula n*(n+1)/2 dar sa incercam un algoritm;

    • va trebui sa adunam, la o suma , toate valoarile de la 1 la n




intreg n,i,suma;

citeste n;

suma<-0;

pentru i<- 0 ,n executa suma<- suma +i;

scrie suma.

Exemplul 3.

  • Se citeste un sir de N valori intregi. Sa se determine cea mai mare valoare citita (valoarea maxima dintr-un sir).


intreg n,i,max,val;

citeste n;

citeste max;

pentru i<-2,n executa {citeste val; daca val>max atunci max<-val;};

scrie val.

4 comentarii:

  1. De ce e la "Uncategorized" ?

    RăspundețiȘtergere
  2. Sintaxa instr. PENTRU fol notatia "<-"pentru atribuire. Liniuta face parte din semn, nu e minus. Oricum, am adaugat un spatiu, la sugestia ta. Multumesc!

    RăspundețiȘtergere
  3. M-a derutat la maxim <-
    Nu se poate folosi:

    Este codul html pentru ←

    Sau dati un copy&paste la simbol (←) si se poate folosi in articol.

    RăspundețiȘtergere