Frage von zlheadhunter, 10

Wieso funktioniert das Programm nicht (Delphi/Schleifen)?

Hallo!

Ich habe da ein Problem bei folgender Aufgabenstellung:


"  Forellen

Problemstellung: In einem Teich leben x = 50 Forellen, doch ist Futter und Platz für K = 350 vorhanden. Die Forellen vermehren sich mit einer Jahresrate von 6% der Differenz zwischen Höchstbestand K und aktuellem Bestand x.

Wie entwickelt sich die Population:

  1. ohne äußere Einwirkungen,

  2. wenn am Ende jedes Jahres 15% des Bestandes entnommen werden?

Hinweis: Zeige die Entwicklung der Population für einen Zeitraum von 150 Jahren in Listboxen an. Dies sollte dir einen Vergleich erleichtern."


procedure TForm1.Button1Click(Sender: TObject);
var j:integer;
begin
x:=50;
k:=350;
j:=0;

{repeat                 //Schleife
  begin
    j:=j+1;
    rate:=(k-x)*0.06;
    x:=x+x*rate;
    y:=round(x);
    listbox1.Items.Add('Anzahl der Forellen: ' + inttostr(y) + ' im ' + inttostr(j) + '. Jahr');
  end;
until (x >= 350) or (j = 150); }

for j:=1 to 150 do
  begin
    rate:=(350-x)*0.06;
    x:=x+(x*rate);
    y:=round(x);
    listbox1.Items.Add('Anzahl der Forellen: ' + inttostr(y) + ' im ' + inttostr(j) + '. Jahr');
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var j:integer;
begin
x:=50;
k:=350;
j:=0;

repeat
  begin
    j:=j+1;
    rate:=(k-x)*0.06;
    x:=x+(x*rate);   //Vermehrung
    x:=x-(x*0.15);   //äußerer Einfluss
    y:=round(x);
    listbox1.Items.Add('Anzahl der Forellen: ' + inttostr(y) + ' im ' + inttostr(j) + '. Jahr');
  end;
until (x >= 350) or (j = 150);
end;

Das Programm läuft soweit auch. Nur erfüllt es seinen Zweck nicht. Wenn ich das Programm starte und Button1 anklicke, dann erhalte ich bereits nach dem 1. Jahr 950 Forellen, was nicht sein kann. Leider finde ich den Fehler an meinem Quelltext nicht, vielleicht findet ihr den. Ich verzweifle langsam, wieso das nicht funktioniert! :(

PS: Die Variablen, außer die Zählvariable, habe ich unter public deklariert.

Antwort
von DataJockey, 10

Hi, wenn du mal den ersten Schleifendurchlauf durchrechnest siehst du dass dein Algorithmus falsch ist.

x = 50 k = 350

  1. Durchlauf: j = 1 rate = (350-x)0.06 = (350 - 50) * 0.06 = 18 x = x+(xrate) = 50 + (50*18) = 950 y = round(x) = 950

  2. Durchlauf: j = 2 rate = (350-x)0.06 = (350 - 950) * 0.06 = -10800 x = x+(xrate) = 50 + (50*18) = -10259050 y = round(x) = -10259050

..usw

Mir scheint du kommst mit deinen Variablen durcheinander. Versuche mal deine Variablen nach dem zu benennen, was diese bei dir im Algorithmus darstellen. Wenn du so "zu viele" Varialblen benutzt, ist das nicht schlimm. Hier kommt es nicht auf Performance an.

Gruss, dj

Kommentar von DataJockey ,

sry, ..dieser Editor ist die Hölle für Code. Hier nochmal der Teil mit den Schleifendurchläufen:

x = 50
k = 350
1. Durchlauf:
j = 1
rate = (350-x)*0.06 = (350 - 50) * 0.06 = 18
x = x+(x*rate) = 50 + (50*18) = 950
y = round(x) = 950
2. Durchlauf:
j = 2
rate = (350-x)*0.06 = (350 - 950) * 0.06 = -10800
x = x+(x*rate) = 50 + (50*18) = -10259050
y = round(x) = -10259050
..usw

Keine passende Antwort gefunden?

Fragen Sie die Community