PDA

Visualizza la versione completa : [C++] Convertitore binario-decimale e decimale-binario


tremendino01
22-10-2017, 11:23
Salve a tutti, oggi ho provato a realizzare un convertitore da binario a decimale e da decimale a binario in questo modo:



//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?

LeleFT
23-10-2017, 14:17
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. :ciauz:

Scara95
23-10-2017, 21:45
Quanto fa mypow(2, 0)?

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')

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
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
//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

//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;
}

Loading