Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Euklididscher Algorithmus Python (http://www.informatikerboard.de/board/thread.php?threadid=3292)


Geschrieben von Dr.Java am 10.11.2016 um 18:48:

  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



Geschrieben von eulerscheZahl am 10.11.2016 um 20:08:

 

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.



Geschrieben von Dr.Java am 11.11.2016 um 10:42:

 

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



Geschrieben von eulerscheZahl am 11.11.2016 um 10:45:

 

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))



Geschrieben von Dr.Java am 11.11.2016 um 11:14:

 

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

lg



Geschrieben von eulerscheZahl am 11.11.2016 um 11:18:

 

Die Eingabe steht in keiner Funktion, wird einfach so ausgeführt, nachdem die Funktionsdefinitionen gelesen wurden.



Geschrieben von Dr.Java am 11.11.2016 um 11:53:

 

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

Danke für deine Mühen.

lg


Forensoftware: Burning Board, entwickelt von WoltLab GmbH