Тройка Пифагора (Java)

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
ЗАДАЧА
На вход метода подаются три целых числа (в любой последовательности, 1 2 3, 3 2 1 или 1 3 2 и т.д.). Определить являются ли эти числа тройкой Пифагора.
 

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
вот что у меня получилось

Java:
import java.util.Arrays;

public class Pifa {
    public static void main(String[] args) {
        int x = 15;
        int y = 17;
        int z = 8;
        System.out.println("числа: (" + x + ", " + y + ", " + z + ") - " + pifagor(x, y, z));
    }

    static String pifagor(int x, int y, int z) {
        int[] arr = {x, y, z};
        Arrays.sort(arr);
        if (arr[0] * arr[0] + arr[1] * arr[1] == arr[2] * arr[2]) {
            return "Пифагорова тройка";
        } else {
            return "не Пифагорова тройка";
        }
    }
}
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Я если честно, не понял саму теорему Пифагора...:oops:
Ну допустим, запрос на три целых числа:
Java:
System.out.println("Введите три целых числа.");
        Scanner in = new Scanner(System.in);
        System.out.print("Введите первое число: ");
        int x = in.nextInt();
        System.out.print("Введите второе число: ");
        int y = in.nextInt();
        System.out.print("Введите третье число: ");
        int z = in.nextInt();
Это не проблема. Идем дальше. Вот сама формула расчета Screenshot_1.png
Создаю метод с параметрами:
Java:
static string pif(int x, int y, int z)
ну и условие)):
Java:
if (Math.pow(x,2) + Math.pow(y,2) == Math.pow(z,2))
        {
            return "Пифагорова тройка";
        }
        else
        {
            return "Не Пифагорова тройка";
        }
Вот весь код:
Java:
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        System.out.println("Введите три целых числа.");
        Scanner in = new Scanner(System.in);
        System.out.print("Введите первое число: ");
        int x = in.nextInt();
        System.out.print("Введите второе число: ");
        int y = in.nextInt();
        System.out.print("Введите третье число: ");
        int z = in.nextInt();

        System.out.println("Введенные Вами числа: " + pif(x, y, z));
    }

    static String pif(int x, int y, int z) {
        if (Math.pow(x, 2) + Math.pow(y, 2) == Math.pow(z, 2)) {
            return "Пифагорова тройка";
        } else {
            return "Не Пифагорова тройка";
        }
    }
}

Ток как его проверить не нашел)
 
Последнее редактирование:

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
Формула понятна же?
(3, 4, 5) -> 9 + 16 = 25 -> 25 = 25 - это тройка

Некоторые пифагоровы тройки:

(3, 4, 5), (6, 8, 10), (5, 12, 13), (9, 12, 15), (8, 15, 17), (12, 16, 20), (15, 20, 25), (7, 24, 25),(10, 24, 26), (20, 21, 29), (18, 24, 30), (16, 30, 34), (21, 28, 35), (12, 35, 37), (15, 36, 39), (24, 32, 40), (9, 40, 41), (27, 36, 45), (14, 48, 50), (30, 40, 50), …
 

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
Работает, добавь еще чтобы числа могли быть в любой последовательности, (3 4 5, 5 4 3 или 4 5 3 и т.д.)
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Работает, добавь еще чтобы числа могли быть в любой последовательности, (3 4 5, 5 4 3 или 4 5 3 и т.д.)
А зачем в любой последовательности. Ведь по формуле четко задаются числа.

Слушай, а для чего ты делаешь сортировку массива:
Код:
Arrays.sort(arr);
У тебя ж задаются конкретные числа под конкретные переменные. Зачем ты их по порядку расставляешь.
 
Последнее редактирование:

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
Смысл в том, что последовательность неизвестна.
Сортируем массив чтоб числа были по возрастанию.
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Я скорее всего саму эту теорему понять не могу. Есть же формула расчета, этой теоремы: x в квадрате + y в квадрате = z в квадрате. По этой формуле рассчитывается. Под x, y, z подставляются числа введеные пользователем. Как же последователоность не известа? Формула же есть.

А по поводу сортировки массива - все равно не понимаю, для чего).
 

pisikot

Пользователь
Сообщения
73
Оценка реакций
51
Думай так, твоей прогой будут пользоваться разные люди.
Человек запускает прогу не зная формулы и не зная какие бывают тройки пифагора.. и начинает вводить любые цифры.

и вот он вводить 3,4,5 прога говорит тройка пифагора, все правильно.
а если он вводить 4, 5, 3 ему выдает это не тройка, хотя эти цифры являются тройкой пифагора. То как они подставятся в формулу, это забота метода, а не юзера.

Если не хочешь так делать, то нужно просить юзера вводить точные x,y,z
Например прога приветствует юзера и говорить формула для тройки Пифагора такая:

введите X, введите Y и наконец Z

или
мой вариант с сортировкой, а на выходе показывать так: "это тройка пифагора, при условии x=3, y=4, z=5"
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Думай так, твоей прогой будут пользоваться разные люди.
Человек запускает прогу не зная формулы и не зная какие бывают тройки пифагора.. и начинает вводить любые цифры.

и вот он вводить 3,4,5 прога говорит тройка пифагора, все правильно.
а если он вводить 4, 5, 3 ему выдает это не тройка, хотя эти цифры являются тройкой пифагора. То как они подставятся в формулу, это забота метода, а не юзера.

Если не хочешь так делать, то нужно просить юзера вводить точные x,y,z
Например прога приветствует юзера и говорить формула для тройки Пифагора такая:

введите X, введите Y и наконец Z

или
мой вариант с сортировкой, а на выходе показывать так: "это тройка пифагора, при условии x=3, y=4, z=5"
А! Теперь понял, логику твоего кода).
 

iskander

Пользователь
Сообщения
6
Оценка реакций
4
Возраст
67
Вообще то нет проблем написать генератор всех троек Пифагора (например для заданного диапазона натуральных чисел). (А также и для n мерного случая). Например так (вот моя небольшая работа на эту тему):
 
Последнее редактирование модератором:

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Вообще то нет проблем написать генератор всех троек Пифагора (например для заданного диапазона натуральных чисел). (А также и для n мерного случая). Например так (вот моя небольшая работа на эту тему):
напишите ссылку мне в ЛС. Я ее в ваш пост вставлю.
 

iskander

Пользователь
Сообщения
6
Оценка реакций
4
Возраст
67

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Опубликовано например здесь:
https://docplayer.ru/72093735-Malenkaya-teorema-o-summe-kvadratov-celyh-chisel.html
Или в несколько сокращенном виде здесь:
http://new-idea.kulichki.net/pubfiles/171027124942.pdf
Есть еще в elibrary.ru (но там серьезно. Надо регистрироваться, что бы скачать)
С Уважением А.Богданов
Для моего ума, это все кромешная тьма).
 

iskander

Пользователь
Сообщения
6
Оценка реакций
4
Возраст
67
Хорошо, тогда по поводу Вашей программной реализации.
1) Целые числа бывают и отрицательные. Так например -3, 4, 5 ваша программа признает Пифагоровой тройкой,
а 3, 4, -5 нет.
2) Тип int ограничивает диапазон возможных чисел. (не более 2млрд 148 млн). Лучше предусмотреть возможность очень больших чисел и использовать тип long. Кроме того в java нет функции возведения в степень целых чисел. pow предназначена для чисел с плавающей точкой типа dowble, и возвращает такой же тип. В данном случае лучше самому написать метод возведения в квадрат целых типа long.
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
Хорошо, тогда по поводу Вашей программной реализации.
1) Целые числа бывают и отрицательные. Так например -3, 4, 5 ваша программа признает Пифагоровой тройкой,
а 3, 4, -5 нет.
2) Тип int ограничивает диапазон возможных чисел. (не более 2млрд 148 млн). Лучше предусмотреть возможность очень больших чисел и использовать тип long. Кроме того в java нет функции возведения в степень целых чисел. pow предназначена для чисел с плавающей точкой типа dowble, и возвращает такой же тип. В данном случае лучше самому написать метод возведения в квадрат целых типа long.
Спасибо за замечание. Завтра проверю на https://tehadm.ru/threads/trojka-pifagora-c.652/
 

iskander

Пользователь
Сообщения
6
Оценка реакций
4
Возраст
67
Про отрицательные числа - это если, как упоминалось в переписке, применяется предварительная сортировка.
Т.Е. сортировать числа надо по их абсолютным величинам.
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65

iskander

Пользователь
Сообщения
6
Оценка реакций
4
Возраст
67
Примененный им метод
Arrays.sort(arr)
не учитывает наличия отрицательных чисел. Например 3, 4, -5, он отсортирует как -5, 3, 4, и результат проверки
(-5 * -5) + (3*3) не равно (4*4), те даст отрицательный результат. А например 3, -4, 5 даст положительный результат.
 

mygedz

Администратор
Сообщения
606
Оценка реакций
65
1) Целые числа бывают и отрицательные. Так например -3, 4, 5 ваша программа признает Пифагоровой тройкой,
а 3, 4, -5 нет.
Вернулся к работе над ошибками)
Только что проверил, обе тройки чисел, выдают положительный результат:
Screenshot_1.png
и
Screenshot_2.png
 
Верх