Python :: Aufgabe #238 :: Lösung #3

3 Lösungen Lösungen öffentlich
#238

Ägyptische Bruchrechnung

Fortgeschrittener - Python von hollst - 22.12.2019 um 22:50 Uhr
Gegeben seien zwei positive Ganzzahlen Z (wie Zaehler) und N (wie Nenner) mit N > Z
und Z sei kein Teiler von N.

Der Bruch Z/N ist immer als Summe der Kehrwerte positiver Ganzzahlen (Stammbrüche) darstellbar,
wobei es meist mehrer Möglichkeiten der Darstellung gibt.

Beispiele:

5/6 = 1/2 + 1/3 = 1/2 + 1/4 + 1/12 = 1/2 + 1/4 + 1/13 + 1/156 = ...

17/39 = 1/3 + 1/10 + 1/390 = ...

Man schreibe ein Programm, das Z und N entgegennimmt und die Zahlen der Stammbrüchesumme mit den wenigsten Summanden ausgibt.

Also obere Beispiele:

Input 5 und 6, Output 2 und 3,
Input 17 und 39, Output 3, 10 und 390.

Viel Spaß.
#3
vote_ok
von satn1241 (3090 Punkte) - 02.04.2020 um 15:07 Uhr
Quellcode ausblenden Python-Code
def kgv(Zahl1, Zahl2):
    while True:
        i = 1
        while True:
            d = i * Zahl1
            r2 = d % Zahl2
            if r2 == 0:
                break
            i += 1
        break
    return d

def ggt(zahl1, zahl2):
    while zahl2!=0:
        c=zahl1%zahl2
        zahl1=zahl2
        zahl2=c
    return zahl1

# Code Ägyptische Bruchrechnung
# Eingabe
print("Wilkommen bei der ägyptischen Bruchrechnung. Der Nenner muss hier größer als der Zähler sein!")
zaehler = int(input("Gib einen Zaehler ein:   "))
nenner = int(input("Gib einen Nenner ein:   "))
# Prüfe, ob der Bruch gekürzt werden kann
ggt_neu = ggt(zaehler, nenner)
if ggt_neu != nenner:
    zaehler = zaehler / ggt_neu
    nenner = nenner / ggt_neu
   
bruch = zaehler/nenner   
nenner_neu = nenner//zaehler+1 

while True:
    # Prüfe, ob der Bruch schon gekürzt wurde
    if zaehler ==1:
        break
    # regulärer Algorithmus
    print("Ein Stammbruch ist: 1/"+ str(int(nenner_neu)))
    nenner = kgv(nenner_neu, nenner)
    rest = round((bruch - 1/nenner_neu)*nenner,0)  
    nenner_neu = nenner//rest+1     
    bruch = rest/nenner      
    if rest ==1:
        break
print("Ein Stammbruch ist: 1/"+ str(int(nenner)))

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2103520

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.