AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maximalen Zuwachs bekommen

Ein Thema von Matze · begonnen am 4. Sep 2003 · letzter Beitrag vom 4. Sep 2003
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 12:36
Hi!!

Ich habe 2 ListBoxen, in einer sind datumsangaben und in einer anderen dazugehörige Werte.

Jetzt möchte ich den größten Zuwachs haben. Also:
ich möchte zuerst den 1. Wert speichern, dann ale folgenden prüfen, und den größten davon dem 1. wert zuordnen.
Dann nimmt man den 2. Wert und sucht den darauf folgenden größsten, usw..

Jeweils vom größten Wert wird der Wert abgezogen, von dem man begonnen hat, so erhält man den Zuwachs.

Dann möchte ich den maximalen Zuwachs haben in der Form:

von Datumsangabe, Wert bis Datumsangabe, Wert

Kann mir jemand dabei helfen?
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:01
Also, da bin ich auch schon wieder. Jetzt weiß ich was Du willst:
nicht den höchsten Zuwachs, sondern die höchste Differenz zum Startwert. Das ist statistisch was anderes! Nimm wie in der PN beschrieben, den höchsten Wert (2. Spalte!) "Tabelle[nMerker,2]" und ziehe den Startwert "Tabelle[L,2]" ab. Thats it! Das Jahr ist dann Tabelle[nMerker,1].
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:09
Das ist es aber nicht, mal ein beispiel:
Die Werte:

5
9
4
8
2
8
6

@Billa ziehe ich den Startwert nun vom höchsten ab, dann hab ich:
9 - 5 = 4

Der größte Zuwachs ist aber 6:
8 - 2 = 6
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:23
Genau den Wert findet das erste Beispiel meiner PNs "Tabelle[nMerker,3]". Ich poste mal mein Beispiel, dann kann man ja weiter diskutieren....Vielleicht sehe ich es einfach nicht ?!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
const
  nTabMin = 0;
  nTabMax = 99; {...reicht für 100 Jahre...}

type
  Tab = array [nTabMin..nTabMax,1..3] of Integer;
  { ...der Einfachheit halber, es könnten auch andere Typen sein...}


type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Tabelle : Tab;
    procedure Tabelle_fuellen;
    procedure Gitter_fuellen;
    procedure Differenzen_bilden;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Tabelle_fuellen;
var
  nRun : integer;
begin
  for nRun := 0 to 11 do
    Tabelle [nRun,1] := 1980 + nRun;
  Tabelle[0,2] := 200;
  Tabelle[1,2] := 218;
  Tabelle[2,2] := 220;
  Tabelle[3,2] := 197;
  Tabelle[4,2] := 199;
  Tabelle[5,2] := 207;
  Tabelle[6,2] := 183;
  Tabelle[7,2] := 176;
  Tabelle[8,2] := 176;
  Tabelle[9,2] := 191;
  Tabelle[10,2] := 210;
  Tabelle[11,2] := 204;
end;

procedure TForm1.Gitter_fuellen;
var
  nCol,
  nRun : integer;
begin
  for nRun := 0 to 11 do
  for ncol := 1 to 3 do
  begin
    StringGrid1.Cells[nCol-1,nRun] := IntToStr( Tabelle[nRun,nCol] );
  end;
end;

procedure TForm1.Differenzen_bilden;
var
  nRun : integer;
begin
  Tabelle[0,3] := 0;
  for nRun := 1 to 11 do
    Tabelle[nRun,3] := Tabelle[nRun,2] - Tabelle[nRun-1,2];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Tabelle_fuellen;
  Differenzen_bilden;
  Gitter_fuellen;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  nMerker,
  nMax,
  nRun,
  L, H,
  LY, HY : Integer;
begin
  nMax := 0; // fiktives Maximum
  LY := StrToInt( edit1.Text ); // das Anfangsjahr
  HY := StrToInt( edit2.Text ); // das Endjahr
  for nRun := 0 to 11 do
  begin
    if Tabelle[nRun,1] = LY then L := nRun; // suche Index zum Jahr
    if Tabelle[nRun,1] = HY then H := nRun; // suche Index zum Jahr
  end;
  for nRun := L to H do // Zeitraum absuchen
  if Tabelle[nRun,3] > nMax then
  begin
    nMax := Tabelle[nRun,3]; // ggf. neues Maximum setzen
    nMerker := nRun;
  end;
  StringGrid1.Row := nMerker;
  StringGrid1.Col := 3;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  nMerker,
  nMin,
  nRun,
  L, H,
  LY, HY : Integer;
begin
  nMin := 99999; // fiktives Minimum
  LY := StrToInt( edit3.Text ); // das Anfangsjahr
  HY := StrToInt( edit4.Text ); // das Endjahr
  for nRun := 0 to 11 do
  begin
    if Tabelle[nRun,1] = LY then L := nRun; // suche Index zum Jahr
    if Tabelle[nRun,1] = HY then H := nRun; // suche Index zum Jahr
  end;
  for nRun := L to H do // Zeitraum absuchen
  if Tabelle[nRun,3] < nMin then
  begin
    nMin := Tabelle[nRun,3]; // ggf. neues Minimum setzen
    nMerker := nRun;
  end;
  StringGrid1.Row := nMerker;
  StringGrid1.Col := 3;
end;

end.
Hier noch das dfm

Delphi-Quellcode:
object Form1: TForm1
  Left = 227
  Top = 165
  Width = 696
  Height = 412
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 24
    Top = 256
    Width = 137
    Height = 25
    Caption = 'Differenzen'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 24
    Top = 296
    Width = 141
    Height = 25
    Caption = 'Suche größtes Wachstum'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Edit1: TEdit
    Left = 180
    Top = 300
    Width = 121
    Height = 21
    TabOrder = 2
    Text = '1988'
  end
  object Edit2: TEdit
    Left = 320
    Top = 300
    Width = 121
    Height = 21
    TabOrder = 3
    Text = '1990'
  end
  object Button3: TButton
    Left = 28
    Top = 336
    Width = 137
    Height = 25
    Caption = 'Suche größte Abnahme'
    TabOrder = 4
    OnClick = Button3Click
  end
  object Edit3: TEdit
    Left = 180
    Top = 336
    Width = 121
    Height = 21
    TabOrder = 5
    Text = '1982'
  end
  object Edit4: TEdit
    Left = 320
    Top = 336
    Width = 121
    Height = 21
    TabOrder = 6
    Text = '1987'
  end
  object StringGrid1: TStringGrid
    Left = 28
    Top = 20
    Width = 457
    Height = 201
    ColCount = 3
    DefaultRowHeight = 12
    FixedCols = 0
    RowCount = 100
    FixedRows = 0
    TabOrder = 7
  end
end
Anmerkungen:

1. Button1.Click (Differenzen) immer ausführen

2. das Stringgrid dient nur der Visualisierung: die Werte erhält man durch Referenzierung.

Bei Button2.Click
- Das Jahr des höchsten Zuwachses Tabelle[nMerker,1]
- den höchsten Zuwachs Tabelle[nMerker,3]
zwischen den Jahren edit1 und edit2

Bei Button3.Click

- Das Jahr der höchsten Abnahme Tabelle[nMerker,1]
- die höchste Abnahme Tabelle[nMerker,3]
zwischen den Jahren edit3 und edit4

3. Es kommen in dem Minibeispiel keine Bereichs und Gültigkeitsprüfungen vor. Aber das ist ja leicht nachzuholen

4. Die Eingabe der Daten und Datumsfelder kann verfeinert werden. Wie gesagt: ein Schnellschuss....

Gruß Billa
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:28
*Schwup*

Delphi-Quellcode:
function GroessterZuwachs (werte : Array of Integer) : Integer;
var
 ndx,
 zuwachs,
 maxzuwachs : Integer;
begin
 maxzuwachs := 0;
 for ndx := Low(werte) + 1 to High (werte) do
  begin
   zuwachs := werte [ndx] - werte [ndx-1];
   if (zuwachs > maxzuwachs) then
    begin
     maxzuwachs := zuwachs;
    end;
  end;
 result := maxzuwachs;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 tmp : Array [1..7] Of Integer;
begin
 tmp[1] := 5;
 tmp[2] := 9;
 tmp[3] := 4;
 tmp[4] := 8;
 tmp[5] := 2;
 tmp[6] := 8;
 tmp[7] := 6;
 Label1.Caption := IntToStr (GroessterZuwachs (tmp));
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:29
Danke euch beiden!
Das muss ich mir jetzt erst mal genauer anschauen.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:43
@Sharky: Genau das meine ich.
Jetzt ist es nur so, dass ich meine Tabelle so hab:

Code:
12.04.2003: 5 
13.04.2003: 9
14.04.2003: 4
15.04.2003: 8
16.04.2003: 2
17.04.2003: 8
18.04.2003: 6
Jetzt müsste ich die Angabe so haben:
"Größter Zuwachs von 16.04.2003 - 17.04.2003"

D.h. Jedem Datum muss der dazugehörige Wert zugewiesen werden und nachher möchte ich das Datum ausgeben.
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Maximalen Zuwachs bekommen

  Alt 4. Sep 2003, 13:47
@Matze: Nix für ungut, aber das hier grenzt an Beschäftigungstherapie. Das war exakt der Inhalt unsérer PNs.

@Sharky: Ist eigentlöich das gleiche, sieht aber zugegebenermassen deutlich eleganter aus!
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 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