Programma conversione binario decimale

di il
7 risposte

Programma conversione binario decimale

Ciao a tutti,
è appena un mese che sto studiando C e sono uno studente universitario iscritto al primo anno a informatica. E' da pochi giorni che all'Università abbiamo introdotto le funzioni, soltanto che i professori spiegano abbastanza male. Mi è stato assegnato questo problema: Convertire una sequenza di N cifre, dal sistema binario al sistema decimale utilizzando una funzione potenza. Io ho sviluppato il codice sorgente in questo modo:
#include <stdio.h>
#include <stdlib.h>
int convertitore(int x);
int potenza(int m);
int main(void)
{
    int N, risultato;

    printf("Inserisci il numero di bit: ");
    scanf("%d", &N);

    risultato=convertitore(N);
    if(risultato!=0)
        printf("Il numero è %d", risultato );

    else
        printf("Il numero che hai immesso non è binario");

    return 0;
}
/*Funzione per la conversione: data una sequenza, l'utente immette N numeri, dal bit meno significativo al più significativo. c=1 viene utilizzato solo nel caso in cui il bit meno significativo sia pari a 1. */
int convertitore(int x){   
int z, y, c=1, i;
for(i=1; i<=x; i++)
{

    printf("Digita la prima cifra: ");
    scanf("%d", &z);
    if(z!=1&&z!=0){
        return 0;
    }else if(z==1){
    y+=potenza(i);}
    else if(z==0){
        y+= 0; }
    
return y;

}
/* La funzione potenza per 2*/
int potenza(int m){
int i, pot=1;
for(i=m;i>=0; i--){
 if(i==1){ pot=1; }
 pot*=2;

}
return pot;

}
Il problema è nel momento in cui viene compilato. Il risultato esce sempre sbagliato. C'è un problema logico credo abbastanza grave, ma non capisco dov'è.

Grazie per qualsiasi risposta.

7 Risposte

  • Re: Programma conversione binario decimale

    Il codice non è compilabile ... controlla le parentesi graffe perché ne manca una chiusa ... controlla.
  • Re: Programma conversione binario decimale

    oregon ha scritto:


    Il codice non è compilabile ... controlla le parentesi graffe perché ne manca una chiusa ... controlla.
    Ma se il problema era relativo alle parentesi, prima che venisse compilato il programma, non mi doveva segnalare un errore? Perché non mi segnala nulla e inoltre mi parte tutto... ma al momento in cui voglio stampare il risultato, esce un valore ambiguo. Comunque ancora non vedo la parentesi che ho mancato.
  • Re: Programma conversione binario decimale

    Quando compilo io mi viene segnalato l'errore e il programma non parte.

    Quindi, o hai mostrato un altro sorgente rispetto a quello che hai compilato tu, o non so ...
  • Re: Programma conversione binario decimale

    oregon ha scritto:


    Quando compilo io mi viene segnalato l'errore e il programma non parte.

    Quindi, o hai mostrato un altro sorgente rispetto a quello che hai compilato tu, o non so ...
    Riprovo a rimetterlo, prova a compilarlo se hai tempo e mi fai sapere. Grazie comunque
    #include <stdio.h>
    #include <stdlib.h>
    int convertitore(int x);
    int potenza(int m);
    int main(void)
    {
        int N, risultato=0;
    
        printf("Inserisci quanti bit è composto il valore: ");
        scanf("%d", &N);
    
    
    risultato=convertitore(N);
        if(risultato!=0){
            printf("Il numero è %d", risultato);}
    
        else
            { printf("Il numero che hai immesso non è binario"); }
    
        return 0;
    }
    
    int convertitore(int x){
    int z,y, c=1, i;
    for(i=1; i<=x; i++)
    {
    
        printf("Digita la prima cifra: ");
        scanf("%d", &z);
        if(z!=1&&z!=0){
            return 0;
        }else if(z==1){
        y+=potenza(i);}
        else if(z==0){
            y+= 0 + c;
            c=0;}
        c=0;
    
    }
    return y;
    
    }
    
    int potenza(int m){
    int i, pot=1;
    for(i=m;i>=0; i--){
     pot*=2; }
    return pot;
    
    }
    
    
    
    
    Se il tuo compilatore ti dovesse segnalare ancora un errore, puoi dirmi qual è?
  • Re: Programma conversione binario decimale

    Adesso può essere compilato, infatti è diverso dal primo che hai postato.

    E ci sono parecchi problemini ...

    Intanto la variabile y che utilizzi per totalizzare il valore deve partire da 0 (deve essere azzerata all'inizio)

    In secondo luogo, nel ciclo devi solamente considerare i valori dei bit a 1 e non fare nulla per lo 0 (la if che controlla lo 0 puoi eliminarla ...)

    Poi, le cifre partono da 0 e vanno fino a quelle indicate-1 (se indichi 8 cifre, il ciclo va da 0 a 7)

    Infine, controlla che la funzione potenza restituisca il valore corretto a seconda dell'argomento passato. Io ho visto che, se passi 1, la potenza restituisce 4 ... e non mi pare corretto.
  • Re: Programma conversione binario decimale

    oregon ha scritto:


    Adesso può essere compilato, infatti è diverso dal primo che hai postato.

    E ci sono parecchi problemini ...

    Intanto la variabile y che utilizzi per totalizzare il valore deve partire da 0 (deve essere azzerata all'inizio)

    In secondo luogo, nel ciclo devi solamente considerare i valori dei bit a 1 e non fare nulla per lo 0 (la if che controlla lo 0 puoi eliminarla ...)

    Poi, le cifre partono da 0 e vanno fino a quelle indicate-1 (se indichi 8 cifre, il ciclo va da 0 a 7)

    Infine, controlla che la funzione potenza restituisca il valore corretto a seconda dell'argomento passato. Io ho visto che, se passi 1, la potenza restituisce 4 ... e non mi pare corretto.
    Grazie mille, sono riuscito a risolvero. Ma ti dico la verità, il problema non erano tanto questi, perché potevo capirli se solo al momento del esecuzione mi avesse dato dei risultati sbagliati. Il problema era che quando lo eseguivo, mi dava come risultato fisso 468267 e non riuscivo proprio a capire da dove uscisse. Cambiando compilatore, mi uscivano dei risultati sbagliati, ma non più quel numero fisso. Com'è possibile? Io sono passato da Code blocks a Dev, non è molto affidabile il primo?
  • Re: Programma conversione binario decimale

    Il problema era che quando lo eseguivo, mi dava come risultato fisso 468267 e non riuscivo proprio a capire da dove uscisse.
    Questi valori "strani" (fissi o variabili che siano, non importa), dipendevano solo dal fatto che mancava una

    y=0;

    e quindi il valore iniziale di y era casuale (secondo il compilatore, lo stato del sistema, ecc.).
    Ed è una cosa normale. Non si possono utilizzare variabili senza inizializzarne il valore.
    Cambiando compilatore, mi uscivano dei risultati sbagliati, ma non più quel numero fisso. Com'è possibile? Io sono passato da Code blocks a Dev, non è molto affidabile il primo?
    Ti ho già detto il perché. Non cambiare compilatore, semplicemente rispetta le regole del linguaggio ed inizializza le variabili.

    Tra l'altro il DevC++ è un ambiente da evitare.
Devi accedere o registrarti per scrivere nel forum
7 risposte