Passaggio numero decimale-binario...
Carissimi ragazzi, nel corso di una lezione di Calcolo Numerico I, il docente ha presentato un algoritmo, in linguaggio C, capace di trasformare un numero rappresentato in base 10 in un numero rappresentato in base 2, by-passando il problema delle divisioni successive. L'algoritmo che abbiamo implementato è il seguente (stando ai dettami del docente):
Il problema è che provandolo con un normale devC++ non mi si restituisce il risultato corretto eppure non riesco a comprendere dove sia l'errore, dal momento che il "modello carta e penna" conferma la bontà di tale algoritmo.
Inoltre se non "shifto" inv mi vien restituito il risultato corretto a meno dell'orientamento (perdonate l'abusa di linguaggio
).
Ringrazio sentitamente per la collaborazione.
#include<stdio.h> main() { int n, inv, r; scanf("%d",&n); inv=0 do{ r=n&1; inv=(inv<<1)|r; n=n>>1; }while(n!=0); printf("%d",inv); }
Il problema è che provandolo con un normale devC++ non mi si restituisce il risultato corretto eppure non riesco a comprendere dove sia l'errore, dal momento che il "modello carta e penna" conferma la bontà di tale algoritmo.
Inoltre se non "shifto" inv mi vien restituito il risultato corretto a meno dell'orientamento (perdonate l'abusa di linguaggio



Risposte
Ma che tu sappia il C mette a disposizione una libreria con qualche funzione che permetta di stampare il numero in binario?
"menale":
Ma che tu sappia il C mette a disposizione una libreria con qualche funzione che permetta di stampare il numero in binario?
bhe basta che ci aggiungi una print ad uno dei codici come ho fatto qui (ricordati l'ordine di stampa). E' piuttosto banale come codice da scrivere e non credo che ci sia adirittura una liberia, ma forse qualcuno si è preso la briga di creare una libreria (ovvio non-standard) per operazioni particolare con i numeri binari.
Capisco capisco!
Comunque mi son confrontato con altri colleghi dell'ateneo ed hanno riscontrato tutti lo stesso problema, ben rappresentato da 12. Se inserisci 12 e fai partire l'algoritmo del testo, accade codesta cosa : 12 in binario equivale ad 1100, applicando il procedimento inv diventa 0011, scrittura inversa di 12 in binario, ed in stampa reca 3 che è proprio l'equivalente in decimale di 0011. Caos allo stato puro.
Credo che il tuo algoritmo, l'ultimo della serie (per intenderci), sia quello davvero valido. .
Comunque mi son confrontato con altri colleghi dell'ateneo ed hanno riscontrato tutti lo stesso problema, ben rappresentato da 12. Se inserisci 12 e fai partire l'algoritmo del testo, accade codesta cosa : 12 in binario equivale ad 1100, applicando il procedimento inv diventa 0011, scrittura inversa di 12 in binario, ed in stampa reca 3 che è proprio l'equivalente in decimale di 0011. Caos allo stato puro.
Credo che il tuo algoritmo, l'ultimo della serie (per intenderci), sia quello davvero valido. .

"hamming_burst":
bhe basta che ci aggiungi una print ad uno dei codici come ho fatto qui (ricordati l'ordine di stampa).
Eh sì, questo è l'algoritmo più semplice da implementare a meno dell'ordine
