Diciamo che più o meno è corretto, ma c'è comunque un errore che ne pregiudica il funzionamento.
Non so se la richiesta del docente è restituire un array allocandolo con "new" oppure no; assumo per corretto quanto hai fatto, poichè non so cosa avete trattato.
Nella funzione stampa c'è un errore: la lettura dell'input non ti serve, è inutile, e vai a sovrascrivere un elemento dell'array. L'errore è l'inizializzazione del ciclo che avviene utilizzando il numero 8. Questo indice in realtà è "out of bounds", superi cioè la dimensione dell'array (stampi una posizione sullo stack che non è in realtà stata allocata per l'array).
Ti mostro una versione corretta di quanto hai fatto:
Ho rimosso l'if, in quanto il resto di una divisione per 2 è per forza di cose o 0 o 1, e non ti serve un if. Puoi usare direttamente il risultato. Puoi anche compattare la divisione facendo "decimale/=2".
Volendo ci sono alcune finezze, te le dico, ma scegli tu se sostituirle a ciò che fai (non far venire dubbi al docente ).
puoi sostituirla con l'AND bit a bit :
questo avviene in quanto il bit meno significativo ti fa capire se il numero è pari o dispari. Se vale 0, è pari, altrimenti è dispari.
Puoi anche modificare questo:
In questo:
lo shift di una posizione verso destra equivale alla divisione per 2 del numero.
Non so se la richiesta del docente è restituire un array allocandolo con "new" oppure no; assumo per corretto quanto hai fatto, poichè non so cosa avete trattato.
Nella funzione stampa c'è un errore: la lettura dell'input non ti serve, è inutile, e vai a sovrascrivere un elemento dell'array. L'errore è l'inizializzazione del ciclo che avviene utilizzando il numero 8. Questo indice in realtà è "out of bounds", superi cioè la dimensione dell'array (stampi una posizione sullo stack che non è in realtà stata allocata per l'array).
Ti mostro una versione corretta di quanto hai fatto:
C++:
#include <iostream>
#define MAX 8
using namespace std;
void conversione (int bin [], int dec );
void stampa (int bin []);
int main (){
int binario [MAX];
int decimale;
do{
cout << "Inserire numero ";
cin >> decimale;
}while (decimale < 0 || decimale > 255);
conversione (binario, decimale );
stampa (binario);
return 0;
}
void conversione (int bin [], int decimale){
for(int i=0;i<MAX;i++) {
bin[i] = decimale % 2;
decimale /= 2;
}
}
void stampa (int bin []) {
cout << "Il numero binario e': ";
for (int i=7; i>=0; i--)
cout << bin [i] << " ";
}
Ho rimosso l'if, in quanto il resto di una divisione per 2 è per forza di cose o 0 o 1, e non ti serve un if. Puoi usare direttamente il risultato. Puoi anche compattare la divisione facendo "decimale/=2".
Volendo ci sono alcune finezze, te le dico, ma scegli tu se sostituirle a ciò che fai (non far venire dubbi al docente ).
C++:
bin[i] = decimale % 2;
puoi sostituirla con l'AND bit a bit :
C++:
bin[i] = decimale & 1;
questo avviene in quanto il bit meno significativo ti fa capire se il numero è pari o dispari. Se vale 0, è pari, altrimenti è dispari.
Puoi anche modificare questo:
C++:
decimale /= 2;
In questo:
C++:
decimale >>= 1;
lo shift di una posizione verso destra equivale alla divisione per 2 del numero.