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

#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ß.
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ß.
#1

von Klaus (1960 Punkte)
- 06.02.2020 um 12:30 Uhr

from fractions import Fraction as Fr class EgyptFraction: def __init__(self, numerator, denominator): self.numerator = numerator self.denominator = denominator self.list_of_fractions = [] if self.numerator >= self.denominator: print('Falscher Wert. Der Zähler soll kleiner als der Nenner sein.') elif self.denominator % self.numerator == 0: print('Falscher Wert. Der Zähler soll kein Teiler vom Nenner sein.') else: self.return_denominators() def return_denominators(self): remaining_fraction = Fr(self.numerator, self.denominator) while remaining_fraction.numerator != 1: calculated_fraction = Fr(remaining_fraction.numerator, self.__lowest_multiple(remaining_fraction)) self.list_of_fractions.append(calculated_fraction) remaining_fraction = remaining_fraction - calculated_fraction self.list_of_fractions.append(remaining_fraction) return_list = [] for element in self.list_of_fractions: return_list.append(element.denominator) print(f'Der Bruch {self.numerator}/{self.denominator} hat die ' f'Stammbruch-Zahlen {[x.denominator for x in self.list_of_fractions]}') @staticmethod def __lowest_multiple(fraction): index = 1 while True: if fraction.numerator * index >= fraction.denominator: return fraction.numerator * index else: index += 1 if __name__ == '__main__': e1 = EgyptFraction(5, 6) e2 = EgyptFraction(17, 39) e3 = EgyptFraction(14, 3) e4 = EgyptFraction(4, 12)
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1