1 Востаннє редагувалося Okhotnik (12.01.2019 14:11:51)

Тема: Герон

Код
class Heron {

       static double square(double x) {
            return x * x;
        }

        static double abs(double x) {
            if (x < 0) {
                return -x;
            } else {
                return x;
            }
        }

        static boolean isGoodEnough(double y, double x) {
            return abs(square(y) - x) <= 0.0001;
        }

        static double avg(double x, double y) {
            return (x + y) / 2.0;
        }

        static double enhance(double y, double x) {
            return avg(y, x / y);
        }

        static double sqrt(double y, double x) {
            if (isGoodEnough(y, x)) {
                return y;
            } else {
                return sqrt(enhance(y, x), x);
            }
        }


    public static void main(String[] args) {
        System.out.println(sqrt(1, 2));
    }
}

-----------------------------------------------------------------------------------------------------

Додайте кількість операцій, які алгоритм виконує з певного цілого числа n, яке вказує цю величину.
Додайте кількість операцій, які алгоритм виконує з додаткового параметра ε для процедури sqrt.

2

Re: Герон

Усе ж таки Герон. Чи ви просто щоб максимально не "по-російськи" виходило? Чи це чапля?

Okhotnik написав:

Додайте кількість операцій, які алгоритм виконує з певного цілого числа n, яке вказує цю величину.

Куди додати? Який саме алгоритм? Яку величину? В чому у вас виникла проблема із цим завданням?

Декалог програміста-початківця: https://replace.org.ua/post/132988/
Подякували: 221VOLT1

3 Востаннє редагувалося leofun01 (12.01.2019 14:03:26)

Re: Герон

off
koala написав:

Усе ж таки Герон.

З вашого ж посилання: Ήρων
Відкриваємо translate.google.com і тицяємо кнопку "Прослухати".
Звуку Г я там не чую. Більше схоже на щось середнє між "хірон" і "херон".

Google мені не авторитет, але інших сайтів для озвучки слів я не знаю.

Схоже, що росіяни хотіли, щоб це не було подібно на "хер он", а українці зробили Ctrl+C, Ctrl+V.

4 Востаннє редагувалося koala (12.01.2019 12:15:24)

Re: Герон

off
leofun01 написав:
off
koala написав:

Усе ж таки Герон.

З вашого ж посилання: Ήρων
Відкриваємо translate.google.com і тицяємо кнопку "Прослухати".
Звуку Г я там не чую. Більше схоже на щось середнє між "хірон" і "херон".

Google мені не авторитет, але інших сайтів для озвучки слів я не знаю.

Схоже, що росіяни хотіли, щоб це не було подібно на "хер он", а українці зробили Ctrl+C, Ctrl+V.

Давні запозичення з цивілізованих мов потрапили в давньоросійську, зокрема, через давньоукраїнську. Тому Гіппарх, Гор (і той, який єгипетський бог, теж),  гопліти, церковнослов'янське Бог (росіяни кажуть "Бох"), латинський гонор - все через г, і до церковнослов'янської літери хір (хѣръ, рос. "хєр"), а тим більше до використання її останні 200 років як евфемізму, це стосунку не має. А ще у них з того часу традиція німецьке H заміняти на своє Ґ, навіть у XX столітті: Гітлер, Гімлер, Гесс, Гугенберг - усі через H (на відміну від, скажімо, Ґеббельса, Ґерінга та Ґюртнера).
Не будьте меншовартісним, у XVII столітті саме ми їх грамоти вчили.

Декалог програміста-початківця: https://replace.org.ua/post/132988/
Подякували: leofun011

5 Востаннє редагувалося Okhotnik (12.01.2019 14:18:13)

Re: Герон

koala написав:

Усе ж таки Герон. Чи ви просто щоб максимально не "по-російськи" виходило? Чи це чапля?

Okhotnik написав:

Додайте кількість операцій, які алгоритм виконує з певного цілого числа n, яке вказує цю величину.

Куди додати? Який саме алгоритм? Яку величину? В чому у вас виникла проблема із цим завданням?

Так в тому і проблема, що я сам не розумію. Навчаюся на програміста в Польщі задали таке завдання, а як зробити не говорили. Вже два тижні ламаю голову , і вирішив звернутися за допомогою, самому ще не вистачає навичок на таке(

Джерело завдання https://github.com/kongra/PP-Fall-2018- … %B3w-a-i-b

Подякували: koala1

6

Re: Герон

Ну, по-перше, дякую, що хоч так відписали, до чого це все.
По-друге, переконайтеся, що ви певні, що пішли навчатися туди, куди вам треба. Можливо, зміна ЗВО чи профілю навчання буде кращим виходом.
Ну і до суті. Я польською технічні та математичні тексти ніколи не читав, і схоже, що Google Translate теж із ними не дуже. Не виключаю також варіанту, що й з викладачем не пощастило - я бачив у наших викладачів відверту дурню в завданнях, і в польських вона теж може траплятися; так що це трохи навмання, але схоже, що переклад буде десь таким:
- визначте кількість операцій, які виконає алгоритм (ціле число n);
- знайдіть залежність між кількістю операцій, які виконає алгоритм, та значенням додаткового параметру ε процедури sqrt.
("узалежнити" = "зробити залежним", я припускаю, що правильно українською тут буде "знайти залежність", і неуважний викладач скопіював другу половину завдання в першу)
Ще раз: польською я читаю лише прості тексти зі словником, тому можу сильно помилятися.

Декалог програміста-початківця: https://replace.org.ua/post/132988/
Подякували: Okhotnik1

7

Re: Герон

koala написав:

Ну, по-перше, дякую, що хоч так відписали, до чого це все.
По-друге, переконайтеся, що ви певні, що пішли навчатися туди, куди вам треба. Можливо, зміна ЗВО чи профілю навчання буде кращим виходом.
Ну і до суті. Я польською технічні та математичні тексти ніколи не читав, і схоже, що Google Translate теж із ними не дуже. Не виключаю також варіанту, що й з викладачем не пощастило - я бачив у наших викладачів відверту дурню в завданнях, і в польських вона теж може траплятися; так що це трохи навмання, але схоже, що переклад буде десь таким:
- визначте кількість операцій, які виконає алгоритм (ціле число n);
- знайдіть залежність між кількістю операцій, які виконає алгоритм, та значенням додаткового параметру ε процедури sqrt.
("узалежнити" = "зробити залежним", я припускаю, що правильно українською тут буде "знайти залежність", і неуважний викладач скопіював другу половину завдання в першу)
Ще раз: польською я читаю лише прості тексти зі словником, тому можу сильно помилятися.

Та професія подобається, всі завдання які були все 5, ну і викладач досвідчений програміст з стажем більше 20 років. Він говорив, що потрібно в цій функції задати , щось таке, щоб функція виконувалася n-кількість разів, а кількість разів функція sqrt виконувалася від додаткового параметру  ε, але я не розумію як задати кількість виконань(

Пробував зробити так , але це цикл на функції, це не добре, а по його словах це має вказуватися до самої назви функції

class Heron {

    static double square(double x) {
        return x * x;
    }

    static double abs(double x) {
        if (x < 0) {
            return -x;
        } else {
            return x;
        }
    }

    static boolean isGoodEnough(double y, double x) {
        return abs(square(y) - x) <= 0.0001;
    }

    static double avg(double x, double y) {
        return (x + y) / 2.0;
    }

    static double enhance(double y, double x) {
        return avg(y, x / y);
    }

    static double sqrt(double y, double x) {
        if (isGoodEnough(y, x)) {
            return y;
        } else {
            return sqrt(enhance(y, x), x);
        }
    }

    public static void main(String[] args) {
        int y = 1, x = 2;
        System.out.println(sqrt(y, x));
        int n = 10;
        for (int i = 0; i < n; i++) {
            square(x);
            abs(x);
            isGoodEnough(y, x);
            avg(x, y);
            enhance(y, x);
            for (int s = 0; s < n; s++) {
                sqrt(y, x);
            }
            System.out.println(sqrt(y, x));


        }

    }
}

8

Re: Герон

Okhotnik написав:

викладач досвідчений програміст з стажем більше 20 років.

    static double sqrt(double y, double x) {
        if (isGoodEnough(y, x)) {
            return y;
        } else {
            return sqrt(enhance(y, x), x);
        }
    }

Він змушує вас використовувати рекурсію ?
Якщо ні, то перепишіть код використовуючи цикл (без рекурсії), тоді буде дуже просто встановити кількість ітерацій і точність.

Подякували: Okhotnik, koala2

9 Востаннє редагувалося koala (12.01.2019 22:23:12)

Re: Герон

Так і так не складно. Просто порахувати кількість викликів функції sqrt.
---
Ще раз. Цей клас призначений для обчислення квадратного кореня з числа методом Герона Александрійського (функція sqrt); а завдання має звучати так:
- обмежити кількість викликів функції цілим числом n;
- обчислити кількість викликів функції, якщо точність задається параметром ε функції sqrt.
Правильно?

Декалог програміста-початківця: https://replace.org.ua/post/132988/
Подякували: PRY, Okhotnik, leofun013

10 Востаннє редагувалося Okhotnik (12.01.2019 23:13:39)

Re: Герон

koala написав:

Так і так не складно. Просто порахувати кількість викликів функції sqrt.
---
Ще раз. Цей клас призначений для обчислення квадратного кореня з числа методом Герона Александрійського (функція sqrt); а завдання має звучати так:
- обмежити кількість викликів функції цілим числом n;
- обчислити кількість викликів функції, якщо точність задається параметром ε функції sqrt.
Правильно?

Майже вірно
Але потрібно
- Задати кількість викликів функції цілим числом n;
- Задати кількість викликів функції, окремим параметром ε функції sqrt.

Використання рекурсивного способу необов'язкове

Подякували: leofun011

11

Re: Герон

Тоді в чому саме проблема? Не виходить порахувати кількість викликів? Просто зменшуйте це число на кожному кроці, доки не буде 0, а перед поверненням з функції - збільшуйте.
А взагалі спробую запам'ятати, що "uzależnić" - то "задати". Зовсім не очевидно, і Ґуґл не знає.

Декалог програміста-початківця: https://replace.org.ua/post/132988/

12

Re: Герон

koala написав:

Тоді в чому саме проблема? Не виходить порахувати кількість викликів? Просто зменшуйте це число на кожному кроці, доки не буде 0, а перед поверненням з функції - збільшуйте.
А взагалі спробую запам'ятати, що "uzależnić" - то "задати". Зовсім не очевидно, і Ґуґл не знає.

На скільки мені сьогодні пояснив викладач, я зрозумів так, що потрібно задати "повтори" функції (згаданих раніше) щоб можна було регулювати скільки разів вони повині виконуватися(дані від першого вероховування повині ще раз йти на вираховування і такий цикл має відбуватися стільки разів, скількі вказано в самому "повторі". Але я ще так і не зрозумів як їх правильно написати.

"uzależnić" - в цьому випадку має значення (зробити, задати) для нас не очевидно, слово знайоме, а значення інше

13

Re: Герон

А ви розумієте, як зараз задаються "повтори"?

Декалог програміста-початківця: https://replace.org.ua/post/132988/

14 Востаннє редагувалося leofun01 (13.01.2019 03:36:07)

Re: Герон

Може якось так ?

public class Heron {
    public static void main(String args[]) {
        double x = 25d, y;
        //
        setTolerance(1e-4d); // == 0.0001
        System.out.println("tolerance = " + getTolerance());
        y = sqrt(1d, x);
        System.out.println("sqrt(" + x + ") = " + y);
        //
        setIterationsCount(6);
        System.out.println("iterations count = " + getIterationsCount());
        y = sqrt(1d, x);
        System.out.println("sqrt(" + x + ") = " + y);
    }

    static double _tolerance = 1e-15d;
    static int _iter_count = Integer.MAX_VALUE;

    public static double getTolerance() { return _tolerance; }
    public static void setTolerance(double value) {
        _tolerance = value;
        _iter_count = Integer.MAX_VALUE;
    }
    public static double getIterationsCount() { return _iter_count; }
    public static void setIterationsCount(int value) {
        _iter_count = value;
        _tolerance = 0d;
    }

    static double square(double x) { return x * x; }
    static double abs(double x) { return x < 0 ? -x : x; }
    static boolean isGoodEnough(double y, double x) {
        return abs(square(y) - x) <= _tolerance
            || _iter_count <= 0;
    }
    static double avg(double x, double y) { return (x + y) / 2d; }
    static double enhance(double y, double x) { return avg(y, x / y); }
    static double sqrt(double y, double x) {
        // System.out.println("x = " + x + "    y = " + y);
        if (isGoodEnough(y, x)) {
            return y;
        } else {
            --_iter_count;
            return sqrt(enhance(y, x), x);
        }
    }
}


precision = 1.0E-4
sqrt(25.0) = 5.000000000053722
iterations count = 6
sqrt(25.0) = 5.000000000053722

Але це поганий приклад, бо
1) рекурсія == зло
2) похибка і кількість ітерацій мали би бути параметрами функцій, а не полями.

upd: Попутав точність з допустимою похибкою :)

Подякували: Okhotnik1