Curiosità numeri normali e numeri con virgola
salve a tutti sono un nuovo menbro del forum.
scusatemi per la banalità della domanda che e la seguente:
come si fa a capire se una variabile contiene un numero intero normale o un numero con virgola?
esempio:
x=a/b o x=dato immesso dall'utente
come faccio a capire se x (in ambo i casi) e un numero intero o un numero con virgola?
ringrazio anticipatamente chiunque sia in grado di darmi una risposta.
scusatemi per la banalità della domanda che e la seguente:
come si fa a capire se una variabile contiene un numero intero normale o un numero con virgola?
esempio:
x=a/b o x=dato immesso dall'utente
come faccio a capire se x (in ambo i casi) e un numero intero o un numero con virgola?
ringrazio anticipatamente chiunque sia in grado di darmi una risposta.
Risposte
Salve smalldragon,
intendi in modo informatico?
Cordiali saluti
"smalldragon":
salve a tutti sono un nuovo menbro del forum.
scusatemi per la banalità della domanda che e la seguente:
come si fa a capire se una variabile contiene un numero intero normale o un numero con virgola?
esempio:
x=a/b o x=dato immesso dall'utente
come faccio a capire se x (in ambo i casi) e un numero intero o un numero con virgola?
ringrazio anticipatamente chiunque sia in grado di darmi una risposta.
intendi in modo informatico?
Cordiali saluti
La domanda andrebbe fatta in informarica.
In ogni caso:
1. Interi e numeri a virgola mobile sono rappresentati sul computer in modo diverso.
2. Ogni cosa che è inserita dall'utente viene letto come una stringa e poi convertito in base a ciò che il computer si aspetta di trovarsi. Fondamentalmente il programmatore decide in anticipo come far leggere il numero. A volte il computer lo decide in base al modo in cui il numero è stato scritto.
3. Il modo in cui viene rappresentato un numero su un computer non vedo cosa abbia a che fare con le persone. Non comprendo in che senso a te serva capirlo? a/b è un numero razionale, può essere memorizzato come frazione oppure approssimato con un numero a virgola mobile o fissa ma questo non ha nulla a che fare con l'essenza del numero a/b.
In ogni caso:
1. Interi e numeri a virgola mobile sono rappresentati sul computer in modo diverso.
2. Ogni cosa che è inserita dall'utente viene letto come una stringa e poi convertito in base a ciò che il computer si aspetta di trovarsi. Fondamentalmente il programmatore decide in anticipo come far leggere il numero. A volte il computer lo decide in base al modo in cui il numero è stato scritto.
3. Il modo in cui viene rappresentato un numero su un computer non vedo cosa abbia a che fare con le persone. Non comprendo in che senso a te serva capirlo? a/b è un numero razionale, può essere memorizzato come frazione oppure approssimato con un numero a virgola mobile o fissa ma questo non ha nulla a che fare con l'essenza del numero a/b.
"smalldragon":
salve a tutti sono un nuovo menbro del forum.
scusatemi per la banalità della domanda che e la seguente:
come si fa a capire se una variabile contiene un numero intero normale o un numero con virgola?
esempio:
x=a/b o x=dato immesso dall'utente
come faccio a capire se x (in ambo i casi) e un numero intero o un numero con virgola?
ringrazio anticipatamente chiunque sia in grado di darmi una risposta.
Con un qualsiasi linguaggio di programmazioni una variabile deve essere definita, sia come nome, quindi la tua [tex]x[/tex] (ma anche [tex]a[/tex] e [tex]b[/tex]) e sia come tipo, dove per tipo si intende proprio tipo di variabile. Se definisci la tua variabile di tipo "in virgola mobile" allora conterrà numeri con la virgola (ma anche interi del resto).
Salve smalldragon,
vict85 mi ha tolto le parole di bocca... magari se lo stampi su console potresti vedere il risultato ma il tipo lo devi definire a priori ... ma un controllo del tipo a priori mi sembra poco plausibile... postaci un tuo programma
Cordiali saluti
vict85 mi ha tolto le parole di bocca... magari se lo stampi su console potresti vedere il risultato ma il tipo lo devi definire a priori ... ma un controllo del tipo a priori mi sembra poco plausibile... postaci un tuo programma


Cordiali saluti
so bene che le variabili vanno definite sia con nome che con il tipo.
ma non riesco a capire come distinguere i due tipi.
per esempio
se io definisco una variabile float questa può contenere sia numeri con virgola che numeri senza virgola
io vorrei capire semplicemente come poterli distinguere
esempio pratico:
1) x=4/2 = 2 x conterrà un numero senza virgola
2) x=4/3 = 1,3 x conterrà un numero con virgola
vorrei capire se c'è un sistema per capire se sto nel caso 1 o nel caso 2
ma non riesco a capire come distinguere i due tipi.
per esempio
se io definisco una variabile float questa può contenere sia numeri con virgola che numeri senza virgola
io vorrei capire semplicemente come poterli distinguere
esempio pratico:
1) x=4/2 = 2 x conterrà un numero senza virgola
2) x=4/3 = 1,3 x conterrà un numero con virgola
vorrei capire se c'è un sistema per capire se sto nel caso 1 o nel caso 2
Salve smalldragon,
dipende da come definisci x nella dichiarazione delle variabili... tutto dipende da lì!
Cordiali saluti
"smalldragon":
so bene che le variabili vanno definite sia con nome che con il tipo.
ma non riesco a capire come distinguere i due tipi.
per esempio
se io definisco una variabile float questa può contenere sia numeri con virgola che numeri senza virgola
io vorrei capire semplicemente come poterli distinguere
esempio pratico:
1) x=4/2 = 2 x conterrà un numero senza virgola
2) x=4/3 = 1,3 x conterrà un numero con virgola
vorrei capire se c'è un sistema per capire se sto nel caso 1 o nel caso 2
dipende da come definisci x nella dichiarazione delle variabili... tutto dipende da lì!
Cordiali saluti
Forse ho capito cosa chiedi....
if x-int(x)<1 then "numero con la virgola"
else "numero intero"
Volevi questo?
if x-int(x)<1 then "numero con la virgola"
else "numero intero"
Volevi questo?
Salve GundamRX91,
detto così mi è un pò superficiale, occorre sapere con che linguaggio abbiamo a che fare...
C, C++,....?
Cordiali saluti
"GundamRX91":
Forse ho capito cosa chiedi....
if x-int(x)<1 then "numero con la virgola"
else "numero intero"
Volevi questo?
detto così mi è un pò superficiale, occorre sapere con che linguaggio abbiamo a che fare...

Cordiali saluti
Garnak, il costrutto if-then-else è comune alla quasi totalità dei linguaggi di programmazione (non so se in assembler ci sia...).
"smalldragon":
esempio pratico:
1) x=4/2 = 2 x conterrà un numero senza virgola
2) x=4/3 = 1,3 x conterrà un numero con virgola
vorrei capire se c'è un sistema per capire se sto nel caso 1 o nel caso 2
No, affatto. Come ho detto prima il numero è una cosa, il modo in cui è memorizzato è un'altra.
Il numero 2 è un numero intero (nel senso che appartiene a \(\displaystyle \mathbb{Z} \) o \(\displaystyle \mathbb{N} \) a seconda dei casi) ma quando viene memorizzato in una variabile a virgola mobile risulta essere memorizzato in qualcosa del tipo \(\displaystyle 0,1\times 2 \) (il computer pensa in base 2) mentre come \(\displaystyle 10 \) nel caso in cui viene memorizzato in un int. D'altra parte non te ne devi preoccupare tu dato che il computer gestirà la cosa per te (tutto sommato il compilatore potrebbe non creare neanche una variabile e quindi neanche memorizzarlo o memorizzare qualcos'altro).
Tieni inoltre conto che se tu scrivi
\(\displaystyle x = 3/4 \)
nella variabile x verrà memorizzato 0 se x è una variabile di tipo intero e \(\displaystyle 0,11\times 2^0 \) se x è un float. Questa è l'unica cosa che devi sapere.
Ci sono comunque delle conversioni automatiche del computer e a volte conviene esserne coscienti e costringere il compilatore a comportarsi in un certo modo ma in generale direi che puoi ignorare la cosa.
X GundamRX91: Non ho comunque capito il problema che dovrebbe risolvere la tua funzione...
ci dovrebbe essere una proprietà della matematica che definisce il numero intero rispetto a quello con virgola.
gundam ci siamo quasi il linguaggio e c++
ma possibilmente utilizzando solo funzioni della libreria standard perchè poi lo devo convertire in assembly
gundam ci siamo quasi il linguaggio e c++
ma possibilmente utilizzando solo funzioni della libreria standard perchè poi lo devo convertire in assembly
Salve GundamRX91,
non mi riferivo al controllo di flusso quanto alla funzione da te posta
Per int(x) vuoi dire un intero minore od uguale ad x, giusto?
Cordiali saluti
"GundamRX91":
Garnak, il costrutto if-then-else è comune alla quasi totalità dei linguaggi di programmazione (non so se in assembler ci sia...).
non mi riferivo al controllo di flusso quanto alla funzione da te posta

Per int(x) vuoi dire un intero minore od uguale ad x, giusto?
Cordiali saluti
"smalldragon":
ci dovrebbe essere una proprietà della matematica che definisce il numero intero rispetto a quello con virgola.
gundam ci siamo quasi il linguaggio e c++
ma possibilmente utilizzando solo funzioni della libreria standard perchè poi lo devo convertire in assembly
In C++ non so se ci sia una funzione che ti dice questo, però con quello che ti ho scritto, opportunamente adattato, dovresti arrivarci (puoi farti restituire un boolean, con True se il numero è in virgola mobile, False il caso contrario).
la funzione dovrebbe semplicemente restituire separatamente sia la parte intera che la parte dopo la virgola.
però se non riesco a capire come sapere se il numero risultante da un calcolo e un numero semplice o un inumero con virgola non sò come fare il resto.
però se non riesco a capire come sapere se il numero risultante da un calcolo e un numero semplice o un inumero con virgola non sò come fare il resto.
"garnak.olegovitc":
Salve GundamRX91,
[quote="GundamRX91"]Garnak, il costrutto if-then-else è comune alla quasi totalità dei linguaggi di programmazione (non so se in assembler ci sia...).
non mi riferivo al controllo di flusso quanto alla funzione da te posta

Per int(x) vuoi dire un intero minore od uguale ad x, giusto?
Cordiali saluti[/quote]
La funzione Int(x) restituisce la parte intera di un numero in virgola mobile: Int(10.6)=10
x garnak.olegovitc
no si riferiva alla parte intera del numero
no si riferiva alla parte intera del numero
"smalldragon":
la funzione dovrebbe semplicemente restituire separatamente sia la parte intera che la parte dopo la virgola.
però se non riesco a capire come sapere se il numero risultante da un calcolo e un numero semplice o un inumero con virgola non sò come fare il resto.
Scusa ma se fai come ti ho detto sai quando un numero ha la virgola oppure no. Se ha la virgola allora converti il tuo numero in una stringa, cerchi la virgola con un'apposita funzione e a questo punto puoi separare la parte intera da quella decimale (si tratta di una banale manipolazione di stringhe).
x gundam
no in assembler c'è la cmp in combinazione con un salto condizionato per > < o = sia rispetto una variabile o a una costante
no in assembler c'è la cmp in combinazione con un salto condizionato per > < o = sia rispetto una variabile o a una costante
Ah! La compare....