Documente Academic
Documente Profesional
Documente Cultură
Instrucţiuni (1)
INSTRUCŢIUNI SECVENŢIALE. INSTRUCŢIUNI DE DECIZIE
6.1. Introducere
Instrucţiunile unui program controlează execuţia acestuia. În general, ordinea de execuţie a
instrucţiunilor este cea secvenţială. Unele instrucţiuni se execută în mod repetat iar altele alternativ.
Pe lângă cele trei posibilităţi de execuţie a instrucţiunilor (secvenţială, repetitivă şi alternativă) mai
este permisă şi instrucţiunea selectivă.
O instrucţiune poate fi compusă din: cuvinte cheie, expresii şi apeluri de funcţii.
Instrucţiunile pot fi grupate în:
- instrucţiuni simple;
- instrucţiuni compuse (bloc);
- instrucţiuni de ciclare (bucle);
- instrucţiuni de decizie (alternative);
- instrucţiuni de întrerupere şi salt.
1
6.4.1. Instrucţiunea if:
Are forma generală:
if (expresie)
instrucţiune;
unde: expresie reprezintă de cele mai multe ori o expresie logică, iar instrucţiune poate fi o
instrucţiune expresie sau o instrucţiune compusă.
Mod de lucru:
- se evaluează expresie;
- dacă are valoare diferită de zero (adevărată) se execută instrucţiune, iar dacă are valoare
nulă (falsă) nu se execută instrucţiune.
Exemplu: Suma elementelor pare dintr-un şir de numere.
…
if( a[i]%2 == 0 )
S+=a[i];
...
⎧ x daca x >= 0
Explicitarea modulului: mx = ⎨
⎩− x daca x < 0
…
if( x >= 0 )
mx = x;
else
mx=-x;
…
⎧ x 2 + 3x − 4 daca x >= 2
Calculul valorii funcţiei: y = ⎨
⎩x − 7 daca x < 2
2
…
if( x >= 2 )
y = x * x + 3 * x - 4;
else
y = x - 7;
…
Observaţie: În cazul în care alternativele de prelucrare se codifică prin secvenţe de
instrucţiuni, acestea trebuie grupate în instrucţiuni compuse.
Exemplu:
Calculul sumei şi a numărului de elemente pozitive dintr-un şir:
…
if( a[i] > 0 ) { s += a[i]; np++; }
…
În situaţia în care, dacă din greşeală, instrucţiunea s-ar fi scris în modul următor:
…
if( a[i] > 0 ) s += a[i]; np++;
…
incrementarea valorii np se realizează în afara instrucţiunii decizionale adică se efectuează în orice
situaţie.
Deoarece alternativa else a unei instrucţiuni decizionale este opţională, poate să apară o
ambiguitate legată de asocierea acesteia în cazul unor instrucţiuni de decizie imbricate.
Exemplu:
⎧ x 2 + 3x − 4 daca x >= 2
Calculul valorii funcţiei: y = ⎨ pentru valori pare ale lui x;
⎩x − 7 daca x < 2
...
if ( x % 2 == 0 )
if ( x >= 2 )
y = x * x + 3 * x - 4;
else
y = x - 7;
...
În aceste situaţii, regula este următoarea: alternativa else se asociază ultimei decizii
incomplete. Dacă se doreşte o altă asociere se pot folosi acoladele:
...
if ( x % 2 == 0 )
{ if ( x >= 2 )
y = x * x + 3 * x - 4; }
else
y = x - 7;
...
Observaţie: Această variantă nu este cea corectă, corespunzătoare rezolvării problemei, este doar
un exemplu!!!
sau se poate completa alternativa else a instrucţiunii decizionale interioare cu o instrucţiune vidă:
...
if ( x % 2 == 0 ) if ( x >= 2 ) y = x * x + 3 * x - 4; else y = x - 7;
else ;
...
3
6.5. Instrucţiunea de decizie multiplă
O selecţie multiplă se poate realiza cu mai multe instrucţiuni decizionale în cascadă. În cazul
general în care există „n” alternative posibile selectate pe baza a „n-1” condiţii, se recomandă
folosirea acestei structuri. Forma generală este:
...
if( expr_1 )
instructiune_1
else if( expr_2 )
instructiune_2
...
else if( expr_n-1 )
instructiune_n-1
else
instructiune_n
...
Expresiile se evaluează în ordinea în care sunt scrise. Dacă se întâlneşte o expresie
adevărată, atunci se execută instrucţiunea care-i este asociată şi astfel se încheie întregul lanţ.
Instrucţiunea de după ultimul else se execută doar când nici una dintre expresii nu a fost adevărată.
Exemplu:
⎧ x3 − 4 x 2 + 5 x − 9 x>3
⎪ 2
Calculul valorii funcţiei: y = ⎨ x + 8 x − 17 −3≤ x ≤3
⎪ x − 25 x < −3
⎩
...
if ( x > 3 )
y = x*x*x-4*x*x+5*x-9;
else if ( x >= -3 )
y = x*x+8*x-17;
else
y = x -25;
...
Program exemplu nr. 1:
⎧ x3 − 4 x 2 + 5 x − 9 x>3
⎪
Calculul valorilor funcţiei y = ⎨ x 2 + 8 x − 17 − 3 ≤ x ≤ 3 pentru un x introdus de utilizator de
⎪ x − 25 x < −3
⎩
la tastatură.
#include <stdio.h>
#include <conio.h>
void main( void )
{ float x, y; clrscr();
printf(“\n Introduceti o valoare pentru x:”); scanf (“%f”,&x);
if ( x > 3 ) y = x * x * x – 4 * x * x + 5 * x - 9;
else if ( x >= -3 ) y = x * x + 8 * x – 17;
else y = x - 25;
printf(“\n x = %7.3f \t y = %7.3f”,x,y);
getch();
}