Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




INSTRUCTIUNEA DO

c


INSTRUCŢIUNEA DO

Sunt situatii când la o secventa de instructiuni repetitiva sa apara necesitatea ca testul pentru reluarea buclei sa se faca la sfârsit. În aceste cazuri trebuie folosita instructiunea do, numita si instructiunea repetitiva (de buclare) cu test final. Formatul instructiunii este:



do

instructiune

while (expresie) ;

unde instructiune este un bloc sau chiar o singura instructiune si constituie corpul buclei, iar expresie este testul final al buclei.

Se executa corpul buclei, dupa care se evalueaza expresie si daca este diferita de zero (adevarata) atunci se reia executia corpului instructiunii, astfel daca expresie este zero (falsa) bucla ia sfârsit si se trece la instructiunea urmatoare de dupa do. Din modul de executare a instructiunii do se observa ca instructiune (corpul buclei) se executa cel putin o data.

si instructiunea do poate defini o bucla infinita:

do

.......

.......

if (.....) break;

........

........

while (1);

iesirea din bucla facându-se cu break sau return ca mai sus.

Iata în continuare câteva exemple de utilizare a instructiunii do.

Exemplu 3.7.1.

Acest program determina o radacina a ecuatiei f(x) = 0 din intervalul a,b cu precizia eps prin metoda înjumatatirii intervalului.

# include "stdio.h"

# include "math.h"

main ( )

unsigned i, k;

double a, b, c, x, fa, fb, fc, eps, f ( );

printf("Determinarea radacinii ecuatiei f(x) = 0 în intervalul a,b cu precizia eps \n");

printf("prin metoda înjumatatirii intervalului n");

do

printf("Introduceti (a,b,eps): ");

scanf("%1f, %1f, %1f, &a, &b, &eps);

while (a > = b eps < = 0);

fa = f (a);

fb = f (b);

tf (fa* fb >0)

printf ("Nu este diferenta de semn între f (a) si f (b) \n");

exit (1);

k = 0;

if (fa = = 0)

x = a;

k = 1;

else

if (fb = = 0)

x = b;

k = 1;

else

do

c = (a+b)/2;

fc = f (c);

if (fc = = 0)

x = c;

k = 1;

else

if (a*fc < 0)

b = c;

fb = fc;

else

a = c;

fa = fc;

while (k = 0 && fabs (b-a)> = eps);

if (k)

printf("Radacina ecuatiei (exact) este : %1f \n", x);

else

printf("Radacina ecuatiei este : %1f \n", x);

/ Definitia functiei f (x)

double f (double x)

return (x x x -3 x +1);

Observati ca prima bucla do se executa atât timp cât datele de intrare introduse sunt eronate, adica limita stânga a intervalului a este > = decât limita dreapta, sau precizia ce trebuie atinsa eps este < = 0. În a doua bucla se înjumatateste intervalul pâna când s-a gasit radacina exacta sau pâna când b-a < eps.

Exemplu 3.7.2.

În acest program se ordoneaza crescator un sir de numere. Întrucât sirul are dimensiune variabila, necunoscuta înainte de eexecutie, memoria necesara pentru elementele sale se aloca dinamic cu ajutorul functiei malloc. Din acest motiv s-a inclus si fisierul (header "alloc.h".

# include "stdio.h"

# include "alloc.h"

main ( )

int i, j = 2, k = 0, n = 0;

float a, b;

printf("Program pt. ordonarea crescatoare a unui sir\n");

/ Introducerea dimensiunii sirului

do

if (k)

printf("Numar negativ n");

printf("Dimensiunea sirului = ");

scanf("%d , &n);

k = 1;

while (n< = 0);

/ Alocare dinamica de memorie pt. sirul a si conversia pointerului de tip char întors de functia malloc la pointerul de tip float cum sunt elementele sirului

a = (float ) malloc (n sizeof (float));

if (a = = )

printf ("Memorie insuficienta (dimens. sir prea mare)\n");

exit (1);

/ Introducerea elementelor sirului

for ( i = 0 ; i < = n-1; i + + )

printf("a %d = ", i );

scanf("%f, &b); a i = b;

/ Ordonarea crescatoare a sirului de numere prin metoda interschimbarii (bulelor)

do

k = 0;

for (i = 0; i <= n-j; i ++)

if (a i + 1

b = a i ; a i = a i + 1 ; a i + 1 = b;

k = 1;

j + + ;

while (k);

/ scrierea sirului ordonat cresc.

printf ("siru 1 ordonat crescator : \n");

for (i = 0 ; i < n-1 ; i + + )

printf("%f, ", a [i] );

printf(("%f, a [n-1] );

Observati ca prima bucla do se executa cât timp s-a introdus o dimensiune a sirului incorecta (n < = 0) .A doua bucla do ordoneaza efectiv sirul si se executa pâna când nu mai sunt de facut interschimbari (k = 0), deci, sirul este ordonat. de asemenea , observati ca am folositinstructiunea do si for , în situatiile când testul pentru terminarea sau repetarea buclei trebuie sa se faca la sfârsit, dupa executia corpului buclei.



Document Info


Accesari: 1117
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )