Matlab

Hallo,
weiß einer von euch wie in Matlab fussgesteuerte Schleifen zu realisieren sind.
Z.B.
do
{…
}while Wert!=0 (~=0)

Das Problem ist der Wert soll erst berechnet werden in einer Schleife und dann wird erst auf die Zulässigkeitsbedingung geprüft.
Wäre dankbar für Ihre Vorschläge
Olga.

Hallo Olga!

Ich hab’ zwar (schon wieder) keine konkrete Lösung für dich (ich hab’ Matlab bisher noch nicht mal von weitem gesehen), aber eine allgemeingültige (also unabhängig von Programmiersprache) Lösung gibt es schon: Jede fussgesteuerte Schleife lässt sich durch eine kopfgesteuerte solche ersetzen; im Pseudocode sieht das so aus:

loop
 a = calculate(x);
until a = 0;

wird zu

a = calculate(x);
while a != 0
 a = calculate(x);
end while;

Sieht zwar etwas umständlicher aus, führt aber zum gleichen Ergebnis. Ich hoffe das hilft.

Liebe Grüße,
Martin

P.S.: Ich persönlich verwende fussgesteuerte Schleifen höchst ungern, und wenn, dann nur für kurze Schleifenkörper, weil sie meiner Meinung nach die Lesbarkeit verschlechtern (und somit u.a. die Fehlersuche erschweren).

einfacher :smile:

im Pseudocode sieht das so aus:

loop
a = calculate(x);
until a = 0;

wird zu

a = calculate(x);
while a != 0
a = calculate(x);
end while;

Sieht zwar etwas umständlicher aus, führt aber zum gleichen
Ergebnis. Ich hoffe das hilft.

Liebe Grüße,
Martin

a=0
while a!=0

a=calc(x)
end

oder noch einfacher:
while 0==0

if calculate(x)==0 break
end

Gruss, Marco

Hallo Marco!

a=0
while a!=0

a=calc(x)
end

Ist das die Neuerfindung der „never-execute-loop“? Ich mein’ ja nur, wegen

a=0

und

while a!=0

Vielleicht würde sich da doch das hier besser machen *g*.

a=1

Die andere Variante funktioniert natürlich wie von dir gepostet…

Gruß,
Martin

uups…
ich meinte selbstverständlich

while not(a!=0) :wink:

es muesste aber auch so funktionieren:

for a=1:exp(500)

if calculate(x)==0 break end
end

Eigentlich schade, dass es in Matlab keine gotos gibt.

function [args}=whileschleife(args)

if calculate(x)!=0 args=whileschleife(args); end

oder:
n3=1;
while n3==n3

try
n3=n3(calculate(x)/calculate(x));
catch
break
end
end

ok, das ist nicht mehr ganz sooo einfach…

Gruss, Marco