Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come invertire un numero[C]
Forum - C/C++ - Come invertire un numero[C]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Flint (Normal User)
Newbie


Messaggi: 8
Iscritto: 18/04/2017

Segnala al moderatore
Postato alle 16:22
Martedì, 18/04/2017
salve ragazzi.. ho svolto un esercizio che mi chiedeva di convertire un numero input decimale e trasformarlo poi in binario , esadecimale e  ottale ... il problema e che una volta convertiti i numeri manca un ultimo passaggio ossia quello di invertire il numero es:091 in 190 tutto questo utilizzando solo gli operatori di interazione

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:31
Martedì, 18/04/2017
Cosa intendi per "operatori di interazione"?




Il mio blog: https://piero.dev
PM Quote
Avatar
Flint (Normal User)
Newbie


Messaggi: 8
Iscritto: 18/04/2017

Segnala al moderatore
Postato alle 16:44
Martedì, 18/04/2017
for- do while switch

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 18:33
Martedì, 18/04/2017
Tralasciando il tuo linguaggio estremamente inappropriato ("operatori d'interazione"... :_doubt: ), quello che ti serve è banalmente:

-> Per ogni cifra del numero
-----> Estrai l'ultima cifra del numero (operazione modulo per ottenere la cifra, operazione divisione intera per toglierla dalla "coda")
-----> Metti la cifra estratta in coda al numero "finale"
-----> Passa alla cifra successiva

Ultima modifica effettuata da Template il 18/04/2017 alle 18:34
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 19:09
Martedì, 18/04/2017
Sapendo le cifre del numero, potresti semplicemente

-> creare un vettore di char[num_cifre]
-> con un ciclo
--> calcolare il modulo del numero
--> convertirlo in carattere e metterlo nella stringa
--> dividere il numero per 10
--> ripetere il ciclo
-> usare atoi() e convertire la stringa in numero (attenzione allo '\0' )

Se non sai le cifre del numero... potrestri crearti la stringa enorme oppure crearti un puntatore o utilizzare malloc/realloc per coprire tutte le cifre.

Ultima modifica effettuata da Mikelius il 18/04/2017 alle 19:19
PM Quote
Avatar
Flint (Normal User)
Newbie


Messaggi: 8
Iscritto: 18/04/2017

Segnala al moderatore
Postato alle 9:27
Mercoledì, 19/04/2017
Grazie mille per le risposte.
Per quanto riguarda i vettori e i puntatori ancora non ci sono arrivato scusate del linguaggio che ho usato.. :D è poco che mi sono avventurato nel mondo della programmazione l'esercizio mi dice di completarlo usando solo le competenze assunte fin'ora ossia le basi comprese switch while for

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 12:24
Mercoledì, 19/04/2017
Mi sembra una richiesta idiota, quella dell'esercizio... potresti spiegarci dove hai preso l'esercizio, chi te l'ha assegnato e nell'ambito di cosa?

Comunque, per questa volta contravverrò alla promessa fatta a me stesso e ti proporrò del codice C che risolva il tuo problema: se davvero sei un principiante assoluto, probabilmente vedere del codice fatto decentemente ti sarà utile.


Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.         unsigned int numero, numero_invertito;
  7.  
  8.         printf("Inserire numero: ");
  9.         scanf("%d", &numero);
  10.  
  11.         numero_invertito = 0;
  12.  
  13.         while (numero > 0)
  14.         {
  15.                 numero_invertito *= 10;
  16.                 numero_invertito += numero % 10;
  17.                 numero /= 10;
  18.         }
  19.  
  20.         printf("Numero invertito: %d", numero_invertito);
  21.  
  22.         return EXIT_SUCCESS;
  23. }



L'idea di questo codice è la seguente: un generico numero xyz può essere espresso in base decimale come (x * 100) + (y * 10) + (z * 1), ovvero come somma di cifre moltiplicate per potenze decrescenti di 10. Sfruttando tutto questo, si può dire che il numero zyx, che è il "simmetrico" di xyz, è esprimibile come (z * 100) + (y * 10) + (x * 1); basta pertanto ricavare ciascuna cifra di un numero, ed esso diventa immediatamente "invertibile".

Il codice che ti ho proposto ha solo un "problema": elimina automaticamente tutti gli zeri all'inizio, perchè per la rappresentazione numerica essi sono inutili. Se quegli zeri ti servono (ovvero: se devi stampare il numero), hai sostanzialmente due soluzioni:

-> Implementare il programma con delle stringhe, in modo da poter conservare le singole cifre come caratteri.
-> Utilizzare, nella printf che dovrà stampare il numero, un opportuno specificatore di formato.

PM Quote
Avatar
Flint (Normal User)
Newbie


Messaggi: 8
Iscritto: 18/04/2017

Segnala al moderatore
Postato alle 13:20
Mercoledì, 19/04/2017
In realtà il problema per quanto riguarda invertire il numero l'avevo già risolto dopo il tuo primo passaggio anche se a modo mio:

#include <stdio.h>

int main()
{
int numero;
printf("Inserire il numero: ");
scanf("%d",&numero);
while(numero>0)
{
printf("%d",numero%10);
numero/=10;
}


system("pause");
return 0;
}

PM Quote
Avatar
Flint (Normal User)
Newbie


Messaggi: 8
Iscritto: 18/04/2017

Segnala al moderatore
Postato alle 13:24
Mercoledì, 19/04/2017
l'esercizio l'ho preso dal libro "Corso completo di programmazione" terza edizione H.M deitel

la richiesta è quella di visualizzare una tabella di equivalenza tra decimali,binari,ottali ed esadecimali...il problema è che una volta svolto il tutto non sapevo come capovolgere i numeri..ora tutto risolto grazie molte.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo