A parte l'errore individuato da
Eduadie con la sua risposta, ci sono un paio di ulteriori errori nel tuo codice:
[1] la funzione che hai dichiarato ritorna i valore "n"
function n = Somma_pari99(n)
il valore "n" corrisponde al valore di input, mentre mi sembra di capire che tu voglia o il valore della somma più vicino a 99 oppure il massimo numero pari dino al quale estendere la somma prima di superare la soglia "99"
Dovresti quindi modificare la dichiarazione della funzione come segue:
function [count, val] = Somma_pari99(n)
così definita, la funzione ritorna due valori in output:
- "
count" la somma che già calcoli nel loop
- "
val" il massimo numero pari considerato (per settare questo devi modificare il codice, memorizzando l'ultimo valore di "i"
[2] Per come hai definito la verifica di superamento della soglia (l'"if" con il quale devi sostituire il "while") in realtà "count" assumerà il valore "successivo" alla soglia.
Per ovviare a questo errore, una volta superata la soglia, devi sottrarre l'ultimo valore aggiunto
Un potenziale ulteriore errore consiste nel fatto che il tuo codice non effettua nessun controllo per verificare se la soglia viene raggiunta: se inserisci in input un valore di "n" troppo basso, la somma dei numeri pari tra "2" e "n" potrebbe non arrivare a 90 (l'ultimo valore prima che superata la soglia di 99).
In questo caso il tuo codice dovrebbe segnalare un warning.
Per quanto riguarda l'individuazione dei numeri pari tra "2" e "n", non hai bisogno di usare la funzione "mod": puoi definire il ciclo for come:
for i= 2:2:n
Di seguito, il codice della funzione aggiornato in base ai suggerimenti sopra riportati.
% Definizione parametri di output
function [count,val] = Somma_pari99(n)
count = 0;
% Loop sui numeri pari da 2 a n
for i= 2:2:n
count = count + i;
% Controllo della condizione di terminazione del loop
if count >99
% Se la somma ha superato la soglia (99) occorre sottrarre l'ultimo
% addendo
count=count-i;
disp('Range numeri in input eccessivo')
% Quindi si forza l'usscita dal loop
break
end
% Asegnazione del valore del numero pari corrente alla varaibile di
% output
val=i;
end
% Se il valore "n" in input è troppo piccolo, la sommatoria potrebbe non
% raggiungere la soglia
if((count + i + 2) < 99)
disp('WARNING: Range numeri in input non sufficiente')
end
Il problema può anche essere risolto utilizzando la funzione "
cumsum", ma, in questo caso, dal momento che dovresti comunque fare un controllo sul superamento della soglia, non sarebbe molto più utile del ciclo for.
Hope this helps.