Domanda Ho bisogno di un piccolo aiuto

Andre1812

Utente Iron
17 Giugno 2022
4
1
0
5
Ciao, avrei bisogno di un aiuto. Sto cercando di scrivere un programma e mi sono posto una domanda: se io acquisisco una variabile intera, ad esempio il numero 123456, c'è la possibilità di dividere questa variabile in due variabili, ovvero a = 123 e b = 456?
 
Buonasera,

Ho un dubbio sulla risposta di cui hai bisogno, perciò ti pongo una domanda:

Hai bisogno che il numero venga diviso in base alla sua lunghezza (a metà)? Oppure devi prendere 3 numeri alla volta e formare x variabili diverse?
 
Ehm, potresti fare un esempio.
L'operatore /, nel caso in cui gli operandi sono entrambi variabili intere, rappresenta la divisione intera, e restituisce la parte intera del quoziente.
Invece % rappresenta l'operatore modulo, e restituisce il resto della divisione intera.

A questo punto risulta evidente che:

123456 / 1000 = 123

e

123456 % 1000 = 456
 
  • Mi piace
Reazioni: Andre1812
Codice brutale scritto da telefono in velocità:

C:
#include<stdio.h>
#include<math.h>
int main()
{
    int numero;
    printf("Inserisci il numero da splittare:");
    scanf("%d",&numero);
    int l = (floor(log10(abs(numero))) + 1)/2;    //prendo la lunghezza del numero diviso per 2
    int i;
    int c = 1;
    for(i=0; i< l; i++){
        c *= 10;    //variabile che utilizzo per prendere x numeri dal numero
    }
    int a = numero/c;    // prendo i primi l numeri
    int b = numero%c;    // prendo gli ultimi l numeri
    printf("A: %d, B: %d", a, b);
    return 0;
}

devo scappare, però questo dovrebbe fare il suo lavoro anche se scritto malaccio, inoltre sono abbastanza sicuro che è da sistemare il modulo nel caso si ha un numero dispari.
ciaoo
 
Ultima modifica:
Buonasera,

Ho un dubbio sulla risposta di cui hai bisogno, perciò ti pongo una domanda:

Hai bisogno che il numero venga diviso in base alla sua lunghezza (a metà)? Oppure devi prendere 3 numeri alla volta e formare x variabili diverse?
buonasera, 3 numeri alla volta e formare variabili diverse
Messaggio unito automaticamente:

L'operatore /, nel caso in cui gli operandi sono entrambi variabili intere, rappresenta la divisione intera, e restituisce la parte intera del quoziente.
Invece % rappresenta l'operatore modulo, e restituisce il resto della divisione intera.

A questo punto risulta evidente che:

123456 / 1000 = 123

e

123456 % 1000 = 456
Grazie mille
Messaggio unito automaticamente:

L'operatore /, nel caso in cui gli operandi sono entrambi variabili intere, rappresenta la divisione intera, e restituisce la parte intera del quoziente.
Invece % rappresenta l'operatore modulo, e restituisce il resto della divisione intera.

A questo punto risulta evidente che:

123456 / 1000 = 123

e

123456 % 1000 = 456
Un'ultima cosa, c'è un metodo che permetta al programma di capire per quanto dividere in base al numero di cifre del numero ?
Messaggio unito automaticamente:

buonasera, 3 numeri alla volta e formare variabili diverse
Messaggio unito automaticamente:


Grazie mille
Messaggio unito automaticamente:


Un'ultima cosa, c'è un metodo che permetta al programma di capire per quanto dividere in base al numero di cifre del numero ?
Intendo dire, se per esempio ho il numero 166482910123 come faccio a dirlo in gruppi da 4, tipo a= 1664 b= 8291 c=0123
Messaggio unito automaticamente:

buonasera, 3 numeri alla volta e formare variabili diverse
Messaggio unito automaticamente:


Grazie mille
Messaggio unito automaticamente:


Un'ultima cosa, c'è un metodo che permetta al programma di capire per quanto dividere in base al numero di cifre del numero ?
Messaggio unito automaticamente:


Intendo dire, se per esempio ho il numero 166482910123 come faccio a dirlo in gruppi da 4, tipo a= 1664 b= 8291 c=0123
Tutto questo in modo automatico, dal programma, senza che ogni volta debba andare a cambiare il numero di zeri della divisione
 
Intendo dire, se per esempio ho il numero 166482910123 come faccio a dirlo in gruppi da 4, tipo a= 1664 b= 8291 c=0123
Provo a formalizzare il problema, se sbaglio correggimi: detto a il numero di partenza, costituito da n cifre, lo si vuole suddividere in k numeri, ciascuno costituito da m=n/k cifre.
Se ci ho preso, sorgono spontanee alcune domande:
- che valori può assumere n? Relativamente ad a, lo sai che un intero senza segno a 32 bit può memorizzare numeri che vanno da 0 ad un massimo pari a 2^32-1=4294967295? E' vero, ci sono anche gli interi a 64 bit, ma se n diventa molto grande penso che la cosa più semplice sarebbe quella di rappresentare il numero a come un array di cifre/caratteri; in tal modo inoltre anche la successiva divisione in gruppi diventerebbe più agevole, ma ovviamente tutto dipende da quello che stai cercando di fare.
- che succede poi se
n non è divisibile per k?
- e in definitiva, cosa stai cercando di fare di preciso?
 
Provo a formalizzare il problema, se sbaglio correggimi: detto a il numero di partenza, costituito da n cifre, lo si vuole suddividere in k numeri, ciascuno costituito da m=n/k cifre.
Se ci ho preso, sorgono spontanee alcune domande:
- che valori può assumere n? Relativamente ad a, lo sai che un intero senza segno a 32 bit può memorizzare numeri che vanno da 0 ad un massimo pari a 2^32-1=4294967295? E' vero, ci sono anche gli interi a 64 bit, ma se n diventa molto grande penso che la cosa più semplice sarebbe quella di rappresentare il numero a come un array di cifre/caratteri; in tal modo inoltre anche la successiva divisione in gruppi diventerebbe più agevole, ma ovviamente tutto dipende da quello che stai cercando di fare.
- che succede poi se
n non è divisibile per k?
- e in definitiva, cosa stai cercando di fare di preciso?
Inizialmente mi era venuta una strana idea, far corrispondere ogni lettera ad una serie di 3 numeri. Sono riuscito a fare la prima parte del programma, ovvero convertire in modo automatico la lettera inserita in una serie di 3 numeri scelti da me, ma mi risulta difficile il procedimento inverso: se per esempio inserisco un numero lungo (123456789) voglio che il programma analizzi il numero inserito a gruppi di 3 cifre, scrivendo poi la corrispettiva lettera. Esempio : si parte da 123456789. Secondo l'indice che intendono inserire nel programma, la serie di numeri 123 corrisponde ad a, poi 456 = b e 789=c. Il programma analizza prima 123, poi 456, poi 789, infine scrive la serie di lettere corrispondenti, quindi abc.

Fin da subito ho capito che sarebbe stato molto difficile, ma la curiosità mi ha spinto a chiedere qui su questo forum.
 
Ultima modifica:
Inizialmente mi era venuta una strana idea, far corrispondere ogni lettera ad una serie di 3 numeri. Sono riuscito a fare la prima parte del programma, ovvero convertire in modo automatico la lettera inserita in una serie di 3 numeri scelti da me, ma mi risulta difficile il procedimento inverso: se per esempio inserisco un numero lungo (123456789) voglio che il programma analizzi il numero inserito a gruppi di 3 cifre, scrivendo poi la corrispettiva lettera. Esempio : si parte da 123456789. Secondo l'indice che intendono inserire nel programma, la serie di numeri 123 corrisponde ad a, poi 456 = b e 789=c. Il programma analizza prima 123, poi 456, poi 789, infine scrive la serie di lettere corrispondenti, quindi abc.

Fin da subito ho capito che sarebbe stato molto difficile, ma la curiosità mi ha spinto a chiedere qui su questo forum.
Potresti semplicemente dividere il numero per mille finchè il risultato della divisione è diverso da zero, e ogni volta memorizzare in un array, cui dimensione cambierà dinamicamente, il carrattere associato al resto di tre cifre ottenuto dalla divisione. Alla fine visualizzerai a schermo i caratteri partendo dall'ultimo elemento dell'array.
Esempio:
Codice:
Effettuiamo la seguente associazione tra carratteri e numeri di tre cifre:
a = 123  b = 456  c = 789

Dato il seguente numero: 789123456 (cab) dividiamolo per mille.
Abbiamo quindi 789123, 456. Prendiamo il resto e memorizziamolo nell'array.
Adesso partendo dalla parte intera della divisione ripetiamo gli stessi passaggi:
789123 / 1000 = 789, 123. Prendiamo il resto e mettiamolo nell'array.
Abbiamo adesso 789 / 1000 = 0, 789. Prendiamo il resto e mettiamolo nell'array.
Adesso il risultato intero della divisione è zero quindi ci fermiamo.

L'array conterrà i seguente elementi:
456 | 123 | 789 ovvero seguendo le corrispoendenze b | a | c
non possiamo visualizzare l'array così però in quanto la stringa non è corretta:
la visualizzeremo quindi al contrario ottenendo c | a | b
Questa soluzione fa utilizzo a tutti gli effetti di una struttura di dati che prende il nome di Stack. Per maggiori informazioni.
Per scrivere un codice più elegante perchè non utilizzi un array con tutti i caratteri dell'alfabeto, associando ad ogni carattere un valore a tre cifre partendo da un certo valore k (a = k, b = k+1, c = k+2 e così via) una volta ottenuto il numero associato a un carattere, chiamamolo n, allora non fai nient'altro che visulizzare l'elemento dell'array avente indice n-k. PS. crei una vera è propria semplice funzione di hash. Per maggiori informazioni.