Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiederholung:loesung:aufgabe1:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
wiederholung:loesung:aufgabe1:start [2022/12/09 07:33] – gelöscht Martin Pabstwiederholung:loesung:aufgabe1:start [2022/12/09 07:33] (aktuell) – angelegt Martin Pabst
Zeile 1: Zeile 1:
 +===== Lösung zur Aufgabe: Die Klasse Bruch =====
 +Ein Objekt der Klasse Bruch repräsentiert einen Bruch $\frac{a}{b}$, wobei $a\in\mathbb{Z}$ und $b\in\mathbb{N}$. Die Klasse soll einen Konstruktor besitzen, der die Werte für $a$ und $b$ entgegennimmt. Zudem soll sie die Methoden ''ausgabeUnecht()'' und ''ausgabeEcht()'' haben, die den Bruch als unechten bzw. echten Bruch ausgeben. Mit den Methoden ''mal'' und ''geteilt'' soll es möglich sein, den Wert eines Bruches mit dem Wert eines anderen zu multiplizieren bzw. durch ihn zu dividieren. Hier ein beispielhaftes Hauptprogramm zusammen mit der Ausgabe:
 +<code learnj>
 +Bruch b1 = new Bruch(4, 3);
 +Bruch b2 = new Bruch(1, 2);
 +b1.ausgabeUnecht();
 +b1.ausgabeEcht();
 +b1.mal(b2);
 +b1.ausgabeUnecht();
 +</code>
 +Dieses Programm soll folgendes ausgeben:
 +<code learnj>
 +4/3
 +1 1/3
 +4/6
 +</code>
  
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 500px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'KonstruktorenLoesung1'}">
 +
 +<script type="text/plain" title="Bruch.java">
 +Bruch b1 = new Bruch(4, 3);
 +Bruch b2 = new Bruch(1, 2);
 +b1.ausgabeUnecht();
 +b1.ausgabeEcht();
 +b1.mal(b2);
 +b1.ausgabeUnecht();
 +
 +class Bruch {
 +
 +   int z;
 +   int n;
 +
 +   public Bruch(int z, int n) {
 +      this.z = z;
 +      this.n = n;
 +   }
 +
 +   public void ausgabeUnecht() {
 +      println(z + "/" + n);
 +   }
 +
 +   public void ausgabeEcht() {
 +
 +      int a1 = z;
 +
 +      if(Math.abs(z) >= n) {
 +         int ganzerAnteil = z / n;
 +         a1 = z - ganzerAnteil * n;
 +         if(a1 < 0) {
 +            a1 = -a1;
 +         }
 +         print(ganzerAnteil + " ");
 +      }
 +      
 +      println(a1 + "/" + n);
 +      
 +   }
 +
 +   public void mal(Bruch b2) {
 +      
 +      z = z * b2.z;
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void geteilt(Bruch b2) {
 +      
 +      z = z * b2.n;
 +      n = n * b2.z;
 +
 +      kürze();
 +
 +   }
 +
 +   public void addiere(Bruch b2) {
 +
 +      // a/b + c/d = (a*d)/(b*d) + (c*b)/(d*b) = (a*d + c*b)/(b*d)
 +
 +      z =(z * b2.n + b2.z * n);
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void subtrahiere(Bruch b2) {
 +
 +      // a/b - c/d = (a*d)/(b*d) - (c*b)/(d*b) = (a*d - c*b)/(b*d)
 +
 +      z =(z * b2.n - b2.z * n);
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void kürze() {
 +      
 +      for(int i = 2; i <= Math.sqrt(Math.abs(z)); i++) {
 +         
 +         if(z % i == 0 && n % i == 0) {
 +            z = z / i;
 +            n = n / i;
 +         }
 +
 +      }
 +
 +   }
 +}
 +</script>
 +</div>
 +</HTML>
wiederholung/loesung/aufgabe1/start.1670571180.txt.gz · Zuletzt geändert: 2022/12/09 07:33 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki