Flint (Normal User)
Newbie
Messaggi: 8
Iscritto: 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
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Cosa intendi per "operatori di interazione"?
|
|
Flint (Normal User)
Newbie
Messaggi: 8
Iscritto: 18/04/2017
|
for- do while switch
|
|
Template (Member)
Pro
Messaggi: 177
Iscritto: 09/12/2015
|
Tralasciando il tuo linguaggio estremamente inappropriato ("operatori d'interazione"... ), 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 |
|
Mikelius (Member)
Expert
Messaggi: 525
Iscritto: 14/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 |
|
Flint (Normal User)
Newbie
Messaggi: 8
Iscritto: 18/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.. è 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
|
|
Template (Member)
Pro
Messaggi: 177
Iscritto: 09/12/2015
|
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++ |
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { unsigned int numero, numero_invertito; printf("Inserire numero: "); scanf("%d", &numero); numero_invertito = 0; while (numero > 0) { numero_invertito *= 10; numero_invertito += numero % 10; numero /= 10; } printf("Numero invertito: %d", numero_invertito); return EXIT_SUCCESS; }
|
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.
|
|
Flint (Normal User)
Newbie
Messaggi: 8
Iscritto: 18/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;
}
|
|
Flint (Normal User)
Newbie
Messaggi: 8
Iscritto: 18/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.
|
|