Forum: Compiler & IDEs stellen einer zahl isoliert weiterverarbeiten


von Attila (Gast)


Lesenswert?

Ich möchte ein Zahl zb "12345678" so weiterverarbeiten:

12*1
34*2
56*3
78*4

Wie kriege ich die einzelnen Stellen herausgelöst ohne die Fragmente zu 
zerstören?

Im Sinne von dass 12 zwölf ist und 34 vierundreissig und nicht eine 1 
eine 2 eine 3 und eine 4?

von code (Gast)


Lesenswert?

Welche Sprache?
Wie liegt die Zahl vor, Datentyp? Länge?
Datentyp der Ergebnisse?
Feste aufteilung?

code?

von Attila (Gast)


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

von Attila (Gast)


Lesenswert?

Ups! Das string wie der float sehen so aus:"2235.9462"

von Attila (Gast)


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.

von Tom (Gast)


Lesenswert?

Mach doch auch mal was selber.

von Uwe .. (uwegw)


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

von Attila (Gast)


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?

von Tom (Gast)


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.

von avr (Gast)


Lesenswert?

Für c gibt es einige Funktionen in Libaries.

Für deine Konvertierung von Zeichenkette -> Zahl
kannst du in der STDLIB.h nachschauen.

Für Strings gibt es die STRING.h

Diese Zusatzfunktionen mit #INCLUDE einbinden.

Infos auch hier, Anhang B

http://openbook.galileocomputing.de/c_von_a_bis_z/index.htm



avr

von Attila (Gast)


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.

von Attila (Gast)


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.

von avr (Gast)


Lesenswert?

Attila schrieb:
> Die 2 ersten
>
> Stellen einzeln auswerten dann per modulo "löschen"

Wenn du aus dem Sting die Stellen ausgewertet/gesichert hast
kannst du die auch mit '0' überschreiben.
Bei den üblichen Ümwandlungen stören führende Nullen nicht.

avr

von Attila (Gast)


Lesenswert?

@avr: Spannend! Da die Zahl ja als float und als string vorliegt ergeben 
sich einige Möglichkeiten. Ich werde es posten sobald ich ein Lösung 
habe. Ich bin gespannt!

von Attila (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.