Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Scrivere un risultato al contrario.
Forum - C/C++ - Scrivere un risultato al contrario.

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Luk3 (Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 20:35
Martedì, 05/10/2010
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++

  1. // Luca Nillavac - 05/10/10 - Decimal To Binary
  2.  
  3. #include <stdio.h>
  4. #define divisore 2
  5.  
  6. int main()
  7. {
  8.         int nToBin, memorize, resto;
  9.         printf("Questo programma converte un numero da decimale a binario");
  10.         printf("\nInserisci un numero: ");
  11.         scanf("%d", &nToBin);
  12.         printf("\n%d = ", nToBin);
  13.        
  14.         while(nToBin!=0)
  15.         {
  16.                 memorize = nToBin/divisore;
  17.                 resto = nToBin % divisore;
  18.                 printf("%d", resto);
  19.                 nToBin = memorize;
  20.         }
  21.        
  22.         printf("\n");
  23.         return 0;
  24. }



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


Non basta godersi un cielo stellato senza pensare che in un angolo ci siano le fate?
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:51
Martedì, 05/10/2010
Ti serve un array.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Luk3 (Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 21:08
Martedì, 05/10/2010
Ora ho provato così..ma i risultati sono completamente fuori..

Codice sorgente - presumibilmente C++

  1. // Luca Nillavac - 05/10/10 - Decimal To Binary
  2.  
  3. #include <stdio.h>
  4. #define divisore 2
  5.  
  6. int main()
  7. {
  8.         int nToBin, memorize, resto, i;
  9.         int risultato[20];
  10.         printf("\nQuesto programma converte un numero da decimale a binario\n");
  11.         printf("Inserisci un numero: ");
  12.         scanf("%d", &nToBin);
  13.         printf("\n%d = ", nToBin);
  14.         i = 0;
  15.        
  16.         while(nToBin!=0)
  17.         {
  18.                 memorize = nToBin/divisore;
  19.                 resto = nToBin % divisore;
  20.                 nToBin = memorize;
  21.                 resto = risultato[i];
  22.                 i++;
  23.         }
  24.         while(i!=0)
  25.         {
  26.                 printf("%d", risultato[i]);
  27.                 i--;   
  28.         }
  29.         printf("\n");
  30.         return 0;
  31. }




Non basta godersi un cielo stellato senza pensare che in un angolo ci siano le fate?
PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 21:37
Martedì, 05/10/2010
Testo quotato

Postato originariamente da Luk3:

Ora ho provato così..ma i risultati sono completamente fuori..

Codice sorgente - presumibilmente C++

  1. // Luca Nillavac - 05/10/10 - Decimal To Binary
  2.  
  3. #include <stdio.h>
  4. #define divisore 2
  5.  
  6. int main()
  7. {
  8.         int nToBin, memorize, resto, i;
  9.         int risultato[20];
  10.         printf("\nQuesto programma converte un numero da decimale a binario\n");
  11.         printf("Inserisci un numero: ");
  12.         scanf("%d", &nToBin);
  13.         printf("\n%d = ", nToBin);
  14.         i = 0;
  15.        
  16.         while(nToBin!=0)
  17.         {
  18.                 memorize = nToBin/divisore;
  19.                 resto = nToBin % divisore;
  20.                 nToBin = memorize;
  21.                 resto = risultato[i];
  22.                 i++;
  23.         }
  24.         while(i!=0)
  25.         {
  26.                 printf("%d", risultato[i]);
  27.                 i--;   
  28.         }
  29.         printf("\n");
  30.         return 0;
  31. }




Non funziona perchè nel vettore risultato non ci inserisci niente, le uniche operazioni che fai sono:
Codice sorgente - presumibilmente Plain Text

  1. resto = risultato[i];
  2. 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

  1. resto = risultato[i];


Inserisci:
Codice sorgente - presumibilmente Plain Text

  1. risultato[i] = resto;


Ciao GuglielmoS


La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
--Isaac Asimov
PM Quote
Avatar
Luk3 (Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 21:46
Martedì, 05/10/2010
Ho corretto quell'errore e tolto un paio di variabili inutili, ma i risultati sono ancora completamente casuali :d

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #define divisore 2
  3.  
  4. int main()
  5. {
  6.         int nToBin, i;
  7.         int risultato[50];
  8.         printf("\nQuesto programma converte un numero da decimale a binario.\n");
  9.         printf("Inserisci un numero: ");
  10.         scanf("%d", &nToBin);
  11.         printf("\n%d = ", nToBin);
  12.         i = 0;
  13.        
  14.         while(nToBin!=0)
  15.         {      
  16.                 risultato[i] = nToBin % divisore;
  17.                 nToBin /= divisore;
  18.                 i++;
  19.         }
  20.         do
  21.         {
  22.                 printf("%d", risultato[i]);
  23.                 i--;   
  24.         }while(i!=0);
  25.        
  26.         printf("\n");
  27.         return 0;
  28. }




Non basta godersi un cielo stellato senza pensare che in un angolo ci siano le fate?
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:01
Martedì, 05/10/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

  1. while(nToBin)
  2. {
  3.   risultato[i++] = nToBin % divisore;
  4.   nToBin/=divisore;
  5. }


Ultima modifica effettuata da Poggi Marco il 05/10/2010 alle 22:03


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
Luk3 (Member)
Guru


Messaggi: 615
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 22:04
Martedì, 05/10/2010
Hai cambiato la condizione del while e incrementi subito il contatore giusto?

Però non va ancora arrrg!
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #define divisore 2
  3.  
  4. int main()
  5. {
  6.         int nToBin, i;
  7.         int risultato[50];
  8.         printf("\nQuesto programma converte un numero da decimale a binario.\n");
  9.         printf("Inserisci un numero: ");
  10.         scanf("%d", &nToBin);
  11.         printf("\n%d = ", nToBin);
  12.         i = 0;
  13.        
  14.         while(nToBin>0)
  15.         {      
  16.                 risultato[i++] = nToBin % divisore;
  17.                 nToBin /= divisore;
  18.         }
  19.         do
  20.         {
  21.                 printf("%d", risultato[i]);
  22.                 i--;   
  23.         }while(i!=0);
  24.        
  25.         printf("\n");
  26.         return 0;
  27. }



Ultima modifica effettuata da Luk3 il 05/10/2010 alle 22:04


Non basta godersi un cielo stellato senza pensare che in un angolo ci siano le fate?
PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 22:41
Martedì, 05/10/2010
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++

  1. #include <stdio.h>
  2.  
  3. #define DIVISORE 2
  4.  
  5. int main()
  6. {
  7.         int nToBin, i;
  8.         int risultato[50];
  9.  
  10.         printf("Inserisci un numero: ");
  11.         scanf("%d", &nToBin);
  12.  
  13.         i = 0;
  14.         while (nToBin > 0) {
  15.                 risultato[i] = nToBin % DIVISORE;
  16.                 nToBin /= DIVISORE;
  17.                 i++;
  18.         }
  19.  
  20.         i--;
  21.         while (i >= 0) {
  22.                 printf("%d", risultato[i]);
  23.                 i--;   
  24.         }
  25.         putchar('\n');
  26.  
  27.         return 0;
  28. }



La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
--Isaac Asimov
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:44
Martedì, 05/10/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

  1. while(i>=1)  
  2.     printf("%d ", risultato[--i]);


Ultima modifica effettuata da Poggi Marco il 05/10/2010 alle 22:46


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo