![]() |
Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Hallo,
wie ihr seht bin ich neu hier... Wir hab in der Schule angefangen unter Delphi 7 zu programmieren... Also haben erst ein paar wenig Grundlagen um simple Programme zu erstellen. Wir haben eine Aufgabe wo man ein Programm erstellen soll welches den Umfang und die Fläche eines Dreiecks berechnet, nachdem die Längen der Drei Seiten angegeben(eingegeben) wurden. Dabei soll die Fläche mit der Formel: A="Wurzel aus" s*(s-a)*(s-b)*(s-c) ,wobei s=a+b+c/2 ist. Das grobe hab ich schon erstellt.... Mein Problem besteht darin das, wenn man auf den berechnen Button klickt ohne Werte eingegeben zu habe oder wenn Werte eingegeben werden,die ein nicht existierendes Dreieck definieren, dass dann eine Fehlermeldung kommt die sagt "Ungültige Gleitkommaoperation" Ich denk mal das liegt an der Wurzel, nur ich weiß nicht wie man die anders schreiben kann... Hier mein Quellcode:
Delphi-Quellcode:
das mit dem IF ist noch nicht fertiggestellt....
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR a , b , c , s , flaeche , umfang: real; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); s:=(a + b + c)*0.5; flaeche:=sqrt(s*(s - a)*(s - b)*(s - c)); umfang:=(a + b + c); Edit4.Text:=FloatToStr(flaeche); Edit5.Text:=FloatToStr(umfang); IF a+b<c THEN begin label7.Caption:='Dieses Dreieck existiert nicht!'; end end; end. |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Hallo und Willkommen in der DP :dp:
statt StrToFloat kannst Du Dir mal StrToFloatDef oder TryStrToFloat ansehen. Mit diesen beiden Funktionen kannst Du fehlerhaften Werten begegnen. |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Willkommen in der DP!
Die Fehlermeldung lässt darauf schließen, dass du mit negativen Werten in die Wurzel kommst, weshalb man das u.U. nicht sofort an den eingegebenen falschen Werten erkennen kann. Ich würde die Rechnung etwas auseinander ziehen, um noch eine weitere Bedingung einzubauen:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR a , b , c , s , flaeche , umfang, tmp: real; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); s:=(a + b + c)*0.5; tmp := s*(s - a)*(s - b)*(s - c); if tmp < 0 then begin ShowMessage('Ungültiges Dreieck oder Eingabe fehlerhaft!') end else begin flaeche:=sqrt(tmp); umfang:=(a + b + c); Edit4.Text:=FloatToStr(flaeche); Edit5.Text:=FloatToStr(umfang); IF a+b<c THEN begin label7.Caption:='Dieses Dreieck existiert nicht!'; end; end; end; end. |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Zitat:
|
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Man sollte beides tun, das kam evtl. nicht wirklich in meinem Beitrag rüber, ich gebs ja zu ;)
|
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Willkommen.
Es ist nicht schön wenn ein Schüler die Hausaufgabe schon erledigt hat und das Programm nur idiotensicher haben will? Finde ich klasse, das auch noch zu erleben... |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Okay viele dank schon mal an euch alle für die super schnelle Antwort.
Jetzt läuft es schon besser.... Nur, wenn man "ENTER" drückt bzw. "Berechnen" ohne das Werte eingeben wurden dann kommt die Fehlermeldung noch...? Kann man da noch was machen...bei andren Programmen ist dann einfach nichts passiert...? |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Zitat:
|
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Zitat:
Er freut sich, dass du dich so um Benutzer kümmerst ;). Zu deiner Frage: einfach
Delphi-Quellcode:
If (Edit1.text = '') or (edit2.text = '') or (edit3.text = '') then exit
else [deinen normalen code] |
Re: Berechnung am Dreieck (Schulaufgabe) Wurzelproblem
Er hat nur "Es" und "ist" vertauscht :). Es ist eine mehr als erfreuliche Abwechslung, mal einen Schul-Informatiker hier zu haben, der nicht in unlesbarem "Gerade-Eben-Noch-Deutsch" zu vermitteln versucht, dass er a) keine Lust, und b) keinen Plan hat, und gerne alles geliefert haben möchte. Das steckt dahinter :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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