mikrocontroller.net

Forum: Compiler & IDEs stellen einer zahl isoliert weiterverarbeiten


Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: code (Gast)
Datum:

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

code?

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups! Das string wie der float sehen so aus:"2235.9462"

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch auch mal was selber.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.