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.
größter gemeinsamer Teiler (ggT) berechnen
hier mal ein weiterer schritt.
Müsste so in Ordnung sein oder?
nun sortiert er ja schonmal die beiden Zahlen der größe nach.
und rechnet den rest aus
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
und rechnet den rest aus
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.
In jedem Fall brauchst du doch mal eine Schleife, weil es ein Prozess des fortgesetzten Dividierens ist.
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?
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
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.
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.
hier ist es:
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.
Code: Alles auswählen
zahl = 1
while(zahl < 101):
print zahl
zahl = zahl + 1
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.
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.
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.
Wenn du dich drüber lustig machen musst, bitte.sea-live hat geschrieben:@nummerix du soltest dich als Lehrer bei der VHS bewerben
tolle Anleitung
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.
Kannst du mir da vielleicht ne kleine Hilfestellung geben?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.
Ich weis nicht so ganz wie ich das machen kann.
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.
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.
for-Schleife ist nicht nötig, (x)range auch nicht.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.
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.
@ 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
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
Hallo,
habe mir da nun mal was zusammen gebastelt. Ich glaube Programmieren kann man das nicht mehr nennen oder?
Aber es funktioniert
habe mir da nun mal was zusammen gebastelt. Ich glaube Programmieren kann man das nicht mehr nennen oder?
Aber es funktioniert
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 ")
teiler = 0
while(teiler == 0):
if zahl1 > zahl2:
teiler = zahl1 / zahl2
rest = zahl1 % zahl2
print zahl1, "/", zahl2, "=" ,teiler,"Und der Rest ist:" ,rest
else:
teiler = zahl2 / zahl1
rest = zahl2 % zahl1
print zahl2, "/", zahl1, "=" ,teiler,"Und der Rest ist:" ,rest
if rest == 0:
if zahl1 > zahl2:
ergebnis = zahl1 / teiler
print "Der groesste gemeinsame Teiler =",ergebnis
else:
ergebnis = zahl2 / teiler
print "Der groesste gemeinsame Teiler =",ergebnis
if zahl1 > zahl2:
teiler = zahl2 / rest
rest2 = zahl2 % rest
print zahl2, "/", rest, "=" ,teiler,"Und der Rest ist:" ,rest2
else:
teiler = zahl1 / rest
rest2 = zahl1 % rest
print zahl1, "/", rest, "=" ,teiler,"Und der Rest ist:" ,rest2
if rest2 == 0:
if zahl1 > zahl2:
print "Der groesste gemeinsame Teiler =",rest
break
else:
print "Der groesste gemeinsame Teiler =",rest
break
teiler = rest / rest2
rest3 = rest % rest2
print rest, "/", rest2, "=" ,teiler,"Und der Rest ist:" ,rest3
if rest3 == 0:
print "Also ist der groesste gemeinsame Teiler",rest2
break
teiler = rest2 / rest3
rest4 = rest2 % rest3
print rest2, "/", rest3, "=" ,teiler,"Und der Rest ist:" ,rest4
if rest4 == 0:
print "Also ist der groesste gemeinsame Teiler",rest3
break
teiler = rest3 / rest4
rest5 = rest3 % rest4
print rest3, "/", rest4, "=" ,teiler,"Und der Rest ist:" ,rest5
if rest5 == 0:
print "Also ist der groesste gemeinsame Teiler",rest4
break
teiler = rest4 / rest5
rest6 = rest4 % rest5
print rest4, "/", rest5, "=" ,teiler,"Und der Rest ist:" ,rest6
if rest6 == 0:
print "Also ist der groesste gemeinsame Teiler",rest5
break
teiler = rest5 / rest6
rest7 = rest5 % rest6
print rest5, "/", rest6, "=" ,teiler,"Und der Rest ist:" ,rest7
if rest7 == 0:
print "Also ist der groesste gemeinsame Teiler",rest6
break
teiler = rest6 / rest7
rest8 = rest6 % rest7
print rest6, "/", rest7, "=" ,teiler,"Und der Rest ist:" ,rest8
if rest8 == 0:
print "Also ist der groesste gemeinsame Teiler",rest7
break
Ghost hat geschrieben:Hallo,
habe mir da nun mal was zusammen gebastelt. Ich glaube Programmieren kann man das nicht mehr nennen oder?
Aber es funktioniert
Ich teile deine Einschätzung, was das Programmieren angeht ...
Nein, es funktioniert nicht. Es funktioniert nur dann, wenn die Anzahl der erforderlichen Divisionen nicht größer als 8 ist.
Vielleicht wartest du doch besser, bis der Lehrer es nochmal erläutert hat.
Code: Alles auswählen
[dasich@tux ~]$ python test.py
Dieses Programm rechnet Ihnen den groessten gemeinsamen Teiler zweier Zahlen aus.
Bitte geben Sie die 1. Zahl ein 10
Bitte geben Sie die 2. Zahl ein 20
20 / 10 = 2 Und der Rest ist: 0
Der groesste gemeinsame Teiler = 10
Traceback (most recent call last):
File "test.py", line 35, in <module>
teiler = zahl1 / rest
ZeroDivisionError: integer division or modulo by zero
@dasIch,
den Fehler habe ich nun behoben.
Aber vielleicht kannste mir das ja mal ein bisschen umprogrammieren, damit ich mal sehe wie das sein muss.
Vielleicht so das ich das hier:
teiler = rest6 / rest7
rest8 = rest6 % rest7
print rest6, "/", rest7, "=" ,teiler,"Und der Rest ist:" ,rest8
if rest8 == 0:
print "Also ist der groesste gemeinsame Teiler",rest7
break
nicht immer wiederholen muss. Da gibt es doch sicher eine bessere lösung. oder?
den Fehler habe ich nun behoben.
Aber vielleicht kannste mir das ja mal ein bisschen umprogrammieren, damit ich mal sehe wie das sein muss.
Vielleicht so das ich das hier:
teiler = rest6 / rest7
rest8 = rest6 % rest7
print rest6, "/", rest7, "=" ,teiler,"Und der Rest ist:" ,rest8
if rest8 == 0:
print "Also ist der groesste gemeinsame Teiler",rest7
break
nicht immer wiederholen muss. Da gibt es doch sicher eine bessere lösung. 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 ")
teiler = 0
while(teiler == 0):
if zahl1 > zahl2:
teiler = zahl1 / zahl2
rest = zahl1 % zahl2
print zahl1, "/", zahl2, "=" ,teiler,"Und der Rest ist:" ,rest
else:
teiler = zahl2 / zahl1
rest = zahl2 % zahl1
print zahl2, "/", zahl1, "=" ,teiler,"Und der Rest ist:" ,rest
if rest == 0:
if zahl1 > zahl2:
ergebnis = zahl1 / teiler
print "Der groesste gemeinsame Teiler =",ergebnis
break
else:
ergebnis = zahl2 / teiler
print "Der groesste gemeinsame Teiler =",ergebnis
break
if zahl1 > zahl2:
teiler = zahl2 / rest
rest2 = zahl2 % rest
print zahl2, "/", rest, "=" ,teiler,"Und der Rest ist:" ,rest2
else:
teiler = zahl1 / rest
rest2 = zahl1 % rest
print zahl1, "/", rest, "=" ,teiler,"Und der Rest ist:" ,rest2
if rest2 == 0:
if zahl1 > zahl2:
print "Der groesste gemeinsame Teiler =",rest
break
else:
print "Der groesste gemeinsame Teiler =",rest
break
teiler = rest / rest2
rest3 = rest % rest2
print rest, "/", rest2, "=" ,teiler,"Und der Rest ist:" ,rest3
if rest3 == 0:
print "Also ist der groesste gemeinsame Teiler",rest2
break
teiler = rest2 / rest3
rest4 = rest2 % rest3
print rest2, "/", rest3, "=" ,teiler,"Und der Rest ist:" ,rest4
if rest4 == 0:
print "Also ist der groesste gemeinsame Teiler",rest3
break
teiler = rest3 / rest4
rest5 = rest3 % rest4
print rest3, "/", rest4, "=" ,teiler,"Und der Rest ist:" ,rest5
if rest5 == 0:
print "Also ist der groesste gemeinsame Teiler",rest4
break
teiler = rest4 / rest5
rest6 = rest4 % rest5
print rest4, "/", rest5, "=" ,teiler,"Und der Rest ist:" ,rest6
if rest6 == 0:
print "Also ist der groesste gemeinsame Teiler",rest5
break
teiler = rest5 / rest6
rest7 = rest5 % rest6
print rest5, "/", rest6, "=" ,teiler,"Und der Rest ist:" ,rest7
if rest7 == 0:
print "Also ist der groesste gemeinsame Teiler",rest6
break
teiler = rest6 / rest7
rest8 = rest6 % rest7
print rest6, "/", rest7, "=" ,teiler,"Und der Rest ist:" ,rest8
if rest8 == 0:
print "Also ist der groesste gemeinsame Teiler",rest7
break
Teil das ganze bitte sinnvoll in Funktionen ein.Ghost hat geschrieben:nicht immer wiederholen muss. Da gibt es doch sicher eine bessere lösung. oder?
Wenn ich morgen bisschen Zeit hab schau ich ob ich dir ein bisschen was davon machen kann.
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.
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.