CICLO DO - Inversione cifre

di il
43 risposte

CICLO DO - Inversione cifre

Buongiorno a tutti,

sono nuovo del forum e sopratutto di C, ho iniziato a studiarlo con il libro "Programmazione in c". Nel libro sono presenti vari esercizi, uno mi sta facendo impazzire, qualche aiutino?

Il programma qui sotto inverte un numero inserito dall'utente con massimo 2 cifre, ora l'esercizio mi chiede di modificarlo utilizzando il ciclo DO in modo che inverta le cifre di qualsiasi numero. Mi consiglia di utilizzare DO dividendo il numero inserito sempre per 10 ma poi non so come continuare.

#include <stdio.h>

int main(void)
{
	int number, first_number, second_number;
	
	printf("Enter a two_digit number: ");
	scanf("%d", &number);
	
	first_number= number%10;
	second_number= number/10;
	
	printf("The reversal is: %d%d", first_number, second_number);
	
	return 0;
}

43 Risposte

  • Re: CICLO DO - Inversione cifre

    Ti consiglio di scriver tutti i passi del metodo su carta e poi applicarle al codice.

    Non confondere "numero" con "cifra"
  • Re: CICLO DO - Inversione cifre

    oregon ha scritto:


    Ti consiglio di scriver tutti i passi del metodo su carta e poi applicarle al codice.

    Non confondere "numero" con "cifra"

    Ho provato vari modi su carta e penso di aver capito i passaggi, non capisco però come fare ad utilizzare il risultato prodotto da un ciclo do, mi spiego meglio (spero ):
    
    #include <stdio.h>
    int main(void)
    {	
    	int number, reverse;
    	
    	printf("Enter a number: ");
    	scanf("%d", &number);
    	
    	do {
    		reverse = number%10;
    
    	}while(number != 0);
    		
    	printf("The reversal is: %d", reverse);
    	
    	return 0;
    }
    
    qui gli dico di continuare a prendere il resto e metterlo in "reverse" ,al primo giro ok, l'ultima cifra è ora in reverse,, ma come faccio a continuare il ciclo ed inserire le altre cifre in altre variabili per poi dirgli di stamparle invertite?
    sono sicuro che è più facile di quello che penso ma sono andato nel pallone!
  • Re: CICLO DO - Inversione cifre

    Allora non l'hai fatto su carta.

    Se parti dal numero 1638 e trovi il resto della divisione per 10 avrai

    8

    Il risultato della divisione per 10 sarà

    163

    quindi ...?
  • Re: CICLO DO - Inversione cifre

    Io comincerei a cambiare il nome della variabile: "reverse" è fuorviante... prova a pensarla come "ultima_cifra".
  • Re: CICLO DO - Inversione cifre

    oregon ha scritto:


    Allora non l'hai fatto su carta.

    Se parti dal numero 1638 e trovi il resto della divisione per 10 avrai

    8

    Il risultato della divisione per 10 sarà

    163

    quindi ...?
    
    #include <stdio.h>
    int main(void)
    {	
    	int number, ultima_cifra;
    	
    	printf("Enter a number: ");
    	scanf("%d", &number);
    	
    	do {
    		
    		ultima_cifra = number%10;
    		
    	}while(number != 0);
    		
    	printf("The reversal is: %d", ultima_cifra);
    	
    	return 0;
    }
    
    
    a parte che sicuramente non ho messo qualche istruzione.

    Così lui mi trova l'ultima cifra
    es: 1638%10 = 8
    e la mette nella variabile "ultima_cifra".
    poi continua il ciclo e mi trova l'altra ultima cifra: 163%10 = 3 però così mi sovrascrive la precedente.

    quello che non riesco a capire è come trovare le varie ultime cifre e salvarle dentro variabili differenti per poi usarle per stampare la cifra invertita.
  • Re: CICLO DO - Inversione cifre

    Stampala subito la cifra con una printf !
  • Re: CICLO DO - Inversione cifre

    Metti il tuo printf("The reversal is: ") PRIMA del do{} e un printf("%d",ultima_cifra) DENTRO al do{}, non appena hai rilevato il dato. Ad ogni passaggio del ciclo verrà "stampata" in console l'ultima cifra che hai calcolato, aggiungendola in coda a quelle precedenti.

    Ah, tieni anche presente che ad ogni passaggio dovresti dividere n per 10, con n=n/10 oppure, abbreviato, n/=10. Se no n non cambia mai e il ciclo diventa infinito.

    P.S. Se invece vuoi memorizzare le cifre per mostrarle successivamente, "in blocco", puoi predisporre un array di tanti elementi quante sono le cifre che può contenere il valore massimo che prevedi di dover usare, predisporre un indice per scorrerlo e immettere le cifre nelle posizioni più opportune (usando l'indice, da incrementare ad ogni passaggio). Uscito dal ciclo dovresti predisporre un altro ciclo per scorrere le cifre nell'array e visualizzarle. Funzionerebbe, ma chi te lo fa fare nel contesto di questo particolare esercizio?
  • Re: CICLO DO - Inversione cifre

    In realtà l'esercizio può essere risolto utilizzando le sole variabili intere number e reverse, senza ricorrere alla scorciatoia del printf().
  • Re: CICLO DO - Inversione cifre

    Nippolo ha scritto:


    In realtà l'esercizio può essere risolto utilizzando le sole variabili intere number e reverse, senza ricorrere alla scorciatoia del printf().
    Intendi con una terza variabile e una printf finale ...
  • Re: CICLO DO - Inversione cifre

    No, solo due variabili intere! Se number=1638 alla fine del procedimento sarà reverse=8361.
  • Re: CICLO DO - Inversione cifre

    Ah ... ok ... ovviamente sì, senza utilizzare la variabile per conservare l'ultima cifra ...
  • Re: CICLO DO - Inversione cifre

    Come?
  • Re: CICLO DO - Inversione cifre

    Pensaci ... se avessi studiato un po' di assembly con shift e rotazioni di bit, arriveresti subito ...
  • Re: CICLO DO - Inversione cifre

    Ora, sono curioso e mi farà piacere scoprirlo (o leggere la spiegazione) ma... non si diceva che si rischia di confondere le idee a chi, principiante, propone i suoi quesiti?

    Al momento ci stavo provando con le potenze del 10, moltiplicando e dividendo sfruttando i "troncamenti" (e sembra funzionare, anche se non ho ancora concluso), ma due sole variabili non mi bastano. Provo anche con shift (shift dei bit? >> e << ?) e rotazioni di bit (col che si intende che si mette in coda il bit che si toglie in testa, facendo slittare tutto?).
Devi accedere o registrarti per scrivere nel forum
43 risposte