größter gemeinsamer Teiler (ggT) berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Beitragvon Ghost » Donnerstag 25. September 2008, 23:52

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
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 26. September 2008, 08:54

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]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Beitragvon mkesper » Freitag 26. September 2008, 09:35

Super, dass du durchgehalten hast.
Nur ein Denkanstoß noch: Wieso vergleichst du zweimal, welche Zahl die größere ist?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Freitag 26. September 2008, 12:55

@Ghost: Und denk mal über Zeile 32 nach. :wink:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Freitag 26. September 2008, 13:35

@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]
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Freitag 26. September 2008, 18:46

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 :)
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder