Seite 4 von 4

Verfasst: Donnerstag 25. September 2008, 23:52
von Ghost
So ich habe nun nach etlichen Stunden des Probierens und Kopfzerbrechens ein funktionierendes Programm geschrieben mit dem man den ggT ausrechnen kann.
Für die meisten von euch wäre das sicher ne Sache von 5 Minuten gewesen und sicher ist meins nicht der beste Weg, aber hauptsache er funktioniert nun erstmal :)

Ich danke euch allen für die tolle Hilfe, ohne euch hätte ich das nie hinbekommen.
EINEN SUPER GROßEN DANK AN EUCH.
Hier das funktionierende Programm: :)

Code: Alles auswählen

#Programmueberschrift
print "Dieses Programm rechnet Ihnen den groessten gemeinsamen Teiler zweier Zahlen aus."
print
#Daten
zahl1 = input("Bitte geben Sie die 1. Zahl ein ")
zahl2 = input("Bitte geben Sie die 2. Zahl ein ")
#Zahlen werden der groesse nach sortiert
if zahl1 > zahl2:
    zahl_gross = zahl1
else:
    zahl_gross = zahl2
if zahl1 < zahl2:
    zahl_klein = zahl1
else:
    zahl_klein = zahl2
print
print "Die groessere Zahl ist",zahl_gross, "und die kleinere ist",zahl_klein
print

#Verarbeitung
#Anfang der Schleife
rest = 1
while(rest != 0):
    rest = zahl_gross % zahl_klein
    teiler = zahl_gross / zahl_klein
    print zahl_gross,"/",zahl_klein,"=",teiler,"und der Rest ist:", rest
    zahl_gross = zahl_klein
    zahl_klein = rest

#Ausgabe des ggT
if rest == 0:
        print "Der groesste gemeinsame Teiler von",zahl1,"und",zahl2,"ist",zahl_gross

Verfasst: Freitag 26. September 2008, 08:54
von jens
Spontan fällt mir folgendes ein, um die größere und kleinere Zahl zu bekommen:

Code: Alles auswählen

zahl_gross = max([zahl1, zahl2])
zahl_klein = min([zahl1, zahl2])
Noch einfacher:

Code: Alles auswählen

zahl_klein, zahl_gross = sorted([zahl1, zahl2])
IMHO ist es keine gute Idee, input() zu nehmen! Besser ist es raw_input() mit einem int() oder float(), siehe: [wiki]Thema Sicherheit#Input[/wiki]

Verfasst: Freitag 26. September 2008, 09:35
von mkesper
Super, dass du durchgehalten hast.
Nur ein Denkanstoß noch: Wieso vergleichst du zweimal, welche Zahl die größere ist?

Verfasst: Freitag 26. September 2008, 12:55
von numerix
@Ghost: Und denk mal über Zeile 32 nach. :wink:

Verfasst: Freitag 26. September 2008, 13:35
von Hyperion
@Ghost: Wie Du hoffentlich / vermutlich gelernt hast, ist es enorm wichtig zu kapieren, ob und wann man eine Variable manipuliert! In diesem Falle hattest Du das ja eben einmal vergessen und bist deshalb zuvor gescheitert :-)
Aber immerhin hast Du es mit ein wenig Hilfe nun rausgefunden und wirst in Zukunft daher Fehler ähnlicher Art zunächst selber durchdenken und beheben. Erkenntnis ist der Schlüssel zum Erfolg :-)

Als Verbesserungsvorschlag werde ich mal ein, sich mit Funktionen zu befassen und das ganze als solche umzuschreiben. Ansatz:

Code: Alles auswählen

def get_ggt(value1, value2):
    # was auch immer nötig ist ;-)
    return ggt 
So kann man die Funktion bei weiterführenden Probleme nutzen, wie etwa Bruchrechnung o.ä.

Im Zusammenhang mit Funktionen kannst Du dann auch dein Modul so umschreiben, dass kein mehr Code auf Modulebene steht: [wiki]Import[/wiki]

Verfasst: Freitag 26. September 2008, 18:46
von name
So in etwa:

Code: Alles auswählen

def gcd(x, y):
    remainder, divisor = sorted((y, x))
    while remainder:
        remainder, divisor = divisor % remainder, remainder
    return divisor
Hyperion: Nicht mal viel laenger als deine dummy-Funktion :)