From 3775c742da3c0528d8d1c1380ef233b106b38595 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Wed, 17 May 2023 16:37:25 +0200 Subject: [PATCH] u20 --- .nfs000000000157ded700000020 | Bin 0 -> 1206 bytes u20/.classpath | 10 ++ u20/.gitignore | 1 + u20/.project | 17 +++ u20/.settings/org.eclipse.jdt.core.prefs | 14 +++ u20/src/Bruch.java | 127 +++++++++++++++++++++++ 6 files changed, 169 insertions(+) create mode 100644 .nfs000000000157ded700000020 create mode 100644 u20/.classpath create mode 100644 u20/.gitignore create mode 100644 u20/.project create mode 100644 u20/.settings/org.eclipse.jdt.core.prefs create mode 100644 u20/src/Bruch.java diff --git a/.nfs000000000157ded700000020 b/.nfs000000000157ded700000020 new file mode 100644 index 0000000000000000000000000000000000000000..11ac22699f841922eaa13e022c01b15d13919d27 GIT binary patch literal 1206 zcmWIWW@Zs#U|`^2xY)EYY~h-enctWg7}z)&7`PZ@7@UeqlQZU3i#p z?@2@1&0AB$r%g6>zL#>`)-AtsW8kzsH~KEiD|Rq8*|q(WO|Vqn5vLw+-;+O# zb{w3kw`|^X-!^Cdwt}h3XOmL&RXT<2RuqXfYj8*CPHb3m%u84dMOO-!DbyF6 z@9Lkv_>*b$PveiDj65>fHoJ(ldVjk8xgmUAhN8)=kPSi->MNF6OV?~!^Y&^u>-jZ` zb5@H^`^>fAbWX;dEDz7aU!Sc%$+48@;Uce~_PNiTI=9$uN}lR_y|Xo0GDQ6c?*@0? z24*$Zyq7b&3LAgj+V%5Xt-;-o8+O!8KlE;W^~$(~ahV)D`ApXf%$;*|@t!CVG0D~o z4%ZYmJ0H0Da7pa!y#j6cuO}w_{tqz`l&!lVvZCZDQ z{I~t}#Nf~K+mB3V?s|~+a2|JN{lS<^-FwXsF%~_&+5SA0Yp3C4kq?~VQ@T=AA1z^C z$?rYmqwv9s?}{Ja{#$VO_T=YEe>$_~C0v#ID%118JGFD-n*)Z)My!g?A!iQzE@BWq z)KC$0Xy&EZLxP`OB0hb*Q{yU|99=MR>4(R5<X6Ag)k+WE3w3DactZw4H=!G|TAHDbPrAGS3 zZ=Bb&<}0#1e)}Tx9P8%KhpJz^()sCjbWw+C`p-Elzr0*EJ32$jE=_S;)cu?bWlgSs zs=jr)Un^huxX|m;`nrw%9r--NIQ0eAeOpS`^jTdw`^-^L!^(*4D&U#=+CkS>c~ckkA3_5gU!nF7o?-;QR= zwgB_dJ|N}<=A4k!;u1v0+5RXcr5lLRGR|Wy4c}8IeZoA>dFtqead_(L1+I7&#K5$o zqR=ymbAs0C^FDzme9xS@%%P`w>Wp`PU#N$Um;SXDEjGsGi!MFkX;pD%jc(m@rHCW^ zaFF}K3m%uHVkZiADH+SMa;umgoO)Ds<<6>~OI52_9d>&aeKMKE^EHUuTe!H(bW)GW zLa*$dSvwg5ycwC~m~j;W5 + + + + + + + + + diff --git a/u20/.gitignore b/u20/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/u20/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/u20/.project b/u20/.project new file mode 100644 index 0000000..e0b1cb8 --- /dev/null +++ b/u20/.project @@ -0,0 +1,17 @@ + + + u20 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/u20/.settings/org.eclipse.jdt.core.prefs b/u20/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/u20/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/u20/src/Bruch.java b/u20/src/Bruch.java new file mode 100644 index 0000000..8679bcd --- /dev/null +++ b/u20/src/Bruch.java @@ -0,0 +1,127 @@ +import java.util.Objects; + + +/** + * Speichert einen Bruch aus zwei integern ab + * @author p8q-yhw-u1 + * + */ +public class Bruch { + + private int zaehler; + private int nenner; + + /** + * Erzeugt ein Bruch Objekt mit Zähler und Nenner + * @param zaehler + * @param nenner + */ + public Bruch(int zaehler, int nenner) { + this.setZaehler(zaehler); + this.setNenner(nenner); + } + + /** + * Setzt den Zähler des Bruchs + * @param zaehler + */ + public void setZaehler(int zaehler) { + this.zaehler = zaehler; + } + + /** + * Setzt den Nenner des Bruchs + * @param nenner darf nicht 0 sein + */ + public void setNenner(int nenner) { + if (nenner == 0) { + throw new IllegalArgumentException("Nenner darf nicht 0 sein"); + } + this.nenner = nenner; + } + + /** + * Liefert den Zähler des Bruchs + * @return Zähler + */ + public int getZaehler() { + return this.zaehler; + } + + /** + * Liefert den Nenner des Bruchs + * @return Nenner + */ + public int getNenner() { + return this.nenner; + } + + /** + * Liefert den Bruch als Dezimalzahl + * @return + */ + public double zahl() { + return (double) this.zaehler / this.nenner; + } + + /** + * Vergleicht Bruch auf Gleichheit mit einem anderen Objekt beliebiger Art + * Liefert false wenn das Objekt nicht vom Typ Bruch ist + */ + @Override + public boolean equals(Object b) { + return b instanceof Bruch ? this.equals((Bruch) b) : false; + } + + /** + * Überprüft Bruch mit einem anderen Bruch auf Gleichheit + * @param b der zu vergleichende Bruch + * @return true falls die beiden Brüche die gleiche Zahl ausdrücken + */ + public boolean equals(Bruch b) { + return this.zaehler * b.nenner == this.nenner * b.zaehler; + /* + * Alternative Implementierung wäre + * return this.hashCode() == b.hashCode(); + * allerdings deutlich ineffizienter + */ + } + + /** + * Liefert den Bruch in gehashter Form + */ + @Override + public int hashCode() { + /* Absolute Werte bestimmen + * Um redundanz zu vermeiden und Rechenleistung zu sparen + * werden sie in temporären Variablen gespeichert + */ + int absZ = Math.abs(this.zaehler); + int absN = Math.abs(this.nenner); + + /* + * Größten gemeinsamen Teiler bestimmen + */ + int i; + for (i = Math.min(absZ, absN); i > 0; i--) { + if (absZ % i == 0 && absN % i == 0) { + break; + } + } + + /* + * Vorzeichen bestimmen + */ + if (this.zaehler < 0) i *= -1; + if (this.nenner < 0) i *= -1; + + /* + * Hash des Bruchs berechnen. + * Wenn negativ wird immer der Zähler als negativ angegeben, nie der Nenner. + * Sorgt dafür dass -1/2 == 1/-2 + */ + return Objects.hash(absZ / i, absN / Math.abs(i)); + } + + +}