Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Mittelwertberechnung (https://www.delphipraxis.net/177388-mittelwertberechnung.html)

justMatzi 4. Nov 2013 15:31

Delphi-Version: 7

Mittelwertberechnung
 
Hallo zusammen,
ich habe folgendes Problem:
Ich habe ein Programm in dem ich einen Mittelwert aus Zeiten berechnen muss. Allerdings treten dabei folgende Probleme auf: Ich kann das Programm nicht compilieren, wenn ich nicht vorher eine Fließkommazahl runde. Wenn ich das aber mache, kommt bei der entscheidenden Division der Fehler, dass ich eine ungültige Fließkommaoperation ausführen möchte.
Meine Frage ist, wo ist der Fehler und wie behebe ich ihn?

Ich weiß nicht, welche Teile des Quellcodes ihr hier braucht, deshalb *LINK entfernt* die ganze Unit. Ich hoffe das ist kein Problem, habe erst vor kurzem mit Delphi angefangen.

Grüße
Matzi

MrSpock 4. Nov 2013 15:45

AW: Mittelwertberechnung
 
Hallo Matzi,

kopiere bitte den Teil des Quellcodes direkt hier in den Beitrag.

Sir Rufo 4. Nov 2013 15:57

AW: Mittelwertberechnung
 
Zitat:

Zitat von justMatzi (Beitrag 1234466)
Ich kann das Programm nicht compilieren, wenn ich nicht vorher eine Fließkommazahl runde.

Kannst du das bitte auch noch mal erläutern?
Beim compilieren werden keine Berechnungen vom Quelltext durchgeführt!

justMatzi 4. Nov 2013 16:04

AW: Mittelwertberechnung
 
Okay, hier sind die hoffentlich richtigen Teile:

Variablen:

Delphi-Quellcode:
var
  Form1: TForm1;
  Start: longint;
  Stop: longint;
  Treffer: int;
  Summe: real;
  Durchschnitt: longint;

Variablen auf 0 setzen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 randomize;
 Summe:=0;
 Treffer:=0;
end;
Verändern der Variablen:
Delphi-Quellcode:
procedure TForm1.Sh_SchwerMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Form1.Caption:=inttostr(strtoint(Form1.Caption)+1);
 Stop:=gettickcount();
 Lb_Zeit.Items.Add(inttostr(Stop-Start));
 Sh_Schwer.Visible:=false;
 Treffer:=Treffer+1;
 Summe:=Summe+(Stop-Start);
end;
Division und Ausgabe auf dem Label L_Durchschnitt

Delphi-Quellcode:
 Durchschnitt:=Summe/Treffer;
 L_Mittelwert.Caption:=floattostr(Durchschnitt);
Ich denke das ist alles.


Zum compiler:

Ich bekomme die Fehlermeldung:
[Fehler] SpielUnit1.pas(168): Inkompatible Typen: 'Integer' und 'Extended'

Gruß
Matzi

Medium 4. Nov 2013 16:12

AW: Mittelwertberechnung
 
"Durchschnitt" ist vom Typ LongInt (ein Ganzzahltyp - Integer), das Ergebnis einer Division mit "/" liefert in Delphi jedoch immer einen Extended (bzw. Double), also einen Fließkommatypen - egal ob die Division ohne Rest ginge oder nicht sogar.

BUG 4. Nov 2013 16:13

AW: Mittelwertberechnung
 
Ist dir aufgefallen, das Durchschnitt eine Ganzzahl ist? Eine Gleitkommazahl wäre wohl besser.

Außerdem: Benutze die Delphi-Tags!
Code:
[DELPHI]
// ein Beispiel
procedure beispiel(i: integer);
[/DELPHI]
ergibt:
Delphi-Quellcode:
// ein Beispiel
procedure beispiel(i: integer);
Das solltest du auch bei deinem letzten Beitrag machen. Danke, mkinzler :mrgreen:

justMatzi 4. Nov 2013 16:22

AW: Mittelwertberechnung
 
Okay, das habe ich geändert, danke.

Allerdings steht als dieser Mittelwert jetzt immer 0 und nicht das Ergebnis der Division. Ist da noch ein Fehler?

Gruß
Matzi

Habe den Fehler gefunden und behoben. Trotzdem danke für die schnelle Hilfe :)


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