C Spostare cifre di un intero a destra e sinistra

Robert T.

Utente Attivo
134
11
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
121
8
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
 

fedi98

Nuovo Utente
121
8
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;
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
121
8
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
121
8
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
121
8
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
Discord Ufficiale Entra ora!

Discussioni Simili