![]() |
Warum kann delphi net rechnen ? Unerklärliches Problem
Hey leute ,
hab folgendes Programmiert :
Delphi-Quellcode:
Mir geht es darum das ich die Zahl erraten kann an die jemand denkt. Das Problem ist wenn ich auf den Größer Button klicke kommt 125 bei raus aber wenn ich es nachrechne MÜSSEN es 75 sein. Was ist da falsch?LG
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) BTGroesser: TButton; BTKleiner: TButton; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure FormCreate(Sender: TObject); procedure BTGroesserClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; RateZahl:Integer; RateZahlMin:Integer; RateZahlMax:Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin RateZahl:=50; RateZahlMin:=0; RateZahlMax:=100; Edit1.Text:=IntToStr(RateZahl); Edit2.Text:=IntToStr(RateZahlMax); Edit3.Text:=IntToStr(RateZahlMin); end; procedure TForm1.BTGroesserClick(Sender: TObject); begin RateZahlMin:=RateZahl; RateZahl:=RateZahl+Round(RateZahlMax-RateZahlMin/2); Edit1.Text:=IntToStr(RateZahl); Edit2.Text:=IntToStr(RateZahlMax); Edit3.Text:=IntToStr(RateZahlMin); end; end. |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Klammern vergessen?
Delphi-Quellcode:
Übrigens: wieso verwendest Du Fließkommaoperationen bei ganzen Zahlen?
RateZahl:=RateZahl+Round((RateZahlMax-RateZahlMin)/2);
[edit] Sry, Willkommen in der DP :dp: [/edit] |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Oh mist stimmt ja Punkt vor Strich rechnung. Was ist eine Fließkommaoperation?
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Zahlen mit Nachkommastellen.
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Integeroperationen sind schneller und optimaler, wenn man eh bei den Integern bleibt.
Delphi-Quellcode:
Wenn (RateZahlMax - RateZahlMin) positiv ist und es gerundet werden soll, dann muß man einfach nur noch die Hälfte des Teilers dazurechnen, vor dem Teilen.
RateZahl := RateZahl + Trunc((RateZahlMax - RateZahlMin) / 2);
RateZahl := RateZahl + (RateZahlMax - RateZahlMin) div 2;
Delphi-Quellcode:
RateZahl := RateZahl + Round((RateZahlMax - RateZahlMin) / 2);
RateZahl := RateZahl + (RateZahlMax - RateZahlMin + 1) div 2; |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Und was ändert das?
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Im 1. Fall entsgehen gebrochene Zahlen als Zwischenergebnis, doieses muss wieder zu einer Ganzzahl gewandelt werden, was u.U. zu einem anderen Ergebnis führen kann
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Stand doch da:
Zitat:
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
---
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Das wurde doch schon hinreichend geklärt ... und der TE hatte es auch schon verstanden ...
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
ok.
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
@ mkinzler:Bekomm ich damit auch das Problem gelöst das er 0 und 100 nicht erraten kann?
@divby0: Warum ist der Rechenweg falsch ? So siehts Fertig aus
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) BTGroesser: TButton; BTKleiner: TButton; Label1: TLabel; Edit1: TEdit; BTNochmal: TButton; procedure FormCreate(Sender: TObject); procedure BTGroesserClick(Sender: TObject); procedure BTKleinerClick(Sender: TObject); procedure BTNochmalClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; RateZahl:Integer; RateZahlMin:Integer; RateZahlMax:Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin RateZahl:=50; RateZahlMin:=0; RateZahlMax:=100; Edit1.Text:=IntToStr(RateZahl); end; procedure TForm1.BTGroesserClick(Sender: TObject); begin RateZahlMin:=RateZahl; RateZahl:=RateZahl+Round((RateZahlMax-RateZahlMin)/2); Edit1.Text:=IntToStr(RateZahl); end; procedure TForm1.BTKleinerClick(Sender: TObject); begin RateZahlMax:=RateZahl; RateZahl:=RateZahl+Round((RateZahlMin-RateZahlMax)/2); Edit1.Text:=IntToStr(RateZahl); end; procedure TForm1.BTNochmalClick(Sender: TObject); begin RateZahl:=50; RateZahlMax:=100; RateZahlMin:=0; Edit1.Text:=IntToStr(RateZahl); end; end. |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Zitat:
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Zitat:
Code:
procedure CodeTags;
begin // doof zu lesen end;
Delphi-Quellcode:
Eine vernünftige Code-Einrückung verbessert die Lesbarkeit nochmals rapide
procedure DelphiTags;
begin // Viel besser zu lesen end; |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Zitat:
Mit einer ordentlichen Fragestellung hat man deutlich bessere Chancen auf Hilfe. |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Oh mist das tut mir Leid. Wusste NICHT das es eine Delphi Net version gibt. Werde demnächst darauf achten. Das mit dem Delphi-Code wusste ich nicht hab einfach aus gewohnheit "Code" genommen. Wisst ihr wie ich es mache das ich auch 0 und 100 erraten kann?
LG |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Bitte andere Lösung als das hier :
Delphi-Quellcode:
Das ist etwas unschön
procedure TForm1.FormCreate(Sender: TObject);
begin RateZahl:=50; RateZahlMin:=-1; RateZahlMax:=101; Edit1.Text:=IntToStr(RateZahl); end; |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Ich kann nicht ganz folgen, was Du genau willst...
-1 und 101 als exclusive Grenzwerte zu definieren, ist nicht unbedingt eine schlechte Lösung. Sonst musst Du Deine Funktion apassen, die den Wert ermittelt. (Aber tröste Dich, mich hat einem anderen Beitrag auch gerade niemand verstanden :?) |
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Zitat:
|
AW: Warum kann delphi net rechnen ? Unerklärliches Problem
Was bitte soll den dieses " /2 " überhaupt bewirken, scheint mir zumindest unsinnig?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) BTGroesser: TButton; BTKleiner: TButton; Label1: TLabel; Edit1: TEdit; BTNochmal: TButton; procedure FormCreate(Sender: TObject); procedure BTGroesserClick(Sender: TObject); procedure BTKleinerClick(Sender: TObject); procedure BTNochmalClick(Sender: TObject); private { Private-Deklarationen } FRateZahl: Integer; FRateZahlMin: Integer; FRateZahlMax: Integer; procedure SetRateZahl(AValue: Integer); procedure Rate; procedure Start; public { Public-Deklarationen } property RateZahl: Integer read FRateZahl write SetRateZahl; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Rate; begin RateZahl:= FRateZahlMin + Round(FRateZahlMax - FRateZahlMin + 1); end; procedure TForm1.SetRateZahl(AValue: Integer); begin FRateZahl := AValue; Edit1.Text := IntToStr(AValue); end; procedure TForm1.Start; begin FRateZahlMin := 0; FRateZahlMax := 100; RateZahl := 50; end; procedure TForm1.FormCreate(Sender: TObject); begin Start; end; procedure TForm1.BTGroesserClick(Sender: TObject); begin if RateZahl < FRateZahlMax then begin FRateZahlMin := RateZahl + 1; Rate; end; end; procedure TForm1.BTKleinerClick(Sender: TObject); begin if RateZahl > FRateZahlMin then begin FRateZahlMax := RateZahl - 1; Rate; end; end; procedure TForm1.BTNochmalClick(Sender: TObject); begin Start; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz