Jump to content

Program Care Elimina Cifra 0 Din Numar


ldd.man25

Recommended Posts

Problema suna asa:

"Scrie un program care sa elimine cifra 0 dintr-un numar natural citit de la tastatura".  

Exemplu: daca n=10207, sa se afiseze 127.  

Sunt clasa a IX-a, profil mate info simplu, de abea ne-a predat algoritmul de prelucrare a cifrelor unui nr si algoritmul de determinare a max/min dintr-un sir de numere.Am rezolvat toata tema pana acum, me-a mai ramas aceasta problema.Stiu ca pentru multi de aici aceasa este o chestiune banala, dar chiar nu mai am nici o idee.  

 

 

off topic: Salut tuturor, sunt nou pe forum, aceasta este primul meu post :D, stiu ca e tarziu si etc, poate ca de asta nu reusesc sa gasesc o solutie, dar vreau sa aflu cum se rezolva, nu din criza de timp deoarece am timp pana joi si nici nu imi pune cineva '2' daca nu termin tema.Sunt doar foarte curios sa aflu raspunsul pentru ca pana acum imi place aceasta materie si vreau sa invat.  

ps: folosim C++, codeblocks.

 

Link to comment
Share on other sites

sa zicem ca numarul tau e salvat in variabila x

 

vei vrea sa ai acces la fiecare litera a lui x. Cel mai usor e sa iei toate literele din dreapta numarului, folosind      numar % 10          (adica restul impartirii cu 10).

 

Apoi, verificam daca cifra este 0, si daca nu, construim noul numar. Il inmultim cu 10 (practic asa adaugam un 0 la coada) si adunam cifra obtinuta mai sus.

 

presupunand ca ai citit numarul deja, si lai salvat in variabila 'numar':

rezultatat = 0;     // initializam rezultatul cu 0
while ( numar != 0 )    //adica cat timp mai avem cifre
{
       cifra = numar % 10 ;      //luam ultima cifra, luand restul impartirii la 10
       numar = numar / 10 ;     // stergem ultima cifra din numar, impartind la 10
       if ( cifra != 0 )        // daca cifra nu e 0
       rezultat = (rezultat * 10 ) + cifra     /// cum ziceam mai sus.. adaugam cifra la sfarsitul rezultatului
}
 
// acum, rezultat va contine numarul initial fara 0.

Sper ca nu am gresit cu nimic :D

  • Upvote 1

love is a verb
Love is a doing word

Link to comment
Share on other sites

  • Moderators

// acum, rezultat va contine numarul initial fara 0.

 

 

Dupa calculezi inversul :D

 

Pseudocod:

 natural n,x,y
 citeşte n
 x<-0
 y<-0
┌cât timp (n!=0) execută
|  ┌dacă (n%10!=0) atunci
|  |   x<-x*10+n%10
|  └■
|  n<-n/10
└■
┌cât timp (x!=0) execută
|   y<-y*10+x%10
|   x<-x/10
└■
 scrie y

C++

#include <iostream>
using namespace std;
int main(void)
{
    int n,x=0,y=0;
    cin>>n;
    while (n)
    {
        if (n%10)
            x=x*10+n%10;
        n/=10;
    }
    while (x)
    {
        y=y*10+x%10;
        x/=10;
    }
    cout<<y;
    return 0;
}
Link to comment
Share on other sites

  • Moderators

initializezi o variabila p cu 1

rezultatul = c * p + rezultatul ;

p=p*10;

 

Cam aşa?

#include <iostream>
using namespace std;
int main(void)
{
    int n,x=0,p=1;
    cin>>n;
    while (n)
    {
        if (n%10)
        {
             x=n%10*p+x;
             p=p*10;
        }
        n/=10;
    }
    cout<<x;
    return 0;
}
Link to comment
Share on other sites

#include <iostream>
using namespace std;
int main()
{ unsigned n,c,r=0,p=1;
cout<<"Introduceti numarul:";cin>>n;
while(n!=0) {
c=n%10;
n=n/10;
if(c!=0){r=c*p+r;p=p*10;}
}
cout<<"Rezultatul este:"<<r;
    return 0;

Multumesc tuturor pentru raspunsuri! 

Am analizat primul reply al lui GodsOtherHand si am observat ca il elimina pe 0 dar rezultatul era "in oglinda", de "invers" nu ne-a spus proful nimic pana acum si am mers pe mana lui hiey19 editand putin programul anterior si am obtinut rezultatul dorit. Seamana cu programul lui Courage dar eu am mai initializat variabila 'c'. Multumesc inca o data!

Link to comment
Share on other sites

  • Moderators

Ca idee, e bine să faci algoritmul cât mai uşor de citit.

 

De exemplu

#include <iostream>
#include <math.h>
using namespace std;
int main(void)
{int n,d,ok;
cout<<"n=";cin>>n;
if (n%2==0){
if{n==2) cout<<"Este prim";
else cout<<"Nu este prim";}
else{d=3;ok=1;
while (d<=sqrt(n)&&ok)
if (n%d==0) ok=0;
else d+=2;
if (ok) cout<<"Este prim";
else cout<<"Nu este prim";}
return 0;}

şi

#include <iostream>
#include <math.h>
using namespace std;
int main(void)
{
    int n,d,ok;
    cout<<"n=";cin>>n;
    if (n%2==0)
    {
        if (n==2)
            cout<<"Este prim";
        else
            cout<<"Nu este prim";
    }
    else
    {
        d=3;
        ok=1;
        while (d<=sqrt(n)&&ok)
            if (n%d==0)
                ok=0;
            else
                d+=2;
        if (ok)
            cout<<"Este prim";
        else
            cout<<"Nu este prim";
    }
    return 0;
}
Link to comment
Share on other sites

Am gasit o lista cu exercitii suplimentare pentru "A02. PROGRAM C++ PENTRU CALCUL SUMEI ŞI PRODUSULUI CIFELOR UNUI NUMĂR"    

Asa ca m-am decis sa incep sa le rezolv in ordine, de la prima problema la ultima.         

1. Se citeste un număr natural n. Să se afiseze suma si produsul cifrelor pare.
(exp : n=1234 => s=2+4=6, p=2*4=8)
(la rezolvare am mai adaugat suma si produsul cifrelor impare.  

#include <iostream>
using namespace std;
int main()
{
    unsigned n,c,p1=1,s1=0,p2=1,s2=0;
    cout<<"Introduceti numarul:";
    cin>>n;
    while(n!=0)
    {
        c=n%10;
        if(c%2==0){s1=c+s1;
         p1=c*p1;}
         else{s2=c+s2;   
         p2=c*p2;}
        n=n/10;
    }
    cout<<"Suma cifrelor pare este:"<<s1<<endl;
    cout<<"Suma cifrelor impare este:"<<s2<<endl;
    cout<<"Produsul cifrelor pare este:"<<p1<<endl;
    cout<<"Produsul cifrelor impare este:"<<p2;
    return 0;
}


Am ajuns la exercitiul 2:  

2. Se citeste un număr natural n. Să se afiseze suma si produsul cifrelor din pozitiile pare.
Numerotarea pozitiilor se face începând cu cifra cea mai semnificativă.
(exp : n=27156 => s=7+5=12, p=7*5=35)   

 

Incerc sa gasesc o solutie pentru "pozitia para", dar pana acum nu cred ca voi gasi una. 

Sfaturi?

Link to comment
Share on other sites

poti folosi un fel de contor. 

La inceput contorul este 0.

Apoi,  extragi prima cifra. contor++ . Acum contor e 1. 

Verifici daca contorul e numar par (nu uita, contorul tine minte a cata cifra o ai acolo) luand restul impartirii la 2.  ( contor % 2)

Daca e diferit de 0, inseamna ca cifra e pe pozitie impara, si sari peste ea.

love is a verb
Love is a doing word

Link to comment
Share on other sites

Da, poti folosi un fel de contor cum a zis si GodsOtherHand.

 

Mai ai si varianta urmatoare. Poti sa faci ceva de genul :

 

c= (n%100)/10;

 

c sa fie cifra pe care vrei sa o extragi. n e numarul tau. cu %100 vei lua ultimele doua cifre ,iar cu /10 vei ramane numai cu cifra de pe pozitia para.

s=s+c;

p=p*c;

n=n/100;

Va trebui sa le pui toate intr-un while.

 

Nu stiu cat de bine ar merge, e doar o idee.

 
Link to comment
Share on other sites

poti folosi un fel de contor. 

La inceput contorul este 0.

Apoi,  extragi prima cifra. contor++ . Acum contor e 1. 

Verifici daca contorul e numar par (nu uita, contorul tine minte a cata cifra o ai acolo) luand restul impartirii la 2.  ( contor % 2)

Daca e diferit de 0, inseamna ca cifra e pe pozitie impara, si sari peste ea.

Merciiii, cred ca acesta va fi primul program scris de mine in care folosesc contorul, gonna be funny :D  

 

EDIT: nu stiu ce sa zic atata timp cat sunt incepator, cred ca mai conteaza si daca numarul are un numar par sau impar de cifre. Suna ciudat dar ati inteles ce vreau sa zic...Si la contor valoarea finala as pune-o 6, din moment ce folosesc "unsigned",nu?Am grija sa nu introduc un nr mai mare de 6 cifre si aia e...Da sa vad cum il duc la cap intai :))

Link to comment
Share on other sites

#include <iostream>
using namespace std;
int main()
{
    unsigned n,c,s=0,p=1,a;
    cout<<"Introduceti numarul:";cin>>n;
    for(a=1;a<=6;a++)
    if(a%2==0){c=n%10;s=s+c;p=p*c;n=n/10;}//am verificat daca  contorul e par si am dat instructiunile pentru s si p
    cout<<"Suma cifrelor este:"<<s<<endl;
    cout<<"Produsul cifrelor este:"<<p;
    return 0;
}

Nu stiu ce are da nu me-a dat, am scris-o acum pe moment ce de abea am intrat in casa, pareri?

Link to comment
Share on other sites

nr_cifre=0;

temp = numar;

while(temp)

{  

     nr_cifre++;

     temp = temp / 10;

}

 

nu e chiar asa lung..

Smart, nu m-as fi gandit la asa ceva :))  

Am sa incerc maine sa combin contorul cu treaba asta, pana atunci poate sa imi spuna cineva ce mai e gresit la incercarea mea cu contor de mai sus, in afara de maxima valoarea lui a? I-am dat lui n si 6 cifre si tot nu a mers.

 

Si apropo: while(temp) spre exemplu este echivalent cu while(temp!=0) ?

Link to comment
Share on other sites

Cam asa ceva ar trebui sa fie cu while+contor.

 

int n,c,cf,s,p=1;
int main()
{
    cout<<"n=";cin>>n;
    while(n!=0)
    {
      c++;
      if(c%2==0)
      {
          cf=n%10;
          s=s+cf;
          p=p*cf;
      }
      n=n/10;
    }
    cout<<s<<" "<<p;
    return 0;
}
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.