Ägyptische Multiplikation mit Rekursion



  • Hallo, ich soll die ägyptische Multiplikation als rekursive Funktion programmieren. Dabei soll ich die Zwischenergebnisse gut lesbar auf dem Bildschirm darstellen.

    Nun soweit bin ich gekommen:

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    int ägyptischeMultiplikation(int &links, int &rechts, int&ergebnis) {
    
    	if (links == 0 || rechts == 0) {
    		return 0;
    	}
    	if (links == 1 && rechts == 1) {
    		return 1;
    	}
    	if (rechts != 1) {
    		cout << setw(8) << links << setw(8) << rechts << endl;
    		return ägyptischeMultiplikation(links = links * 2, rechts = rechts / 2,ergebnis );
    	}
    }
    
    void main() {
    	int lz, rz, ergebnis;
    
    	cout << "Aegyptische Multiplikation: " << endl;
    	cin >> lz >> rz;
    	cout <<setw(8)<< lz << " * " << rz << endl;
    	cout << "----------------------"<< endl;
    	ägyptischeMultiplikation(lz, rz, ergebnis);
    	cout << setw(8) << lz << setw(8) << rz << endl;
    	cout << "Ergebnis :" << ergebnis;
    
    	getchar();
    	getchar();
    }
    

    Doch wie kann ich jetzt das Ergebnis ausgeben, dafür muss ich ja, wenn die rechts stehende Zahl gerade ist, die links stehehnden (verdoppelten) Zahlen streichen. Und die Summe der nicht gestrichenen links stehenden Zahlen ergibt ja mein Ergebnis. Doch wie kann ich das implementieren?



  • In welcher Programmiersprache möchtest du unterwegs sein? C, C++ oder CLI? Finde da mal eine eindeutige Aussage! Es kommt da auf jedes einzelne Zeichen an!

    Du bist hier im C-Teil dieses Forums.
    Den Quelltext hast du mit C++/CLI formatiert?
    Soll aber wohl C++ werden oder, keine Ahnung 😕

    Du schreibst doch die Zeile mit den ungeraden Zahlen, bei dir rechts, sollst du links addieren.

    Mach das doch und gib jede Zeile passend mit

    ergebnis
    

    aus 👍

    Ach ja, wo in deinem Quelltext berechnest du das Ergebnis 😕



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Werd dir auch darübe klar, wozu Rückgabewerte von Funktionen da sind und wofür man Referenzen benutzt.



  • Von so einer Zeile:

    return ägyptischeMultiplikation(links = links * 2, rechts = rechts / 2,ergebnis );
    

    würde ich stark abraten. Mach nicht mehrere Dinge zusammen, das macht es nur unübersichtlich! Warum willst du links und rechts überhaupt verändern? Außerdem solltest du noch überlegen, ob das mal 2 und durch 2 auch bei ungeraden rechts-Zahlen noch funktioniert.

    Außerdem: wenn rechts = 1 ist und links weder 0 noch 1 ist, hat deine Funktion kein return!



  • Die ganzen Hinweise machen doch gar keinen Sinn, wenn sich der TE gar nicht aktiv an seinen Threads beteiligt... sr4 ist jetzt am Zug, sowohl bei diesem als auch bei seinem anderen Thread.


Anmelden zum Antworten