Codice Matlab

Euridice8
Ciao a tutti,
in questo periodo mi sto preparando per l'esame di Informatica B, guardando fra i temi d'esame passati mi sono imbattuta in questo codice Matlab:


function [ris] = mistero (v,n)
if (n>1)
v2 = v (mod(v,n) ~ = 0 | v == n);
ris = mistero (v2, n-1);
else
ris = v;
end



Mi viene chiesto di scrivere il valore della variabile x nel caso in cui eseguo la chiamata:
x = mistero([2 3 4 5 7 9 11 13 15], 10)

Non riesco proprio ad interpretare il programma, in particolare non ho ancora capito bene quale sia il significato della funzione "mod" e di come stia operando in questo caso.

Spero di essere stata abbastanza precisa nella richiesta e ringrazio già da subito chi saprà aiutarmi :)

Risposte
Lory314
Per sapere cosa fa la function mod basta usare l'help di matlab (digita help mod sul terminale).
Come potrai leggere, questa function calcola il resto della divisione tra il primo e il secondo input.
Ad esempio mod(4,2)=0, mod(5,2)=1, mod(14,3)=2.

La function mistero funziona nel seguente modo. Prende due valori argomenti in input: un vettore v e un numero n.

Se il n è minore o uguale 1, allora restitutisce il vettore v (è il ramo dell'else)

Se n è maggiore di 1, in v2 vengono memorizzati alcuni elementi di v. Quali? Ragioniamo.
L'istrunzione mod(v,n)~=0 | v==n costruisce un vettore di VALORI BOOLEANI (prova magari a salvarti a parte il vettore e usare la function whos) che nella posizione i-esima avrà il risultato dell'espressione mod(v(i),n)~=0 | v(i)==n.
Il vettore v2 quindi avrà al suo interno tutti i valori di v che sono uguali a n o che non sono divisibili per n.
Quindi viene richiamata la function sul vettore v2 con un n diminuito di 1. Quindi al secondo livello della ricorsione v2 conterrà i valori del precedente v2 che o sono uguali al nuovo n (cioè n di partenza meno 1) o non sono divisibili per il nuovo n. La ricorsione termina quando n vale 1 perchè verrò preso l'altro ramo dell'if.

Praticamente, la function dato v e dato n, elimina da v tutti i numeri che sono divisibili propriamente per gli interni minori o uguali a n. Usando n opportuno (ad esempio il massimo di v) è possibile quindi trovare tutti i numeri primi presenti nel vettore v iniziale.

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