Problema con programma in C.

di il
4 risposte

Problema con programma in C.

In pratica il programma consiste in trasformare un numero in base 10 in base 2 senza vettori e col metodo BDC. In origine il compito consisteva nel trasformare un numero composto sempre da 4 cifre, ma io lo voglio fare universale, cioè che qualsiasi numero venga inserito venga convertito. Per fare ciò sto usando i logaritmi, che mi permettono di sapere da quante cifre è composto un numero. Teoricamente ogni volta dovrei estrapolare dal numero una delle cifre e mandarla a un semplice sottoprogramma contenente uno switch che a seconda della cifra di arrivo dal main stampa dentro se stesso un messaggio contenente il numero in BDC. Il problema è che non so come creare un ciclo che a ogni iterazione mi dia un valore diverso che mi permetta di estrapolare dal numero una cifra per volta. Qualcuno sa come aiutarmi?
Premetto che il programma è incompleto proprio a causa di questo mio blocco.
Questo è il programma. Sono in terza superiore.
Il programma è incompleto o comunque sbagliato, e molte variabili potrebbero essere inutili perchè provando e riprovando non le ho cancellate.

#include <stdio.h>
#include <math.h>
void migliaia (int a);
int main ()
{
float log=0,base=10,elevazione;
int n,n2,c,n3,esp=1,b,pot,f,m=0,k=0;
printf ("Inserisci il numero in decimale da convertire in binario ");
scanf ("%i",&n);
while (n<0)
{
printf ("reinserisci il numero ");
scanf ("%i",&n);
}
while (1)
{
elevazione=pow(base,log);
if (elevazione>n)
{
break;
}
log+=0.001;
}
log+=0.9998;

log=(int)log;


}
//------------------------------------------------------------
void migliaia (int a)
{

switch (a)
{
case 0:
printf ("0000 ");
break;
case 1:
printf ("0001 ");
break;
case 2:
printf ("0010 ");
break;
case 3:
printf ("0011 ");
break;
case 4:
printf ("0100 ");
break;
case 5:
printf ("0101 ");
break;
case 6:
printf ("0110 ");
break;
case 7:
printf ("0111 ");
break;
case 8:
printf ("1000 ");
break;
case 9:
printf ("1101 ");
break;
}
}

4 Risposte

  • Re: Problema con programma in C.

    Non si capisce che ragionamento fai nel codice.

    Perché non fai semplicemente una serie di divisioni per due e prendi i resti, senza logaritmi e usando solo gli interi?
  • Re: Problema con programma in C.

    Come prima cosa ti salvi il numero di cifre in nCifre.
    dopodiché fai un while che continua finché il numero è diverso da 0:
    int nCifre = log10(n) + 1; // numero di cifre
    while (n != 0)
    {
        int cifra = n % pow(10, nCifre - 1); // prima cifra del numero
        converti(cifra); // la tua funzione con lo switch per ottenere il codice BCD
        n /= pow(10, nCifre - 1);
        nCifre--;
    }
    il problema di questa soluzione è che, dato che non utilizza gli array, se ti inserisce un numero con due zeri attaccati varranno uno soltanto, per esempio se inserisci 400 il risultato sarà 0100 0000, perché gli zeri davanti negli interi vengono ignorati.
  • Re: Problema con programma in C.

  • Re: Problema con programma in C.

    No, lo switch devi comunque farlo (quel converti è la tua funzione con lo switch).
Devi accedere o registrarti per scrivere nel forum
4 risposte