Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Integer und Extented
DaVinciFF7 - Do 29.01.09 19:48
Titel: Integer und Extented
Moin und so.
Ich bin momentan am Programmieren eines Programmes, mit dem man schauen kann, wieviele Anschläge man pro Minute auf der Tastatur schafft. Dafür muss ich ja irgendwie die Zeit durch die Anschläge teilen und ausgeben, doch er will irgendwie nicht und gibt mir nur die Fehlermeldung "Incompatible Types "Integer" and "Extented".
Hier auch mal der Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Eingabe: TMemo; Vorgabe: TMemo; Start: TButton; Timer1: TTimer; Testlaenge: TEdit; Label1: TLabel; Label2: TLabel; Ergebnis: TLabel; procedure Timer1Timer(Sender: TObject); procedure StartClick(Sender: TObject); procedure Keypress(Sender: TObject; var Key: Char); procedure Change(Sender: TObject); private public end;
var Laenge: integer; Anschlaege: integer; Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin Eingabe.Enabled:=false; i:=(laenge/60)/anschlaege; Ergebnis.Caption:='Anschläge pro Minute:'+inttostr(i);
end;
procedure TForm1.StartClick(Sender: TObject); begin Eingabe.Enabled:=true; timer1.Interval:=strtoint(testlaenge.text)*1000; timer1.Enabled:=true; end;
procedure TForm1.Keypress(Sender: TObject; var Key: Char); begin inc(anschlaege); end;
procedure TForm1.Change(Sender: TObject); begin Laenge:=Strtoint(Testlaenge.Text); end;
end. |
MSCH - Do 29.01.09 19:50
i:=(laenge/60)/anschlaege;
imho ist I=integer aber "/" liefert immer float. Verwende dann "div" oder setze I auf "Double".
Dann sollte es funktionieren.
:-)msch
DaVinciFF7 - Do 29.01.09 19:59
Funktioniert jetz zumindest annähernd ^^ Er gibt immer aus, dass ich 0 Anschläge schaffe, aber das krieg ich schon gelöst :)
Dankeschön
Webo - Do 29.01.09 21:55
Wenn du div verwendest, dann bedenke dass :
div ist eine ganzzahlige Divison. Das heißt, dass 1 div 5 = 0 ist, da es normal 0,2 währen, er aber nur die 0 zurück gibt.
Das führt oft zu Fehlern.
jaenicke - Do 29.01.09 22:07
Ich verstehe die Logik hinter der Berechnung auch nicht wirklich. Was hat das Intervall des Timers damit zu tun? Dieses sollte doch fest sein, warum soll z.B. der Abstand zwischen der Anzeigeaktualisierung von der Länge des Textes abhängen? :shock:
BenBE - Do 29.01.09 22:09
Bei Divisionen gilt immer: Multiplikationen VOR Divisionen ausführen, da du sonst Genauigkeit verlierst.
Delphi-Quelltext
1:
| I := (Anschläge * 60) div Zeit; |
Wobei die Zeit in Sekunden anzugeben wäre. Wenn Du mit Gleitkommazahlen rbeitest, könnten für Dich auch die Funktionen Floor, Ceil, Trunc und Round interessant sein. Mehr dazu verrät die Hilfe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!