Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Salve, ho appena cominciato a studiare C a scuola e quindi sto provando i primi programmini.
Ho provato a sviluppare un semplice convertitore di numeri da decimale a binario.
L'algoritmo è apposto, ma i risultati della divisione dovrei scriverli in ordine contrario, perchè si fa così!
Codice sorgente - presumibilmente C++ |
// Luca Nillavac - 05/10/10 - Decimal To Binary #include <stdio.h> #define divisore 2 int main() { int nToBin, memorize, resto; printf("Questo programma converte un numero da decimale a binario"); printf("\nInserisci un numero: "); scanf("%d", &nToBin); printf("\n%d = ", nToBin); while(nToBin!=0) { memorize = nToBin/divisore; resto = nToBin % divisore; printf("%d", resto); nToBin = memorize; } printf("\n"); return 0; }
|
Potrei mettere il risultato in una stringa e ribaltarlo con un ciclo for?
Ultima modifica effettuata da Luk3 il 05/10/2010 alle 20:52 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ti serve un array.
|
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Ora ho provato così..ma i risultati sono completamente fuori..
Codice sorgente - presumibilmente C++ |
// Luca Nillavac - 05/10/10 - Decimal To Binary #include <stdio.h> #define divisore 2 int main() { int nToBin, memorize, resto, i; int risultato[20]; printf("\nQuesto programma converte un numero da decimale a binario\n"); printf("Inserisci un numero: "); scanf("%d", &nToBin); printf("\n%d = ", nToBin); i = 0; while(nToBin!=0) { memorize = nToBin/divisore; resto = nToBin % divisore; nToBin = memorize; resto = risultato[i]; i++; } while(i!=0) { printf("%d", risultato[i]); i--; } printf("\n"); return 0; }
|
|
|
GuglielmoS (Ex-Member)
Pro
Messaggi: 114
Iscritto: 27/11/2009
|
Postato originariamente da Luk3:
Ora ho provato così..ma i risultati sono completamente fuori..
Codice sorgente - presumibilmente C++ |
// Luca Nillavac - 05/10/10 - Decimal To Binary #include <stdio.h> #define divisore 2 int main() { int nToBin, memorize, resto, i; int risultato[20]; printf("\nQuesto programma converte un numero da decimale a binario\n"); printf("Inserisci un numero: "); scanf("%d", &nToBin); printf("\n%d = ", nToBin); i = 0; while(nToBin!=0) { memorize = nToBin/divisore; resto = nToBin % divisore; nToBin = memorize; resto = risultato[i]; i++; } while(i!=0) { printf("%d", risultato[i]); i--; } printf("\n"); return 0; }
|
|
Non funziona perchè nel vettore risultato non ci inserisci niente, le uniche operazioni che fai sono:
Codice sorgente - presumibilmente Plain Text |
resto = risultato[i];
printf("%d", risultato[i]);
|
La soluzione consiste nel memorizzare per ogni elemento di risultato il resto della divisione che fai nel ciclo.
Quindi al posto di:
Codice sorgente - presumibilmente Plain Text |
Inserisci:
Codice sorgente - presumibilmente Plain Text |
Ciao GuglielmoS |
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Ho corretto quell'errore e tolto un paio di variabili inutili, ma i risultati sono ancora completamente casuali
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #define divisore 2 int main() { int nToBin, i; int risultato[50]; printf("\nQuesto programma converte un numero da decimale a binario.\n"); printf("Inserisci un numero: "); scanf("%d", &nToBin); printf("\n%d = ", nToBin); i = 0; while(nToBin!=0) { risultato[i] = nToBin % divisore; nToBin /= divisore; i++; } do { printf("%d", risultato[i]); i--; }while(i!=0); printf("\n"); return 0; }
|
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao! Ho letto il programma, e ho trovato qualcosa che non va nel primo ciclo while
( Il resto non viene memorizzato)
Ecco il ciclo corretto:
Codice sorgente - presumibilmente Plain Text |
while(nToBin)
{
risultato[i++] = nToBin % divisore;
nToBin/=divisore;
}
|
Ultima modifica effettuata da Poggi Marco il 05/10/2010 alle 22:03 |
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Hai cambiato la condizione del while e incrementi subito il contatore giusto?
Però non va ancora arrrg!
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #define divisore 2 int main() { int nToBin, i; int risultato[50]; printf("\nQuesto programma converte un numero da decimale a binario.\n"); printf("Inserisci un numero: "); scanf("%d", &nToBin); printf("\n%d = ", nToBin); i = 0; while(nToBin>0) { risultato[i++] = nToBin % divisore; nToBin /= divisore; } do { printf("%d", risultato[i]); i--; }while(i!=0); printf("\n"); return 0; }
|
Ultima modifica effettuata da Luk3 il 05/10/2010 alle 22:04 |
|
GuglielmoS (Ex-Member)
Pro
Messaggi: 114
Iscritto: 27/11/2009
|
Il ciclo della visualizzazione non funzionava correttamente per colpa del valore che la i assumeva alla fine del primo while (in pratica avevi la i che valeva una posizione in più).
Così dovrebbe andare:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #define DIVISORE 2 int main() { int nToBin, i; int risultato[50]; printf("Inserisci un numero: "); scanf("%d", &nToBin); i = 0; while (nToBin > 0) { risultato[i] = nToBin % DIVISORE; nToBin /= DIVISORE; i++; } i--; while (i >= 0) { printf("%d", risultato[i]); i--; } putchar('\n'); return 0; }
|
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Il problema sta nella stampa.
Alla fine del calcolo, il contatore i sarà sempre maggiorato di 1.
Prova a stampare il risultato in questo modo:
Codice sorgente - presumibilmente Plain Text |
while(i>=1)
printf("%d ", risultato[--i]);
|
Ultima modifica effettuata da Poggi Marco il 05/10/2010 alle 22:46 |
|