[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