0 Daumen
1,5k Aufrufe

Ich soll einen taschenrechner programmieren, in dem weder die Befehle add, sub, mul noch div vorkommen. Der Taschenrechner soll aber genau das können. also sowas wie 2*5 oder 2/2 oder 3+3 oder 4-1 soll er ausrechnen können. Bei der division kommen immer ganze zahlen raus. wie kann man das mathematisch umsetzen (also mit logik)?

Avatar von

3 Antworten

+1 Daumen
 
Beste Antwort

Hey theoretiker,

Ich gebe dir mal ein Beispiel für einen Additionsalgorithmus in C++, der ohne die Systemaddition auskommt:

unsigned int sum(unsigned int add1, unsigned int add2)
{
    unsigned int carry = 0;
    do
    {
        carry = (add1 & add2) << 1;
        add1 = add1 ^ add2;
        add2 = carry;
    }
    while(add2 != 0);
    return add1;
}

Suchst du so etwas? &, <<, ^ sind bitweise Operationen.

Gruß

Avatar von 6,0 k

Dankeschön. genau das suche ich.

+1 Daumen

ich steuere noch eine Implementierung zu add, sub und mul bei. Da der Name Raspberry fiel, ist meine Implementierung auch dafür vorgesehen ... allerdings in ARMv7. Basierend auf einem Additionsalgorithmus mit logischen Operatoren, kann man auch einen für die Multiplikation konstruieren. Dazu gibt es im Internet ausreichend Material. Sub basiert bei mir übrigens darauf, dass ich das Zweierkomplement des zweiten Summanden berechne und dann implizit logicadd (also die Implementierung von add ohne \(+\)) aufrufe.

Hier meine Implementierung: https://github.com/kazutokirigayakun/Mathelounge/tree/master/logic_calc

André

Avatar von

Was ist arm7? Ich kenne nur assemblercode.

ich sehe grad das wir auch diese befehle nutzen. Ich dachte aber das ist einfach nur Assember?

ARMv7 ist ein Assembler-Dialekt. Dir ist bekannt, dass es nicht "den Assembler" gibt, oder? Ein gutes Tutorial und weitere Informationen findest Du hier http://thinkingeek.com/arm-assembler-raspberry-pi/

0 Daumen

Für die Addition verwende inc.

Du lädtst den 1. Summanden und machst dann eine

Schleife, die so oft läuft wie der Wert des 2. Summanden

und in der nur inc ( also Akku um 1 erhöhen) steht wie

der Wert des 2. Summanden angibt.

Bei Subtraktion entsprechend  mit   dec.

Mit Hilfe dieser beiden Routinen kannst du dann mal

und durch programmieren:

Für x*y einfach x laden und die Addition von x

y-mal in einer Schleife durch laufen lassen.  Bei Division

x:y  so lange das y von x abziehen, bis der Rest kleiner als y

ist. Die Anzahl der Wiederholungen ist dann das Divisionsergebnis.

Avatar von 289 k 🚀

Die Anwort ist sicher geeignet, den FS zufrieden zu stellen. Man benutzt zum Programmieren der Addition einen Befehl, der eine bestimmte Addition durchführt, ohne sie explizit zunennen. Tatsächlich verschleiert das das Zeichen "inc" lediglich das Zeichen "+". Das ist, wie wenn man allen Wölfen einen Schafspelz umhängt und  behauptet, das Wolfsproblem sei gelöst.

es gibt beim raspberry keinen inc befehl (zumindest kenne ich den nicht)? außerdem ist inkrement doch auch plus, also ist das nicht erlaubt.

Wo ist bisher vom raspberry die Rede ?

Ich sehe gerade du bist der Fragesteller.
Dann entfällt mein Kommentar zu raspberry.

" Inc " ist nichts anderes als " plus ". Also
dasselbe.

Wie man 2 Zahlen addieren will ohne ein
Additionszeichen ( wie auch immer ) zu verwenden
dürfte wohl nicht möglich sein.



Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community