C Spostare cifre di un intero a destra e sinistra

Robert T.

Utente Attivo
Studiando un libro del c sono arrivato alla fine del 3 capitolo dove finisce di spiegare ancora le strutture while ancora non ha iniziato con il for, pff... una bazzecola direte e l'ho detto anche io, fino a quando... svolgendo tutti gli esercizi finali mi ritrovo davanti a questo:

Il vostro programma dovrà leggere un intero di quattro cifre e crittografarlo nel metodo seguente: Sostituite ogni cifra con il resto ottenuto dalla divisione di ( la somma di quella cifra più 7) per 10. In seguito scambiate la prima cifra con la terza e scambiate la seconda cifra con la quarta. Visualizzate quindi l'intero crittografato.

Mettiamo caso che il numero sia 1234.

Prima di scrivere codice su codice il mio approcciò mentale è questo:

Il vostro programma dovrà leggere un intero di quattro cifre
Creo una variabile int chiamata numero la inizializzo a 0.

Tramite scanf, chiedo i valori. che saranno 1234

Sostituite ogni cifra con il resto ottenuto dalla divisione di ( la somma di quella cifra più 7) per 10.
Qua non so se ho capito male o cosa devo fare

1234 + 7 * 10 = 1304
e poi
1234 / 1304
e poi come sostituisco le cifre con il resto?
o
(1234 + 7) / 10


in seguito scambiate la prima cifra con la terza e scambiate la seconda cifra con la quarta.
E qua? come si fa?? Nel libro non ha mai accennato a operazioni del genere fino ad adesso e ancora non ha mai trattato di array.
 
Ultima modifica:

rodhellas

Utente Attivo
1,478
397
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
1) Non ha senso inizializzare a 0 se poi sai che verrà cambiato. Dichiarala e basta ( int numero; )
2) Da quello che ho capito: (1234%10)+7. Ovvero, 1234%10 ti da 4, ci sommi 7 e vai avanti cosi (non saprei dirti su come affrontare l'eventuale doppia cifra, decidi tu).
3) 1234 deve diventare 3412. Dividi per 100, ti rimane 12. Dividi ancora 1234 però con il modulo ed ottieni 34. Infine, 34*100+12 = 3412.
 

fedi98

Nuovo Utente
no, prendi ogni sinfola cifre int[] array={1,2,3,4}, sommi ogni cifra dell' arrey con 7 e dividi le quattro cifre per 10 e prendi i 4 resti, poi scambi di posto
 

rodhellas

Utente Attivo
1,478
397
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
no, prendi ogni sinfola cifre int[] array={1,2,3,4}, sommi ogni cifra dell' arrey con 7 e dividi le quattro cifre per 10 e prendi i 4 resti, poi scambi di posto
int array[] = .. :asd:
Comunque ha detto che non ha ancora trattato gli array nel libro
 

rodhellas

Utente Attivo
1,478
397
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
scusa ma c non l' ho mai fatto. Comunque dico array perche e piu semplice, ma puo anche usare
int a=1, b=2, c=3, d=4;
Il fatto è che non è generico un programma cosi. Infatti usa uno scanf per chiedere il numero.
 

fedi98

Nuovo Utente
porca miseria

int num;
scanf(num) // non so la sintassi
int a,b,c,d;
//spezzi num in 4 cifre e poi operi su esse; int a=1, b=2, c=3, d=4; era per dire, visto che facevamo l' esempio con 1234
 

rodhellas

Utente Attivo
1,478
397
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
porca miseria

int num;
scanf(num) // non so la sintassi
int a,b,c,d;
//spezzi num in 4 cifre e poi operi su esse; int a=1, b=2, c=3, d=4; era per dire, visto che facevamo l' esempio con 1234
Ma allochi troppe variabili inutilmente, dovresti fare 4 volte il modulo, e per ricomporre il numero fare altre 4 operazioni di moltiplicazione e 4 di somma.
E stiamo calmini
 

fedi98

Nuovo Utente
si ma è l' unico modo, quello che hai suggerito te non segue le direttive dell' esercizio.
E comunque non sono molte variabili, sono 4, comu le cifre che devono essere contenute
 

rodhellas

Utente Attivo
1,478
397
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Che vada bene anche il tuo ci mancherebbe, ma visto che suppongo stia imparando C (come primo linguaggio), meglio che si abitui ad utilizzare il minor numero di variabili ed operazioni.
P.S: Il mio funziona eh, sono anche meno righe da fare :asd:
 

fedi98

Nuovo Utente
1- un array di 4 cifre e 4 variabili credo che allochino la stessa quantita di memoria (poi ovvio l' array è gestitito da una sola variabile)
2-io ho capito l' es in un altro modo, ovvero prendi le 4 cifre (separate) e le sommi a sette e fai il modulo della divisione per 10 e poi scambi di posto. detto queste se devi operare sulle singole cifre non puoi non avere le 4 variabili delle singole cifre (cioe puoi, ma sprechi èiu tempo)
 

Entra

oppure Accedi utilizzando