![]() |
Schulprojekt: Thema: Berechnungen am Rechteck
Hallo Leute,
ich habe das Programieren ganz neu in der Schule gelernt. Wir sollen nun ein Programm schreiben, mit dem man die Fläche, den Umfang und die Diagonale eines Rechtecks berechnen kann, wenn man die Seiten a und b hat. Aufgabe 2 war, das Programm so zuerweitern, das wenn man Seite a oder b + die Fläche eingibt, dass das Programm dann die fehlende Seite ausspuckt. Hier mein Quelltext:
Delphi-Quellcode:
So. Folgendes Problem hat sich nun ergeben: Delphi gibt mir an den letzten 2 Befehlen
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; LaengeEdit: TEdit; BreiteEdit: TEdit; FlaecheEdit: TEdit; DiagonaleEdit: TEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; UmfangEdit: TEdit; RechnenButton: TButton; AbbruchButton: TButton; Label11: TLabel; procedure AbbruchButtonClick(Sender: TObject); procedure RechnenButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.AbbruchButtonClick(Sender: TObject); begin Close; end; procedure TForm1.RechnenButtonClick(Sender: TObject); begin IF (LaengeEdit.Text <> '') and (BreiteEdit.Text <> '') THEN begin FlaecheEdit.Text := IntToStr(StrToInt(LaengeEdit.Text)*StrToInt(BreiteEdit.Text)); UmfangEdit.Text := IntToStr(StrToInt(LaengeEdit.Text)*2+StrToInt(BreiteEdit.Text)*2); DiagonaleEdit.Text := FloatToStr(sqrt(StrToInt(LaengeEdit.Text)*StrToInt(LaengeEdit.Text)+StrToInt(BreiteEdit.Text)*StrToInt(BreiteEdit.Text))); Label11.Caption := ''; end ELSE begin IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')) THEN begin LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); BreiteEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)); end ELSE Label11.Caption := 'Fehlende Eingabe' end end; end.
Delphi-Quellcode:
die Meldung:
begin
LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); BreiteEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)); end '[Fehler] Unit1.pas(65): Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann' Mein Informatiklehrer hat auch keinen Plan wie das funktionieren könnte. Wäre echt cool wenn mir jemand sagen könnte was ich da falsch mache. Danke im Vorraus. MfG Dennis |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Bei der Berechnung kann eine Zahl rauskommen, die keine Ganzzahl ist (zB: 5/3). IntToStr wandelt aber nur Ganzzahlen in eine Zeichenkette.
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Wenn du stattdessen FloatToStr oder Format nimmst, lässt sich dieses Problem jedoch ganz einfach umgehen.
mfg |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Hallo
FloatToStr oder FloatToStrF sind hier Deine Freunde. |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Danke
kannst ihr mir den genauen Befehl für dafür sagen? Soweit sind wir noch nicht gekommen und im Netz steht soviel Zeugs das ich eweig suchen würde. Wir hatten bisher nur FloatToStr aber der geht ja nicht. Und bei FloatToStrF kommt wieder ' [Fehler] Unit1.pas(65): Es gibt keine überladene Version von 'FloatToStrF', die man mit diesen Argumenten aufrufen kann ' |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Zitat:
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Delphi-Quellcode:
...auch an der richtigen Stelle benutzt?
LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)); |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
@ Tyreal: Ja genau da stehts :wink: ich sitze hier schon ne ganzeweile und versuche alles mirbekannte durch. Das ist sicher nicht der Fehler.
@ Patti: Das habe ich schon probiert, aber wenn ich dann das Programm im Testlauf starte und auf den RechnenButton drücke gibt es eine Fehlermeldung: ' Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''' ist kein gültiger Integerwert'. Prozess wurde angehalten. ' |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Dann stimmt wohl eine Eingabe in den EditFeldern nicht. Wenn da z.B. Buchstaben drinstehen, dann liefert FloatToStr (wie auch IntToStr) einen Fehler. Du musst vorher überprüfen, ob eine gültige Eingabe in allen Feldern vorhanden ist. Deiner Beschreibung nach ist wohl mindestens eines der Felder leer, wenn du auf den Button klickst.
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
also es sind insgesammt 5 Felder. Wovon 3 angesprochen wurden. Eins ist leer, endweder ist es BreiteEdit oder LaengeEdit. FlaecheEdit muss ja was drinstehen
Delphi-Quellcode:
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> ''))
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Hallo,
Delphi-Quellcode:
Das nehmen wir mal auseinander
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')) THEN
begin LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
Delphi-Quellcode:
[/delphi]
IF (LaengeEdit.Text <> '') then
begin LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); Der FlaecheEdit oder Breitedit können hier leer sein dann kommt bei StrToInt('') die besagte Exception OR
Delphi-Quellcode:
[/delphi]
IF ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')) THEN
begin LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); Also stimmt dein if nicht immer Heiko |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
hää?? Bei Fläche muss ja was stehen sonst funktioniert das alles ja nicht aber seite a oder b ist ja immer ins leer.
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Eben. Deshalb musst du das or ja auch durch ein and ersetzen. Es muss ja alles zutreffen.
[ADD] Außerdem solltest du das erste <> durch = ersetzen. |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
also wenn ich das 'or' durch ein 'and' ersetze, dann würde es funktionieren, aber dann kann ich die Fehlende Seite, welches genau mein Ziel ist, ja nicht mehr berechnen und der gesamte Befehl wäre überflüssig, da er ja mit dem 1. IF gedeckt ist.
Sobalt ich aber 'or' verwende schmeißt er mir diesen blöden Error rein. |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
@implementation:
ja aber dann müsste feld 1 immer leer sein. wie müsste das sein wenns auch feld 2 sein kann? |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Wenn das zweite Feld leer ist, soll das ja ausgerechnet werden, oder verstehe ich das falsch?
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
genau
Delphi-Quellcode:
ist LaengeEdit leer soll dieses ausgerechnent werden. Ist BreiteEdit frei dann das.
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> ''))
THEN begin LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)); end |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Delphi-Quellcode:
IF (LaengeEdit.Text { --> } = { <-- } '') { --> } and { <-- } (BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')
THEN begin LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)); BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)); end |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
es ist zum weinen :wall: Ich wenn ich BreiteEdit und FlaecheEdit ausfülle kommt LaengeEdit aber wenn ich LaengeEdit und FlaecheEdit ausfülle kommt aber keine Breite
|
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Hallo,
noch mal die Aufgabe das wenn man Seite a oder b + die Fläche
Delphi-Quellcode:
Jetzt könnte natürlich auch a und b und die Fläche
if (Edit_a.Text<>'') and (Edit_Area.Text<>'') then
begin // a und Fläche gegeben // b wird berechnet Exit; end; if (Edit_b.Text<>'') and (Edit_Area.Text<>'') then begin // b und Fläche gegeben // a wird berechnet Exit; end; per Editor eingegeben sein -> es wird b berechnet, oder du fängst da ab
Delphi-Quellcode:
if (Edit_a.Text<>'') and (Edit_b.Text<>'') and (Edit_Area.Text<>'') then
begin ShowMessage('ööööö'); Exit; end; Heiko |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Danke Danke :-D
das funktioniert :) zwar in etwas anderer Form, könnte aber auch das selbe sein :lol: ich hab jetzt das da stehen:
Delphi-Quellcode:
Dennis
begin
IF (LaengeEdit.Text <> '') and (FlaecheEdit.Text <> '') THEN BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text)) ELSE begin IF (BreiteEdit.Text <> '') and (FlaecheEdit.Text <> '') THEN LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text)) Else Label11.Caption := 'Fehlende Eingabe' end end |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Delphi-Quellcode:
Ich glaube du solltest das mal alles übersetzen damit du klar kommst
IF (LaengeEdit.Text <> '') and (FlaecheEdit.Text <> '')
THEN steht in LaengeEdit etwas drin oder nicht und in FlaecheEdit etwas drin oder nicht dann tue ... |
Re: Schulprojekt: Thema: Berechnungen am Rechteck
Das weiß ich doch ^^. Also ich hatte ja vorher das mit 'or' und 3 Bedingungen. Nun habe ich im 1. If 2 Bedingungen und unter ELSE ein weiteres IF mit der fehelnden Bedingung und der notwendigen (indesemfalle die Fläche). Alles paletti und ich kann gleich alle 5 Werte mit 2 berechenen ;) sprich mit der Diagonale und 1 Seite kann ich dann Umfang, Fläche und Seite 2 ausrechenen.
Vielen Dank für die Hilfe. Ihr habt mir 3 Tage suchen erspart. Lg Dennis |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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