4_1 Structura repetitiva de tip WHILE

11
1 Structura repetitivă de tip WHILE-DO Structura repetitivă de tip WHILE-DO (cîtă timp - execută) reprezinta structura de control cu ajutorul careia executam un set de instructiuni, de mai multe ori, in functie de o conditie. Conditia se testeaza imediat la intrarea in structura repetitiva, de aceea, “while-do” se numeste structura repetitiva conditionata anterior. Structura repetitivă WHILE-DO Pseudocod C/C++ Cat_timp(cond)executa | Prel - while(cond){ Prel; //set de instructiuni } Mecanism : Pas1. Se testeaza conditia. ( conditia reprezinta de fapt o expresie logica) Daca conditia (expresia logica) este adevarata atunci trecem la pasul 2. Daca conditia este falsa se trece la pasul 3. Pasul 2: Se executa pachetul de instructiuni “ Prel” si se revine la pasul 1. Pasul 3. Stop

description

C/C++

Transcript of 4_1 Structura repetitiva de tip WHILE

  • 1

    Structura repetitiv de tip WHILE-DO

    Structura repetitiv de tip WHILE-DO (ct timp - execut) reprezinta structura de control cu ajutorul careia executam un set de instructiuni, de mai multe ori, in functie de o conditie. Conditia se testeaza imediat la intrarea in structura repetitiva, de aceea, while-do se numeste structura repetitiva conditionata anterior.

    Structura repetitiv WHILE-DO

    Pseudocod

    C/C++

    Cat_timp(cond)executa

    | Prel

    -

    while(cond){

    Prel; //set de instructiuni

    }

    Mecanism :

    Pas1. Se testeaza conditia. ( conditia reprezinta de fapt o expresie logica) Daca conditia (expresia logica)

    este adevarata atunci trecem la pasul 2. Daca conditia este falsa se trece la pasul 3.

    Pasul 2: Se executa pachetul de instructiuni Prel si se revine la pasul 1.

    Pasul 3. Stop

  • 2

    Afiarea cifrelor unui numr n ordine invers

    Se citete n. S se afieze cifrele lui n n ordine invers.

    Afiare cifre numr n ordine invers

    Pseudocod C C++

    intreg n

    Citeste n

    Cat_timp(n>0)executa

    scrie n mod 10

    nn/10

    #include

    int main(){

    int n;

    scanf(%d,&n);

    while(n>0){

    printf(%d,n%10);

    n=n/10;

    }

    return 0;

    }

    #include

    using namespace std;

    int main(){

    int n;

    cin>>n;

    while(n>0){

    cout

  • 3

    Dupa ce am extras aceasta cifra si am afisat-o , eliminam aceasta cifra din numar, astfel incat,

    penultima cifra a numarul va deveni ultima cifra, si deci o vom putea extrage usor si pe aceasta,

    la pasul urmator.

    Suma cifrelor unui numar (manual)

    S se afieze suma cifrelor lui n.

    Pseudocod C/C++

    intreg n,s

    citeste n

    s=0;

    cat_timp(n>0)executa

    s s + n mod 10 nn/10 scrie s

    #include

    int main(){

    int n,s;

    scanf("%d",&n);

    s=0;

    while(n>0){

    s= s + n % 10;

    n=n/10;

    }

    printf("%d",s);

    return 0;

    }

    Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris

    anterior. Vom avea nevoie in plus, de o variabila ACUMULATOR (o vom denumi s, de

    la suma), variabila in care vom aduna pe rand valorile cifrelor accesate. Pe masura ce

    accesam o cifra a unui numar, adunam valoarea cifrei la valoarea anterioara a

    acumulatorului, care valoare, este initial 0.

  • 4

    Daca am fi dorit sa calculam produsul cifrelor unui numar, cat ar fi trebuit sa fie initial

    variabila acumulator?

    Cate cifre are un numar

    Se d un numr n. S se afieze numrul de cifre al lui n. Rspuns: vom folosi un contor nrcf care va

    numra cifrele lui n. Pentru fiecare cifr numrat vom mpri n la 10. Iat schema logic:

    Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris

    anterior. Vom avea nevoie in plus, de o variabila CONTOR , cu ajutorul caruia vom

    numara cifrele pe masura ce le vom parcurge. Vom parcurge cifrele numarului incepand

    cu ultima cifra , si pentru fiecare cifra accesata, vom mari valoarea contorului cu 1.

  • 5

    Pseudocod C/C++

    contor=0;

    cat_timp(n>0)executa

    contor contor+1

    n=n/10

    scrie contor

    contor=0;

    while(n>0){

    contor++;

    n=n/10;

    }

    printf(%d,contor);

  • 6

    Cate cifre sunt egale cu o cifra k (manual)

    Pseudocod C/C++

    contor=0;

    cat_timp(n>0)executa

    daca( n mod 10 == k)

    contor contor+1

    n=n/10

    scrie contor

    contor=0;

    while(n>0){

    if( n % 10 == k)

    contor++;

    n=n/10;

    }

    printf(%d,contor);

    Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris

    anterior. De asemenea, vom avea nevoie sa numaram cifrele care indeplinesc conditia

    data, folosind o variabila contor. In plus, vom avea nevoie sa testam daca o anumita

    cifra indeplineste conditia ceruta, si numai daca conditia este adevarata sa marim

    valoarea contorului.

    Sunt toate cifrele lui n pare?

    Pseudocod C/C++

    gasit=1;

    cat_timp(n>0)executa

    daca( n mod 2 == 1)

    gasit=1

    nn div 10;

    daca (gasit==0)

    scrie nu sunt toate pare

    altfel

    scrie sunt toate pare

    gasit=1;

    while(n>0){

    if( n % 2 == 1)

    gasit=0;

    n=n/10;

    }

    if(gasit==0)

    printf(nu sunt toate

    pare);

    else

    printf(sunt toate pare);

    while(n>0 && n%2==0){

    n=n/10;

    }

    if(n>0)

    printf(nu sunt toate

    pare);

    else

    printf(sunt toate pare);

  • 7

    Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris

    anterior. Vom avea nevoie in plus, de o variabila STEAG (SEMN) , cu ajutorul caruia

    vom identifica daca numarul are o cifra care nu respecta conditia data. Vom parcurge

    toate cifrele numarului si de fiecare data cand vom gasi o cifra care nu respecta

    conditia( nu este para) vom seta valoarea steguletului pe 0 (codificare a raspunsului

    NU, nu este ok numarul). Initial valoarea steguletului va fi setata pe 1 (codificare a

    raspunsului DA; presupunem ca numarul are numai cifre pare, adica este ok)

    Variabila cu rol de steag este gasit.

    Inversul unui numr

    S se afieze inversul lui n.

    #include

    int main() {

    int n, r;

    scanf( "%d", &n );

    s = 0;

    while ( n > 0 ) {

    r = r * 10 + n % 10;

    n = n / 10;

    }

    printf( "Rasturnatul lui n este %d\n", r );

    return 0;

  • 8

    }

  • 9

    Palindrom

    Definiie: un numr palindrom (sau simetric) este un numr care este identic cu rsturnatul lui. Cu alte cuvinte el arat la fel dac i scriem cifrele de la stnga la dreapta sau de la dreapta la stnga. Exemple de numere palindrom snt 1221, 5229225, 27272, 44, 1. Problem: s se determine dac un numr n este palindrom.

    Rezolvare: vom calcula rsturnatul lui n n variabila r. Dac cele dou numere snt

    egale nseamn ca numrul este palindrom. Trebuie s acordm atenie faptului c n va

    fi distrus n timpul calculului, drept pentru care i vom face o copie n nc.

    Determinare dac un numr este palindrom

  • 10

    #include

    int main() {

    int n, nc, r;

    scanf( "%d", &n );

    nc = n;

    r = 0;

    while ( n > 0 ) {

    r = r * 10 + n % 10;

    n = n / 10;

    }

    if ( nc == r )

    printf( "%d este palindrom\n", nc );

    else

    printf( "%d nu este palindrom\n", nc );

    return 0;

    }

    2 la n

    Sa se calculeze 2 la puterea n.

    #include

    int main() {

    int n, contor;

    scanf( "%d", &n );

    contor=1; p=1;

    while ( contor < n ) {

    p=p*2;

    contor++;

    }

    printf( "%d ", p );

    return 0;

    }

    Tema

    Scrieti in pseudocod algoritmii de rezolvare pentru problemele : palindrom si 2 la n

    Tema: Cangur, Economii

  • 11

    Optional: 5 probleme campion din lista problemelor recomandate .