eed.usv.ro_~ionelar_pclp_laborator_06

Upload: emi-lp

Post on 08-Oct-2015

15 views

Category:

Documents


0 download

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