| Autor |
Beitrag |
DaVinciFF7
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: Do 29.01.09 19:48
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:
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. |
_________________ Ich würde ja gerne die Welt verändern... Aber Gott will mir den verdammten Sourcecode nicht geben!
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: 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
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
DaVinciFF7 
      
Beiträge: 32
Win XP
Delphi 2007
|
Verfasst: 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
_________________ Ich würde ja gerne die Welt verändern... Aber Gott will mir den verdammten Sourcecode nicht geben!
|
|
Webo
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: 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.
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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? 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|