La domanda è un po' "datata", ma forse la risposta può essere utile a qualcuno.
Per verificare se un numero è "
intero" si può confrontare il suo valore arrotondato al più vicino intero verso "
-inf" ed il numero stesso:
floor(n) == n
se il numero è intero i due numeri "
floor(n)" e "
n" saranno
uguali ed il risultato del confronto sarà "
1" ("
0" in caso contrario).
Per verificare se un numero è "
pari" si può confrontare il valore arrotondato al più vicino intero verso "-inf" del numero diviso 2 e successivamente moltiplicato per 2 con il numero stesso
floor(n/2)*2 == n
se il numero è intero i due numeri "
floor(n/2)*2" e "
n" saranno
uguali ed il risultato del confronto sarà "
1" ("
0" in caso contrario).
Per determinare se il numero è
INTERO e PARI bisogna quindi verificare che
entrambi i confronti abbiano dato come risultato "
1"
Per verificare se un numero è "Inf" si può usare la funzione
built-in "
isinf".
Per verificare se un numero è "NaN" si può usare la funzione
built-in "
isnan".
I controlli descritti in precedenza e le funzioni "
isinf" e "
isnan" restituiscono un valore di tipo "
logical"
(0;1).
Nello script in calce la funzione "
int_and_pari" verifica se il valore in input è
INTERO e PARI restituendo "
1" in caso affermativo, "
0" in caso negativo.
Un controllo aggiuntivo viene effettuato per verificare se il numero sia "Inf" o "NaN": nel primo caso viene restituito "-1", nel secondo "-2".
Per poter manipolare i valori di tipo "
logical" questi vengono sottoposti ad un "
cast" a "
double".
I commenti all'interno dello script descrivono le varie operazioni svolte.
Codice della funzione "int_and_pari"
function [i_p,is_int,is_pari]=int_and_pari(n)
%
% int_and_pari(n): verifica se l'input è un numero INTERO e se è PARI
% Input:
% n: un numero o un array o una matrice
% Output:
% int_and_pari(n): 1 se il numero è INTERO e PARI
% 0 se il numero NON è INTERO e/o NON è PARI
% -1 se ik numero è Inf
% -2 se ik numero è NaN
%
% [i_p,is_int,is_pari]=int_and_pari(n)
% i_p: 1 se il numero è INTERO e PARI
% 0 se il numero NON è INTERO e/o NON è PARI
% -1 se ik numero è Inf
% -2 se ik numero è NaN
% is_int: 1 se il numero è INTERO
% 0 se il numero NON è INTERO
% -1 se ik numero è Inf
% -2 se ik numero è NaN
% is_pari: 1 se il numero è PARI
% 0 se il numero NON è PARI
% -1 se ik numero è Inf
% -2 se ik numero è NaN
%
% se l'input è un vettore o una matrice gli output saranno vettori o
% matrici
%
% Identifica eventuali valori "Inf"
%
n_inf=isinf(n);
%
% Identifica eventuali valori "NaN"
%
n_nan=isnan(n);
%
% Verifica se il numero è INTERO (is_int=1, se non è INTERO: is_int=0); gli
% eventuali "Inf" e/o NaN vengono settati, rispettivamente a "-1" e "-2"
%
is_int=double((floor(n) == n));
is_int(n_inf)=-1;
is_int(n_nan)=-2;
%
% Verifica se il numero è PARI(is_pari=1, se non è pari: is_pari=0); gli
% eventuali "Inf" e/o NaN vengono settati, rispettivamente a "-1" e "-2"
%
is_pari=double((floor(n/2)*2 == n));
is_pari(n_inf)=-1;
is_pari(n_nan)=-2;
%
% Verifica se il numero è INTERO e PARI: il prodotto (is_int*is_pari deve
% esere uguale a 1); gli % eventuali "Inf" e/o NaN vengono settati,
% rispettivamente a "-1" e "-2"
%
i_p=is_int .* is_pari;
i_p(n_inf)=-1;
i_p(n_nan)=-2;
Hope this helps.