Hallo Leute, ich hab mich schon hier mit der Suchfunktion durch das Forum gewühlt und auch google hab ich schon befragt, jedoch bin ich noch zu keinem Ergebnis gekommen. Es geht um Modulo Rechnen mit einem Atmel 8Bit Prozessor und zwar dem mega16. Wie man das Modulo bei einer Divison durch eine gerade Zahl bildet, ist mir klar, jedoch bräuchte ich das Modulo bei einer division durch 7. Ich komm einfach nicht zur Lösung. Ich bin mir sicher, dies ist nicht allzu schwer und jemand von euch kann mir da weiterhelfen. Grüsse Stifu
Wo ist der Unterschied zwischen einer geraden und einer ungeraden Zahl bezüglich der Modulo-Operation? Ich sehe da keinen. Wenn du Zweierpotenzen meinst kommt man ohne Modulo-Operation aus. Welche Sprache hättest du gerne?
Mussten den Modulo in der Uni schonmal programmieren in ASM für ne Plattform die sich Compi16 nannte. Hab hier nen Link wpo man sich so ein Programm mal anschauen kann http://et.netaction.de/et/file/files/645/sim-S03.TXT Ist eigentlich recht simpel zu programmieren.
Vielleicht findest du hier auch noch die eine oder andere Info: Beitrag "AVR/ Teilbarkeit durch 100 und 400"
Sorry Torsten, aber die Dokumentation zu dem Quelltext finde ich nicht wirklich hilfreich - sie erklärt nur die einzelnen Zeilen und nicht den Algorithmus. In Kurzschreibweise macht der Code Folgendes um a mod b zu berechnen: Ziehe von einer Zahl a sooft es geht die Zahl b ab. Der verbleibende Rest ist a mod b while (a >= b) a -= b; a := a mod b Das ist aber bei großen a und kleinem b extrem langsam! Zudem schreibt Stifu ja auch, dass er die Modulo-Rechnung generell beherrscht.
Vielen dank für die schnellen Antworten. Also ich bräuchte den Algorithmus für die Programmiersprache Assembler. Bei geraden Zahlen ermittle ich das Modulo indem ich die gewünschte Zahl mit Divisor-1 verande. Also bei 8 % 4 verande ich 8 mit 4 das ergibt das Modulo daraus also 0. Dies ist leider bei ungeradem divisor nicht möglich. Die Variante mit abziehen kenn ich, jedoch ist die mir zu Zeitaufwendig. Ich bräuchte eine möglichst kurze Operation. Kennt ihr da was passendes?
Das hat nichts damit zu tun, dass die Zahl gerade ist, sondern eine Zweierpotenz, wie oben schon geschrieben. Mit der Zahl 6 funktioniert das z.B. nicht! Es gibt viele Verfahren das zu lösen. Die Holzhammermethode ist oben ja schon beschrieben worden. (fortlaufendes Subtrahieren) Die elegante Methode ist eine binäre Division, welche vergleichsweise anspruchsvoll ist. Unter dem obigen Querverweis zu dem anderen Thread habe ich den Algorithmus für konstante Divisoren bereits beschrieben. Gib Bescheid, wenn du den nicht verstehen solltest. Die schnellste (aber speicherhungrigste Methode) ist eine Lookup-Tabelle in der für jede Zahl der Rest vermerkt ist (vorberechnete Werte).
Stimmt da hab ich in der Eile die geraden Zahlen mit denen der Zweierpotenz verwechselt. Mein Fehler. Also bei deinem Link und deiner Erklärung seh ich nicht ganz durch, ich wäre über ein klein wenig 'nachhilfe' von dir erfreut. Zudem hab ich noch ein zweites Problem. Also ich bin momentan dabei eine Uhr mit Datum in Assembler zu programmieren. Zeit und Datum funktioniert soweit ohne Probleme und wird auch auf einem Display angezeigt. Nun kommt es aber zur Wochentagsberechnung. Gibt es da eine gescheite Formel welche einfach in Assembler realisierbar ist? Zum andern hätt ich da ne Frage zur Ausgabe auf dem Display, wenn ich den Wochentag mal berechnte habe. Was ist die schönste Methode, ich habe schon eine Funktion fürs LCD geschreiben, welche einen String ausgibt. Ich hab auch schon gelesen, dass die Wochentagsausgabe einfach über eine Stringtabelle gespeichert werden kann und je nach Wochentag den entsprechenden String auf dem Display erscheinen lassen kann. Nur weiss ich nocht nicht ganz, wie ich das anstellen soll. Ich hoffe ihr könnt mir meine Fragen beantworten. Grüsse
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.