La domanda è un po' "datata", ma, forse, la risposta può essere utile a qualcuno.
Per
interrompere l'esecuzione di un "
ciclo for" si possono utilizzare due diverse istruzioni:
[*] "
continue": l'istruzione "
continue" interrompe l'esecuzione delle istruzioni presenti nel "
ciclo for", viene quindi incrementato il contatore (es. la variabile "i", "j", ...) e, se la condizione di termine del "
ciclo for" non è verificata, vengono eseguire le istruzione definite all'interno del ciclo stesso.
help continue
continue Pass control to the next iteration of FOR or WHILE loop.
continue passes control to the next iteration of FOR or WHILE loop
in which it appears, skipping any remaining statements in the body
of the FOR or WHILE loop.
In nested loops, continue passes control to the next iteration of
FOR or WHILE loop enclosing it.
[*] "
break": l'istruzione "
break" interrompe definitivamente l'esecuzione del "
ciclo for" e viene quindi eseguita la prima istruzione definita dopo il "
ciclo for"
help break
break Terminate execution of WHILE or FOR loop.
break terminates the execution of FOR and WHILE loops.
In nested loops, break exits from the innermost loop only.
break is not defined outside of a FOR or WHILE loop.
Use RETURN in this context instead.
Nel caso della domanda in oggetto sembra si tratti di "
interrompere" l'esecuzione di tutti e tre i "cicli for"; in questo caso si dovrà utilizzare l'istruzione "
break"
Il controllo del verificarsi della condizione di termine dei cicli deve essere effettuata nel terzo "ciclo for".
L'evento deve essere "propagato" anche ai due cicli più esterni (l'istruzione "
break" ha effetto solo sul ciclo all'interno del quale viene eseguita).
Per propagare l'evento si può utilizzare un
flag di controllo che deve essere opportunamente settato al verificasi della condizione desiderata.
Il
flag viene utilizzato nei cicli esterni per l'attivazione di altre istruzioni "
break".
In calce, lo script proposto nella domanda, modificato come sopra descritto.
Per testare la soluzione, il primo ciclo è stato modificato in modo che effettuasse (in teoria) 3 iterazioni: essendo stata impostata nella domanda la condizione di uscita "0125" ed essendo stato impostato il primo ciclo "
da 0 a 1", l'uscita dal primo ciclo risultava "implicita" e quindi inutile l'utilizzo del flag di controllo.
Delle istruzioni "
disp" sono state aggiunte per stare a video messaggi relativi al verificarsi della condizione di termine e del suo "propagarsi".
%
% Definizione ed inizializzazione del flag "go_on" per controlalre l'uscita
% dai primi due cicli "for"
%
go_on=1;
%
% Cicli "for"
%
for i=0:3
%
% Se il valore del flag "go_on" è "0" l'istruzione "break" interrompe
% il ciclo for "corrente"
%
if(~go_on)
disp('Loop 1: condizione di uscita identificata tramite il flag "go_on"')
break
end
for j=0:9
%
% Se il valore del flag "go_on" è "0" l'istruzione "break"
% interrompe il ciclo for "corrente"
%
if(~go_on)
disp('Loop 2: condizione di uscita identificata tramite il flag "go_on"')
break
end
for k=0:9
x=[0 i j k]
%
% Controllo del verificarsi della condizione di uscita dai cicli
% "for": al verificarsi della condizione, viene settato a "0" il
% flag di controllo e l'istruzioen break interrrompe l'esecuzione
% del ciclo "for" corrente
%
if(i == 1 && j == 2 && k == 5)
disp('Loop 3: condizione di uscita verificata; flag go_on settato a 0')
go_on=0;
break
end
end
end
end
Hope this helps.