5.6. ESTRUCTURA Desde/para ("For") : Deci para Pentru de La de La Paragraf
5.6. ESTRUCTURA Desde/para ("For") : Deci para Pentru de La de La Paragraf
În multe ocazii se cunoaș te dinainte numărul de ori în care se doresc executarea acț iunilor unui bucle.
În aceste cazuri, în care numărul de iteraț ii este fix, trebuie folosită structuradeciopara(pentru, în engleză).
Structurade laexecută acț iunile corpului buclei de un număr specificat de ori ș i în mod automat
tico controlează numărul de iteraț ii sau paș i prin corpul buclei. Instrumentele de programare ale
structurăde laoparagrafse arată pe pagina următoare lângă Figura 5.5.
iniț ializare
Eu← 1 Eu← 1
al contorului
da
Eu← Eu + 1
Proces
no
Eu← I + 1 I > 50
da
172 Fundamentele programării
b) Modelul 3
a calcula
valoare iniț ială
ș i valoarea finală
a fixa la
variabil indice
al valor iniț ial
variabilă adevărat
indice > valoare
final
fals
creș te
variabilă indice
c) Model 4
eu← vi eu← vi
da da
i > vf i > vf
eu← vi + X eu← vi + X
nu nu
a repeta
variabilă =
m1, m2, m3
m1=contador inicial
proces m2=contador final
m3=increment de pas
eu← vi
i > vf
da
eu← vi + X
nu a scrie
'Suma =', S
S← S + 1
sfârș it
echivalează cu
algoritmosuma
var
entero:I, N, S
început
S← 0 ,
leer (N)
de la← 1hastaNhacer
S← S + I
fin_desde
scrie('Sumă =', S)
sfârș it
174 Fundamentele programării
Structurade laîncepe cu o valoare iniț ială a variabilei index ș i acț iunile specificate se execută,
cu excepț ia cazului în care valoarea iniț ială este mai mare decât valoarea finală. Variabila index se incrementează cu unu ș i dacă această nouă valoare
nu depăș eș te la final, acț iunile sunt executate din nou. Prin urmare, acț iunile specifice din buclă sunt executate
para cada valor de la variable índice desde el valor inicial hasta el valor final con el incremento de uno en uno.
Creș terea variabilei indice este întotdeauna 1 dacă nu se indică expres contrariul. În funcț ie de tipul
de limbaj, este posibil ca incrementul să fie diferit de unu, pozitiv sau negativ. Astfel, de exemplu, FORTRAN ad-
mite diferite valori pozitive sau negative ale creș terii, iar Pascal acceptă doar creș teri ale cărei dimensiune este
unitate: bine pozitive, bine negative. Variabila indice sau de control va fi în mod normal de tip întreg ș i este normală
a folosi literele ca numeEu, J, K.
Formatul structuriide lavariază dacă se doreș te o creș tere diferită de 1, fie pozitivă, fie negativă (de-
cremento).
Ș i dacă valoarea iniț ială a variabilei indice este mai mică decât valoarea finală, creș terile trebuie să fie pozitive, deoarece
en caso contrario la secuencia de acciones no se ejecutaría. De igual modo, si el valor inicial es mayor que el valor
în final, creș terea trebuie să fie în acest caz negativă, adică un decrement. Creș terea este adesea denumită de asemenea
pasul("step", în engleză). Adică,
nu s-ar executa, deoarece valoarea iniț ială este20ș i valoarea finală10, ș i cum se presupune o creș tere pozitivă, de valoare 1,
se produciría un error. El pseudocódigo correcto debería ser
a)început b)început
eu← n eu← 1
mientrasi > 0face mientrasi <= nhacer
<acciones> <acciones>
eu← i – 1 eu← i + 1
fin_cât timp fin_cât timp
sfârș it sfârș it
c)începere d)început
eu← 0 eu← 1
repeta repeta
<acciones> <acciones>
eu← i+1 eu← i+1
hasta_quei = n până_la_care > n
fin fin
e)început f ) începere
eu← n + 1 eu← n
a repeta a repeta
<acciones> <acciones>
eu← i - 1 eu← i - 1
hasta_quei = 1 până_cândi < 1
fin sfârș it
Deș i nu este inclusă în structurile de bază ale programării structurate, uneori este necesar
a dispune de o structură repetitivă care să permită ieș irea într-un punct intermediar al bucla atunci când se îndeplineș te o
condiț ie. Această nouă structură este disponibilă doar în anumite limbaje de programare specifice; denomi-
naremositerapentru a-l diferenț ia de repetă_până_ladeja cunoscută. Ieș irile din bucle sunt de obicei valabile în
structuriîn timp ce, a repetayde la.
Formatul structurii este
itera
<acciones>
si<condiț ie>atunci
ieș i_din_bucle
fin_si
<acciones>
fin_iterar
În general, instrucț iuneaiteranu produce un program lizibil ș i uș or de înț eles aș a cum o facîn timp cey
repetiMotivul pentru această lipsă de claritate este că ieș irea dintr-un ciclu are loc în mijlocul ciclului, în timp ce
de obicei, ieș irea din buclă este la început sau la sfârș itul acesteia. Vă recomandăm să nu recurgeț i la această opț iune.
—deș i îl are în limbajul său— mai mult decât atunci când nu există o altă alternativă sau dispune de structura itera
(ciclare).
EXEMPLU5.12
O aplicaț ie a unei posibile utilizări a instrucț iuniia ieș ise poate întâmpla atunci când sunt incluse mesaje de cerere în
algoritmul pentru introducerea succesivă a informaț iilor.
176 Fundamentele programării
Algoritm 1 Algoritm 2
învăț a(informaț ie) leer(informacion)
repeta mientras_nofin_de_lectura
procesa (informaț ie) procesa (informaț ie)
citi(informatii) a citi(informaț ie)
până_la_sfârș itul_lecturii final_cât_timp
În algoritmii anteriori, fiecare intrare (citire) de informaț ie este însoț ită de procesul său corespunzător,
dar prima lectura este în afara buclei. Se pot include în interiorul buclei toate citirile de informaț ii
ș i se deț ine o structurăieș i(ieș ire). Un exemplu în acest sens este structura următoare:
itera
citi(informatii)
sifin_de_lecturaentonces
ieș i_din_bucle
fin_si
procesa (informaț ie)
fin_iterar
Sintaxis
a întrerupe
sentencia_interrumpir::= interrumpir
EXEMPLU5.13
a face
introduceț i un număr de identificare
leer(numId)
dacă(numId < 1000 ș i numId > 1999) atunci
Număr invalid
te rog, introdu un alt număr
si-no
a întrerupe
fin_si
în timp ce(valoarea expresiei să fie întotdeauna adevărată)
Flux de control II: Structuri repetitive 177
EXEMPLU5.14
varentero: t
desdet← 0hastat < 100incremento1hacer
scrie (t)
si(t = 1d)atunci
interupe
final_si
fin_desde
Regla
Instructia interrumpir(break) este adesea utilizată împreună cu o instrucț iune dacă(if) acț ionând ca
o condiț ie internă a buclei.
Sintaxă
continua
Sentencia_continuar::=continuar
Sentinț acontinuapoate fi utilizat doar în cadrul unei iteraț ii a unui loop. Declaraț iaa continuanu
interferează cu numărul de ori în care se repetă corpul buclei, aș a cum se întâmplă cu întreruperea, ci doar simplu-
mintea influenț ează fluxul de control în orice iteraț ie specifică.