![]() |
Umrechner von grad, minuten, sekunden zu einer dezimalzahl
Hallo,
ich habe mal eine frage, und zwar haben wir folgende anweisung bekommen: Entwerfen sie unter delphi ein programm, welches zur eingabe von grad, minuten und sekunden die dezimahlzahl ausgibt und umgekehrt. folgenden delphicode habe ich schon:
Delphi-Quellcode:
aber wie kann ich das jz alles umdrehen??man benötigt dafür wohl irgendwie trunc(um die zahl vor dem komma abzuschneiden)
procedure TForm1.Button1Click(sender: TObject);
var Mn, sc, G, E: Real; //Mn=minuten, Sc=sekunden G=grad, e=ergebnis begin Mn:=strtofloat (edit2.text); Sc:=strtofloat (edit3.text); G :=strtofloat (edit1.text); Mn:=Mn/Sc; Sc:=Sc/3600; e :=G+Mn+Sc; Label1.caption:=flaottostr (e); vielen dank schonmal |
Re: Umrechner von grad, minuten, sekunden zu einer dezimalza
hiho
hast du glück, dass ich das gerade in Info brauche^^ und mir das mal geschrieben hatte das war jetzt noch vom NMEA-Protokoll einer GPS-Maus, aber daraus kannst du dir das ja im Prinzip ableiten, musst ggf. halt noch wegkürzen, da im allgemeinen unnötige Sachen durchgeführt werden, wie die Beachtung von Längen o. Breitengrad bzw Nord-und Südhalbkugel sowie Westlich oder Östlich von Greenwich, im Normalfall wird das aber mit Buchstaben angegeben W,O,S,N schau einfach am besten Mal, konnte den Code bis jetzt noch nicht testen wie ich ihn hier habe, aber im normalfall sollte das gehen, hab die funktion in abgespeckterweise getest und da hat es geklappt,also nur gerade das Umrechnen
Delphi-Quellcode:
function DezToGrad(str:string; breitengrad:boolean):string;
var stunden:integer; //Stunden minuten,sekunden: extended; //Minuten und Sekunden - extended, weil beim Umrechnen Gleitkommazahlen benötigt werden begin str:=Stringreplace(str,'.',#44,[]); //der Eingabestring enthält einen Punkt, aber damit kann delphi nicht umgehen als Gleitkommazahl if breitengrad then //Breitengrad oder Längengrad? begin if pos('-',str)>0 then //Süd- oder Nordhalbkugel? begin str:=copy(str,2,length(str)); //ggf. das Minus entfernen stunden:=90+(90-strtoint(copy(str,1,Pos(',',str)-1))); //Südhalbkugel minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1 minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten minuten:=60-minuten; sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1 minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma sekunden:=60-trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden end else begin stunden:=strtoint(copy(str,1,Pos(',',str)-1)); //Nordhalbkugel minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1 minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1 minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma sekunden:=trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden end; end else begin // Längengrad if pos('-',str)>0 then // Westlich oder Östlich von Greenwich begin str:=copy(str,2,length(str)); //ggf. das Minus entfernen stunden:=strtoint(copy(str,1,Pos(',',str)-1)); //Östlich von Greenwich minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1 minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten minuten:=60-minuten; sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1 minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma sekunden:=60-trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden end else begin stunden:=180+(180-strtoint(copy(str,1,Pos(',',str)-1))); //Westlich von Greenwich minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1 minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1 minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma sekunden:=trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden end; end; result:=inttostr(stunden)+'° '+floattostr(minuten)+#39+' '+floattostr(sekunden)+#39#39; // Ausgabe erfolgt Stunden° Minuten' Sekunden'' end; function GradToDez(str:string):string; var stunden:integer; minuten,sekunden:extended; begin stunden:=strtoint(copy(str,1,Pos('°',str)-1)); minuten:=strtofloat(copy(str,Pos('°',str)+1,Pos(#39,str)-1-Pos('°',str)))/60; sekunden:=strtofloat(copy(str,Pos(#39,str)+2,PosEx(#39,str,Pos(#39,str))+2-Pos(#39,str)))/3600; result:=floattostr(stunden+minuten+sekunden)+'°'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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