MATHEMATISCHES INSTITUT DER UNIVERSITÄT MÜNCHEN Dr. W. Spann, G. Kleen SS 2023

Programmieren I für Studierende der Mathematik

Ziel ist die Erstellung eines Programms, das zur Multipliktion zweier natürlicher Zahlen vom Datentyp unsigned int nur Bitoperationen und Vergleiche verwendet und Zahlbereichsüberläufe erkennt.

Die Multiplikation zweier Dualzahlen wird auf eine Folge von Additionen und Schiebeoperationen zurückgeführt. Zur Ausführung der Addition soll die Von-Neumann-Addition benutzt werden: Dabei werden gleichzeitig für alle Stellen die einstellige Addition ohne Übertrag durchgeführt und getrennt die zugehörigen Überträge berechnet. Das so gefundene Ergebnis und die um ein Bit verschobenen Überträge werden mit derselben Methode solange behandelt, bis kein Übertrag mehr auftritt.

(a) Erstellen Sie eine Funktion printbits ohne Rückgabewert mit einem Parameter u vom Datentyp unsigned int, die alle 32 Bits von u ausgibt, und testen Sie diese an vorzeichenlosen ganzen Zahlen, die Sie hexadezimal einlesen.

(b) Erstellen Sie eine Funktion mult mit zwei Parametern a und b vom Datentyp unsigned int, die als Rückgabewert a·b liefert und die Multiplikation mittels Additionen und Schiebeoperationen durchführt. Testen Sie sie und lokalisieren Sie etwaige Fehler in mult mit Hilfe der Funktion printbits aus (a). Ersetzen Sie dann in mult die Addition vorzeichenloser Zahlen durch eine Funktion add, die Sie vor mult definieren und die den üblichen Additionsoperator + benutzt.

(c) Implementieren Sie die Von-Neumann-Addition als Funktion add in einem separaten Programm, testen Sie sie und lokalisieren Sie etwaige Fehler wiederum mit Hilfe der Funktion

     printbits.

(d) Ersetzen Sie die Funktion add aus (b) durch die von-Neumann-Addition.

Die Programmeingabe soll im Hexadezimalformat erfolgen. Geben Sie die eingelesenen Zahlen, das nach obiger Methode berechnete Produkt und zum Vergleich das mit dem Multiplikationsoperator berechnete Produkt jeweils dezimal und hexadezimal aus.

Rechnen Sie folgende Beispiele:

  (i)  fa7      a8bd
 (ii)  ffff     10001
 (iii) 777777       888

Bearbeitungszeitraum: bis Freitag, 9.6.2023, 12^{00}