Einzelnen Beitrag anzeigen

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, 12: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