stellen einer zahl isoliert weiterverarbeiten

Gast #2039315
Lesenswert?

Sprache: C
Datentyp: im Moment kann ich die Zahl als string oder als float 
verarbeiten
Das Ergebniss wird weiter"verrechnet" float wär also nicht schlecht.

Ich habe noch garkeinen Code weil ich nicht weiss wie ich es angehen 
soll.
Ganz konkret ist meine derzeitige position

22 grad und 35.9462 minuten Süd

Das hab ich als string wie auch als float vorliegen

jetzt möchte ich das delta lambda zu einer anderen breite ermitteln z.b.

21 grad und 30.0000 minuten

daher lautet der rechenweg:

delta lambda=(grad_start mal 3600+minuten_sstart mal 60) - (grad_ziel 
mal 3600+minuten_ziel mal 60)

Also muss ich dafür die grade von den minuten trennen
Gast #2039333
Lesenswert?

Ja ich könnte die Zahlen einzeln aus dem String "extrahieren" und dann 
alles einzeln wieder zusammenfügen.Ich empfinde das aber nicht als 
"elegant" und wahrscheinlich gibt es eine bessere Lösung.
#2039342
Lesenswert?

Attila schrieb:
> a ich könnte die Zahlen einzeln aus dem String "extrahieren" und dann
> alles einzeln wieder zusammenfügen.

So würde ich das machen. Das ist weniger Aufwand, als erst eine Zahl 
daraus zu machen und diese dann zu zerlegen (was man mit jeweils einer 
normalen und einer modulo-Division macht. Beispiel: 1234 mod 1000 = 234, 
234/10 = 23).
Gast #2039359
Lesenswert?

Alles was ich aus meinen C Büchern erlesen und auch ansonsten ergooglen 
kann mache ich ja selber.

Es gibt aber Dinge die jemand der seit 3 Wochen C macht einfach 
übersieht:

Das sind die Dinge die ich hier im Forum frage.

Ich verstehe Einlassung nicht lieber Tom. Ist dieses Forum nur für 
Profis?
Gast #2039364
Lesenswert?

Es geht nicht darum, etwas zu ergooglen oder im Buch zu lesen. Hier ist 
einfach mal "machen" angesagt. Du hast das Handwerkszeug, du hast die 
Aufgabe schon in ihre Bestandteile zerpflückt, jetzt muss es nur noch 
gemacht werden.

Es ist keinem geholfen, wenn dir jemand eine Lösung hinschreibt. Ist so.
Gast #2039377
Lesenswert?

@Tom: Ich will gar keine Lösung vorgekaut bekommen! Ich habe ja auch die 
(meine) Lösung oben schon gepostet! Ich habe nur gefragt wie eine 
eleganterer Lösungsweg (!!!) aussehen könnte! Wenn es denn überhaupt 
eine gibt.
Und eine solche Frage stellt der Anfänger den Profis was ich hier in 
diesem Forum gemacht habe.

Die Tatsache dass ich hier 2235.9461S auf einem LCDisplay stehen hab 
hätte ich auch für 3,50 Euro mit einem TomTom im Fachhandel kaufen 
können. Soviel zur fertigen Lösung.

@Uwe: Vielen Dank! Auf Modulo wäre ich nicht gekommen. Ich glaube (ist 
aber noch nicht ganz gereift) der Mix könnte es sein: Die 2 ersten 
Stellen einzeln auswerten dann per modulo "löschen" und den rest 
(immerhin 6 stellen die dann ich nicht wieder zusammensetzen muss) als 
float weiterverarbeiten.
Gast #2039384
Lesenswert?

@avr: Vielen Dank ich schaue natürlich in die Libraries, schreibe die 
Sachen aber gerne dann letztlich selber. Es soll ja auch Spass machen 
:-)

Konvertiert sind die Zahlen ja bereits von ASCII nach float und auch 
wieder zurück.

Für das einbinden von string.h habe ich bis jetzt keinen Grund gesehen 
weil bis jetzt stdlib.h völlig ausgereicht hat.
Gast #2040209
Lesenswert?

Hier meine Lösung:

rein ist eine Koordinate als char. Zur Erläuterung steht hinter jeder 
Zeile was aus der Koordinate geworden ist. Als Beispielkoordinate:

rein="2235.9412"

        grad=atoi(rein);        // 2235
  grad=grad/100;           // 22
  grad=grad*3600;         // 79200
  min=atof(rein);         // 2235.9412
  min=fmod(min,1100);     // 35.9412
  min=min*60;             // 2156.472
  sekunden=grad+min;      // 81356.472

Vielen Dank Uwe, ohne deine Anregung mit dem Modulo wär ich nicht auf 
diese Lösung gekommen. Allerdings geht Modulo bei floats nicht dafür 
aber fmod(a,b) die in der math.h library ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren