2 Stellige INT-Zahl auflösen in zehner und einer Stelle (INT)

Bonsai-San

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
cpu 315 2dP

hallo, folgendes Problem

ich hab in einer datenbank einen zweistelligen wert stehen (INT)

z.B. 12

nun soll diese zahl aufgelöst werden..

als ergebis gibt es dann zwei neue datenbank einträge.

einmal die 10er-Stelle und natürlich noch die 1er Stelle.

wie kann ich das am besten bewältigen ??

danke schonmal

Sascha
 
Hallo, der Optimierer mal wieder ;)

Die Idee mit dem BCD-Umwandeln hatte ich gestern auch schon, doch da muß man ja noch relativ
umständlich die Nibbles trennen.
Code:
      L     "INT_Zahl"
      ITB
      PUSH
      UW    W#16#F
      T     "INT_Einer"
      POP
      SRW   4
      T     "INT_Zehner"

Die "Modulo"-Division ist da doch kürzer. Ich würde aber keine Schmiermerker benutzen.
Code:
      L     "INT_Zahl"
      L     10
      /I    
      T     "INT_Zehner"
      SRD   16
      T     "INT_Einer"
Es muß natürlich sichergestellt sein, daß "INT_Zahl" nur Werte von 0 bis 99 enthält.

Gruß
Harald
 
hallo
danke für die tipps

hab es unoptimiert gelöst ;O)
Code:
      L     #Koordinate
      ITB   
      T     #Zwischemspeicher
      L     #Zwischemspeicher
      L     W#16#F
      UW    
      T     #Koordinate1er
      L     #Zwischemspeicher
      L     W#16#F0
      UW    
      SRW   4
      T     #Koordinate10er
na sieht doch fast so aus ;O)
inkl schreibfehler seh ich gerade.. :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ihr Rechenkünstler, wie erklärt sich denn der Code?

die einfachste modulo operation ist die /I

Code:
*
      L     "Zahl"
      L     10
      /I    
      T     MD    10
 
      L     MW    10
      T     "Einer"
      L     MW    12
      T     "Zehner"

Angenommen ich habe ein INT-Zahl 35, dann wird die ja durch 10 geteilt, was 3,5 ergibt. Aber INT-Zahlen sind doch Ganzzahlen - wird dann im MD10 (bzw. im MB13) nur die 3 gespeichert?
 
Angenommen ich habe ein INT-Zahl 35, dann wird die ja durch 10 geteilt, was 3,5 ergibt. Aber INT-Zahlen sind doch Ganzzahlen - wird dann im MD10 (bzw. im MB13) nur die 3 gespeichert?

ja, richtig erkannt, ganzzahlen.
im akku1 (breite 32 bit) wird im low-word (16bit, was einem INT entspricht) der ganzzahlige quotient abgelegt und im high-teil (auch 16bit) der divisionsrest.
mit T in ein doppelwort wird der gesamte akku1 in den speicherbereich übertragen.
der speicherbereich MD10 setzt sich ja aus den MB10,11,12,13 bzw. aus den MW10 und 12 zusammen, womit man so komfortabel an ganzzahligen quotienten und divisionsrest heran kommt...
 
Man zitiere die Step7 Online-Hilfe:
STEP7 schrieb:
Format

/I

Beschreibung

/I (Dividiere Ganzzahlen, 16 Bit) dividiert den Inhalt von AKKU2-L durch den Inhalt von AKKU1-L. Die Inhalte von AKKU1-L und AKKU2-L werden als Ganzzahlen (16 Bit) ausgewertet. Das Ergebnis wird in AKKU 1 gespeichert und besteht aus zwei Ganzzahlen (16 Bit), dem Quotienten und dem Divisionsrest. Der Quotient wird in AKKU1-L gespeichert und der Divisionsrest in AKKU1-H. Die Operation wird ausgeführt, ohne das VKE zu berücksichtigen oder zu beeinflussen. Die Statusbits A1, A0, OS und OV werden als Ergebnis der Operation gesetzt.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wow, die Antwort kam ja super schnell - danke!

Hm, durch den Befehl "T MD10" wird also die 3 in das MW12, bzw. in das MB13 geschrieben und der Rest (also die 5) in das MW10, bzw. in das MB11.

Ist das so gemeint?
 
Naja, Antwort wäre schon prima... bin auf Alles gefasst! :p

Wenn der Quotient in dem Low-Word abgelegt wird, so müsste das ja das MW12 sein. Der Divisionsrest wird im High-Word abgelegt, das wäre ja dann das MW10.

Aber stimmt wohl nicht, oder?
 
Ach komm jetzt vierlagig... sei net so gemein zu einer Anfängerin...

sag schon - richtig oder falsch, was hab' ich schon zu verlieren? ;)
 
Code:
[SIZE=3][FONT=Calibri]                                            31..                        ..16                        15..                        ..0[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 2                 nicht beachtet                                                  Dividend[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]                                                                                           /I                                            [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 1                 nicht beachtetet                                              Divisor[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]                                                                                           =                                            [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 1                           Rest                                                      Quotient[/FONT][/SIZE]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
[SIZE=3][FONT=Calibri]                                            31..                        ..16                        15..                        ..0[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 2                 nicht beachtet                                                  Dividend[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]                                                                                           /I                                            [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 1                 nicht beachtetet                                              Divisor[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]                                                                                           =                                            [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]Akkumulator 1                           Rest                                                      Quotient[/FONT][/SIZE]

wenn du es jetzt noch, nicht mit word gemacht hättest, hätte code auch noch was in der darstellung gebracht...
 
Zurück
Oben