Oppure

Loading
22/06/08 11:45
giocala88
Salve, chiedo forse un aiuto stupido, ma non riesco a capire come posso implementare un programma ANSI C che divide un numero acquisito per 2 fino a quando la divisione non è 1...

es:
inizio
8/ 2 = 4
4 / 2 = 2
2 / 2 = 1
fine
...devo utilizzare la ricorsione????....grazie anticipatamente...
aaa
22/06/08 12:15
lorenzo
Non devi per forza usare la ricorsione.

Puoi benissimo usare un semplice ciclo while.
Devi valutare bene tu se vale la pena di usare la ricorsione, tenendo conto che spreca molta memoria...

Prova a mettere giù tu il codice o almeno tentaci.
Se proprio non ci riesci dimmelo che te lo scrivo.

Ma fai un tentativo
:k:
aaa
22/06/08 12:21
giocala88
Ecco il mio codice...ma nn va....
int main ()

{
int num,
i, x;
double y, g;

div_t divresult;
printf("\nAcquisire: ";);
scanf("%d",
&num);

y = pow(2, num);

for(i = 0; i < y; ++i)
g = y / 2;

printf("\n%g -> %g", y, g);

return 0;
}
aaa
22/06/08 12:35
lorenzo
La funzione con il ciclo while per dividere un numero è questa

void dividi( int number )
{	
	int n = number;
	
	while( n != 1 )
	{
		n = n / 2;
		printf("%d",n);
	}
		
	
}


Mentre se vogliamo usare la ricorsione

int dividiRicorsione( int number )
{
	printf("%d",number);

	if( number == 1 )
		return 0;

	else
		dividiRicorsione( number / 2 );
}


Comunque, dando un'occhiata al tuo codice, ti posso subito dire che nel ciclo for quando vai a fare

g = y / 2
non funziona perché la variabile y non cambia mai, rimane sempre uguale e g di conseguenza non varia a sua volta.

E alla fine che cosa vorresti stampare???
nella printf stampa la variabile iniziale e la finale, che ovviamente dovrebbe essere 1 se il codice funzionasse a dovere.

prova ad usare le funzioni che ti ho dato;);)
aaa
22/06/08 12:39
lorenzo
Se vuoi vedere la differenza tra la ricorsione e il ciclo prova a passare in ingresso pow( 2 , number ) con per esempio number = 8

Sul mio pc la ricorsione mi segnala un errore di memoria in overflow...
Ultima modifica effettuata da lorenzo 22/06/08 12:40
aaa
22/06/08 13:01
giocala88
:k:...grazie infinite....
aaa