Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wo höchstes Wachstum, wo geringstes? (https://www.delphipraxis.net/8403-wo-hoechstes-wachstum-wo-geringstes.html)

Matze 4. Sep 2003 06:38


Wo höchstes Wachstum, wo geringstes?
 
Guten Morgen!

Ich möchte eine kleine Simulation schreiben, bei der die Population von Hasen in einem bestimmten Testgebiet ausgewertet werden soll.

Also:
Ich habe hier eine Tabelle vor mir (aus dem Bio-Heft. :mrgreen: ):

Jahr - Anzahl

1980 - 200
1981 - 218
1982 - 220
1983 - 197
1984 - 199
1985 - 207
1986 - 183
1987 - 176
1988 - 176
1989 - 191
1990 - 210
1991 - 204

Jetzt habe ist eine Art Diagramm in eine PaintBox bekommen. :D
Das ging ja noch, aber:

Wie bekomme ich die Jahre mit dem größten Populationszuwachs und die größte Populationsabnahme heraus?

Bsp:
größter Populationszuwachs: von 1988-1990
größte Populationsabnahme: von 1982-1987

In dem Diagramm kann ich das leicht ablesen, aber rechnen.. :gruebel:

Billa 4. Sep 2003 07:11

Re: Wo höchstes Wachstum, wo geringstes?
 
Neue Spalte dazu (z.B. Delta oder Wachstum o.ä) für weitere Auswetungen,


delta = 0

tabelle[0,3] = 0
for x := 1 to 11 do
Tabelle[x,3] := Tabelle[x,2] - Tabelle[x-1,2]

min = 9999999
max = 0


L = gewünschte Umtergrenze
H = gewünschte Obergrenze

L und H suchen (auch trivial)

for x := 0 to 11 do
begin
if Tabelle[x,1] = (gesuchte Untergrenze) then L := x
if Tabelle[x,1] = (gesuchte Obergrenze) then H := x
end

for x := L to H do
begin
if max < Tabelle[x,3] then max := Tabelle[x,3]
if min > Tabelle[x,3] then min := Tabelle[x,3]
end

Jahr Anzahl Delta

1980 200 0
1981 218 18
1982 220 2
1983 197 -23
1984 199 2
1985 207 8
1986 183 -24
1987 176 -7
1988 176 0
1989 191 15
1990 210 19
1991 204 -6

voila!

Matze 4. Sep 2003 07:15

Re: Wo höchstes Wachstum, wo geringstes?
 
Guten Morgen Billa!

Vielen Dank.
Nur kenne ich mich mit Tabellen recht wenig bzw. gar nicht aus. Wo muss das alles denn hin?
Ich habe das Datum in ListBox1 und die Anzahl in ListBox2.

Wäre echt nett von dir, wenn du mir das auch noch sagen würdest. ;)

Aber das gibt mir ja nur die Änderung zum Vorjahr, ich möchte aber die ganze Zeitspanne haben. :?

Billa 4. Sep 2003 07:29

Re: Wo höchstes Wachstum, wo geringstes?
 
Hi Matze,

Listboxen sind eher für das Frontend geeignet, für die Statistik ziehe ich Arrays vor:



Array[0..11,1..3] of double

- inhalte Listbox1 in Zahlen konvertieren und in array[x,1] kopieren
- inhalte Listbox2 dito array[x,2]
- dann wie beschrieben


Man kann natürlich auch direkt auf den Listboxen arbeiten (sie haben schließlich Indizes, und mehr brauchen wir nicht), dann muss aber jedesmal konvertiert werden (Zeichenkette nach Zahl usw.). Außerdem kann man mit dem beschrieben Verfahren durch Wiederholung der Schritte 2 und 3 weitere statistische Fragestellungen beantworten (Durchschnitt o.ä.).

Arrays sind recht gut in der Sprachreferenz Object Pascal (liegt bei D6 Enterprise bei) beschrieben.

Gruß und viel Spass
Billa :freak:

Matze 4. Sep 2003 07:33

Re: Wo höchstes Wachstum, wo geringstes?
 
Aber das gibt mir ja nur die Änderung zum Vorjahr, ich möchte aber die ganze Zeitspanne haben. :?

Weißt du auch, wie ich so etwas realisiere? Aber danke schonmal.

Billa 4. Sep 2003 07:37

Re: Wo höchstes Wachstum, wo geringstes?
 
Mein Beispiel erstellt natürlich zuerst die Änderungen zum Vorjahr, denn aus diesen Werten sollst Du ja wohl ein Maximum bzw ein Minimum suchen!?

X ist nicht der Index für ein beliebiges Jahr, sondern eine Schleifenvariable! Damit wird der gesamte Zeitraum zwischen L und H durchsucht. Ich denke, das ist genau was Du suchst.

Matze 4. Sep 2003 07:40

Re: Wo höchstes Wachstum, wo geringstes?
 
Gut, die Änderungen hab ich jetzt. *freu*

Und wie mache ich das, dass ich ein solches Ergebnis bekomme?:

größter Populationszuwachs: von 1988-1990
größte Populationsabnahme: von 1982-1987

Matze 4. Sep 2003 07:48

Re: Wo höchstes Wachstum, wo geringstes?
 
Kann ich bei

Delphi-Quellcode:
Array[0..11,1..3] of double;
auch eines anstatt Double mit Date versehen?

Dass ich in diesem array das Datum, die Population und die Änderung speichern kann?

Billa 4. Sep 2003 07:52

Re: Wo höchstes Wachstum, wo geringstes?
 
1. Fall L = 8, H = 10

Schleife 3 durchlaufen lassen, Max ist dann Deine Antwort (zahlenmäßig grösstes Wachstum)

2. Fall L = 2, H = 6

Schleife 3 nochmal, Min ist die gesuchte Zahl

P.S. wenn Du statt dem Wachstum lieber das JAHR des größten Wachstums bzw der größten Abnahme wissen willst, musst Du die Schleife 3 erweitern

for x := L to H do
begin
if max < Tabelle[x,3] then begin
max := Tabelle[x,3]
merker1 := x
end
if min > Tabelle[x,3] then begin
merker2 := x
min := Tabelle[x,3]
end
end

Das JAHR des größten Wachstums ist dann Tabelle[merker1,1]
Das JAHR der größten Abnahme ist dann Tabelle[merker1,1]

Falls Du noch Probleme hast, poste einfach Deinen Source.

Matze 4. Sep 2003 07:53

Re: Wo höchstes Wachstum, wo geringstes?
 
Danke, ich teste das jetzt mal. :thumb:

Matze 4. Sep 2003 07:59

Re: Wo höchstes Wachstum, wo geringstes?
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var x: integer;
begin
  tabelle[0,3] := 0;
  for x := 1 to 11 do
  Tabelle[x,3] := Tabelle[x,2] - Tabelle[x-1,2];

min := 9999999;
max := 0;

//L = gewünschte Umtergrenze
//H = gewünschte Obergrenze

//L und H suchen (auch trivial)

for x := 0 to 11 do
begin
if Tabelle[x,1] = (gesuchte Untergrenze) then L := x
if Tabelle[x,1] = (gesuchte Obergrenze) then H := x
end

for x := L to H do
begin
if max < Tabelle[x,3] then max := Tabelle[x,3]
if min > Tabelle[x,3] then min := Tabelle[x,3]
end

end;
Das setzt doch voraus, dass ich eine Untergrenze und eine Obergrenze habe (gesuchte Untergrenze/Obergrenze). Aber die möchte ich doch ausrechnen.
Je länger ich da rumprobiere, desto weniger kappier ich davon. :(

Billa 4. Sep 2003 08:00

Re: Wo höchstes Wachstum, wo geringstes?
 
>Kann ich bei
>Source:
>Array[0..11,1..3] of double;
>auch eines anstatt Double mit Date versehen?
>Dass ich in diesem array das Datum, die Population und die Änderung >speichern kann?

Nee das geht so nicht so einfach. Aber: rechne das Datum in eine Tageszahl um und am Schluss wieder zurück!

Alternativ kannst Du statt Array [0..11,1..3] auch folgende Struktur
benutzen:

Tabelle = array[0..1] of record
Datum: TDatetime;
Anzahl : double;
Delta : Double
end;

...dann ist der Zugriff etwas anders. Statt Tabelle[X,3] schreibt man
Tabelle[x].Delta, statt Tabelle[X,1] schreibt man Tabelle[x].Datum.
Ein array of record statt eines zweidimensionalken Arrays. Ich persönlich finde die arrays sehr viel angenehmer, besser lesbar ist allerdings die record-Variante, da aus den bezeichnern gleich der Zweck hervorgeht. Außerdem ist es (mein) schlechter Stil, Schleifenvariablen nur "x" zu nennen, besser sind Bezeichner wie "nIndex" oder "Run".
"L" steht bei mir immer für "Low" (Untergrenze) und "H" für "High" (Obergrenze). Das ist bestimmt lesbarer!

Gruß

Matze 4. Sep 2003 08:02

Re: Wo höchstes Wachstum, wo geringstes?
 
Ich habe es jetzt so umgestellt, dass ich in die ListBox2 die Veränderung von anfang an reinschreibe, dann müsste es doch einfacher sein, oder? :gruebel:

Billa 4. Sep 2003 08:14

Re: Wo höchstes Wachstum, wo geringstes?
 
Si, bene...
Dann hast ist die Suche sicher schneller, aber Durchschnitte u.a. Fragen sind dann nicht mehr so gut zu beantworten!

Matze 4. Sep 2003 08:16

Re: Wo höchstes Wachstum, wo geringstes?
 
Einen Durchschnitt baruche ich ja gar nicht. Ich möchte nacher einfach so etwas hier haben:

größter Populationszuwachs: von 1988-1990
größte Populationsabnahme: von 1982-1987

Ich verzweifel hier. :wall:
Ich bin jetzt so durcheinander, dass ich überhaupt nicht mehr weiß, was wohin muss.

Matze 4. Sep 2003 08:30

Re: Wo höchstes Wachstum, wo geringstes?
 
Nicht mal das hier schaffe ich: :cry:

Delphi-Quellcode:
  Tabelle : array of record
    Datum: TDate;
    Anzahl : double;
    Delta : Double

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i:=0 to ListBox1.Count-1 do
  begin
    Tabelle[i].Datum:=StrToDate(ListBox1.Items[i]); //Datum
    Tabelle[i].Anzahl:=StrToFloat(ListBox2.Items[i]); //Population
  end;
end;

Billa 4. Sep 2003 09:05

Re: Wo höchstes Wachstum, wo geringstes?
 
PN ist unterwegs...

Billa 4. Sep 2003 09:11

Re: Wo höchstes Wachstum, wo geringstes?
 
PN angekommen?

Ganz gut für numerische Algorithmen und Statistik:

http://www.efg2.com/Lab/Library/Delphi/

Matze 4. Sep 2003 09:12

Re: Wo höchstes Wachstum, wo geringstes?
 
Danke, aber eine PN ist nicht angekommen.

Billa 4. Sep 2003 09:18

Re: Wo höchstes Wachstum, wo geringstes?
 
.. :mrgreen: .aber jetzt, oder?

Matze 4. Sep 2003 09:21

Re: Wo höchstes Wachstum, wo geringstes?
 
Jetzt ist sie angekommen. Vielen, vielen Dank. Ich probiere das gleich mal aus. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz