C12

Streda

package sk.upjs.umv;

import org.apache.commons.math3.util.*;

public class Zlomok extends Number {

        private final int citatel;
        private final int menovatel;

        public Zlomok(int citatel, int menovatel) {
                this.citatel = citatel;
                this.menovatel = menovatel;

        }

        public int getCitatel() {
                return this.citatel;
        }

        public int getMenovatel() {
                return this.menovatel;
        }

        public Zlomok normalize() {
                int najSpolocnyDelitel = ArithmeticUtils.gcd(menovatel, citatel);
                int novyMenovatel = menovatel / najSpolocnyDelitel;
                int novyCitatel = citatel / najSpolocnyDelitel;
                return new Zlomok(novyCitatel, novyMenovatel);
        }

        public String toString() {
                return citatel + "/" + menovatel;
        }

        public boolean equals2(Object obj) {
                if (obj instanceof Zlomok) {
                        Zlomok z = (Zlomok) obj;
                        Zlomok nasZlomok = this.normalize();
                        Zlomok vonkajsiZlomok = z.normalize();
                        return nasZlomok.getCitatel() == vonkajsiZlomok.getCitatel()
                                        && nasZlomok.menovatel == vonkajsiZlomok.menovatel;
                } else {
                        return false;
                }

        }

        public boolean equals(Object obj) {
                if (obj instanceof Zlomok) {
                        Zlomok z = (Zlomok) obj;
                        return this.hashCode()== z.hashCode();
                } else {
                        return false;
                }

        }

        public int hashCode() {
                final int prvoCislo = 311;
                Zlomok normalized = this.normalize();
                int result = 1;
                result=prvoCislo * result + normalized.citatel;
                result=prvoCislo * result + normalized.menovatel;
                return result;

        }

        public Zlomok pripocitaj(Zlomok z) {
                int spolocnyMenovatel = this.menovatel * z.menovatel;
                int citatelNasho = this.citatel * z.menovatel;
                int citatelZ = z.citatel * this.menovatel;
                int sucetCitatel = citatelNasho + citatelZ;
                return new Zlomok(sucetCitatel, spolocnyMenovatel).normalize();
        }

        @Override
        public int intValue() {
                return citatel/menovatel;
        }

        @Override
        public long longValue() {
                return citatel/menovatel;
        }

        @Override
        public float floatValue() {
                return (float) (citatel)/menovatel;
        }

        @Override
        public double doubleValue() {
                return (double) (citatel)/menovatel;
        }


}
 
package sk.upjs.umv;

import sk.upjs.jpaz2.*;

public class Launcher {

        public static void main(String[] args) {
                Zlomok z1 = new Zlomok (1, 2);
                Zlomok z2 = new Zlomok (2, 4);
                Zlomok z3 = new Zlomok (2, 3);
                System.out.println(z1);
                System.out.println(z2);
                System.out.println(z2.normalize());
                System.out.println(z1.equals(z2));
                System.out.println(z1.equals(z3));
                System.out.println(z1.hashCode());
                System.out.println(z2.hashCode());
                System.out.println(z3.hashCode());
                System.out.println(z1.floatValue());

        }
}

Štvrtok

package sk.upjs.umv;

import java.util.List;

import org.apache.commons.math3.util.*;

public class Zlomok extends Number implements Comparable<Zlomok>,Roundable {
        private final int citatel;
        private final int menovatel;
        public static final Zlomok POLOVICA = new Zlomok(1,2);

        public Zlomok(int citatel, int menovatel) {
                this.citatel = citatel;
                this.menovatel = menovatel;

        }

        public int getCitatel() {
                return this.citatel;
        }

        public int getMenovatel() {
                return this.menovatel;
        }

        public Zlomok normalize() {
                int najSpolocnyDelitel = ArithmeticUtils.gcd(menovatel, citatel);
                int novyMenovatel = menovatel / najSpolocnyDelitel;
                int novyCitatel = citatel / najSpolocnyDelitel;
                return new Zlomok(novyCitatel, novyMenovatel);
        }

        public String toString() {
                return citatel + "/" + menovatel;
        }

        public boolean equals2(Object obj) {
                if (obj instanceof Zlomok) {
                        Zlomok z = (Zlomok) obj;
                        Zlomok nasZlomok = this.normalize();
                        Zlomok vonkajsiZlomok = z.normalize();
                        return nasZlomok.getCitatel() == vonkajsiZlomok.getCitatel()
                                        && nasZlomok.menovatel == vonkajsiZlomok.menovatel;
                } else {
                        return false;
                }

        }

        public boolean equals(Object obj) {
                if (obj instanceof Zlomok) {
                        Zlomok z = (Zlomok) obj;
                        return this.hashCode()== z.hashCode();
                } else {
                        return false;
                }

        }

        public int hashCode() {
                final int prvoCislo = 311;
                Zlomok normalized = this.normalize();
                int result = 1;
                result=prvoCislo * result + normalized.citatel;
                result=prvoCislo * result + normalized.menovatel;
                return result;

        }

        public Zlomok pripocitaj(Zlomok z) {
                int spolocnyMenovatel = this.menovatel * z.menovatel;
                int citatelNasho = this.citatel * z.menovatel;
                int citatelZ = z.citatel * this.menovatel;
                int sucetCitatel = citatelNasho + citatelZ;
                return new Zlomok(sucetCitatel, spolocnyMenovatel).normalize();
        }


        @Override
        public int intValue() {
                return citatel/menovatel;
        }

        @Override
        public long longValue() {
                return citatel/menovatel;
        }

        @Override
        public float floatValue() {
                return (float) (citatel)/menovatel;
        }

        @Override
        public double doubleValue() {
                return (double) (citatel)/menovatel;
        }



        public static Zlomok sucet(List<Zlomok> zlomky) {
                Zlomok novyZlomok = new Zlomok(0, 1);
                for (Zlomok zlomok : zlomky) {
                        novyZlomok = novyZlomok.pripocitaj(zlomok.normalize());
                }
                return novyZlomok;
        }

        public int compareTo(Zlomok o) {
                if(this.citatel*o.menovatel<o.citatel*this.menovatel) {
                        return -1;
                }
                if(this.citatel*o.menovatel>o.citatel*this.menovatel) {
                        return 1;
                }
                return 0;
        }

        @Override
        public int roundValue() {
                double val =this.doubleValue();
                int fullVal = (int) val;
                if(val-fullVal<0.5) {
                        return (int)Math.floor(val);
                }
                return (int) Math.ceil(val);
        }


}
 
package sk.upjs.umv;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import sk.upjs.jpaz2.*;

public class Launcher {

        public static void main(String[] args) {
                Zlomok z1 = new Zlomok(1, 2);
                Zlomok z2 = new Zlomok(2, 4);
                Zlomok z3 = new Zlomok(2, 5);
                Zlomok z4 = new Zlomok(1, 3);
                List<Zlomok> zoznamZlomkov = new ArrayList<Zlomok>();
                zoznamZlomkov.add(z1);
                zoznamZlomkov.add(z2);
                zoznamZlomkov.add(z3);
                zoznamZlomkov.add(z4);
                System.out.println(z4.roundValue());
                System.out.println(z1.roundValue());

                Collections.sort(zoznamZlomkov, new PorovnavacZlomkov());
                System.out.println(zoznamZlomkov);
                Set<Zlomok> mnozinaZlomkov = new TreeSet<>(new PorovnavacZlomkov());
                mnozinaZlomkov.addAll(zoznamZlomkov);
                System.out.println(mnozinaZlomkov);
                /*
                 * System.out.println(z1); System.out.println(z2);
                 * System.out.println(z2.normalize()); System.out.println(z1.equals(z2));
                 * System.out.println(z1.equals(z3)); System.out.println(z1.hashCode());
                 * System.out.println(z2.hashCode()); System.out.println(z3.hashCode());
                 * System.out.println(z1.floatValue());
                 *
                 * List<Zlomok> zoznam = new ArrayList<Zlomok>(); for (int i=0; i<10; i++)
                 * zoznam.add(Zlomok.POLOVICA);
                 *
                 * System.out.println(Zlomok.sucet(zoznam));
                 */

        }
}
package sk.upjs.umv;

import java.util.Comparator;

public class PorovnavacZlomkov implements Comparator<Zlomok> {

        @Override
        public int compare(Zlomok o1, Zlomok o2) {

                double rozdielS1 = Math.abs(o1.doubleValue()-Zlomok.POLOVICA.doubleValue());
                double rozdielS2 = Math.abs(o2.doubleValue()-Zlomok.POLOVICA.doubleValue());

                int comparison = Double.compare(rozdielS1, rozdielS2);
                return -1 * comparison;
        }



}
 
package sk.upjs.umv;

public interface Roundable {

        public int roundValue();
}