Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Rechner programmieren (https://www.delphipraxis.net/158666-rechner-programmieren.html)

Tytomik 25. Feb 2011 18:39

Rechner programmieren
 
Hallo,
ich habe neu angefangen mit Delphi zu prgrammieren.
Und war heute dabei einen Rechner zu programmieren.(Mit Zufallszahlen).
Mit *,/,-,+ es funktionirte alles so weit ich habe es mit den Real zahlen gemacht.
Aber dann wollte ich noch einen neuen button machen, dass wenn man drauf drückt eine geteilt Aufgabe mit Rest ausgerechnet wird, allerdings ging das nur mit Integer und jetzt geht entweder nur das teilen mit Real Zahlen oder das teilen mit Rest also Integer. Meine Frage ist wo ist hier der Fehler :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Label3: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var a,b,c: Integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
a:= random(1001);
b:= random(1001);
Label1.Caption :=inttostr
(a);
Label2.Caption :=inttostr
(b);
form1.color:= clgreen;
Label3.Caption:= '0';


end;


procedure TForm1.Button2Click(Sender: TObject);
begin
Label3.caption:= inttostr(a+b);
If Strtoint(Label3.Caption)>500 then begin
Form1.Color:= clred;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Label3.caption:= inttostr(a-b);
If Strtoint(Label3.Caption)>500 then begin
Form1.Color:= clred;
end;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Label3.caption:= inttostr(a*b);
If Strtoint(Label3.Caption)>500 then begin
Form1.Color:= clred;
end;
end;


procedure TForm1.Button6Click(Sender: TObject);
begin
Label3.caption:= inttostr(a div b);
Label4.caption:= inttostr(a mod b);
end;

procedure TForm1.Button5Click(Sender: TObject);
var a,b: real;
begin
Label3.caption:= floattostr(a-b);
If Strtofloat(Label3.Caption)>500 then begin
Form1.Color:= clred;

end;
end;
Freue mich bei positiver rückmeldung. Danke.

himitsu 25. Feb 2011 19:12

AW: Rechner programmieren
 
Nachdem du das Divisionsergebnis ausgerechnet hast, kannst du mit Delphi-Referenz durchsuchenFrac und Delphi-Referenz durchsuchenTrunc das Ergebnis in den ganzzahligen Anteil und den Rest (Nachkommaanteil) zerlegen.

> also entweder den Nachkommaanteil direkt als "Rest" nutzen
> vom Ergebnis den Nachkommaanteil abschneiden (Tunc), dann vom Dividend den ganzahligen Teil abziehen und übrig bleibt der Rest
> oder den Nachkommaanteil wieder mit dem Divisor multiplizieren und das ergibt dann den Rest.


DIV und MOD sind eben nur für ganzahlige Integertypen geeignet.
Fließkommazahlen kann man mit
Delphi-Quellcode:
/
teilen ... einen Rest gibt es da allerdings eigentlich nicht, da dort der "Rest" im Nachkommaanteil Platz hat.

PS: Es wäre hübsch, wenn du in deinem Beigrag noch das [delphi].Tag um den Quellcode legen könntest.
Einfach den ersten Beitrag editieren, den Quellcode markieren und den [delphi]-Button (der mit dem roten Delphihelm) drücken.

lbccaleb 25. Feb 2011 19:17

AW: Rechner programmieren
 
Und randomize sollte nur einmal im oncreate aufgerufen werden.nnnn

Tytomik 25. Feb 2011 19:22

AW: Rechner programmieren
 
also kann man nicht bei einem programm Integer und Real Zahlen benutzen.


LG

Wolfgang Mix 25. Feb 2011 19:28

AW: Rechner programmieren
 
Wie schon gesagt, kannst du mit trunc und frac aus Realzahlen Integerwerte herstellen.

Tytomik 25. Feb 2011 19:30

AW: Rechner programmieren
 
Tut mir echt leit das verstehe ich immer noch nicht ganz könnetet ihr mr den teil nicht mal richtig schrieben:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var a,b: real;
begin
Label3.caption:= floattostr(a-b);
If Strtofloat(Label3.Caption)>500 then begin
Form1.Color:= clred;
Habe gestern angefangen.
Wäre echt nett.
Danke

Wolfgang Mix 25. Feb 2011 19:49

AW: Rechner programmieren
 
Woher kommen die Werte von a und b?

Tytomik 25. Feb 2011 19:54

AW: Rechner programmieren
 
ja das sind die variablen und ich habe alles jetzt in Real zahlen gemacht es geht auch alles nr ich versteh nicht ganz wie ich in dem teil das frac anwänden muss.

himitsu 25. Feb 2011 19:58

AW: Rechner programmieren
 
Der Anfang hat jetzt aber grundsätzlich erstmal nix mit Programmieren zu tun, sondern mit Mathematik. :zwinker:

Ergebnis = Dividend / Divisor
ganze_Zahl = Teil_vor_dem_Komma_vom_Ergebnis
Rest = Teil_nach_dem_Komma_vom_Ergebnis * Divisor
oder
Rest = Dividend - ganze_Zahl

Und nun muß man das nur noch in Quellcode umwandeln.
Teil_vor_dem_Komma = Trunc
Teil_nach_dem_Komma = Frac

Deine Lösungen sind nun ganze_Zahl und Rest.

Tytomik 25. Feb 2011 20:18

AW: Rechner programmieren
 
aber so wie ich es jetzt verstanden habe müsste es doch so sein :

procedure TForm1.Button6Click(Sender: TObject);
begin
Label4.caption:= floattostr(c);
c:=a/b-trunc;

end;

Aber das ist doch falsch.
Danke für die hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Seite 1 von 2  1 2      

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