eed.usv.ro_~ionelar_pclp_laborator_06
TRANSCRIPT
-
Laborator 6 PCLP 1 2012 2013
USV | 1
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( ) { }
Exemplu: int i = 0; while( i < N ) { printf( "s[%d]= ", i ); scanf( "%d", &sir[ i++ ] ); }
INSTRUCIUNEA DO WHILE Sintaxa general:
do { } while( );
Exemplu:
while( i < N ) { printf( "N= " ); scanf( "%d", &N ); } while( x < 0 || x > N );
-
Laborator 6 PCLP 1 2012 2013
USV | PROBLEME REZOLVATE 2
INSTRUCIUNEA FOR Sintaxa general:
for( ; ; ) { }
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 #include #include 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
-
Laborator 6 PCLP 1 2012 2013
USV | 3
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 cresctoare, n * numr de mai mult de trei valori. * AUTOR: * Remus PRODAN * DATA: * 12.11.2009 */ #include #include #include 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
-
Laborator 6 PCLP 1 2012 2013
USV | 4
{ 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