Einzelnen Beitrag anzeigen

Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Definition von Variablen in Matlab

  Alt 27. Okt 2006, 11:18
Hallo

Ich höre zurzeit eine Einführung in Matlab und wollte mir damit als Einstieg eine kleine Simulation schreiben.
Die Aufgabe die ich bearbeiten will, stammt aus dem BWINF von vor zwei Jahren.

Kurz zur Aufgabe: Man hat ein 2D Array, dessen Felder mit Käse, Luft oder Wasser gefüllt sind. Dann giest man von links Wasser drauf (Gravitiation nach rechts denken). Von einem freien Feld kann das Wasser in die benachbarten 8 Felder fließen. Wenns rechts ankommt, ists schön, wenn nicht, ists auch interessant.

ich wollte das wieder rekursiv lösen und habe mir diese Funktion geschrieben:

Delphi-Quellcode:
function endegefunden = NachbarnFluten(x,y,Feld,ende)
% flutet die nachbarn, setzt sie auf Wasser, ruft sich rekursiv auf und
% gibt 1 zurück, falls das Ende gefunden wurde, sonst 0
% Feld: 0:Frei; 1: Wasser, 2: Käse, 3: Ende

if ende==1 // Zeile 6
    return;
end

Feld(x,y)=1;
endegefunden=0;

%rechts
if Feld(x+1,y)==0
    NachbarnFluten(x+1,y);
end

if Feld(x+1,y)==3
  endegefunden=1
end //usw..
Die Spalte ganz rechts habe ich mit einer '3' markiert.

Das Feld wird hiermit erstellt (sollte fehlerfrei sein)
Delphi-Quellcode:
function Feld = Felderstellen(dimx,dimy,p)
% Feld hat dimx*dimy Größe, zusätzlich am Rand eine Schicht Käse,
% das rechte Ende (x=dimx+1) ist als Ende markiert
% Feld: 0:Frei; 1: Wasser, 2: Käse, 3: Ende

% Feld wird erstellt
for i = 2:(dimx+1) %Rechts die Schlussschicht
    for j= 2:(dimy+1) %Oben und unten Käse
        if rand < p
            Feld(j,i)=2;
        else
            Feld(j,i)=0;
        end
    end
end

%oberer/unterer Rand:
for i=2:(dimx+1)
    Feld(1,i)=2;
    Feld(dimy+2,i)=2;
end


% Auffangbecken+ Rand links:
for i=1:(dimy+2)
    Feld(i,dimx+2)=3;
    Feld(i,1)=2;
end
Das Ganze will ich dann hiermit starten:
Delphi-Quellcode:
function unused = Beginn(dimx,dimy,p)


ende=0;
Feld = Felderstellen(dimx,dimy,p);


for i=2:(dimy+1)
    if Feld(i,2)==0
        ende=NachbarnFluten(i,2,Feld,ende); // Zeile 10
    end
end

Feld % Ergebniss wird angezeigt

if ende==1
    disp('Ende')
else
    disp('kein Ende')
end
Wenn ich das letzt dann in MatLab mit 'Beginn(10,10,0.5)' aufrufe, bekomme ich die Fehlermeldung:

??? Input argument "ende" is undefined.

Error in ==> NachbarnFluten at 6
if ende==1

Error in ==> NachbarnFluten at 52
NachbarnFluten(x,y+1);

Error in ==> Beginn at 10
ende=NachbarnFluten(i,2,Feld,ende);


Hin und wieder läuft aber auch alles durch und es wird 'kein Ende' angezeigt. Das würde darauf hindeuten, dass es nur dann ein problem gibt, wenn ende auf 1 gesetzt wurde. Aber dann verstehe ich die Fehlermeldung nicht.

Kann mir da jemand helfen?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat