Rückblick – Brüche
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 41 von 57.
Aufgabe
SchwerVervollständige die Wertklasse Frac. initialize(num, den) kürzt den Bruch und behält das Vorzeichen im Zähler bei. Wenn den 0 ist, wird ZeroDivisionError mit zero denominator ausgelöst. Definiere +, -, * und /, die neue Brüche zurückgeben (/ mit einem Nullbruch löst ZeroDivisionError mit division by zero aus), sowie -@, ==, eql? und hash, sodass gleiche Brüche denselben Hash-Schlüssel bilden, und <=> zusammen mit Comparable. to_s gibt 3/4 zurück oder 2, wenn der Nenner 1 ist.
Der bereitgestellte Code liest Befehle: 1/2 + 1/3 (einen der vier Operatoren), neg 3/4, sort 1/2 1/3 3/4, max 1/2 2/3, uniq 1/2 2/4 1/3 (wobei die Anzahl und die verschiedenen Brüche ausgegeben werden) und cmp 1/2 2/4 (wobei =, < oder > ausgegeben wird). Fehler geben ihre Meldung aus.
Dein Code gehört in frac.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
require_relative 'frac'
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
input = []
while (line = gets)
input << line.chomp
end
def frac(text)
n, d = text.split("/").map(&:to_i)
Frac.new(n, d || 1)
end
input.each do |line|
parts = line.split
begin
case parts[0]
when "neg" then puts(-frac(parts[1]))
when "sort" then puts parts[1..].map { |t| frac(t) }.sort.join(" ")
when "max" then puts parts[1..].map { |t| frac(t) }.max
when "uniq"
distinct = parts[1..].map { |t| frac(t) }.uniq
puts "#{distinct.size}: #{distinct.join(" ")}"
when "cmp"
order = frac(parts[1]) <=> frac(parts[2])
puts ["<", "=", ">"][order + 1]
else
a = frac(parts[0])
b = frac(parts[2])
puts a.public_send(parts[1], b)
end
rescue ZeroDivisionError => e
puts e.message
end
end
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler