[C++]Come isolare le cifre?

di il
7 risposte

[C++]Come isolare le cifre?

Salve,
sono un ragazzo di 14 anni, frequento il 2°anno di un istituto superiore tecnico, dove frequento il corso informatica.
Sto provando a creare un programma in c++ che permetta di trasformare qualsiasi numero in base decimale.
/*
 * Creato da Davide Conte
 * Data di inizio : 06/10/2015
 * 
*/

#include <iostream> 
using namespace std;
// SETTO LE VARIABILI
int b=0; //base
int v=0; //V = C*b^n
int d=0; //numero finale
ind n=0; //esponente della potenza
int c=0; //numero cifre

int main(int argc, char *argv[])
{
			:inizio
    		cout<<"Digita la base: ";
    		cin>>b;
    		cout<<"Digita il numero: ";
    		cin>>c;

    		
}
Arrivato a questo punto dovrei isolare le cifre per poi eseguire delle operazioni.
In seguito la rappresentazione dell'algoritmo (scusate se l'ho sistemato un pò con paint)
http://i.imgur.com/tlRAfFZ.jp

7 Risposte

  • Re: [C++]Come isolare le cifre?

    Per isolare le cifre potresti: prendere il numero in qualunque base e ottenere il resto facendo numero % base. La prima sarà la cifra più a destra, meno significativa. A questo punto prendi il numero e lo dividi per la base (effettuando una divisione intero per intero in modo che quello dopo la virgola sia perso). Effettui questo meccanismo fino a quando il numero è maggiore di 0.

    In modo molto rapido (creandoti un esempio parallelo):
    
    //Vogliamo rappresentare 101 da base 2 a base 10.
    while(numero > 0) { //Fino a che abbiamo almeno un numero prima della virgola
    cifra = numero % base; //prima cifra = 101 % 2 -> 1 e lo memorizzi da qualche parte
    numero = numero / base; //nuovo numero = 101 / 2 = 10;
    //il ciclo partirà per la seconda volta poichè 10 è maggiore di 0, 10 % 2 = 0 che è la seconda cifra e rimarrà solo 1. Partirà il ciclo per la terza volta e ricaveremo 1...la quarta volta il ciclo non partirà poichè numero sarà minore di 0 ma intanto avremo le nostre tre cifre dalla meno significativa alla più significativa.
    }
    
    Spero di essere stato chiaro in modo semplice.
  • Re: [C++]Come isolare le cifre?

    Eduadie ha scritto:


    Per isolare le cifre potresti: prendere il numero in qualunque base e ottenere il resto facendo numero % base. La prima sarà la cifra più a destra, meno significativa. A questo punto prendi il numero e lo dividi per la base (effettuando una divisione intero per intero in modo che quello dopo la virgola sia perso). Effettui questo meccanismo fino a quando il numero è maggiore di 0.

    In modo molto rapido (creandoti un esempio parallelo):
    
    //Vogliamo rappresentare 101 da base 2 a base 10.
    while(numero > 0) { //Fino a che abbiamo almeno un numero prima della virgola
    cifra = numero % base; //prima cifra = 101 % 2 -> 1 e lo memorizzi da qualche parte
    numero = numero / base; //nuovo numero = 101 / 2 = 10;
    //il ciclo partirà per la seconda volta poichè 10 è maggiore di 0, 10 % 2 = 0 che è la seconda cifra e rimarrà solo 1. Partirà il ciclo per la terza volta e ricaveremo 1...la quarta volta il ciclo non partirà poichè numero sarà minore di 0 ma intanto avremo le nostre tre cifre dalla meno significativa alla più significativa.
    }
    
    Spero di essere stato chiaro in modo semplice.
    I numeri li dovrei inserire in un array vero? Come faccio ?
  • Re: [C++]Come isolare le cifre?

    O li inserisci in un array e dopo li usi. Altrimenti con un pò di praticità in più potresti anche utilizzarle man mano che trovi le cifre. A te la scelta.
  • Re: [C++]Come isolare le cifre?

    Nel caso devo isolare però un numero binario il tuo algoritmo non funziona.
    Perché, esempio :
    
    
    Ovviamente bisogna dichiarare le variabili cifra, numero e base, e richiedere numero e base.
    				while(numero>0)
    				{
    				 
    					cifra = numero%base;
    					numero = numero/base;
    					cout<<cifra;
    					
    				}
    
    Nel caso che numero=1101 e base=2 :
    cifra = 1101%2 = 1
    numero = 1101/2 = 550
    Qui quindi il numero cambia, come faccio ?

    AGGIORNAMENTO : risolto così
    while(numero>0)
    {

    cifra = numero%10;
    numero = numero/10;
    cout<<cifra;

    }
  • Re: [C++]Come isolare le cifre?

    Mi devi scusare ma sarà stato l'orario ieri
    Hai ragione, no va così aggiustato:
    
    while(numero > 0) {
    cifra = numero % base;
    numero = numero / 10; //per togliere la cifra che abbiamo estrapolato.
    }
    
  • Re: [C++]Come isolare le cifre?

    Okay, ho terminato il programma, solo che non funziona, cioè mi da un numero sbagliato.

    Codice : http://pastebin.com/Gdhssvk

    Mi potresti aiutare?
    Non riesco a capire dov'è l'errore :/
  • Re: [C++]Come isolare le cifre?

    Purtroppo nel tuo programma trovo solo confusione.

    Ho cercato di rifarlo seguendo la tua logica in un modo molto più chiaro e pulito.

    Non riuscivo proprio a seguirlo il tuo.

    PS è in c ma non cambia niente
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int numero1, numero2, base, numcifre=0;
        int cifre[15], i;
        int nuovo_numero=0;
    
        printf("Inserisci la base ->");
        scanf("%d", &base);
    
        printf("Inserisci il numero ->");
        scanf("%d", &numero1);
    
        numero2 = numero1;
    
        //conto le cifre
        while(numero2 > 0) {
            cifre[numcifre] = numero2 % 2;
            numero2 = numero2 / 10;
            numcifre++;
        }
    
        for(i=0;i<numcifre;i++){
            nuovo_numero += cifre[i] * pow(base, i);
        }
    
        printf("Il numero e' %d", nuovo_numero);
        return 0;
    }
    
    Se qualcosa non va, posso spiegartelo. Ma segue quasi tutto ciò che hai scritto tu.
Devi accedere o registrarti per scrivere nel forum
7 risposte