CATEGORII DOCUMENTE |
Structura secventiala - controlul este transferat
de la o operatie la alta in secventa.
Structura alternativa - permite alegerea intre doua alternative.
In unele situatii algoritmul de rezolvare a problemei impune ramificarea programului in doua ramuri conditionata de valoarea de adevar a unei conditii , astfel incat, la executarea acestuia , in functie de datele problemei, calculatorul sa poata executa una din cele doua actiuni posibile.
Instructiunea IF
Aceasta facilitate este asigurata de instructiunea IF. Forma generala (doua variante ) a acestei instructiuni este:
1.Formatul pentru structura alternativa cu doua ramuri
IF conditie
< instructiuni1>
ELSE
<instructiuni2>
ENDIF
2.Formatul pentru structura alternativa cu o ramura vida
IF conditie
< instructiuni>
ENDIF
In limba engleza IF inseamna "daca" , iar ELSE inseamna "altfel". Functionarea instructiunii IF poate fi explicata prin urmatoarele diagrame.
1.Formatul pentru structura alternativa cu doua ramuri este urmatoarea:
2.Formatul pentru structura alternativa cu o ramura vida
La intalnirea unei instructiuni IF se va evalua in primul rand valoarea de adevar a expresiei booleene conditie. In cazul in care aceasta are valoarea TRUE se va executa grupul de instructiuni <instructiuni1>, dupa care executia comenzii se va termina.
Daca conditia are valoarea FALSE si daca exista ELSE se va executa instructiunile din grupul <instructiuni2>, dupa care executia comenzii se va termina.
In ambele cazuri urmatoarea instructiune care se va executa este cea de dupa terminarea instructiunii.
Exemplu:
SET TALK OFF
CLEAR
a = 0
b = 0
@4,10 SAY ' Primul numar' GET a PICTURE '9999'
@5,10 SAY ' Al doilea numar' GET b PICTURE '9999'
READ
IF a>b
? " Primul numar este mai mare " && se executa cand a>b
ELSE
? " Al doilea numar este mai mare sau sunt egale"
NOTE se executa cand a<=b
ENDIF
IF b<> 0
NOTE se executa cand b este diferit de 0
? a, ":",b,"=",a/b
ENDIF
Un efect asemanator, de selectie dintre doua variante, se obtine prin functia IIF () avand sintaxa:
IIF ( <expL>, <expr1>, <expr2>)
Aceasta functie evalueaza expresia logica <expl> si in functie de rezultatul obtinut, returneaza valoarea uneia dintre expresiile <expr1> si <expr2>:
returneaza valoarea obtinuta prin evaluarea expresiei <expr1> daca <expl> este evaluata la .T.
returneaza valoarea obtinuta prin evaluarea expresiei <expr2> daca <expl> este evaluata la .F.
Cele doua expresii <expr1> si <expr2> nu trebuie neaparat sa aiba acelasi tip, acestea putand fi de tip sir de caractere, data calendaristica, logic sau numeric.
Exemplu:
SET TALK OFF
CLEAR
a = 0
b = 0
@4,10 SAY ' Primul numar' GET a PICTURE '9999'
@5,10 SAY ' Al doilea numar' GET b PICTURE '9999'
READ
sir1=" Primul numar este mai mare "
sir2= " Al doilea numar este mai mare sau sunt egale"
? IIF a>b, sir1, sir2
Mai multe comenzi IF ...ENDIF pot fi imbricate, incluse una in alta, obtinandu-se conditionarea unui grup de instructiuni prin mai multe expresii logice, sau obtinandu-se selectii diverse intre mai multe grupuri de instructiuni.
Exemplu:
SET TALK OFF
CLEAR
a = 0
b = 0
@4,10 SAY ' Primul numar' GET a PICTURE '9999'
@5,10 SAY ' Al doilea numar' GET b PICTURE '9999'
READ
sir1=" Primul numar este mai mare "
sir2= " Al doilea numar este mai mare sau sunt egale"
sir3= " Numerele sunt egale"
IF a>b
? sir1 && a>b
ELSE
IF a<b
? sir2 && a<b
ELSE
? sir3 && a=b
ENDIF
ENDIF
In acest exemplu structura de comenzi IF..ENDIF poate fi inlocuita cu:
? IIF ( a>b, sir1, IIF ( a<b, sir2 , sir3))
in care avem doua apeluri ale functiei Iif ( )incluse unul in altul.
Instructiunea CASE
Instructiunea IF permite selectarea uneia dintre cele doua actiuni in concordanta cu valoarea unei expresii booleene.
Instructiunea CASE este o generalizare a instructiunii IF in sensul ca asigura executarea conditionata a uneia din cele cateva actiuni posibile, in functie de valoarea unei expresii de tip scalar sau subdomeniu ( numita selector ), ca urmare permite alegerea din atatea instructiuni cate valori distincte are tipul expresiei.
Sintaxa este:
DO CASE
CASE <expL1>
< instructiuni1>
[CASE <expL2>
< instructiuni2>
..........
CASE <expLN>
< instructiuniN>]
[ OTHERWISE
< instructiuni>]
ENDCASE
Comanda va determina executia grupului de instructiuni pentru care expresia logica corespunzatoare are valoarea .T.. Executia comenzii va decurge in modul urmator:
Se evalueaza prima expresie logica <expL1> si daca valoarea obtinuta este .T. se executa grupul de instructiuni <instructiuni1>. Daca expresia logica <expL1> are valoarea .F. se trece la evaluarea urmatoarei expresii logice. Dupa gasirea primei expresii logice cu valoarea .T. si executarea grupului de instructiuni corespunzator, executia comenzii se incheie, programul continuand cu prima comanda de dupa ENDCASE.
Daca nici una dintre expresiile <expL1>, <expL2>...<expLN> nu are valoarea .T., apar doua cazuri:
cand nu exista clauza OTHERWISE, executia comenzii se incheie;
in prezenta clauzei OTHERWISE, se va executa grupul de instructiuni <instructiuni>, dupa care se trece la prima comanda de dupa ENDCASE.
Observatie: numai unul dintre grupurile de instructiuni <instructiuni1> ..<instructiuniN> si <instructiuni> va fi executat si anume acela pentru care expresia logica este .T.
c1
Exemplu:
SET TALK OFF
CLEAR
DIMENSION a (4 )
a (1) = Primavara'
a (2) = 'Vara'
a (3) = 'Toamna
a (4) = 'Iarna
anotimp =' Prim[vara'
@ 6,26 GET anotimp FROM a FUNCTION '&'
READ
@ 15,10 SAY ' Acest anotimp con'ine lunile: '
DO CASE
CASE anotimp = ' Primavara'
?? ' Martie, Aprilie, Mai '
CASE anotimp = 'Vara'
?? ' Iunie, Iulie, August '
CASE anotimp = 'Toamna'
?? ' Septembrie, Octombrie, Noiembrie '
OTHERWISE
?? ' Decembrie, Ianuarie, Februarie '
ENDCASE
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1162
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved