Hallo an alle Ich habe schon dieses Forum durchsucht und mir die Artikel dazu durchgelesen. Jedoch bin ich bis jetzt nicht ganz durchgestiegen. Hier wird imm geschrieben, dass man nur die Zahl minus 10 nehemen muss. Der Rest soll dann das Ergebniss sein. Das kann ich nicht verstehen. Nehmen wir mal z.B. die Zahl 138 1. 138 - 10 = 128 2. 128 - 10 = 118 3. 118 - 10 = 108 4. 108 - 10 = 98 5. 98 - 10 = 88 6. 88 - 10 = 78 7. 78 - 10 = 68 8. 68 - 10 = 58 9. 58 - 10 = 48 10. 48 - 10 = 38 11. 38 - 10 = 28 12. 28 - 10 = 18 13. 18 - 10 = 8 Also bleibt als Rest 8 übrig. Was muss ich jetzt machen damit ich das Ergebnis für die BCD-Ansteuerung in 3 7 Segmentanzeigen bekomme? Grüsse Michael
Der Rest ist schonmal richtig... 138 % 10 = 8 bzw. das was bei deiner Rechnung übrigbleibt, wäre die letzte Stelle 138 / 10 = 13 13 % 10 = 3 mittlere Stelle 13 / 10 = 1 1 % 10 = 1 erste Stelle % = Rest der Division
1. warum nimmst du manchmal das Zeichen % für die Division und ein anders mal das Zeichen / ? 2. Wenn ich keine Division berechen kann, wie gehe ich dann vor? Gibt es da nicht eine andere Lösung? Grüsse Michael
@Michael Na, dann schaue Dir doch mal Deine Tabelle genau an! Nehmen wir mal z.B. die Zahl 138 1. 138 - 10 = 128 2. 128 - 10 = 118 3. 118 - 10 = 108 4. 108 - 10 = 98 5. 98 - 10 = 88 6. 88 - 10 = 78 7. 78 - 10 = 68 8. 68 - 10 = 58 9. 58 - 10 = 48 10. 48 - 10 = 38 11. 38 - 10 = 28 12. 28 - 10 = 18 13. 18 - 10 = 8 Also bleibt als Rest 8 übrig. Nach was sieht das wohl aus? Richtig, nach einer Programm-Schleife. In der letzten Zeile stehen beide erforferlichen Ergebnisse, der Quotient und der Divisionsrest. Markus
Zu 1.: % ist der Modulo-Operator, der den Rest einer ganzzahligen Division liefert (deshalb 138 % 10 = 8 weil 138 / 10 = 13 Rest 8). Zu 2.: Wenn Du keine Division kannst (ich weiß nicht, mit was für einem System Du arbeitest, das eine Division nicht einmal durch eine Ersatzoperation ersetzen kann), dann mach es so, wie Du selbst es oben gemacht hast: Als sukzessive Subtraktion...
>1. warum nimmst du manchmal das Zeichen % für die Division und ein >anders mal das Zeichen / ? Weil beide unterschiedliche Ergebnisse liefern: % liefert den ganzzahligen Rest / liefert bei ganzen Zahlen (integer, char...) die ganzzahlige Division (sozusagen alles was sonst vor dem Komma steht). Wenn man sich deine Tabelle anguckt führt die zu zwei Schleifen: Von 138 so oft 10 subtrahieren, bis das Ergebnis kleiner als 10 ist ==> Das Ergebnis ist die kleinste Stelle. Ist die Anzahl der Schleifendurchläufe auch noch >= 10, muß eine weitere Schleife nach dem gleichen Prinzip durchlafuen werden. Das muß man einfach so lange machen, bis die Anzahl der Schleifendurchläufe kleiner als 10 ist. Somit sollte es möglich sein, jede beliebige natürliche Zahl in ihre Stellen mit nur 2 ineinandern verschachtelten Schleifen zu zerlegen.
Ich habe da was gefunden. Was sehr viel besser geht als dieser Vergleich jedoch bin ich noch nicht ganz dahinter gestiegen, wie er vorgeht. Vielleicht kann ja jemand von Euch was dazu sagen hier der Link: http://www.ingorohloff.de/tgi3/node7.html#SECTION00024100000000000000
Sorry der Link war es nicht :-) Ich meinte eigentlich die Umsetzung: hier der richtige Link: http://www.ingorohloff.de/tgi3/node8.html
Das Ding ist von 1997, ob der Autor selbst überhaupt noch weiß, was er damals mit der Grafik zeigen wollte (ich hab mir nicht die komplette Seite angeguckt...). Die 8 steht in deiner letzten Siebensegmentanzeige. Die Anzahl der Durchläufe, die du bis zu diesem Ergebnis gebraucht hast, bilden die beiden anderen (höherwertigen) Segmente. Die kann man nach der gleichen Methode bestimmen. (Hatte ich oben schon beschrieben...)
<Zitat> Da der zu implementierende Chip genau die Funktion des Vergleichens und Subtrahierens übernimmt, kann man eine Division durch eine Kaskadierung des Chips erreichen </Zitat> Er macht also genau das gleiche wie du. Nur macht er's in Hardware und du in Software. Komm schon. So schwer ist das nicht. In längstens 2 Stunden hast du das implementiert. Wenn es nur um Bytes geht: Entweder ist die Zahl > 199 oder nicht. Wenn größer als 199, dann ist die erste Stelle schon mal eine 2. Wenn nicht, dann kann die Zahl noch größer als 99 sein, dann ist die erste Stelle eine 1 ansonsten ist das eine 0. Gleichzeitig hast du jeweils entweder 200 oder 100 oder 0 abgezogen und damit deine Zahl in den Bereich 00 bis 99 gebracht. Jetzt ziehst du in einer Schleife solange 10 ab, bis das Ergebnis kleiner als 10 wird. Dabei zählst du mit wieoft du abgezogen hast. Diese Anzahl ist die Zehnerstelle und das was nach der ganzen Abzieherei übrig bleibt ist die Einerstelle. Wenn wir nicht über Bytes reden, dann funktioniert die Erkennung der Hunderterstellen genauso wie die der Zehnerstellen. Nur ziehst du halt solange 100 ab, bis das Ergebnis kleiner als 100 geworden ist und zählst mit wie oft du das gemacht hast. Apropos: Worüber reden wir eigentlich? Assembler oder C?
Ich will es im FPGA realisieren :-) Ok vielen Dank für Eure Hilfe. Ich werde es wie oben beschrieben realsieren. Es stellt kein Problem mehr da. Zeit für die Berechnung habe ich ich auch genügend. :-) P.S. Ich weiß es ist nicht das Forum für FPGAs aber ich wollte auch nur Ideen für die Umsetzung sammeln. 2 Werte voneinander zu subtrahieren ist kein Problem. DANKE
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.