Euklididscher Algorithmus Python

Neue Frage »

Auf diesen Beitrag antworten »
Dr.Java Euklididscher Algorithmus Python

Hallo. Ich habe ein Programm geschrieben das in Python mit Hilfe des iterativen,euklidischen Algorithmus den kleinsten gemeinsame Nenner zweier Zahlen berechnet.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
def gcd(m,n):
    if type(m)!=int or type(n)!=int or m<0 or n<0:
	    return None
  	
    else:
	    while n!=0:
		    h=m%n
		    m=n
		    n=h
    return m

Ich würde jetzt gerne eine Funktion aufstellen die mithilfe von input ,den kleinsten ,gemeinsamen Nenner für beliebig,viele positive Zahlen ermittelt und mit print ausgibt .Es soll dann solange laufen bis man eine Null eingibt die für die Berechnung dann nicht mehr berücksichtigt wird.
Wäre sowas machbar,wenn ja wie?

Mein Ansatz soweit:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
def gcd(m,n):
    if type(m)!=int or type(n)!=int or m<0 or n<0:
	    return None
  	
    else:
	    while n!=0:
		    h=m%n
		    m=n
		    n=h
    return m
    while (m !=0):
	    input("Input nat. number (or 0 to quit)):"
    if m=0:                                                                             
       print("GCD":42)

Danke schonmal und lg
 
Auf diesen Beitrag antworten »
eulerscheZahl

Das Einlesen der Zahlen gehört nicht mehr in gcd, wie es deine Einrückung impliziert.
gcd(a,b,c) = gcd(gcd(a,b),c), das heißt du liest die erste Zahl ein und für jede weitere ersetzt du sie durch das Ergebnis von bisherigem ggT und neuer Eingabe. Ich habe es jetzt nicht ausprobiert, aber ggT(0, n) sollte n ergeben. Also musst du die erste Eingabe nicht einmal gesondert behandeln.
Auf diesen Beitrag antworten »
Dr.Java

Danke für deine Antwort.

Verstehe ich das richtig ,du meinst man sollte eher auf jeden Fall ne separate Funktion erstellen die den Algorithmus inklusive hat?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
def cli_gcd():
    if type(m)!=int or type(n)!=int or m<0 or n<0:
	    return None
  	
    else:
	    while n!=0:
		    h=m%n
		    m=n
		    n=h
    return m
    while (m !=0):
	    input("Input nat. number (or 0 to quit)):"
    if m=0:                                                                             
       print("GCD":42)


So vielleicht in etwa?

lg
Auf diesen Beitrag antworten »
eulerscheZahl

Eine Funktion, die den ggT zweier Zahlen berechnet und außerhalb davon eine Schleife, die Zahlen einliest und den Algorithmus aufruft.
In Zeile 10 hast du ein return, Zeile 11 wird also nicht ausgeführt.

edit:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
def gcd(m,n):
    if type(m)!=int or type(n)!=int or m<0 or n<0:
	    return None
  	
    else:
	    while n!=0:
		    h=m%n
		    m=n
		    n=h
    return m

result = 0
while True:
    n = int(input('enter natural number (0 to quit)'))
    if (n == 0): break
    result = gcd(result, n)
print('gcd = ' + str(result))
 
Auf diesen Beitrag antworten »
Dr.Java

Ah so ,okay daran hab ich nicht gedacht .Ist das die neue Funktion ,die gibt dann den enter natural number -Befehl aus?

lg
Auf diesen Beitrag antworten »
eulerscheZahl

Die Eingabe steht in keiner Funktion, wird einfach so ausgeführt, nachdem die Funktionsdefinitionen gelesen wurden.
Auf diesen Beitrag antworten »
Dr.Java

Ach so,ok,ah, ich glaube ich habs jetzt.

Danke für deine Mühen.

lg
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »