Informatica
Instructiunile structurate for, while si repeatInstructiunile structurate for, while si repeatIn aceasta tema: prezentarea instructiunilor structurate for, while si repeat; sintaxa instructiunilor for, while si repeat. exemple de utilizare in programe a instructiunilor structurate for, while si repeat; Instructiunea for1.1. Prezentarea teoreticaStructurile algoritmice iterative (repetitive) sunt codificate in Pascal prin intermediul a trei instructiuni structurate. Acestea sunt: Pentru structura iterativa cu variabila de control, instructiunea for ; Pentru structura iterativa cu test initial, instructiunea while; Pentru structura iterativa cu test final, instructiunea repeat. Sintaxa instructiunii FOR este prezentata in urmatoarea diagrama din figura 1.
Figura 1. Diagrama de sintaxa pentru instructiunea for Din diagrama de sintaxa se observa ca instructiunea for poate avea doua forme: 1)FOR identif:=vinit TO vfin DO instructiune; 2)FOR identif:=vinit DOWNTO vfin DO instructiune; In enunturile 1 si 2 de mai sus, vinit si vfin sunt expresii care se evalueaza la un rezultat de tip compatibil cu variabila desemnata prin identif. Aceasta variabila se numeste variabila de control (contor) a structurii si este o variabila de tip ordinal. Daca v este variabila de control de tip integer, instructiunea for actioneaza dupa schema prezentata in figura 2.:
Figura 2. Structura iterativa cu variabila de control 1) Se evalueaza valoarea initiala vinit si valoarea finala vfin 2) Se atribuie contorului v valoarea initiala vinit 3) Se compara valoarea contorului v cu valoarea finala vfin. Daca aceasta este mai mare sau egala pentru prima forma, respectiv mai mica sau egala pentru cea de-a doua forma, decat vfin se incheie executia, altfel se continua cu pasul 4 4) Se executa instructiunea specificata dupa cuvantul rezervat DO. . 5) Se incrementeaza contorul pentru prima forma, respectiv se decrementeaza pentru cea de a doua forma si se continua cu pasul 3. Observatie. Pentru forma intai a instructiunii daca valoarea initiala vinit este mai mare ca valoarea finala vfin respectiv, valoarea initiala este mai mica decat valoarea finala pentru forma a doua, instructiunea ce urmeaza dupa DO, nu se executa niciodata. Instructiunea ce trebuie repetata este o instructiune simpla sau o instructiune compusa( ce cuprinde o secventa de instructiuni ce incepe cu BEGIN si se termina cu END ). Observatie. In interiorul instructiunii compuse ce trebuie sa fie repetate, nu trebuie sa existe nicio instructiune de atribuire care sa altereze valoarea variabilei de control a structurii FOR. 1.2. Aplicatii rezolvateAplicatia 1 Sa se realizeze programul in limbajul Pascal care calculeaza n!. Rezolvare Stim ca n! este:
Altfel scris:
Programul pentru calculul lui n! se numeste factorial si este prezentat in lista 1 Lista 1. Programul pentru calcularea lui n! Program factorial; Uses CRT; Var i,N:Integer; F:Real; Begin ClrScr; Write('N='); Readln(N); F:=1; For i:=1 to N do F:=F*i; Writeln('F=',F:8:0); Repeat Until Keypressed End. Aplicatia 2. Sa se realizeze programul in limbajul Pascal care calculeaza . Rezolvare Formula de calcul a combinarilor de n elemente luate cate k este
executand simplificarile rezulta
Rearanjand termenii se poate scrie: ; prin urmare formula de calcul a combinarilor se poate scrie:
Programul pentru calculul combinarilor de n elemente luate cate k se numeste combinari si este prezentat in lista 2
Lista 2. Programul pentru calcularea combinarilor de n elemente luate cate k Program combinari; Uses CRT; Var K,i,N:Integer; c:Real; Begin ClrScr; Write('N='); Readln(N); Write('K='); Readln(N); C:=1; For i:=1 to k do C:=C*(n-i+1)/i; Writeln('C=',C:8:0); Repeat Until Keypressed End. 1.3. Aplicatii propuseAplicatia P1. Sa se realizeze programul in limbajul Pascal care calculeaza suma primelor n numere naturale. Aplicatia P2. Sa se realizeze, utilizand instructiunea for, programul in limbajul Pascal care afiseaza primii m termeni ai sirului lui Fibonacci. Sirul are forma 1, 1, 2, 3, 5 adica primii doi termeni sunt 1 iar orice alt termen se obtine ca suma a celor doi termeni care il preced. 2. Instructiunea iterativa while2.1. Prezentare teoreticaInstructiunea WHILE este o alta instructiune care repeta o instructiune sau o secventa de instructiuni. Testul de continuare a repetarilor este plasat la inceputul secventei de instructiuni ce trebuie repetate. Sintaxa instructiunii este prezentata in diagrama din figura 3.
Figura 3. Diagrama de sintaxa a instructiunii while Instructiunea while actioneaza ca in schema din figura 4.:
Figura 4. Schema logica pentru actiunea instructiunii while 1) Se evalueaza conditia (expresie care are ca rezultat o valoare logica). 2) Daca rezultatul ei este FALSE repetarile instructiunii se incheie, daca rezultatul este TRUE, se continua cu pasul 3 3) Se executa instructiunea si se continua cu pasul 1. Instructiunea ce trebuie sa fie repetata este o instructiune simpla sau o instructiune compusa. Aceasta trebuie sa contina o instructiune de atribuire care sa modifice un operand al conditiei, astfel incat la un moment dat conditia sa se evalueze la rezultatul FALSE si repetarile sa se incheie. Numarul minim de repetari ale instructiunii este zero deoarece daca conditia de la inceput este evaluata la valoarea FALSE, ea nu se executa niciodata. 2.2. Aplicatii propuseAplicatia 3. Sa se realizeze programul in limbajul Pascal care afiseaza termenii din sirul lui Fibonacci mai mari ca 1 dar mai mici decat n. Sirul are forma 1, 1, 2, 3, 5 adica primii doi termeni sunt 1 iar orice alt termen se obtine ca suma a celor doi termeni care il preced. Rezolvare Pentru rezolvarea aplicatiei trebuie sa tinem cont ca orice nou termen T al sirului se obtine din doi termeni precedenti T1 si T2. De aceea valoarea numerica a acestora trebuie pastrata in memorie. Programul pentru calculul termenilor din sirul Fibonacci mai mari ca 1 si mai mici ca n se numeste fibonacci si este prezentat in lista 3 Lista 3. Programul pentru calcularea termenilor sirului lui Fibonacci Program fibonacci; Uses CRT; Var n:Integer; T1,t2,t:Integer; Begin ClrScr; Write('N='); Readln(N); T1:=1; T2:=1; T:=t1; Write(T2,',',T1); While t<=n do Begin T:=t1+t2; Write(',',T); T2:=t1; T1:=t; End; Writeln; Repeat Until Keypressed End. Aplicatia 4. Sa se realizeze programul in limbajul Pascal care calculeaza n! utilizand instructiunea While. Rezolvare Programul pentru calculul lui n! folosind instructiunea while se numeste factwhile si este prezentat in lista 4 Lista 4. Programul pentru calcularea lui n! utilizand instructiunea While Program factwhile; Uses CRT; Var i,N:Integer; F:Real; Begin ClrScr; Write('N='); Readln(N); F:=1; I:=2; While i<=n do Begin F:=F*i; I:=i+1 End; Writeln('F=',F:8:0); Repeat Until Keypressed End. 2.3.Aplicatii propuseAplicatia P3. Sa se realizeze programul in limbajul Pascal care calculeaza combinari de n elemente luate cate k utilizand instructiunea while. Aplicatia P4. Sa se realizeze programul in limbajul Pascal care calculeaza aranjamente de n elemente luate cate k, utilizand instructiunea while. 3. Instructiunea repeat3.1. Prezentare teoreticaInstructiunea REPEAT este o alta instructiune structurata din clasa instructiunilor iterative. Testul de continuare a repetarilor se afla plasat dupa secventa de instructiuni ce trebuie repetata. Sintaxa instructiunii este prezentata in figura 5.
Figura 5. Diagrama de sintaxa pentru instructiunea repeat Instructiunile ce trebuiesc repetate sunt cuprinse intre REPEAT si UNTIL. Nu este necesara folosirea instructiunii compuse ce incepe prin BEGIN si se termina cu END. Instructiunea REPEAT are modul de actiune prezentat in figura :
Figura Schema logica pentru actiunea instructiunii repeat 1) Se executa instructiunea sau instructiunile din secventa; 2) Se evalueaza conditia, daca rezultatul ei este TRUE repetarile se termina, in caz contrar se continua cu pasul 1. Numarul minim de repetari ale secventei de instructiuni este unu, deoarece secventa se executa o data pana cand se evalueaza conditia. In interiorul secventei ce urmeaza a fi repetata trebuie sa existe o instructiune care sa modifice un operand al expresiei logice astfel incat aceasta la un moment dat sa se evalueze la rezultatul TRUE pentru ca repetarile sa se termine. 2.2. Aplicatii propuseAplicatia 5. Sa se realizeze programul in limbajul Pascal care calculeaza combinari de n elemente luate cate k utilizand instructiunea repeat. Rezolvare Programul pentru calculul combinarilor de n elemente luate cate k se numeste combinarir si este prezentat in lista 5 Lista 5. Programul pentru calcularea combinarilor de n luate cate k prin repeat Program combinarir; Uses CRT; Var K,i,N:Integer; c:Real; Begin ClrScr; Write('N='); Readln(N); Write('K='); Readln(N); C:=1; I:=1; Repeat C:=C*(n-i+1)/i; I:=I+1; Until i>k; Writeln('C=',C:8:0); Repeat Until Keypressed End. Aplicatia Sa se realizeze programul in limbajul Pascal care calculeaza suma primelor n numere naturale utilizand instructiunea repeat. Rezolvare Trebuie sa calculam suma s
Pentru calculul eficient, din punctul de vedere al programarii in limbajul Pascal, a acestei sume ar trebui sa folosim instructiunea for deoarece putem sa-i asociem o variabila de control care ia valori intre 1 si n., evitand astfel instructiunile de atribuire explicite pentru initializarea variabilei de control si pentru incrementarea variabilei de control care sunt necesare atunci cand se foloseste instructiunea Repeat. Programul pentru calculul sumei primelor n numere naturale folosind instructiunea repeat se numeste sumare si este prezentat in lista 6 Lista Programul pentru calcularea sumei primelor n numere naturale Program sumare; Uses CRT; Var i,N:Integer; s:Real; Begin ClrScr; Write('N='); Readln(N); s:=0; I:=1; Repeat s:=s+i; I:=i+1 Until i>n; Writeln('s=',S:8:0); Repeat Until Keypressed End. 2.3.Aplicatii propuse1. Sa se realizeze programul in limbajul Pascal care calculeaza aranjamente de n elemente luate cate k utilizand instructiunea repeat. 2. Sa se realizeze programul in limbajul Pascal care calculeaza suma patratelor primelor n numere naturale, utilizand drept instructiune repetitiva instructiunea repeat.
|