Division im Binärsystem

Hi Leute,

ich hab da ein paar Schwierigkeiten mit meinen Hausaufgaben: Unser Informatiklehrer hat uns als Hausaufgabe aufgegeben ein Programm zu schreiben, um eine beliebige Zahl, die man selbst eintippt, durch drei teilen zu können. Das Problem an der Sache ist, dass wir momentan das Thema der technischen Informatik haben und uns auf das Grundgerüst eines Computers beschränken. Demnach haben wir nur ein Eingabegerät, ein Rechenwerk, einen Arbeitsspeicher und ein Ausgabegerät. Außerdem sind die einzigen Befehle, die wir haben Eingabe, Ausgabe, Speichern und Laden (zwischen Rechenwerk und Arbeitsspeicher), Addieren einer beliebigen Zahl und Subtrahieren einer Konstante, sowie „Springe an eine bestimmte stelle“ und „Springe an eine bestimmte stelle, wenn Zahl im Rechenwerk ungleich null“.

Mir ist zwar schon ein Anfang eingefallen, aber ich habe das Problem, dass ich nur eine Konstante subtrahieren kann und keine beliebige Zahl auf einem Speicher.

Danke im voraus für baldige Hilfe

MfG

bluebutton38

Moin, bluebutton38,

schau Dir mal die Befehlsformate genau an, das muss es eine Adressierung geben, sonst wäre keinerlei Zugriff auf den Speicher möglich - weder die Eingabe noch eine Verarbeitung.

Gruß Ralf

Mit den Befehlen Speichern, Laden und Addieren kann man auf eine Adresse nach dem System von 0000 0000 bis 1111 1111 zugreifen. Außerdem wird beim Addieren eine zahl auf eine Zahl auf einer bestimmten Adresse addiert. Genauso beim Subtrahieren einer Konstante.

MfG

bluebutton38

Ich denk nicht dass es eine gute Lösung ist, aber es ist eine Lösung.
Du speicherst eine Kopie der Zahl, dann ziehst du immer wieder 1 ab und addierst die Kopie mit der Kopie und nochmal mit der Kopie und vergleichst mit der Ursprünglichen Zahl. Wenn die Diffenrenz 0 ist, hast du durch 3 geteilt.

Gruß
Tommy

Hallo,

du nimmst den Teiler als Konstante, bei jedem Mal wo du den von der ursprünglichen Zahl abziehst und grösser Null bleibst, zählst du auf nen Counter eins dazu.

Irgendwann ist die Zahl gleich Null, wenn durch 3 teilbar und das was im Speicher des Counters steht ist das Ergebnis.

Ich hoffe, ich hab mich halbwegs klar ausgedrückt.

Gruss
Petra

Hi Tommy,

die gleiche Idee hatte ich auch schon, aber leider gibt es bei uns keine Möglichkeit zwei variablen voneinander abzuziehen, sodass man beide vergleichen müsste, indem man von den Zahlen immer eins abzieht und am Ende, wenn eine Zahl null ist, auch guckt, ob die andere zahl null ist. Der Weg ist zwar lang, aber scheinbar der einzigste Weg, der möglich ist.

Trotzdem vielen Dank für die Hilfe.

MfG

bluebutt38

Ein Versuch in C
Hossa :smile:

Leider hast du hier nicht die genaue Form der Befehle aufgelistet, die du zur Verfügung hast, so dass du vermutlich keine 100%-ig passende Antwort kriegen wirst. Hier ein C-Progrämmchen, das Folgendes berechnet:

a[2] = a[0] mod a[1];
a[3] = a[0] div a[1];

Der Code setzt voraus, dass der Dividend in a[0] steht und der Divisor in a[1]. Weiter müssen a[2] und a[3] vor Beginn des Codes mit 0 initialisiert sein.

while(a[0]--) {
 a[1]--; 
 a[2]++;
 if(0==a[1]) {
 ++a[3];
 a[1]= a[2];
 a[2]= 0;
 }
}

Die einzigen Rechenoperation sind Addition und Subtraktion einer 1. Daher solltest du die Befehle in deinen Code übersetzten können.

Viele Grüße

Hase