AGB  ·  Datenschutz  ·  Impressum  







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

Maximum aus einer StringGrid Spalte berechnen

Ein Thema von Technikus · begonnen am 10. Aug 2005 · letzter Beitrag vom 10. Aug 2005
Antwort Antwort
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#1

Maximum aus einer StringGrid Spalte berechnen

  Alt 10. Aug 2005, 09:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Maximum aus einer StringGrid Spalte berechnen

  Alt 10. Aug 2005, 10:03
Zitat von Technikus:
  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:
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:
return max;
Falsche Sprache :
Result := max;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#3

Re: Maximum aus einer StringGrid Spalte berechnen

  Alt 10. Aug 2005, 10:33
Hallo K.,
ich habe unter private
die Eintragung
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
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Maximum aus einer StringGrid Spalte berechnen

  Alt 10. Aug 2005, 10:41
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.
MaxWert := Optimum(500);
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  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 09:17 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