Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Convertitore binario-decimale e decimale-binario

    Salve a tutti, oggi ho provato a realizzare un convertitore da binario a decimale e da decimale a binario in questo modo:

    codice:
    //Convertire un numero binario in decimale, e da decimale a binario.
    #include<iostream>
    #include<math.h>
    #define N 8
    using namespace std;
    int mypow(int x,int y){
        int pot=1, c=0;
        do{
            pot=pot*x;
            c=c+1;
        }while(c<y);
    }
    int bindec(char str[]){
        int somma=0;
        int l;
        int pot;
        for(l=0; str[l]!='\0'; l++) //calcolo la lunghezza della stringa
        ;
        int esponente=l-1;
        for(int i=0; i<l; i++){
            pot=pow(2,esponente);
        somma=somma+(str[i]*pot);
        esponente--;
    }
    
    
    
    
    return somma;
    }
        
        void decbin(int dec){
            char str[8]; 
            int i=0;
            do{
            str[i]=dec%2;
            i++;
        dec=dec/2;
        }while(dec>=0);
        int l;
        for(l=0; l!='\0'; l++)//calcolo la lunghezza della stringa
        ;
        for(int k=l-1; k>=0; k--)
        cout<<str[k];
        
    }
    int main(){
        char bin[N];
        int decimale;
        int n;
        int binario;
        cout<<"Inserisci il numero binario che vuoi convertire: ";
        cin>>bin;
        decimale=bindec(bin);
        cout<<"Il numero decimale e': "<<decimale<<" ";
        cout<<"Inserisci il numero decimale che vuoi convertire in binario ";
        cin>>n;
        decbin(n);
    }

    Però c'è qualcosa che non torna, potreste aiutarmi ad individuare l'errore?
    Ultima modifica di LeleFT; 23-10-2017 a 14:15 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Alcune cose:

    1) Manca l'indicazione del linguaggio nel titolo (l'ho aggiunto io)
    2) Non hai inserito il codice all'interno degli appositi tag CODE, per mantenere formattazione ed indentazione (l'ho fatto io)
    3) Dovresti almeno dire cos'è che non ti torna... in modo da non dover costringere la gente a tirare ad indovinare per trovare un errore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quanto fa mypow(2, 0)?
    codice:
    int mypow(int x, int y){
        int pot = 1, c = 0;
        do {
            pot = pot * x;
            c = c + 1;
        } while (c < y);
    }
    I caratteri sono codificati in ASCII per cui '0' vale 48 '1' 49 '2' 50 ... '9' 57. per ottenere il valore numerico di una cifra puoi fare (str[i] - '0')
    codice:
    int bindec(char str[])
    {
        int somma = 0;
        int l;
        int pot;
        for (l = 0; str[l] != '\0'; l++) //calcolo la lunghezza della stringa
            ;
        int esponente = l - 1;
        for (int i = 0; i < l; i++) {
            pot = pow(2, esponente);
            somma = somma + (str[i] * pot);
            esponente--;
        }
    
    
        return somma;
    }
    Stessa osservazione di prima, inoltre non utilizzare caratteri per interi e quel modo di calcolare la lunghezza è sbagliato su dei numeri
    codice:
    void decbin(int dec)
    {
        char str[8];
        int i = 0;
        do {
            str[i] = dec % 2;
            i++;
            dec = dec / 2;
        } while (dec >= 0);
        int l;
        for (l = 0; l != '\0'; l++) //calcolo la lunghezza della stringa
            ;
        for (int k = l - 1; k >= 0; k--)
            cout << str[k];
    }
    Questa è una versione corretta
    codice:
    //Convertire un numero binario in decimale, e da decimale a binario.
    #include <iostream>
    #include <math.h>
    #define N 8
    using namespace std;
    
    
    int bindec(char str[])
    {
        int somma = 0;
        int l;
        int pot;
        for (l = 0; str[l] != '\0'; l++) //calcolo la lunghezza della stringa
            ;
        int esponente = l - 1;
        for (int i = 0; i < l; i++) {
            pot = pow(2, esponente);
            somma = somma + ((str[i]-'0') * pot);
            esponente--;
        }
    
    
        return somma;
    }
    
    
    void decbin(int dec)
    {
        char str[8];
        int i = 0;
        do {
            str[i] = (dec % 2) + '0';
            i++;
            dec = dec / 2;
        } while (dec > 0);
        for(int j = i-1; j >= 0; --j)
    	cout << str[j];
    }
    int main()
    {
        char bin[N];
        int decimale;
        int n;
        int binario;
        cout << "Inserisci il numero binario che vuoi convertire: ";
        cin >> bin;
        decimale = bindec(bin);
        cout << "Il numero decimale e': " << decimale << " ";
        cout << "Inserisci il numero decimale che vuoi convertire in binario ";
        cin >> n;
        decbin(n);
    }
    E questa è un'altra versione un po' più compatta
    codice:
    //Convertire un numero binario in decimale, e da decimale a binario.
    #include <iostream>
    #include <math.h>
    #define N 8
    using namespace std;
    
    
    int bindec(char str[])
    {
        int somma = 0;
        while((*str) != '\0') { 
        	somma = somma * 2 + (*str) - '0';
        	++str;
        }
        return somma;
    }
    
    
    void decbin(int dec, char str[])
    {
        int i = 0;
        do {
            str[i] = (dec % 2) + '0';
            i++;
            dec = dec / 2;
        } while (dec > 0);
        str[i] = '\0';
        for(int j = 0; j < (i-1)/2; ++j) {
        	char tmp = str[j];
        	str[j] = str[i-1-j];
        	str[i-1-j] = tmp;
        }
    }
    
    
    int main()
    {
        char bin[N];
        int decimale;
        cout << "Inserisci il numero binario che vuoi convertire: ";
        cin >> bin;
        decimale = bindec(bin);
        cout << "Il numero decimale e': " << decimale << " ";
        cout << "Inserisci il numero decimale che vuoi convertire in binario ";
        cin >> decimale;
        decbin(decimale, bin);
        cout << bin;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.