![]() |
Winkelumrechnung
Hallo Leute,
Falls das der falsche Bereich ist tut es mir leid und dann bitte verschieben! Ich muss über die Ferien eine Hausarbeit machen und das Thema lautet Winkelumrechnung! Die Aufgabe lautet so: Die Größe eines Winkels ist in Grad, Minuten und Sekunden einzulesen (1 Grad= 60 Minuten, 1 Minute = 60 Sekunden). Entwickeln Sie einen Alogrithmus und ein Programm, das das Bogenmaß des Winkels berechnet und ausgibt. Unter Bogenmaß versteht man die Länge des Kreisbogens des Einheitskreises. Es gilt die Formel: b= a*pi / 180° Sie werden diesen Algorithmus häufig benötigen, weil die üblichen trigonometrischen Standardfunktionen bei den meisten Rechnern nur Winkel im Bogenmaß als Argument zulassen! Ich bin nun soweit und weiß einfach nicht weiter:
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen!
unit UWinkelumrechnung;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TWinkelumrechnung = class(TForm) EdtWinkel: TEdit; EdtMinuten: TEdit; EdtSekunden: TEdit; LblGrad: TLabel; LblMinuten: TLabel; LblSekunden: TLabel; BtRechnen: TButton; BtEnde: TButton; LblBgleich: TLabel; LblErgebnis: TLabel; LblAusgabe: TLabel; procedure BtRechnenClick(Sender: TObject); procedure BtEndeClick(Sender: TObject); private { Private-Deklarationen} public { Public-Deklarationen} end; var Winkelumrechnung: TWinkelumrechnung; Zahl1, Zahl2, Zahl3, Zahl4 : INTEGER; ausgabe, Ergebnis : REAL; implementation {$R *.DFM} procedure TWinkelumrechnung.BtRechnenClick(Sender: TObject); begin Zahl1 := strtoint (EdtWinkel.text); Zahl2 := strtoint (EdtMinuten.text); Zahl3 := strtoint (EdtSekunden.text); Zahl4 := strtoint (LblAusgabe.caption); Zahl4 := Zahl1 + Zahl2/60 + Zahl3/3600; end; procedure TWinkelumrechnung.BtEndeClick(Sender: TObject); begin close end; end. Danke im Vorraus Yinnik94 |
Re: Winkelumrechnung
|
Re: Winkelumrechnung
Also soll ich Zahl1 und so weiter auch als Real deklarieren?
Danke schonmal für deine Hilfe! |
Re: Winkelumrechnung
ja, ganze Zahlen machen im Bogenmaß nicht viel Sinn
|
Re: Winkelumrechnung
HI,
mal auf die schnelle: Datenbanken (aktuelle Rubrik): Schwachsinn dann:
Delphi-Quellcode:
Du scheinst dir nicht sehr schlüssig zu sein, was du genau jetzt willst.
Zahl4 := strtoint (LblAusgabe.caption);
Zahl4 := Zahl1 + Zahl2/60 + Zahl3/3600; Dann bekommst du dein Bogenmaß über deine Formel (PI ist als Konstante/etc. in der Unit Math definiert) oder auch über DegToRad (Unit Math, macht das gleiche). Zu Sinus, Cosinus und Tangens: Diese können über die Windows-Funktionen SIN, COS und TAN ermittelt werden. Achtung TAN(90) hat kein Ergebnis! Bernhard PS: Soweit sieht's ja gut aus. |
Re: Winkelumrechnung
Nicht nur tan(90) macht Ärger, sondern auch andere Werte von alpha=0+n*90 Grad.
Schaut Euch 'mal die Graphen an: ![]() Gruß Wolfgang |
Re: Winkelumrechnung
Nun kommt Folgene Fehlermeldung:
'' ist kein gültiger Gleitkommawert Bin nun soweit:
Delphi-Quellcode:
Brauche dringend Hilfe:)
Zahl1 := strtofloat (EdtWinkel.text);
Zahl2 := strtofloat (EdtMinuten.text); Zahl3 := strtofloat (EdtSekunden.text); Ergebnis := strtofloat (LblErgebnis.caption); ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600; Ergebnis := ausgabe*Pi/180 ; LblErgebnis.caption := 'Ergebnis' |
Re: Winkelumrechnung
Wenn in den Edits nichts eingetragen wurde, wird versucht eine leere Zeichenkette ('') in eine Zahl zu konvertieren. Das geht natürlich nicht.
Nur am Rande: Gewöhne dir das Leerzeichen zwischen Funktionsnamen und der öffnenden Klammer vor den Parametern ab ;). Das würde man als Stilbruch ansehen, und verschlechtert die allgemeine Leserlichkeit des Codes. |
Re: Winkelumrechnung
... außerdem mußt du Ergebnis erst ausrechnen lassen, bevor du es ausgeben läßt
Das Zauberwort heißt E V A erst Eingabe. dann Verarbeitung, dann Ausgabe Gruß Wolfgang |
Re: Winkelumrechnung
Und was hat das ganze jetzt mit Datenbanken zu tun? Also dass die Frage nicht in die Datenbanksparte gehört, sollte man eigentlich merken. :?
|
Re: Winkelumrechnung
@Yinnik94 :
Da es von unseren alten Hasen hier anscheinend mal vergessen wurde, will ich das mal nachholen und dir erstmal ein freundliches WILLKOMMEN IN DER DP :dp: wünschen! Die Zeilen
Delphi-Quellcode:
sind schonmal gut so.
ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600;
Ergebnis := ausgabe*Pi/180; Jetzt musst du im Grunde nur noch Ergebnis in dem Label LblErgebnis ausgeben. Doch da du hier je jetzt einen Float-Wert hast, bracuhst du nun auch die Funktion FloatToStr(), um den Wert auszugeben ;) MFG |
Re: Winkelumrechnung
Danke das du mich willkommen heißt!
Allerdings komme ich einfach bei FloatToStr nicht weiter.. Bin wie man wahrscheinlich merkt noch ein ziemlicher Anfänger in Sachen Delphi! Ich hätte jetzt gedacht:
Delphi-Quellcode:
Allerdings kommt folgender Fehler:
Ergebnis := FloatToStr (LblErgebnis.caption)
[Fehler] UWinkelumrechnung.pas(46): Inkompatible Typen: 'Extended' und 'TCaption' |
Re: Winkelumrechnung
Zeige mal ein bisschen Code
Delphi-Quellcode:
Ich glaube eher du meinst
Ergebnis := FloatToStr (LblErgebnis.caption)
Delphi-Quellcode:
LblErgebnis.caption:=FloatToStr(Ergebnis);
|
Re: Winkelumrechnung
Hallo,
Delphi-Quellcode:
Tja,
Ergebnis := FloatToStr(LblErgebnis.caption)
etwa so sieht die Definition aus
Delphi-Quellcode:
Es wird ein Float übergeben und in ein String übergeben
function FloatToStr(X: Float): String
Float To String Du übergibst aber einen String (LblErgebnis.caption) TXCaption ist intern auch ein String d.h. du benutzt einfach die falsche Funktion Heiko |
Re: Winkelumrechnung
Nun kommt wieder die Fehlermeldung:
'' ist kein gültiger Gleitkommawert So langsam verzweifel ich an meinem Projekt :wall: |
Re: Winkelumrechnung
Dann ist entweder ein Edit oder das Label (LblErgebnis) leer. Fülle mal alles aus und lasse es dann ausrechnen. Wie erwähnt kann ein Leerstring nicht in eine zahl konvertiert werden.
|
Re: Winkelumrechnung
Hallo,
paste noch mal, was du bisher hast, und markier die Stelle, wo der Fehler kommt. Heiko PS: Ich bin ja drauf und dran, nen "Debugging for Beginners"-Tut. zu schreiben, aber solange es keine Turbos's gibt ... ;) |
Re: Winkelumrechnung
Delphi-Quellcode:
Kommt nur ein Fehler wenn ich das Bogenmaß ausrechnen lassen möchte.
Zahl1 := strtofloat (EdtWinkel.text);
Zahl2 := strtofloat (EdtMinuten.text); Zahl3 := strtofloat (EdtSekunden.text); ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600; Ergebnis := strtofloat (LblErgebnis.caption); LblErgebnis.caption := FloatToStr(Ergebnis) Und zwar dieser: '' ist kein gültiger Gleitkommawert |
Re: Winkelumrechnung
Das ist Murks ;)
Delphi-Quellcode:
Du weist "Ergebnis" den Wert des Labels zu und anschließend umgekehrt.
Ergebnis := strtofloat (LblErgebnis.caption);
LblErgebnis.caption := FloatToStr(Ergebnis) Ich vermute, du möchtest das hier:
Delphi-Quellcode:
Grüße, Matze
// ...
ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600; LblErgebnis.Caption := FloatToStr(ausgabe); |
Re: Winkelumrechnung
Damit sagst du uns aber immernoch nicht, wo genau der Fehler auftritt.
Hierfür gibt es etwas, welches sich DEBUGGEN nennt :warn: Zitat:
welches in deinem Code nur die Funktion StrToFloat macht. was also heißt, daß in EdtWinkel.Text, EdtMinuten.Text, EdtSekunden.Text und/oder LblErgebnis.Caption kein Text bzw. keine Zahl enthalten ist. |
Re: Winkelumrechnung
Du bringst da einiges durcheinander, aber so müßte es funzen:
Delphi-Quellcode:
Gruß
Zahl1 := strtofloat (EdtWinkel.text);
Zahl2 := strtofloat (EdtMinuten.text); Zahl3 := strtofloat (EdtSekunden.text); Ergebnis:=(Zahl1 + Zahl2/60 + Zahl3/3600)*pi/180; LblErgebnis.caption := FloatToStr(Ergebnis); Wolfgang |
Re: Winkelumrechnung
Ich weiß einfach nicht weiter!
Was muss ich jetzt ändern um diese Fehlermeldung wegzubekommen? LblErgebnis soll ja anfangs leer bleiben, damit später das Ergebnis, also das Bogenmaß, dort ausgegeben wird. Aktueller Stand:
Delphi-Quellcode:
Zahl1 := strtofloat (EdtWinkel.text);
Zahl2 := strtofloat (EdtMinuten.text); Zahl3 := strtofloat (EdtSekunden.text); Ergebnis := strtofloat (LblErgebnis.caption); Ergebnis:=(Zahl1 + Zahl2/60 + Zahl3/3600)*pi/180; LblErgebnis.Caption := FloatToStr(Ergebnis); Aber auch wenn ich nicht weiter weiß möchte ich mich jetzt schonmal bei euch für eure Unterstützung bedanken! |
Re: Winkelumrechnung
Schmeiß diese Zeile raus:
Delphi-Quellcode:
Überlege doch selbst mal, was diese Zeile macht: Du möchtest den Wert im Label in eine Fließkommazahl umwandeln und der Variablen "Ergebnis" zuweisen. Das ist Quatsch, da das Label zur Ausgabe und nicht zur Eingabe dient.
Ergebnis := strtofloat (LblErgebnis.caption);
Da ist ganz klar, dass diese Meldung (beim zu Beginn leeren Label) erscheint. |
Re: Winkelumrechnung
War doch schon fertig.
Wieso hast du diese unsinnige Zeile wieder reingenommen? |
Re: Winkelumrechnung
Hey Danke!:)
Es funktioniert! Hätte nicht gedacht das es so einfach geht und es steckt Logik dahinter:P Danke euch allen für eure Hilfe! Meine Hausarbeit ist gerettet!^^ |
Re: Winkelumrechnung
Zitat:
Grüß Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 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