Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   fehlerhaftes Unterprogramm zur Maximumberechnung? (https://www.delphipraxis.net/51577-fehlerhaftes-unterprogramm-zur-maximumberechnung.html)

Technikus 15. Aug 2005 13:30


fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Hallo zusammen,
ich bin Anfänger im Delphiprogrammieren und weiß an dieser Stelle nicht mehr weiter.
Vielleicht kann mir jemand helfen (Delphi2005). In der folgenden Funktion
soll ein Maximum berechnet werden, wobei die Werte aus einer StringGrid -Spalte geholt werden sollen. Der Aufruf soll durch ein Unterprogramm erfolgen. In der vorletzten Zeile erscheint der Fehler, dass IntToStr mit (maxwert) nichts anfangen kann.
Ich finde den Fehler nicht, vielleicht kann jemand von euch helfen.

Außerdem suche ich ein Buch, indem für Delphi 2005 Object Pascal beschrieben wird, welches auch für Anfänger zum Selbststudium geeignet ist.

Delphi-Quellcode:
function TForm1.Optimum(n: integer): double;
var
i:integer;
max, leistung:double;
begin
   n:= StrToInt(Edit3_Eingabe_anzahl.Text);
   max:=0;
   with StringGrid1 do
 for i:=1 to n do begin
  leistung:= StrToFloat(StringGrid1.Cells[3,i]);
  if leistung > max then max:= leistung;
 end;
 Result:= max;
end;

procedure TForm1.Button7_opt_APClick(Sender: TObject);
var
 maxwert:double;
 n:integer;
begin
 maxwert:= Optimum(n);
 Edit2_Optimum.Text:= IntToStr(maxwert);
end;
Danke im vorraus
Technikus

leddl 15. Aug 2005 13:35

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Schau dir doch mal ganz genau die Fehlermeldung an. Du hast sie jetzt nicht explizit gepostet, es dürfte aber so etwas sein wie "Inkompatible Typen - Integer und Double", oder? Daraus könnte man folgern, daß maxwert wohl den falschen Typ hat. Delphi-Referenz durchsuchenIntToStr benötigt nämlich einen Integer (wie der Name ja schon sagt: Integer To String), maxwert hast du aber als Double deklariert. Das passt nicht zusammen. Benutze daher Delphi-Referenz durchsuchenFloatToStr, wenn du einen Double in einen String umwandeln willst.

//Edit1: Tippfehler
//Edit2: Suchtags

DP-Maintenance 15. Aug 2005 13:38

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Tools rund um Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
Irgendwie falsche Sparte.

Technikus 15. Aug 2005 13:50

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Hallo Leddl,
ich habe es geändert und es funkioniert prima.
Ich danke dir von ganzem Herzen.
Nun habe ich gleich noch ein weiters Problem- und das ist nicht das letzte:

Ich wollte gern die Daten in einer Datei speichern und wieder die Datei wieder einlesbar machen. Nun habe ich folgendes programmiert:
Delphi-Quellcode:
procedure TForm1.Button1_SpeichernClick(Sender: TObject);
type
Tleistung = record
             nr:byte;
             Spannung, Strom, Leistung: double;
            end;

type TDatei= file of TLeistung;

var Messwert: TLeistung;
    i, anzahl: integer;
    Datei: TDatei;

begin
 anzahl:=StrToInt(Edit3_Eingabe_anzahl.Text);
 AssignFile(Datei,'solarz.dat');
 Rewrite(Datei);
 for i:= 1 to anzahl do
  with Messwert do
   begin
    nr:= i;
    Spannung:= StrToFloat(StringGrid1.Cells[1,i]);
    Strom:= StrToFloat (StringGrid1.Cells [2,i]);
    Leistung:=StrToFloat (StringGrid1.Cells [3,i]);
    Write (Datei,Messwert);
    end;
  CloseFile (Datei);
end;
Da erscheint bei "file of Tleistung" die Fehlermeldung:
E1025 Sprach-Feature wird nicht unterstützt: 'typisierte oder untypisierte Datei'

woran liegts hierbei?


Gruß Technikus

Luckie 15. Aug 2005 13:51

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Zitat:

Zitat von Technikus
Nun habe ich gleich noch ein weiters Problem- und das ist nicht das letzte:

Bitte halte dich an die Forenregeln und erstelle für ein neues Thema einen neuen Thread, sonst geht hier alles drunter und drüber. Danke.

Jelly 15. Aug 2005 13:53

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Leddl hat bereits eine Behebung des Fehlers gegeben. Was mich noch interessiert, wieso überhaupt in der Optimum Methode ein Parameter n übergeben wird, wenn du intern in der Methode n aus deinem StringGrid ermittelst. :gruebel:

marabu 15. Aug 2005 13:56

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Hallo Technikus,

in deinem Code sind einige Fehler verschiedener Natur. Dieser Code hier funktioniert. Viel Spaß beim Studium.

Delphi-Quellcode:
function TCalcForm.MaxValue(sg: TStringGrid; iCol: integer): double;
var
  i, iRow, iRowCount: integer;
  d: double;
begin
  with sg do begin
    iRowCount := RowCount - FixedRows;
    Result := 0;
    for i := 0 to Pred(iRowCount) do begin
      d := StrToFloat(Cells[iCol, FixedRows + i]);
      if d > Result then
        Result := d;
    end;
  end;
end;

procedure TCalcForm.MaxButtonClick(Sender: TObject);
begin
  ShowMessage(Format('Maximum ist %.0n', [MaxValue(Grid, 3)]));
end;
Grüße vom marabu

Technikus 15. Aug 2005 14:15

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Hallo Tom,
wie sollte das "n" deiner Meinung nach verändert werden?

Gruß Technikus

leddl 15. Aug 2005 14:17

Re: fehlerhaftes Unterprogramm zur Maximumberechnung?
 
Na du brauchst den Parameter gar nicht. Einfach das n in der Funktion deklarieren, dann kannst dus dir beim Aufruf sparen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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