Kommt nicht drauf

michelr

Grünschnabel
Hallo,
habe ein Programm geschrieben das den ggt (größten gemeinsamen Teiler) von 3 Zahlen ermittelt. Bin so vorgegangen das ich erst die 3 Zahlen sortiere, dann den ggt ermittle und ausgebe. Wenn meine 3 Zahlen unterschiedlich sind (z.B. 3,6,9) läuft mein Programm einwandfrei. Aber wenn 2 zahlen gleich sind (z.B. 3,6,3) dann wird der ggt nicht ermittelt und das Programm hängt sich nach Eingabe der dritten Zahl auf. Das gleiche passiert wenn ich drei mal die gleiche Zahl eingebe. Ich komme echt nicht drauf wo mein Fehler liegt. Vielleicht sitz ich einfach schon zu lange davor. Für eure Hilfe wäre ich sehr dankbar.

Code:
using namespace std;

int ergebnis;
int Zahl1=0, Zahl2=0, Zahl3=0;
char nochmal;

int ggt_sort(int z1, int z2, int z3);
int ggt(int z1, int z2);

int ggt_sort(int z1, int z2, int z3)
{
int hilfsvar=0;
int sortiert=0; //0 steht für falsch bzw. noch nicht sortiert

while (sortiert!=1)
{
	if (z1>z2)
	{
		if (z2>z3)
		{
		sortiert=1;
		}
		else
		{
		hilfsvar=z2;
		z2=z3;
		z3=hilfsvar;
		}
	}
	else
	{
	hilfsvar=z1;
	z1=z2;
	z2=hilfsvar;
	}
}
return ggt(z1,ggt(z2,z3));
}


int ggt(int z1, int z2)
{
int Rest;
while(z2>0)
{
	Rest=z1%z2;
	z1=z2;
	z2=Rest;
}
return z1;
}

int main ()
{
do
{
cout <<endl<< "1.Zahl eingeben: ";
cin >> Zahl1;
cout << "2.Zahl eingeben: ";
cin >> Zahl2;
cout << "3.Zahl eingeben: ";
cin >> Zahl3;

ergebnis=ggt_sort(Zahl1,Zahl2,Zahl3);

//Ausgabe ob ggt vorhanden (außer 1) oder nicht 
if (ergebnis>1)
{
	cout <<endl<<"Der ggt der 3 Zahlen lautet: " <<ergebnis<< endl;
}
else
{
	cout<<endl<<"Die 3 eingegebenen Zahlen haben keinen gemeinsamen Teiler (außer 1) !"<<endl;
}

cout<<endl<<"Neue Eingabe (j/n)?: ";
cin>>nochmal;
nochmal=toupper(nochmal);
}while(nochmal=='J');
return 0;
}
 
ersetze mal die > in der sortierschleife durch >= - ist nur ein quick-guess, aber könnte sein.
 
kleine Änderung große wirkung ! das programm läuft jetzt einwandfrei wie sagt man so schön: manchmal sieht man vor lauten bäumen den wald nicht mehr (oder so ähnlich). Vielen Dank jedenfalls
 
Zurück