RSS

L8. Algoritmi fundamentali. Prelucrarea cifrelor unui numar natural

05 Mar

Fie N un numar natural. Avem nevoie sa prelucram pe rand cifrele unui numar natural.

In prelucrarea cifrelor numarului, cel mai usor ajungem la ultima cifra (N%10) . Dupa prelucrarea ei, ultima cifra va trebui inlaturata (N=N/10). Si totul trebuie repetat cat timp N mai are cifre (N!=0).

De vreme ca nu stim cate cifre are N, nu putem folosi intructiunea FOR/PENTRU. Raman instructiunile repetitive cu un numar necunoscut de pasi : CAT TIMP EXECUTA/WHILE si EXECUTA CAT TIMP/ DO WHILE.

Pentru CAT TIMP EXECUTA/WHILE am un contraargmuent. Algoritmul ar trebui sa fie

cat timp (N!=0) executa { //prel ultima cifra a lui N
                             .......N%10;
                //stergem ultima cifra
                   N=N/10;
                     }

Daca utilizatorul doreste sa aplice algoritmul pentru valoarea zero, nu se va efectua nimic si secventa noastra nu se va executa.Evident, situatia se poate evita prin plasarea unui test inainte de CAT TIMP , care sa verifice daca N este nul.

Nu ramane decat varianta cu EXECUTA CAT TIMP/DO WHILE.

executa{ //prel ultima cifra a lui N
                             .......N%10;
                //stergem ultima cifra
                   N=N/10;
                     } cat timp (N!=0);

Cateva probleme clasice pentru acest algoritm:

  1. Sa se numere cate cifre are numarul N
  2. Sa se stabileasca cate cifre pare/impare are numarul N.
  3. Sa se stabileasca daca N contine o cifra data, CIF.
  4. Sa se numere de cate ori apare cifra CIF in numarul N.
  5. Sa se determine cifra maxima/minima din numarul N
  6. Sa se construiasca “oglinditul” numarului N. Pentru N=3648 se va afisa 8463.
  7. Sa se stabilesca daca N este palindrom (egal cu oglinditul sau).
  8. Pentru un numar N dat, sa se construiasca cel mai mare numar natural care se poate forma cu cifrele lui N.
cat timp (N!=0) executa { //prel ultima cifra a lui N
                             .......N%10;
                //stergem ultima cifra
                   N=N/10;
                     }
 
16 Comments

Posted by on 05/03/2012 in C2_1. Algoritmica

 

Tags:

16 responses to “L8. Algoritmi fundamentali. Prelucrarea cifrelor unui numar natural

  1. Alex V

    27/09/2012 at 21:11

    Alogritmul de prelucrare a cifrelor unui numar(PSEUDOCOD)

    Cat timp x0 executa
    inceput
    c<-x mod 10

    x<-x div 10
    sfarsit

     
  2. mchelariu71

    27/09/2012 at 21:36

    Am raspuns deja in articol. Varianta Cat timp nu e universala. Daca n=0 nu se mai face nici o prelurcrare la nivel de cifra. De exemplu, numarul de cifre ale unei valori . Cu While, reiese ca N=0 are 0 cifre, ceea ce e gresit.

     
  3. iustin123

    22/07/2014 at 16:35

    Multumesc pentur toate aceste lectii! Nu prea mi-au placut orele de informatica in liceu, dar acum imi mi-ar fi prins foarte bine.

     
  4. Ioana

    13/11/2014 at 15:20

    am si eu o problema.cum calculez suma cifrelor de rang par ale unui numar N?

     
  5. mchelariu71

    13/11/2014 at 18:13

    daca pui mana pe pix si consideri ce le doua situatii posibile (o valore cu numar impar de cifre si una cu numar par de cifre) ai sa vezi ca la numarul par de cifre ar fi trebuit sa raspunzi cu suma din care face parte ultima ciifra iar in cazul valorilor cu numar impar de cifre trebuie considerata suma din care face parte cifra zecilor.

    Exemplul 1: 64835. -> cifrele participante sunt 4 si 3 -> suma este 7
    Exemplul 2 396528 -> cifrele participante sunt 9, 5, 8 -> suma este 22

    Practic nu poti sa stii care din cele doua sume iti trebuie, decat dupa ce stii cate cifre are numarul;
    atunci
    *luam de la sfarsit cate o cifra
    * o numaram
    * o adunam fie in S1 (suma care contine ultima cifra, fie in S2 (suma care contine penultima cifra).
    La sfarsit (cand nu m ai ramane nimic in numarul nostru) daca nr de cifre este par afisam S1 si daca numarul de cifre este impar afisam S2

    cin>>N
    nrcif=0; S1=0;S2=0;
    do
    {
    nrcif++;
    if (nrcif%2==0) S1=S1+N%10;
    else S2=S2+N%10;
    N=N/10;
    }
    while (N!=0)
    if (nrcif%2==0) cout<<S1; else cout<<S2;

     
  6. Ana Maria

    29/11/2014 at 12:11

    Care ar fi programul pentru problema 8 (Pentru un numar N dat, sa se construiasca cel mai mare numar natural care se poate forma cu cifrele lui N. ) ? Nu am idee cum fac..

     
  7. mchelariu71

    30/11/2014 at 17:00

    Pentru un numar gen 1972 , rezultatul ar fi 9721. Pentru 1959=> 9951. Practic , trebuie sa consideri fiecare cifra, in ordine descrescatoare si sa o lipesti la sfarsitul raspunsului de fiecrare data cand o gasesti (sau mai intai poti sa o numeri)
    EX. 1995=> R=? (initial 0)
    9 apare de 2 ori (lipesc doi de 9)
    5 apare 1 data (lipesc un 5)
    1 apare 1 data (lipesc un 1)
    Daca nu iese, mai vorbim…

     
  8. Ana Maria

    30/11/2014 at 19:40

    Am inteles in mare mecanismul..insa nu stiu cum sa aflu cifrele in ordine descrescatoare pentru a forma numarul R.

     
  9. mchelariu71

    30/11/2014 at 20:21

    cin > > N; R = 0;
    for(c = 9 ; c > = 0 ;c – – ) //consider cifrele in ordine descrescatoare
    {

    CN=N; //CN = copia lui N

    //toc marunt CN, cifra cu cifra; ma intereseaza doar aparitiile cifrei C pentru a lipi C la R
    do{
    if (CN%10 = = C) R=R*10+C;
    CN=CN/10;
    } while (CN>0);

    }
    cout < < R;
    😀 Succes!

     
  10. Ana Maria

    30/11/2014 at 21:29

    Este obligatorie folosirea lui do while sau merge si cu while?

     
  11. mchelariu71

    01/12/2014 at 11:59

    problema apare doar cand iti da N=0;

     
  12. Ana Maria

    01/12/2014 at 13:03

    Va multumesc din suflet!!😀

     
  13. nico

    25/02/2015 at 12:24

    “Toc marunt ” – acu am inteles si eu..🙂

     
  14. mchelariu71

    25/02/2015 at 19:06

    pana la urma nu stii care imagine il face pe copil sa inteleaga. cea mai apropiata imagine care o am referitoare la algoritmul asta e taierea unui cozonac, felie cu felie. fiecare cifra reprezinta cantitatea de umplutura din felie.
    Daca imaginea este sugestiva pentru elev, am avut succes.

     
  15. nico

    25/02/2015 at 20:14

    Foarte frumos, toate explicatiile posibile… sigur aveti succes!!

     
  16. VASADI

    03/05/2016 at 18:00

    Se citesc de la tastatură n numere naturale. Să se determine numarul de numere prime formate din ultimele 2 cifre ale fiecarui număr.

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: