Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Winkelumrechnung (https://www.delphipraxis.net/145183-winkelumrechnung.html)

Yinnik94 25. Dez 2009 15:42


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:
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.
Ich hoffe ihr könnt mir helfen!
Danke im Vorraus
Yinnik94

Micha88 25. Dez 2009 16:09

Re: Winkelumrechnung
 
Ich denke das sollte helfen:

Post#2

http://forum.delphi-treff.de/showthread.php?t=15458

Yinnik94 25. Dez 2009 20:35

Re: Winkelumrechnung
 
Also soll ich Zahl1 und so weiter auch als Real deklarieren?

Danke schonmal für deine Hilfe!

Wolfgang Mix 25. Dez 2009 20:41

Re: Winkelumrechnung
 
ja, ganze Zahlen machen im Bogenmaß nicht viel Sinn

rollstuhlfahrer 25. Dez 2009 23:17

Re: Winkelumrechnung
 
HI,

mal auf die schnelle:
Datenbanken (aktuelle Rubrik): Schwachsinn
dann:
Delphi-Quellcode:
Zahl4 := strtoint (LblAusgabe.caption);
Zahl4 := Zahl1 + Zahl2/60 + Zahl3/3600;
Du scheinst dir nicht sehr schlüssig zu sein, was du genau jetzt willst.
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.

Wolfgang Mix 25. Dez 2009 23:29

Re: Winkelumrechnung
 
Nicht nur tan(90) macht Ärger, sondern auch andere Werte von alpha=0+n*90 Grad.
Schaut Euch 'mal die Graphen an:

http://www.delphipraxis.net/internal...ght=anf%E4nger

Gruß

Wolfgang

Yinnik94 26. Dez 2009 17:51

Re: Winkelumrechnung
 
Nun kommt Folgene Fehlermeldung:

'' ist kein gültiger Gleitkommawert

Bin nun soweit:
Delphi-Quellcode:
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'
Brauche dringend Hilfe:)

Medium 26. Dez 2009 18:10

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.

Wolfgang Mix 26. Dez 2009 18:28

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

Luckie 26. Dez 2009 18:38

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. :?

olee 26. Dez 2009 19:12

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:
ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600;
Ergebnis := ausgabe*Pi/180;
sind schonmal gut so.

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

Yinnik94 27. Dez 2009 13:43

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:
Ergebnis := FloatToStr (LblErgebnis.caption)
Allerdings kommt folgender Fehler:

[Fehler] UWinkelumrechnung.pas(46): Inkompatible Typen: 'Extended' und 'TCaption'

Wolfgang Mix 27. Dez 2009 13:56

Re: Winkelumrechnung
 
Zeige mal ein bisschen Code

Delphi-Quellcode:
Ergebnis := FloatToStr (LblErgebnis.caption)
Ich glaube eher du meinst

Delphi-Quellcode:
LblErgebnis.caption:=FloatToStr(Ergebnis);

hoika 27. Dez 2009 21:34

Re: Winkelumrechnung
 
Hallo,

Delphi-Quellcode:
Ergebnis := FloatToStr(LblErgebnis.caption)
Tja,
etwa so sieht die Definition aus
Delphi-Quellcode:
function FloatToStr(X: Float): String
Es wird ein Float übergeben und in ein String übergeben
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

Yinnik94 28. Dez 2009 10:59

Re: Winkelumrechnung
 
Nun kommt wieder die Fehlermeldung:

'' ist kein gültiger Gleitkommawert


So langsam verzweifel ich an meinem Projekt :wall:

Matze 28. Dez 2009 12:15

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.

hoika 28. Dez 2009 13:57

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 ... ;)

Yinnik94 28. Dez 2009 15:15

Re: Winkelumrechnung
 
Delphi-Quellcode:
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)
Kommt nur ein Fehler wenn ich das Bogenmaß ausrechnen lassen möchte.

Und zwar dieser:

'' ist kein gültiger Gleitkommawert

Matze 28. Dez 2009 15:25

Re: Winkelumrechnung
 
Das ist Murks ;)

Delphi-Quellcode:
Ergebnis := strtofloat (LblErgebnis.caption);
LblErgebnis.caption := FloatToStr(Ergebnis)
Du weist "Ergebnis" den Wert des Labels zu und anschließend umgekehrt.

Ich vermute, du möchtest das hier:

Delphi-Quellcode:
// ...
ausgabe := Zahl1 + Zahl2/60 + Zahl3/3600;
LblErgebnis.Caption := FloatToStr(ausgabe);
Grüße, Matze

himitsu 28. Dez 2009 15:26

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:

'' ist kein gültiger Gleitkommawert
bedeutet, es wird versucht einen '' (Leerstring) in eine Fließkommazahl umzuwandeln,
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.

Wolfgang Mix 28. Dez 2009 15:33

Re: Winkelumrechnung
 
Du bringst da einiges durcheinander, aber so müßte es funzen:

Delphi-Quellcode:
Zahl1 := strtofloat (EdtWinkel.text);
Zahl2 := strtofloat (EdtMinuten.text);
Zahl3 := strtofloat (EdtSekunden.text);
Ergebnis:=(Zahl1 + Zahl2/60 + Zahl3/3600)*pi/180;
LblErgebnis.caption := FloatToStr(Ergebnis);
Gruß

Wolfgang

Yinnik94 28. Dez 2009 17:09

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!

Matze 28. Dez 2009 17:19

Re: Winkelumrechnung
 
Schmeiß diese Zeile raus:

Delphi-Quellcode:
Ergebnis := strtofloat (LblErgebnis.caption);
Ü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.
Da ist ganz klar, dass diese Meldung (beim zu Beginn leeren Label) erscheint.

Wolfgang Mix 28. Dez 2009 17:30

Re: Winkelumrechnung
 
War doch schon fertig.
Wieso hast du diese unsinnige Zeile wieder reingenommen?

Yinnik94 28. Dez 2009 18:27

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!^^

Wolfgang Mix 28. Dez 2009 18:36

Re: Winkelumrechnung
 
Zitat:

Hätte nicht gedacht das es so einfach geht und es steckt Logik dahinter:P
Wäre ja auch schlimm, wenn keine Logik dahinter stecken würde :)

Grüß

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz