![]() |
Probleme mit einem Rechner
Tach.
Als erster, sry, falls ich hier in der Falschen Sektion gepostet habe. So kommen wir mal zu meinem Problem. Ich wollte einen Rechner programmieren, um Kreise auszurrechen. Also den Umfang, Durchmesser, Radius und Flächeninhalt. Leider komme ich nicht mehr weiter, da ich immer Fehlermeldungen bekomme... Ich hoffe ihr könnt mir helfen, hier der Source.Code:
Delphi-Quellcode:
unit Kreisberechnung;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; r, u, d, A: extended; lol, ergebnis1, ergebnis2, ergebnis3, ergebnis4: string; pi: extended; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin r := strtofloat(Edit1.Text); u := strtofloat(Edit2.text); d := strtofloat(Edit3.Text); A := strtofloat(Edit4.Text); pi := floattostrf(3.14159265358); ergebnis1 := 2* pi * r; Label12.Caption := ergebnis1; end; end. Greets Patrick |
Re: Probleme mit einem Rechner
Auch ohne Deine Fehlermeldung zu kennen...
Du hast pi als String deklariert und versuchst damit in Deiner Formel zu rechnen, das kann so nicht funktionieren. Und ein Label kann nur einen String darstellen, eine Zahl dafür müsstest Du also erst in einen String umwandeln. Moin |
Re: Probleme mit einem Rechner
Hallo Patrick,
herzlich Willkommen! Es wäre gut, wenn du uns sagen würdest, welche Fehler du wo genau erhälst. Wie mir scheint fehlen dir auch einige Delphi-Grundlagen. ![]()
Delphi-Quellcode:
kann nicht gehen. Pi ist nicht als String deaklariert, was auch blödsinnig wäre, daher musst du da auch nichts konvertieren. Richtig und viel einfacher wäre
pi := floattostrf(3.14159265358);
Delphi-Quellcode:
bzw. die Unit Math in den uses einzubinden, dann kannst du Pi direkt nutzen.
pi = 3.14159265358;
Edit: Auch wenn sich der Inhalt meines Beitrags mit dem von stifflersmom ähnelt, habe ich ihn dennoch abgesendet aufgrund des Hinweises der fehlenden Grundlagen. |
Re: Probleme mit einem Rechner
Hoi,
na, schau Dir doch bite an, welche Typen deine Variablen haben... Du versuchst einem String den Wert einer Rechenoperation mit Float-Werten zuzuweisen. Das kann ja nicht klappen...
Delphi-Quellcode:
wird Dir helfen...
FloatToStr()
Wo, das musst Du selber rausfinden. Sind ja kein Hausaufgaben-Erledigungs-Forum... LG, Markus |
Re: Probleme mit einem Rechner
Hallo,
willkommen in der DP :dp: 1. Die Konstante Pi ist bereits definiert (Unit System). 2. Du kannst eine Extended (als Ergebnis einer Berechung) nicht an einen String zuweisen.
Delphi-Quellcode:
Versuch es mal so:
ergebnis1 := 2* pi * r;
Delphi-Quellcode:
ergebnis1 := Format('%.2f',[2* pi * r]);
|
Re: Probleme mit einem Rechner
Was soll den so'n Scheiß?
|
Re: Probleme mit einem Rechner
Zitat:
|
Re: Probleme mit einem Rechner
Zitat:
Frag ich mich auch xD So, hier ist das bild mit Source: ![]() Jetzt kommt nur noch eine Fehlermeldung, aber ich weiß nicht wie ich die wegbekommen kann. |
Re: Probleme mit einem Rechner
Du versuchst, einen String in einen Float zu konvertieren...
Delphi-Quellcode:
Sieh Dir doch bitte für solche Fragen mal zu allererst an, welche Variable welchen Typ hat und wie Du die Typen ineinander umwandeln kannst, was welchert Typ kann. Das man mit Strings nicht rechnen kann erscheint doch logisch, oder?
procedure TForm1.Button1Click(Sender: TObject);
begin r := strtofloat(Edit1.Text); u := strtofloat(Edit2.text); d := strtofloat(Edit3.Text); A := strtofloat(Edit4.Text); pi := 1.34; ergebnis1 := FloatToStr(2* pi * r); Label12.Caption := ergebnis1; end; LG, Markus (edit) P.S.: 15 ist doch das Alter, in dem man Informatikunterricht das erste Mal in der Schule hat, oder? Lass' Dich nicht verleiten, Dir deine Probleme in Foren lösen zu lassen. Es gibt immer genug Leute, die Dir gerne helfen und aus Ungeduld - so wie ich gerade - die fertige Lösung hinposten. Wenn Du auch nur ansatzweise was aus dem Unterricht mitnehmen willst, dann versuche Dir ein Buch zu packen und es Dir anzulernen.. |
Re: Probleme mit einem Rechner
Zitat:
|
Re: Probleme mit einem Rechner
Danke für alles, jetzt klappt es :)
Delphi-Quellcode:
Jetzt muss ich nur nochmal alles durchschaun wofür z.B. das
ergebnis1 := Format('%.2f',[2* pi * r]);
Label2.Caption := ergebnis1;
Delphi-Quellcode:
gut ist.
Format('%.2f',
BTW.: Naja, wir haben keinen Informatikunterricht in der Schule :( Habe mir auch schon das Buch: Delphi für Kids besorgt. und mir hat auch shcon jmd verscuht zu helfen mit dem Rechner, aber owohl er eigentlich sehr gut ist, hat er es trotzdem nicht geschafft... |
Re: Probleme mit einem Rechner
Hehe, 1,34 ist natürlich nicht so ganz passend ;) Meine Monte-Carlo-Simulation versucht mir schon den ganzen Tag zu erklören, dass Pi 2.69 ist, aber hey... ;)
LG, Markus |
Re: Probleme mit einem Rechner
Nächstes Problem:
'' is not a valid floating point value Habe jetzt schon diverse Sachen ausprobiert, aber wieder keinen Erfolg gehabt :cry: Ich hoffe ihr könnt mir jetzt noch einmal helfen... :oops: Hier die Source:
Delphi-Quellcode:
unit Kreisberechnung;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button1: TButton; Button2: TButton; ComboBox1: TComboBox; procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; r, u, d, A, r2: extended; ergebnis1, ergebnis2, ergebnis3, ergebnis4: string; pi: extended; lol: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin r := strtofloat(Edit1.Text); u := strtofloat(Edit2.text); d := strtofloat(Edit3.Text); A := strtofloat(Edit4.Text); pi := 3.14159265358; if lol = 1 then ergebnis2 := Format('%.2f',[2* pi * r]); Label2.Caption := ergebnis2; ergebnis3 := Format('%.2f',[2* r]); Label3.Caption := ergebnis3; ergebnis4 := Format('%.2f',[pi* r * r]); Label4.Caption := ergebnis4; if lol = 2 then ergebnis1 := Format('%.2f',[u / 2 * pi]); Label1.Caption := ergebnis1; r2 := strtoint(ergebnis1); ergebnis3 := Format('%.2f',[r2 * 2]); Label3.Caption := ergebnis3; ergebnis4 := Format('%.2f',[pi* r2 *r2]); Label4.Caption := ergebnis4; if lol = 3 then ergebnis1 := Format('%.2f',[d / 2]); Label1.Caption := ergebnis1; r2 := strtoint(ergebnis1); ergebnis2 := Format('%.2f',[2* pi * r2]); Label2.Caption := ergebnis2; ergebnis4 := Format('%.2f',[pi* r2 * r2]); Label4.Caption := ergebnis4; if lol = 4 then ergebnis1 := Format('%.2f',[pi * A / 2]); Label1.Caption := ergebnis1; r2 := strtoint(ergebnis1); ergebnis2 := Format('%.2f',[2* pi * r]); Label2.Caption := ergebnis2; ergebnis3 := Format('%.2f',[r2* 2]); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin case Combobox1.ItemIndex of 0: lol := 1; 1: lol := 2; 2: lol := 3; 3: lol := 4; end; if lol = 1 then Edit1.Enabled := True; if lol = 2 then Edit2.Enabled := True; if lol = 3 then Edit3.enabled := true; if lol = 4 then Edit4.enabled := True end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Enabled := False; Edit2.Enabled := False; Edit3.Enabled := False; Edit4.Enabled := False; end; end. Danke schön schonmal im voraus! Greets |
Re: Probleme mit einem Rechner
Hast Du auch in alle Edits eine Fließkommazahl eingetragen?
|
Re: Probleme mit einem Rechner
Kann es sein, dass in einem der Edits nichts steht? Das musst du noch überprüfen (bsp. mit
![]() Des weiteren wäre es evtl. sinnvoll, wenn du ![]()
Delphi-Quellcode:
Auch das könntest du vereinfachen:
case lol of
1: begin end; 2: begin end; // ... end;
Delphi-Quellcode:
und zwar so:
case Combobox1.ItemIndex of
0: lol := 1; 1: lol := 2; 2: lol := 3; 3: lol := 4; end;
Delphi-Quellcode:
lol := Combobox1.ItemIndex + 1;
|
Re: Probleme mit einem Rechner
Hi,
erstmal nicht:
Delphi-Quellcode:
sondern: in deinem Fall wohl eher:
if lol = 1 then
ergebnis2 := Format('%.2f',[2* pi * r]); Label2.Caption := ergebnis2; ergebnis3 := Format('%.2f',[2* r]); Label3.Caption := ergebnis3; ergebnis4 := Format('%.2f',[pi* r * r]); Label4.Caption := ergebnis4;
Delphi-Quellcode:
Aber das schlimmste ist, dass Du mit
if lol = 1 then
begin ergebnis2 := Format('%.2f',[2* pi * r]); Label2.Caption := ergebnis2; ergebnis3 := Format('%.2f',[2* r]); Label3.Caption := ergebnis3; ergebnis4 := Format('%.2f',[pi* r * r]); Label4.Caption := ergebnis4; end;
Delphi-Quellcode:
Versuchst, einen String, in dem '1.45333' oder so (also ein Gleitkommawert in einen String konvertert), in ein Integer umzuwandeln, also eine Ganzzahl. Da meckert er mit Recht. Alo entweder runden, oder in Float konvertieren.
r2 := strtoint(ergebnis1);
LG, Markus |
Re: Probleme mit einem Rechner
Meinst du wenn ich die exe starte?
tschuldigung, bin noch ein anfänger xD also, man wählt aus was vorgegeben ist und nur dieses edit wird freigegeben. z.B edit 1 für r. dann habe ich 3, 3,0 und 3.0 eingegeben und jedes mal kommt der error Edit: ok danke, ich probiers mal! |
Re: Probleme mit einem Rechner
Zitat:
|
Re: Probleme mit einem Rechner
So, mit deinen Edits ist alles im Lot. Ich weiß zwar nicht genau, was Du damit vorhast, aber okay...
Delphi-Quellcode:
Wie gesagt: beschäftige Dich mal damit, was String, Integer, Float, Real usw. bedeuten und wie man sie ineinander umwandelt. Mir scheint, als hättest Du von Variablentypen noch nie etwas gehört...
[..]
var Form1: TForm1; r, u, d, A, r2: extended; ergebnis1, ergebnis2, ergebnis3, ergebnis4: string; pi: extended; lol: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin r := strtofloat(Edit1.Text); u := strtofloat(Edit2.text); d := strtofloat(Edit3.Text); A := strtofloat(Edit4.Text); pi := 3.14159265358; if lol = 1 then begin ergebnis2 := FloatToStr(2* pi * r); Label2.Caption := ergebnis2; ergebnis3 := FloatToStr(2* r); Label3.Caption := ergebnis3; ergebnis4 := FloatToStr(pi* r * r); Label4.Caption := ergebnis4; end; if lol = 2 then begin ergebnis1 := FloatToStr(u / 2 * pi); Label1.Caption := ergebnis1; r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!! ergebnis3 := FloatToStr(r2 * 2); Label3.Caption := ergebnis3; ergebnis4 := FloatToStr(pi* r2 *r2); Label4.Caption := ergebnis4; end; if lol = 3 then begin ergebnis1 := FloatToStr(d / 2); Label1.Caption := ergebnis1; r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!! ergebnis2 := FloatToStr(2* pi * r2); Label2.Caption := ergebnis2; ergebnis4 := FloatToStr(pi* r2 * r2); Label4.Caption := ergebnis4; end; if lol = 4 then begin ergebnis1 := FloatToStr(pi * A / 2); Label1.Caption := ergebnis1; r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!! ergebnis2 := FloatToStr(2* pi * r); Label2.Caption := ergebnis2; ergebnis3 := FloatToStr(r2* 2); end; end; [...] LG, Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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