Curiosità numeri normali e numeri con virgola

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.

Risposte
garnak.olegovitc1
Salve smalldragon,

"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

vict85
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.

gundamrx91-votailprof
"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).

garnak.olegovitc1
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 :smt023 :smt023
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

garnak.olegovitc1
Salve smalldragon,

"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

gundamrx91-votailprof
Forse ho capito cosa chiedi....

if x-int(x)<1 then "numero con la virgola"
else "numero intero"

Volevi questo?

garnak.olegovitc1
Salve GundamRX91,

"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... :? C, C++,....?

Cordiali saluti

gundamrx91-votailprof
Garnak, il costrutto if-then-else è comune alla quasi totalità dei linguaggi di programmazione (non so se in assembler ci sia...).

vict85
"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.

vict85
X GundamRX91: Non ho comunque capito il problema che dovrebbe risolvere la tua funzione...

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

garnak.olegovitc1
Salve GundamRX91,

"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

gundamrx91-votailprof
"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).

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.

gundamrx91-votailprof
"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

smalldragon
x garnak.olegovitc
no si riferiva alla parte intera del numero

gundamrx91-votailprof
"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).

smalldragon
x gundam
no in assembler c'è la cmp in combinazione con un salto condizionato per > < o = sia rispetto una variabile o a una costante

gundamrx91-votailprof
Ah! La compare....

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.