Riešenia (skupina D, 1. týždeň)

Teoretické cvičenie

import sk.upjs.jpaz2.WinPane;


public class Spustac {

        public static void main(String[] args) {
                WinPane plocha = new WinPane();
                Fraktalka fraktalka = new Fraktalka();
                plocha.add(fraktalka);
                fraktalka.center();

                fraktalka.vlocka(90);
                System.out.println(fraktalka.getPocitadlo());

        }

}
 
import sk.upjs.jpaz2.Turtle;

public class Fraktalka extends Turtle {

        public void vlocka(int u, double d) {

                if (u == 0)
                        return;
                pocitadlo++;
                for (int i = 0; i < 6; i++) {
                        step(d);
                        vlocka(u - 1, d / 3);
                        step(-d);
                        turn(60);
                }

        }

        private int pocitadlo = 0;

        public int getPocitadlo() {
                return pocitadlo;
        }

        public void vlocka(double d) {


                if (d < 1)
                        return;
                pocitadlo++;
                for (int i = 0; i < 6; i++) {
                        step(d);
                        vlocka(d / 3);
                        step(-d);
                        turn(60);
                }

        }

}
public class TestFibonacciho {
        private static int pocitadlo = 0;
        static int maximum = 0;

        public static int fibonacci(int n) {
                pocitadlo++;
                if (n <= 1) {
                        maximum = Math.max(maximum, pocitadlo);
                        // System.out.println(pocitadlo);
                }
                if (n == 0) {
                        pocitadlo--;
                        return 0;
                }

                if (n == 1) {
                        pocitadlo--;
                        return 1;
                }

                int vysledok = fibonacci(n - 2) + fibonacci(n - 1);

                pocitadlo--;
                return vysledok;
        }

        public static void main(String[] args) {
                System.out.println(fibonacci(5));
                System.out.println(pocitadlo);
                System.out.println(maximum);

        }
}

Praktické cvičenie

import sk.upjs.jpaz2.Turtle;


public class Fraktalka extends Turtle {

        public void stvorec(int uroven, double rozmer) {
                if(uroven<1) {
                        return;
                }

                for (int i = 0; i < 4; i++) {
                        this.step(rozmer);
                        this.turn(-90);
                        stvorec(uroven-1, rozmer/3);
                        this.turn(180);
                }

        }

}
 
import sk.upjs.paz.calltree.CallTree;

public class TestFibonacciho {
        private static int pocitadlo = 0;
        static int maximum = 0;

        public static int fibonacci(int n) {
                CallTree.markCall(n);

                pocitadlo++;
                if (n <= 1) {
                        maximum = Math.max(maximum, pocitadlo);
                        // System.out.println(pocitadlo);
                }
                if (n == 0) {
                        pocitadlo--;
                        return CallTree.markReturn(0);
                }

                if (n == 1) {
                        pocitadlo--;
                        return CallTree.markReturn(1);
                }

                int vysledok = fibonacci(n - 2) + fibonacci(n - 1);

                pocitadlo--;
                return CallTree.markReturn(vysledok);
        }

        public static int sucet(int[] p, int odIdx, int poIdx) {
                CallTree.markCall(odIdx,poIdx);
                if (odIdx > poIdx)
                        return CallTree.markReturn(0);

                if (odIdx == poIdx)
                        return CallTree.markReturn(p[odIdx]);

                return CallTree.markReturn(p[odIdx] + sucet(p, odIdx + 1, poIdx));

        }

        public static int sucet2(int[] p, int odIdx, int poIdx) {
                CallTree.markCall(poIdx-odIdx+1);
                if (odIdx > poIdx)
                        return CallTree.markReturn(0);

                if (odIdx == poIdx)
                        return CallTree.markReturn(p[odIdx]);

                if (odIdx < poIdx) {
                        int stred = (odIdx + poIdx) / 2;
                        return CallTree.markReturn(sucet2(p, odIdx, stred) + sucet2(p, stred + 1, poIdx));
                }
                return 0;
        }

        public static void main(String[] args) {

                int[] pole = new int[]{5,6,7,1,2,4,9,2,7};
                System.out.println(sucet(pole, 0, 8));
                System.out.println(sucet2(pole, 0, 8));

        }
}