Oppure

Loading
05/10/10 18:35
Luk3
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ì!

// 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 05/10/10 18:52
aaa
05/10/10 18:51
Il Totem
Ti serve un array.
aaa
05/10/10 19:08
Luk3
Ora ho provato così..ma i risultati sono completamente fuori..

// 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;
}

aaa
05/10/10 19:37
GuglielmoS
Postato originariamente da Luk3:

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

// 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:
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:
resto = risultato[i];

Inserisci:
risultato[i] = resto;

Ciao GuglielmoS
aaa
05/10/10 19:46
Luk3
Ho corretto quell'errore e tolto un paio di variabili inutili, ma i risultati sono ancora completamente casuali :d

#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;
}

aaa
05/10/10 20:01
Poggi Marco
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:

while(nToBin)
{
  risultato[i++] = nToBin % divisore;
  nToBin/=divisore;
}
Ultima modifica effettuata da Poggi Marco 05/10/10 20:03
aaa
05/10/10 20:04
Luk3
Hai cambiato la condizione del while e incrementi subito il contatore giusto?

Però non va ancora arrrg!
#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 05/10/10 20:04
aaa
05/10/10 20:41
GuglielmoS
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:
#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;
}
aaa