mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dezimalzahl in mehrere Arrays aufteilen


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe eine 6 Stellige Zahl und möchte diese je auf 3 Felder aufteilen. 
Wie mache ich das?

zum Beispiel:
123456

array[0] = 12;
array[1] = 34;
array[2] = 56;

Die Zahl kann halt immer anders sein, man muss wohl rotieren oder es mit 
einem pointer machen, hat jemand mal ein Beispiel bitte?

Danke schön
Mfg

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe schrieb:
> habe eine 6 Stellige Zahl und möchte diese je auf 3 Felder aufteilen.
> Wie mache ich das?
Woher kommt die Zahl?
Steht die in einer Variablen?
Müssen die Einer, Zehner, Hunderter... genau so aufgeteilt sein?
array[0] = 12;   //  *10000
array[1] = 34;   //  *100
array[2] = 56;   //  *1
Was willst du damit machen?

Bist du sicher, dass du weißt, was du willst?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Joe schrieb:
>> habe eine 6 Stellige Zahl und möchte diese je auf 3 Felder aufteilen.
>> Wie mache ich das?
> Woher kommt die Zahl?
Frei erfunden, will wissen wie das geht.
> Steht die in einer Variablen?
Ja
> Müssen die Einer, Zehner, Hunderter... genau so aufgeteilt sein?
Die Aufteilung ist wichtig, MAXIMAL 8 Bit in einem array
> array[0] = 12;   //  *10000
> array[1] = 34;   //  *100
> array[2] = 56;   //  *1
> Was willst du damit machen?
Will wissen wie das geht.
>
> Was willst du damit?
Will wissen wie das geht.
> Bist du sicher, dass du weißt, was du willst?
Ja, will wissen wie das geht.

Autor: Chris M. (shortie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
123456 durch 10000 teilen und Stellen nach dem Komma streichen = 
array[0]
123456 modulo 10000 = 3456 (Rest für 1+2)
3456 durch 100 teilen und Stellen nach dem Komma streichen = array[1]
3456 modulo 100 = 56 = array[2]

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe schrieb:

> Ja, will wissen wie das geht.


Ganz einfach.

Eine Mutter hat 65 Äpfel und 10 Kinder.
Wenn alle Kinder gleich viele Äpfel bekommen, wieviele Äpfel kriegt dann 
jedes Kind und wieviele bleiben der Mutter übrig?


65 / 10  -> 6  und 5 bleiben Rest

Hmm, 65  zerlegt in 6 und 5, 65 zerlegt in 6 und 5, ....

Division kennst du in C, das ist der / Operator
Und der Rest einer Division, das ist %

   65 / 10   -> 6
   65 % 10   -> 5

Und das kannst du jetzt auf dein Beispiel anwenden.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe schrieb:
> Die Aufteilung ist wichtig, MAXIMAL 8 Bit in einem array
Also, wenn das Byte MAXIMAL ausgenützt werden soll, dann ist deine 
Aufteilung in die Hunderterschritte ungünstig.
Denn dann werden von den 256 möglichen Zuständen (0..255) des Bytes nur 
100 (0..99) verwendet.

Am effektivsten wäre die Aufteilung dann in Bytes:
zahl = 123456;
array[0] = (zahl>>16) & 0xff;
array[1] = (zahl>>8) & 0xff;
array[2] = (zahl) & 0xff;


> Will wissen wie das geht.
Du könntest dir aber trotzdem die Mühe machen, meine Fragen durchzulesen 
und zu überdenken!!! (Ja, drei Ausrufezeichen!)

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SOrry, aber glaub ich habs etwas schlecht erklärt.

Ich will die ersten beiden Stellen in einem Array haben, dann die 3te 
und 4te Stelle in einem weiteren Array und dann die letzten beiden in 
einem weiteren array.

Geht das nicht einer rotation? Teilen ist eigentlich rotieren oder?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Geht das nicht einer rotation? Teilen ist eigentlich rotieren oder?

Aber z.B. eine 123456 sieht in Bits so 11110001001000000 aus. So und 
jetzt rotiere mal.

MfG Spess

Autor: Chris M. (shortie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liest du auch die Antworten und versuchst diese auch zu verstehen?

Rechne doch mal mein Beispiel nach. (Windows Taschenrechner auf 
Wissenschaftlich stellen)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe schrieb:

> Geht das nicht einer rotation? Teilen ist eigentlich rotieren oder?

Nein, Teilen ist nicht rotieren.
Teilen ist Teilen.

Wenn du Teilen meinst, dann schreib auch erst mal Teilen.

Es gibt einen berühmten Spruch.
"Premature optimization is the root of all evil"
"Vorzeitige Optimierung ist die Wurzel allen Übels"

Du bist jetzt genau auf dem Trip. Du meinst etwas optimieren zu müssen 
(mittels Rotation), was du noch gar nicht in seiner vollen Tragweite 
verstehst. Sieh erst mal zu, dass dein Programm RICHTIG ist, ehe du dich 
fragst, ob man bestimmte Dinge SCHNELLER machen kann. Ein korrektes 
Programm, welches langsam ist, ist immer noch ein nützliches Programm 
(weil korrekt). Aber ein fehlerhaftes Programm, das sauschnell ist, ist 
zu nichts zu gebrauchen.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut danke.

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.