Berechnung des ggT zweier natuerlicher Zahlen a und b nach Euklid -> Problem



  • Hallo, die Aufgabe sollte mit der Topic geklärt sein hoffe ich!
    Habe hier nun ein Programm, welches bei einigen Zahlenpaaren auch richtige Werte gibt, bei dem Beispiel (der Aufgabe wo a=25 und b=15 (ggT(25,15)=10)) jedoch nicht! Und auch bei einigen anderen Beispielen kommen falsche Ergebnisse raus, kann mir jemand sagen woran das liegt?

    Thx im Voraus
    Schnittenhainy

    Hier der Code

    #include <iostream.h>
    
    int main()
    {
    	int a,b,x;
    	int r = 0;
    	cout << " *** Berechnung des ggT zweier natuerlicher Zahlen a und b nach Euklid *** " << endl << endl;
    	cout << " Geben Sie einen ganzzahligen Wert fuer a ein! ";
    	cin >> a;
    	cout << " Geben Sie einen ganzzahligen Wert fuer b ein! ";
    	cin >> b;
    // (1) - Setze m=a , n=b	
    	int m = a;
    	int n = b;
    
    	while (r < 0 || r > 0);
    	{
    
    	// (2) - Ist m<n, so vertausche m und n	
    	if (m<n)
    		{
    			cout << " Vertausche a und b, da a < b " << endl;
    			x = m;
    			m = n;
    			n = x;
    		}
    	// (3) - Berechne r = m%n
    	r = m%n;
    	m = n;
    	n = r;
    
    	}
    cout << " " << m << endl;
    
    	return 0;
    }
    


  • Schnittenhainy schrieb:

    while (r < 0 || r > 0);

    da ist doch ein ";" zuviel



  • und du solltest dann auf n!=0 testen den r ist am begin 0



  • Wie wärs wenn du davon einfach eine Rekursion machst? 😃

    #include <iostream>
    #include <fstream>
    using namespace std;
    int eZ,zZ;
    int ggT(int a,int b)
    {
    	if(b==0)
    	return a;
    	else
    	return ggT(b,a%b);
    }
    void main()
    {
    	cout<<"Gib die erste Zahl ein: ";
    	cin>>eZ;
    	cout<<"\nNun bitte die zweite Zahl: ";
    	cin>>zZ;
    	cout<<"\n"<<ggT(eZ,zZ)<<" ist der ggT!";
    }
    

    Ich finde, mit einer Rekursion ists wesentlich einfacher!



  • thx @ b7f7 für die Hinweise, habe das Programm jetzt soweit verbessert und verändert, so dass es auch funktioniert 🙂

    #include <iostream.h>
    
    int main()
    {
    marke:
    	int a,b,x;
    	int r = 5;
    	cout << " ************************************************************************* " << endl;
    	cout << " *** Berechnung des ggT zweier natuerlicher Zahlen a und b nach Euklid *** " << endl;
    	cout << " ************************************************************************* " << endl << endl;
    	cout << " \tGeben Sie einen ganzzahligen Wert fuer a ein! ";
    	cin >> a;
    	cout << endl;
    	cout << " \tGeben Sie einen ganzzahligen Wert fuer b ein! ";
    	cin >> b;
    	cout << endl;
    	if (a == 0 || b == 0)
    	{
    		cout << " \tEine Ihrer Eingaben ist = 0 und somit ungueltig!" << endl;
    		cout << " \tZurueck zur Eingabe..." << endl << endl;
    		goto marke;
    	}
    // (1) - Setze m=a , n=b	
    	int m = a;
    	int n = b;
    
    	while (r != 0)
    	{
    
    	// (2) - Ist m<n, so vertausche m und n	
    	if (m<n)
    		{
    			cout << " \tVertausche a und b, da a < b... " << endl;
    			x = m;
    			m = n;
    			n = x;
    		}
    	// (3) - Berechne r = m%n
    	r = m%n;
    	m = n;
    	n = r;
    
    	}
    cout << " \tggT(a,b) = " << m << endl << endl;
    
    	return 0;
    }
    

    @AltesTestament: Bin leider noch ziemlich unerfahren und neu in Sachen C++ und Rekursion sagt mir noch nicht wirklich was, habe das Programm allerdings ausprobiert und es ist wirklich einfacher allerdings für mich noch nicht ganz verständlich. Ich müsste mir erst "Rekursion" erklären / erklären lassen 🙂
    Trotzdem thx für den Tipp / deine Mühen

    cYa Schnittenhainy


Anmelden zum Antworten