Registriert seit: 11. Aug 2003
237 Beiträge
Delphi 10.2 Tokyo Professional
|
Re: Maximalen Zuwachs bekommen
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....
|