[C] Problema stampa array
Salve a tutti!
Ho come compito il seguente esercizio:
"Si vuole scrivere un programma C che, preso in ingresso un valore intero n, ne effettui la conversione nel corrispondente numero binario e lo memorizzi in un vettore."
Il programma funziona correttamente, solo che nella stampa a video comprende anche tutti gli zeri precedenti al numero binario.
Mi spiego:
per fare un esempio, il numero 18 in binario è 10010, ma a me risulta che sia:
00000000000000000000000000010010
ovviamente perchè ho usato #define MAX 32.
La mia domanda è questa: come posso fare per impartire al compilatore l'ordine di inziare a stampare a video i valori da quando incontra il numero 1 (escludendo in questo modo tutti questi zeri fastidiosi)?
Grazie mille a tutti quelli che risponderanno!
Ho come compito il seguente esercizio:
"Si vuole scrivere un programma C che, preso in ingresso un valore intero n, ne effettui la conversione nel corrispondente numero binario e lo memorizzi in un vettore."
#include <stdio.h>
#include <stdlib.h>
#define MAX 32
int main ()
{
int numero_intero, i;
int numero_binario[MAX];
printf("Inserisci un numero intero: ");
scanf ("%d", &numero_intero);
for (i = 0; i < MAX; i++){
if (numero_intero%2 == 0)
numero_binario[i]=0;
else
numero_binario[i]=1;
numero_intero = numero_intero/2;
}
for (i = MAX-1; i >= 0; i--){
printf("%d", numero_binario[i]);
}
system("pause");
return 0;
}
Il programma funziona correttamente, solo che nella stampa a video comprende anche tutti gli zeri precedenti al numero binario.
Mi spiego:
per fare un esempio, il numero 18 in binario è 10010, ma a me risulta che sia:
00000000000000000000000000010010
ovviamente perchè ho usato #define MAX 32.
La mia domanda è questa: come posso fare per impartire al compilatore l'ordine di inziare a stampare a video i valori da quando incontra il numero 1 (escludendo in questo modo tutti questi zeri fastidiosi)?
Grazie mille a tutti quelli che risponderanno!
Risposte
Ciao, puoi fare nel seguente modo:
Prendi il vettore dove hai salvato il numero binario e con un for cerca la posizione del primo 1. Poi nel for di stampa parti da quell'indice , in modo da saltarw tut4i gli altri zeri iniziali.
Prendi il vettore dove hai salvato il numero binario e con un for cerca la posizione del primo 1. Poi nel for di stampa parti da quell'indice , in modo da saltarw tut4i gli altri zeri iniziali.
Come vuoi che il tuo codice si comporti con i numeri negativi? Insomma il tuo codice ha un comportamento che potrebbe non essere quello che vuoi. Vuoi che ti rappresenti la loro scrittura in memoria?
Comunque MAX definito così è discutibile. Lo standard non ti garantisce che int sia di 32bit. Il modo corretto di definirlo sarebbe attraverso sizeof(int)*CHAR_BIT dove CHAR_BIT (che di solito è uguale a 8) è definito in limits.h