Come posso verificare che un numero sia intero e pari?

di il
1 risposte

Come posso verificare che un numero sia intero e pari?

Come posso verificare che un numero sia intero e pari e non NaN, Inf o altro?

ciao

1 Risposte

  • Re: Come posso verificare che un numero sia intero e pari?

    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.
Devi accedere o registrarti per scrivere nel forum
1 risposte