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