![]() |
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:
Freue mich bei positiver rückmeldung. Danke.
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; |
AW: Rechner programmieren
Nachdem du das Divisionsergebnis ausgerechnet hast, kannst du mit
![]() ![]() > 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. |
AW: Rechner programmieren
Und randomize sollte nur einmal im oncreate aufgerufen werden.nnnn
|
AW: Rechner programmieren
also kann man nicht bei einem programm Integer und Real Zahlen benutzen.
LG |
AW: Rechner programmieren
Wie schon gesagt, kannst du mit trunc und frac aus Realzahlen Integerwerte herstellen.
|
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:
Habe gestern angefangen.
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; Wäre echt nett. Danke |
AW: Rechner programmieren
Woher kommen die Werte von a und b?
|
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.
|
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. |
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. |
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