0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
||||||
1 | ||||||
Функция вычисления длины отрезка09.10.2017, 14:10. Показов 12632. Ответов 19
Метки нет (Все метки)
Доброго времени суток , помогите пожалуйста отладить программу , вот условие и мой код:
Напишите функцию, вычисляющую длину отрезка по координатам его концов. С помощью этой функции напишите программу, вычисляющую периметр треугольника по координатам трех его вершин. Входные данные На вход программе подается 6 целых чисел — координаты вершин треугольника. Все числа по модулю не превосходят 30000. Выходные данные Выведите значение периметра этого треугольника ровно с 10-ю знаками после десятичной точки ПРОБЛЕМА: При тестировании проги большинство тестов проходит корректно , но на некоторых выводит результат NAN некорректной операции , ниже пишу пример входной строки при которой происходит баг Test Ожидалось Получилось -15809 20304 18912 -10503 10020 22779 106814.5554724964 NaN
0
|
09.10.2017, 14:10 | |
Ответы с готовыми решениями:
19
Массив: Нахождение длины максимального отрезка Функция вычисления длины отрезка Функция для вычисления длины отрезка Функция нахождения длины отрезка |
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
||||||||||||||||
09.10.2017, 14:40 | 2 | |||||||||||||||
Я когда-то делал подобное задание. Но у меня там нет метода main и во вторых состоит из 2-х классов. Но, думаю, не составит труда взять нужные методы и в один класс с main запихнуть всё, если нужно
вот как вызывать:
0
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|
09.10.2017, 14:43 | 3 |
int на long поменять
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
09.10.2017, 14:49 | 4 |
NaN - это у double превышение зарезервированной длинны. Слишком большие цифры берёшь для поиска значений, возможно
Добавлено через 2 минуты И нахождение периметра, вроде как не только сложить длинны сторон, но ещё и поделить на 2 эту сумму
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 14:51 [ТС] | 5 |
ArtemFM , а как избавиться от этой проблемы ? ведь в условии требуют вводить именно эти числа
-15809 20304 18912 -10503 10020 22779 , насколько я знаю типа длиннее дабл уже нет Добавлено через 1 минуту поделить на 2 это уже полупериметр будет
0
|
Модератор
|
||||||
09.10.2017, 14:54 | 6 | |||||
Дмитрий99667, вам же предложили вместо int использовать long.
Можно double.
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
||||||
09.10.2017, 15:07 | 7 | |||||
Нет никаких ошибок. Вот с твоими числами проверил:
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:07 [ТС] | 8 |
KolodeznyDiver , у меня изначально в исходном коде уже был записан double , а значения координат явно входят в тип int
-15809 20304 18912 -10503 10020 22779
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
||||||
09.10.2017, 15:08 | 9 | |||||
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:10 [ТС] | 10 |
но вы немного поменяли мой код , забиваю данные в свою пишет нан
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
09.10.2017, 15:12 | 11 |
В общем double самый большой для дробных чисел.
И ничего с NaN не сделаешь. Просто не использовать числа, коль до 30000 разрешено по модуля, типа таких -30000 30000 или будешь ловить NaN. Это не ошибка программы, скорее ошибка поставленной задачи.
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:14 [ТС] | 12 |
Так мои числа и не превосходили 30000 по модулю ,. а ошибку пишет все равно с ними вот в чем загвоздка
-15809 20304 18912 -10503 10020 22779
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
09.10.2017, 15:20 | 14 |
Поменяй (x1-x2)*(x1-x2) на Math.pow(x1-x2, 2) и вторую часть так же и не будет ошибки
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:30 [ТС] | 15 |
да , поменял тип на long и все заработало наверно и с дабл прокатит, но все равно не понимаю вот что : числа типа int возводятся в квадрат уже в методе len который возвращает тип double (именно здесь я уже учел возведение в квадрат) как видно из моего исходного кода, причем тут тип вводимых чисел ??? ведь я вызываю len которая уже double как видно из исходника , а вводимые числа соответствуют intу
Добавлено через 4 минуты А почему же у нас исчезла ошибка ? ведь ничего принципиально не изменилось-просто хочу докопаться до истины - что же тогда изменилось ???- просто не хочу расставлять типы методом перебора и тоже самое с функциями Math.pow(x1-x2, 2) , хочу понять что принципиально изменилось , объясните пожалуйста ведь это не есть хорошо подгонять под ответ
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
09.10.2017, 15:32 | 16 |
Всё значение в скобках Math.sqrt() в начале то, которое ты туда отправил и лишь на выходе double
У тебя получается Math.sqrt(int - int * int - int +...) => double B видимо выходит за область инта
0
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:36 [ТС] | 17 |
а что измениться если мы вызовем метод возведения в степень , какой тут механизм ?
0
|
Модератор
|
|
09.10.2017, 15:40 | 18 |
Без разницы что он возвращает, в квадрат у вас возводились int.
Добавлено через 2 минуты В смысле, возвращать то тоже нужно double, но в double аргументы сами собой не превращаются при умножении.
0
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
09.10.2017, 15:40 | 19 |
Сообщение было отмечено Дмитрий99667 как решение
Решение
Math.pow(int, 2)
получается выглядит так: (int x1 - int x2) тут оба значение int и ответом будет int но прежде чем ответ возводить в степень, Math.pow ответ от x1 - x2 кастует в double У тебя бы работало, если бы ты написал так return Math.sqrt((double )(x-xk) * (double) (x-xk)+ (double)(y-yk) * (double) (y-yk))); таким образом мы сразу будем после разности 2-х интов кастовать ответ в double и перемножали между друг другом уже не инты а даблы
1
|
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 39
|
|
09.10.2017, 15:51 [ТС] | 20 |
ArtemFM , спасибо , это походу то что я хотел услышать , теперь механизм вроде как ясен
0
|
09.10.2017, 15:51 | |
09.10.2017, 15:51 | |
Помогаю со студенческими работами здесь
20
Вычисления длины отрезка по координатам его концов Написать вспомогательные функции вычисления длины отрезка Составить функцию вычисления длины отрезка заданными вершинами Функции вычисления длины отрезка по заданным координатам его концов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |