Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Maximum aus einer StringGrid Spalte berechnen (https://www.delphipraxis.net/51315-maximum-aus-einer-stringgrid-spalte-berechnen.html)

Technikus 10. Aug 2005 10:44


Maximum aus einer StringGrid Spalte berechnen
 
Guten Morgen,

ich bin auf der Suche nach einem (oder eher mehreren )Fehler(n) für die Berechnung eines Maximums aus einem Stringgrid.
(Delphi 2005)
Delphi-Quellcode:
const c= 1000;
type
Tleistung= array[1..c] of double;

function Optimum(n:integer):double;
var
i:integer;
max:double;
leistung:Tleistung;
begin
 max:=0;
 for i:=1 to n do begin
  leistung:= StrToFloat(StringGrid1.Cells[3,i]);{Stringgrid1.Cells wird als nicht deklearierter Bezeichner festgestellt}
  if leistung[i] > max then max:= leistung[i];
 end;
 return max;{return und max wie beim StringGrid1.Cells}
end;
zweite Sache: wenn ich das "c" von const beliebig _also vom Nutzer des Programms- machen möchte muss ich das wie anstellen?
Danke
Technikus

Khabarakh 10. Aug 2005 11:03

Re: Maximum aus einer StringGrid Spalte berechnen
 
Zitat:

Zitat von Technikus
Delphi-Quellcode:
  leistung:= StrToFloat(StringGrid1.Cells[3,i]);

Hier sehe ich gleich mehrere Fehler: Erstens kannst du auf StringGrid1 nicht von einer lokalen/globalen Funktion zugreifen, dazu musst du "Optimum" als Methode deiner Form deklarieren:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  [...]
  private //bzw. public
     function Optimum(n:´Integer): Double;
  [...]
  end;

implementation

function TForm1.Optimum(n: Integer): Double;
Dann weist du einem Array einen Fließkommawert zu, das kann nicht gut gehen.
Entweder füllst du das Array so:
Delphi-Quellcode:
leistung[i] := StrToFloat(StringGrid1.Cells[3,i]);
oder, wenn du das Array gar nicht brauchst, sondern nur das Maximum, kannst du "leistung" gleich als Double deklarieren:
Delphi-Quellcode:
leistung: Double;
begin
max:=0;
for i:=1 to n do begin
  leistung := StrToFloat(StringGrid1.Cells[3,i]);
  if leistung > max then max:= leistung;
end;
Zitat:

Delphi-Quellcode:
return max;

Falsche Sprache :wink: :
Delphi-Quellcode:
Result := max;

Technikus 10. Aug 2005 11:33

Re: Maximum aus einer StringGrid Spalte berechnen
 
Hallo K.,
ich habe unter private
die Eintragung
Delphi-Quellcode:
function Optimum(n:Integer): Double;
gemacht.

Dann habe ich den code wie folgt geändert:
Delphi-Quellcode:
const c= 1000;
type
Tleistung= array[1..c] of double;
{Was ich hier ändern soll, habe ich aus deinem Text nicht verstanden}

function TForm1.Optimum(n: integer): double;

var
i:integer;
max:double;
leistung:Tleistung;
begin
 max:=0;
 for i:=1 to n do begin
  leistung:= StrToFloat(StringGrid1.Cells[3,i]);
{Fehlermeldung: E2010 Inkompatible Typen: 'Tleistung' und 'Extended'}
  if leistung[i] > max then max:= leistung[i];
 end;
 Result:= max;
end;

procedure TForm1.Button7_opt_APClick(Sender: TObject);
var
n:integer;
begin
Optimum(n: integer): double;{fkt.nicht, was ist daran so falsch?}
end;
danke für die Hilfe
Gruß
Technikus

leddl 10. Aug 2005 11:41

Re: Maximum aus einer StringGrid Spalte berechnen
 
:gruebel: Hast du auch Khabarakhs gesammten Post gelesen? Er hat dir das doch eigentlich schon fast hingeschrieben, was du machen mußt. Zumindest der erste Fehler hätte sich durch genaues Lesen vermeiden lassen können. Du kannst einem Array of Double nicht einen Double-Wert zuweisen. Dafür müßtest du schon ein Element deines Arrays benutzen.
Und der zweite Fehler - sorry - spricht wirklich Bände. Evtl. solltest du nochmal diverse Anfängertutorials lesen.
Zitat:

fkt.nicht, was ist daran so falsch?
ALLES! ;) Diese Zeile ist nämlich komplett falsch. Warum schreibst du dort den Funktionskopf hin? Du willst die Funktion doch schließlich aufrufen, oder? Also mußt du das auch machen.
Delphi-Quellcode:
MaxWert := Optimum(500);


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.

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