Documente Academic
Documente Profesional
Documente Cultură
Instrucţiuni (2)
INSTRUCŢIUNEA DE CICLARE
Mai sunt numite şi instrucţiuni de iteraţie sau bucle. Majoritatea problemelor pe care le
rezolvăm cu ajutorul calculatorului presupun parcurgerea unor relaţii în mod repetat, la fiecare
parcurgere, unele variabile modificându-şi valorile după anumite legi.
Toate limbajele de programare conţin instrucţiuni cu ajutorul cărora se poate programa
executarea unor cicluri. În limbajul C există trei instrucţiuni de ciclare: for, while, do…while.
#include <stdio.h>
#include <conio.h>
void main (void)
{ int n,i; double a[20],s; clrscr();
printf(“\n Introduceţi numărul de elemente, n=”); scanf(“%d”,&n);
for( i=0 ; i<n ; i++ ) // citirea elementelor sirului
{ printf(“\n \t a[%2d]=”,i);
scanf(“%lf”, &a[i]);
}
for( s=0, i=0 ; i<n ; i++ ) // calculul sumei
s += a[i];
printf(“\n Suma elementelor este S=%10.3lf”,s); // afisarea sumei calculate
getch();
}
7.2. Cicluri for suprapuse
Dacă instrucţiunile care compun corpul unui ciclu for (numit ciclu for exterior) conţin alt
ciclu for (numit ciclu for interior), cele două cicluri for se numesc suprapuse, imbricate sau incluse.
Observaţie : Ciclul interior trebuie să fie cuprins complet în corpul ciclului exterior.
Forma generală a ciclurilor suprapuse este următoarea:
…
for(expr_1_1 ; expr_1_2 ; expr_1_3 )
{ …
for(expr_2_1 ; expr_2_2 ; expr_2_3 )
{ … }
…
}
…
Exemplu: Afişarea tuturor posibilităţilor de a obţine 100 de lei utilizând monede de 10, 20
şi 50 de lei.
Considerăm următoarele variabile a – numărul de monede de 10 lei; b – 20 lei, c – 50 lei.
Intervalul de valori pentru fiecare variabilă este: a = 0÷10; b = 0÷5; c = 0÷2;
În consecinţă, pe baza celor prezentate mai sus, putem scrie următoarea secvenţă de
program:
…
for(a=0;a<=10;a++)
for(b=0;b<=5;b++)
for(c=0;c<=2;c++)
if( a*10 + b*20 + c*50 == 100)
printf(“\n %2d*10+%2d*20+%2d*50 = 100”,a,b,c);
…
Program exemplu: Produsul elementelor strict pozitive ale unei matrice dreptunghiulare Amxn.
#include <stdio.h>
#include <conio.h>
void main (void)
{int m,n,i,j; double a[10][10], p=1; clrscr();
printf(“\n Introduceti numarul de linii si de coloane, m si n:”);
scanf(“%d %d”,&m,&n);
for(i=0 ; i < m ; i++) // citirea elementelor matricei
for(j=0 ; j < n ; j++)
{ printf(“\n a[%d][%d]=”,i,j);
scanf(“%lf”,&a[i][j]); }
for(i=0 ; i < m ; i++) // afisarea matricei
{ for(j=0 ; j < n ; j++)
printf(“ %8.3lf ”,a[i][j]);
printf(‘\n”);
}
for(i=0 ; i < m ; i++) // calculul produsului elementelor strict pozitive
for(j=0 ; j < n ; j++)
if(a[i][j]>0)
p*=a[i][j];
printf(“\n \n Produsul elem. strict pozitive: P=%10.3lf”,p); // afisarea produsului
getch();
}
Funcţionare :
Se evaluează expresia expresie, dacă aceasta este nenulă se execută instrucţiune, după care
se revine la evaluarea expresiei. În cazul în care expresie este nulă se trece la instrucţiunea
următoare din program.
Program exemplu:
Ordonarea crescătoarea a elementelor unui şir de numere reale.
#include <stdio.h>
#include <conio.h>
void main(void)
{ int n,i,a[20],k=1,aux; clrscr();
do{ printf("\n Introd n="); scanf("%d",&n); } while(n<=0);
for(i=0;i<n;i++) // citirea elementelor sirului
{printf("\n \t a[%2d]=",i);
scanf("%d",&a[i]); }
for(i=0;i<n;i++) // afisarea elementelor sirului
printf("%4d",a[i]);
while(k!=0) // ordonarea crescatoare a elementlor sirului
{ for(k=0,i=0;i<n-1;i++)
if(a[i]>a[i+1])
{ aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; k++; }
}
printf("\n");
for(i=0;i<n;i++) // afisarea sirului ordonat
printf("%4d",a[i]);
getch();
}