Sunteți pe pagina 1din 4

Laborator 6 PCLP 1

2012 2013

Structuri repetitive n limbajul C

BREVIAR TEORETIC
STRUCTURILE REPETITIVE

Limbajul C dispune de trei structuri repetitive - dou cu test iniial (while i for),
respectiv una cu test final (dowhile).
INSTRUCIUNEA WHILE

Sintaxa general:

while( <condiie> )
{
<secven>
}

Exemplu:

int i = 0;
while( i < N )
{
printf( "s[%d]= ", i );
scanf( "%d", &sir[ i++ ] );
}

INSTRUCIUNEA DO WHILE

do
{

Sintaxa general:

<secven>
} while( <condiie> );

Exemplu:

while( i < N )
{
printf( "N= " );
scanf( "%d", &N );
} while( x < 0 || x > N );

USV |

Laborator 6 PCLP 1

2012 2013

INSTRUCIUNEA FOR

Sintaxa general:

for( <exp_init>; <conditie>; <exp_fin> )


{
<secventa>
}

Exemplu:
for( i = 0; i < N; i++ )
{
printf( "s[%d]= ", i );
scanf( "%d", &sir[i] );
}

PROBLEME REZOLVATE
1. Problema separrii cifrelor.

/*
* Realizai un program ce afieaz un numr citit de la consola
* n baza 10, afind cifrele sale separate prin cte un spaiu
* AUTOR:
*
Remus PRODAN
* DATA:
*
12.11.2009
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main( void )
{
int Nr, l, cifra;
char buff[ 10 ];
printf( "\n\t[ START]"
"\n< Afisare cifre separate prin spatiu >\n");
printf( "\nIntroduceti numarul in baza 10: " );
scanf( "%d", &Nr );
/*
* Calcularea numrului de cifre a unui numr (INT)
*/
itoa( Nr, buff, 10 ); // Convertesc un nr la un sir de char:
//
123 -> "123"
l = strlen( buff ); // Aflu lungimea sirului = nr de cifre
/*
* Obinerea unei primei cifre: 4321 / 4000 = '4'
*/
while( l-- )
{
cifra = Nr / pow( 10, l );
//123 / 100 = '1'
Nr -= cifra * powl( 10, l );
//123 - 1*100 = 23

USV | PROBLEME REZOLVATE

Laborator 6 PCLP 1

2012 2013

printf( "%1d.", cifra );


}
printf( "\n\t[ END ]\n" );
}

return 0;

2. Problema subirurilor cresctoare.

/*
* Realizai un program ce va citi de la consola un ir de numere finalizat cu
* ZERO.
* Va afia acele subiruri, formate din elementele vecine,strict cresc
toare, n
* numr de mai mult de trei valori.
* AUTOR:
*
Remus PRODAN
* DATA:
*
12.11.2009
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main( void )
{
int i = 0, j, N = 0, nrCifre, cifraCur, sir[ 30 ];
printf( "\n\t[ START] \n< Problema subsirurilor crescatoare >\n");
printf( "\nIntroduceti sirul (terminat cu ZERO): \n" );
do{ //Citesc elementele irului, pana la ntlnirea lui ZERO
printf( "x(%d) = ", N );
scanf ( "%d", &sir[ N ] );
} while( sir[ N++ ] != 0 );
nrCifre = 1;
cifraCur = sir[ 0 ];
for( i = 1; i < N; i++ )
{
//dac acest element este ca valoare, succesiv
if( sir[ i ] >= cifraCur + 1 )
{
// ... il iau ca referin
cifraCur = sir[ i ];
nrCifre++; //... am mai gasit unul !
} else
//Daca elementul curent nu indeplineste condiia
{
if( nrCifre >= 3 ) // i dac nr. lor este >= 3

USV |

Laborator 6 PCLP 1
{

2012 2013

printf( "\nSubsirul: " ); //...le afiez


for( j = i-nrCifre; j < i; j++ )
printf( "%d, ", sir[ j ] );
nrCifre = 1;
//Resetez contorizare...
cifraCur = sir[ i ];//....i referin

}
}
printf( "\n\t[ END ]\n" );
return 0;
}

PROBLEME PROPUSE SPRE REZOLVARE


1. Scriei un program care afieaz cifrele unui numr cu spaiu ntre ele.
2. Scriei un program care determin valoarea unui polinom ntr-un punct. Valorile
coeficienilor cat i valoarea lui x vor fi preluate de la consola.
3. Se citete o matrice A[ N x M ] ( N<=10 i M<=6 ) cu elementele cifre de la 0 la 9. S se
afieze suma numerelor care se pot forma din cifrele fiecrei linii.
Exemplu: Pentru matricea:
06824
97058
31795
Se va calcula 6824 + 97058 + 31795 = 135677 i se va afia 135677.
4. Scriei un program care realizeaz citirea, afiarea, adunarea i nmulirea a 2 polinoame
de grad N, unde coeficienii celor doua polinoame vor fi citi i de la consola.

USV |

S-ar putea să vă placă și