modulo 10?! Klausur 602

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

modulo 10?! Klausur 602
In Aufgabe 3b soll man eine Byte-Zahl modulo 10 (wa ja leider keine 2er-Potenz is :-/ ) nehmen. Wir haben lange rumgetüfftelt aber keine Idee gehabt.
Ist vielleicht der eine oder andere auf die Lösung gekommen?!


Die Aufgabe wurde schon mal in nem anderen thread (von vor einem Jahr oder so) bearbeitet. Dort wird einfach immer 10 abgezogen bis die Zahl kleiner ist als 10. Andererseits ist das etwas unbefriedigend, insbesondere weil in der Aufgabenstellung was von “effizient” steht…


thanx für die schnelle antwort…
inzwischen hab ich rausgefunden dass man auch mit idiv arbeiten könnte. Im Skript steht nämlich, dass idiv x, y sowohl x/y als auch x mod y berechnet. der Modulo-Rest steht dann einfach im %edx-Register. (Folie 90) :wink:


Wenn ich mich richtig errinere steht irgendwo in der Aufgabe dass man es mit einem ganz primitiven Prozessor zu tun hat, der keine direkten multiplikations- /divisionsbefehle kennt (und der nur der Einfachheit halber mit Intel-Syntax programmiert werden soll). So einfach kommst du also nicht davon (gibt ja immerhin auch 8 Punkte oder so…)


irgendwo hier hat steppenwolf auch mal ne effizientere lösung gepostet; mit shiften und viel mystik :wink:
ging glaub so, dass man die zahl durch 160 teilt, dann durch 160/2… bis durch 10, bis sie kleiner 10 ist, und das ist dann das ergebnis


warum denn grade 160??? und ausserdem: wie willst du das mit dem teilen durch eine NICHT 2er Potenz anstellen? wir haben nur shift, add und sub … oder haben wir jetzt doch idiv/imull … weil mit imull faellt mir auch was schoenes ein …


Vielleicht hilft euch das weiter?

http://pfaltin.dyndns.org/cgi-bin/forum/YaBB.cgi?board=tech;action=display;num=1096299400#6

Ich werd’s mir schön klein mit ausdrucken und dann in der Klausur anschauen, falls nötig.


Ich hab die Klausur seinerzeit mitgeschrieben und bin da dran mehr oder weniger verzweifelt. Hinterher hab ich da noch ewig dran rumgebissen und die effiziente Methode gibts da nicht. In der Klausur (die hab ich btw nicht bestanden, dafuer dann die naechste :wink: ) reichte einfach immer 10 abziehen. Ein bisschen effizienter gehts aber mit viel Schreibaufwand und eindeutig immer noch haesslich:
Wenn die Zahl laenger ist als […] 10bit immer 1000 abziehen, laenger als 7bit 100, laenger als 4bit 10, solange bis es eben nimmer geht.
Die Schreibarbeit rentiert sich in der Klausur auf keinen Fall.


OK, danke für die Einschätzung. Gibt etwas weniger zu drucken und eine etwas bessere Vorstellung der Punktevergabe… :wink:


uff, dann war meine loesung gestern ja gar nicht so falsch…

naja. die loesung von diesem checker will ich gar nicht verstehen :#: :#: :#: da wirste ja bekloppt. ausserdem haette er vielleicht ein paar nette kommentare in seinen c code reintun koennen (wenns c++ is, is es mir auch egal, also keine klugscheissereien a la supiinfostudent mit 4.0 vordiplom bitte :-p)

Nachtrag: schaut euch mal die HP von dem Typen an, dann werdet ihr Angst kriegen…


thx@Yves. der algorithmus ist wirklich gut :smiley:
wobei er natürlich linear mit den dezimalstellen ist und nicht logarithmisch.


lol, ich weiss gar nicht mehr, was ich da vor einem jahr an gedankenmuell produziert habe :]. auf jeden fall euch allen viel erfolg morgen!


@fredator

warum denn grade 160???

Schreib mal ne 10 binär und verschieb die ersten 4 bit nach hinten.


ah 1x128 + 1x32 …