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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 23. September 2008, 19:31

Verstehe.

Ich würde allerdings nicht aufgrund dieses Ansatzes eines Schülers auf die Qualität des Unterrichts schließen wollen. Ghost hat zumindest verstanden, dass er zwei Werte eingeben muss. Die Sache mit dem input() finde ich auf dieser Ebene des Lernens absolut unproblematisch - das müssen wir aber hier nicht zum x-ten Male durchkauen. Hat sich demnächst mit Py3000 eh erledigt.

Dass Ghost nicht weiterkommt, als bis zu dem, was er bisher gezeigt hat, ist wahrhaft keine große Tat. Aber, naja, vielleicht ist bei ihm das Programmieren einfach mehr ein MUSS als eine Herzensangelegenheit. Und nicht jedem ist das algorithmisch-problemlösende Denken in die Wiege gelegt.

Vielleicht zeigt er uns ja noch selbst entwickelten Code zur Erzeugung einer Liste aller Teiler einer Zahl. Und dann mal weiter sehen. Der rekursive Euklid von sea-live dürfte Ghost auf seiner momentanen Ebene des Verstehens kein bisschen weiterhelfen.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Dienstag 23. September 2008, 19:35

hier mal ein weiterer schritt.
Müsste so in Ordnung sein oder?

Code: Alles auswählen

print "Dieses Programm rechnet Ihnen den groessten gemeinsamen Teiler zweier Zahlen aus."
print
zahl1 = input("Bitte geben Sie die 1. Zahl ein ")
zahl2 = input("Bitte geben Sie die 2. Zahl ein ")


if zahl1 > zahl2:
         teiler = zahl1 % zahl2
         print teiler
else:
         teiler = zahl2 % zahl1
         print teiler
nun sortiert er ja schonmal die beiden Zahlen der größe nach.
und rechnet den rest aus
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 23. September 2008, 19:57

Du müsstest dich dann mal entscheiden, ob du deinen ursprünglichen Ansatz mit den Teilermengen weiterverfolgen willst, oder nun doch auf den euklidischen Zug aufspringst (so sieht dein "fortgeführter Ansatz" nämlich aus).

In jedem Fall brauchst du doch mal eine Schleife, weil es ein Prozess des fortgesetzten Dividierens ist.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Dienstag 23. September 2008, 20:09

Hi,
ich habe vor nun auf den euklidischen Zug aufzuspringen.

Ja, genau bei schleifen liegt mein Problem. Diese habe ich noch nicht so ganz verstanden.

wir haben bisher einmal ganz kurz die while schleife angesprochen.

aber wie muss ich diese while schleife da nun genau einbringen?

vllt. so?

Code: Alles auswählen

print "Dieses Programm rechnet Ihnen den groessten gemeinsamen Teiler zweier Zahlen aus."
print
zahl1 = input("Bitte geben Sie die 1. Zahl ein ")
zahl2 = input("Bitte geben Sie die 2. Zahl ein ")

while(teiler == 0):
 if zahl1 > zahl2:
         teiler = zahl1 % zahl2
         print teiler
 else:
         teiler = zahl2 % zahl1
         print teiler

Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 23. September 2008, 20:17

Dein Problem sind nicht nur die Schleifen - da liegt noch Grundlegenderes im Argen.

Wenn es tatsächlich so sein sollte, dass Schleifen "nur ganz kurz angesprochen wurden", dann solltest du - oder gemeinsam mit anderen - den Lehrer vielleicht bitten, das noch einmal zu erklären.

Schreib doch zunächst mal ein Programm, dass von 1 bis 100 zählt und die Zahlen ausgibt. Bekommst du das hin? Wenn nein, dann vergiss das mit dem ggT erstmal.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Dienstag 23. September 2008, 21:01

hier ist es:

Code: Alles auswählen

zahl = 1
while(zahl < 101):
    print zahl
    zahl = zahl + 1
  
unser Lehrer will uns das mit den Schleifen auch nochmal genauer erklären.
Aber wenn ich es nun schon lernen würde und ihm das ggT Programm zeigen könnte, würde dies meiner Note sicher nicht schlecht tun und ich will es ja auch für mich machen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 23. September 2008, 21:44

Nach 4 Stunden Programmierunterricht sollte man nicht zuviel (von sich) erwarten.

Dann schreib doch mal ein Programm, das zu einer Zahl alle ihre Teiler ausgibt. Das kannst du zwar nicht 1:1 für dein ggT-Programm verwenden, ist aber keine schlechte Übung zum Verständnis.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 24. September 2008, 12:09

@nummerix du soltest dich als Lehrer bei der VHS bewerben
tolle Anleitung
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 24. September 2008, 12:49

sea-live hat geschrieben:@nummerix du soltest dich als Lehrer bei der VHS bewerben
tolle Anleitung
Wenn du dich drüber lustig machen musst, bitte.

Aber was bringt es einem Anfänger, der nach eigener Auskunft gerade einmal 4 Stunden Programmierunterricht hinter sich hat und dessen Code man auch deutlich ansieht, dass er noch ganz am Anfang des Programmierens steht, wenn man ihm - so wie du - einen irgendwoher gezauberten Algorithmus präsentiert, den er zum gegenwärtigen Zeitpunkt gar nicht verstehen kann. Sicher, was es bringt ist, dass sein Programm damit praktisch fertig ist.

Wenn er den langen, steinigen Weg geht, algorithmisch aufwändiger und aus mathematischer Sicht ganz sicher nicht das Optimum, aber dabei versteht, warum er was tut und es sich mit dem deckt, wie er es - ohne Programm - auch durchgeführt hätte, dann hat er damit im Endeffekt für sich mehr gewonnen. Und danach kann er immer noch an den euklidischen Algorithmus herangehen und sich hoffentlich erst einmal klar machen, warum und wie der funktioniert.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 24. September 2008, 12:51

Du hast mich Falsch verstanden Ich Finde das super Toll wie du das erklärst deshalb!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 24. September 2008, 13:23

sea-live hat geschrieben:Du hast mich Falsch verstanden Ich Finde das super Toll wie du das erklärst deshalb!
Oh sorry, dann war das in der Tat ein Missverständnis.
Ghost
User
Beiträge: 25
Registriert: Dienstag 23. September 2008, 06:02

Mittwoch 24. September 2008, 13:23

numerix hat geschrieben:Nach 4 Stunden Programmierunterricht sollte man nicht zuviel (von sich) erwarten.

Dann schreib doch mal ein Programm, das zu einer Zahl alle ihre Teiler ausgibt. Das kannst du zwar nicht 1:1 für dein ggT-Programm verwenden, ist aber keine schlechte Übung zum Verständnis.
Kannst du mir da vielleicht ne kleine Hilfestellung geben?
Ich weis nicht so ganz wie ich das machen kann.
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 24. September 2008, 13:46

Du gehst von der kleinsten Zahl aus und der größten + 100(oder höher such dir was passendes) und iterierst über die Zahlen zwischen den beiden vorher genannten.

Wenn du dass geschafft hast versuche zu ermittlen ob die Zahlen teilbar sind.

Dafür solltest du wissen was for-Schleifen sind und wie sie funktionieren, sowie xrange und den Modulo Operator kennen oder dir dazu die Doku ansehen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 24. September 2008, 13:51

DasIch hat geschrieben:Dafür solltest du wissen was for-Schleifen sind und wie sie funktionieren, sowie xrange und den Modulo Operator kennen oder dir dazu die Doku ansehen.
for-Schleife ist nicht nötig, (x)range auch nicht.

Wenn ihr gerade erst die while-Schleife behandelt habt, genügt das für den Anfang. Im Prinzip gehst du vor wie bei deiner Schleife, die bis 100 zählt.

Im Schleifenrumpf musst du dann prüfen, ob bei der Division der Zahl n, deren Teiler du finden willst, durch die Zahlen, die du durchläufst, ein Rest bleibt. Wenn nicht, muss es ein Teiler sein. Wie das mit dem Rest funktioniert, steht in diesem Thread weiter oben.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 24. September 2008, 14:43

@ Ghost
vieleicht hilft dir der Suchen Button oben auch weiter
es gibt nun schon seit ca 5Jahren immmer wieder das gleiche zu Programmierende GGT(ggT)

wenn du hier suchen benutzt und nach ggT suchst bekommst du super tips und das ergebniss der Leute die Vor dir diese aufgaben lösen mussten!
ansonsten wäre eine Konkrete frage zum Programmieren Programmablauf oder syntax von Python wünschenswert!

wie nummerix schon erläuterte hilft dir hier jeder gerne mit einem Problem

nur fertige programme und auch programmierkurse wirst du vergebens suchen!
guckst du hier
http://www.python-forum.de/topic-13472. ... hlight=ggt
Antworten