Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Warum kann delphi net rechnen ? Unerklärliches Problem (https://www.delphipraxis.net/156487-warum-kann-delphi-net-rechnen-unerklaerliches-problem.html)

Fredchenhh 3. Dez 2010 16:30

Warum kann delphi net rechnen ? Unerklärliches Problem
 
Hey leute ,
hab folgendes Programmiert :
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;
    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.
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

DeddyH 3. Dez 2010 16:43

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Klammern vergessen?
Delphi-Quellcode:
RateZahl:=RateZahl+Round((RateZahlMax-RateZahlMin)/2);
Übrigens: wieso verwendest Du Fließkommaoperationen bei ganzen Zahlen?

[edit] Sry, Willkommen in der DP :dp: [/edit]

Fredchenhh 3. Dez 2010 17:04

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Oh mist stimmt ja Punkt vor Strich rechnung. Was ist eine Fließkommaoperation?

mkinzler 3. Dez 2010 17:07

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Zahlen mit Nachkommastellen.

himitsu 3. Dez 2010 17:24

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Integeroperationen sind schneller und optimaler, wenn man eh bei den Integern bleibt.

Delphi-Quellcode:
RateZahl := RateZahl + Trunc((RateZahlMax - RateZahlMin) / 2);

RateZahl := RateZahl + (RateZahlMax - RateZahlMin) div 2;
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.
Delphi-Quellcode:
RateZahl := RateZahl + Round((RateZahlMax - RateZahlMin) / 2);

RateZahl := RateZahl + (RateZahlMax - RateZahlMin + 1) div 2;

Fredchenhh 4. Dez 2010 08:01

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Und was ändert das?

mkinzler 4. Dez 2010 08:09

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

DeddyH 4. Dez 2010 08:10

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Stand doch da:
Zitat:

Zitat von himitsu (Beitrag 1065965)
Integeroperationen sind schneller und optimaler, wenn man eh bei den Integern bleibt.


divBy0 4. Dez 2010 09:45

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
---

Sir Rufo 4. Dez 2010 09:47

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Das wurde doch schon hinreichend geklärt ... und der TE hatte es auch schon verstanden ...

divBy0 4. Dez 2010 09:49

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
ok.

Fredchenhh 4. Dez 2010 09:52

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.

Delphi-Laie 4. Dez 2010 10:10

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Zitat:

Zitat von Fredchenhh (Beitrag 1065952)
Warum kann delphi net rechnen ?

Das ist das Problem, wenn man sich nicht der Hochsprache bedient, sondern hier unbedingt seinen Dialekt reindrücken muß: Ich verstand das Thema zunächst falsch und nahm an, daß gemeint sei, daß die Net-Version des Delphis rechnen könne.

Sir Rufo 4. Dez 2010 10:17

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Zitat:

Zitat von Fredchenhh (Beitrag 1066067)
@ 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 {...}

Es wäre zuckersüß von Dir, wenn du die Delphi-CodeTags verwenden würdest
Code:
procedure CodeTags;
  begin
    // doof zu lesen
  end;
Delphi-Quellcode:
procedure DelphiTags;
  begin
    // Viel besser zu lesen
  end;
Eine vernünftige Code-Einrückung verbessert die Lesbarkeit nochmals rapide

stahli 4. Dez 2010 12:22

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1066068)
Das ist das Problem, wenn man sich nicht der Hochsprache bedient, sondern hier unbedingt seinen Dialekt reindrücken muß: Ich verstand das Thema zunächst falsch und nahm an, daß gemeint sei, daß die Net-Version des Delphis rechnen könne.

Ging mir genau so...
Mit einer ordentlichen Fragestellung hat man deutlich bessere Chancen auf Hilfe.

Fredchenhh 4. Dez 2010 17:09

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

Fredchenhh 4. Dez 2010 17:21

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Bitte andere Lösung als das hier :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
RateZahl:=50;
RateZahlMin:=-1;
RateZahlMax:=101;
Edit1.Text:=IntToStr(RateZahl);
end;
Das ist etwas unschön

stahli 4. Dez 2010 17:33

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 :?)

Xzeer 6. Dez 2010 08:10

AW: Warum kann delphi net rechnen ? Unerklärliches Problem
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1066068)
Zitat:

Zitat von Fredchenhh (Beitrag 1065952)
Warum kann delphi net rechnen ?

Das ist das Problem, wenn man sich nicht der Hochsprache bedient, sondern hier unbedingt seinen Dialekt reindrücken muß: Ich verstand das Thema zunächst falsch und nahm an, daß gemeint sei, daß die Net-Version des Delphis rechnen könne.

...mhh dachte ich auch erst...:gruebel:

Blup 6. Dez 2010 08:52

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