Другие языки программирования и технологии
Площадь шестиугольника
Ограничение времени : 1 с Ограничение памяти : 256 M Вам необходимо найти площадь правильного шестиугольника со стороной (2*L)/(3^0.25) Входные данные Единственное целое число L (1 ≤ L ≤ 109) Выходные данные Единственное число S - площадь, закругляющая к ближайшему целому. Код Pascal: {$N+,E+} var l:longint; s,a,h:extended; begin read(l); if (l>=1) and (l<=1000000000) then begin a:=(2*l)/exp(0.25*ln(3)); {a:=(2*l)/exp(0.25*ln(3));} h:=sqrt(sqr(a)-sqr(a/2)); s:=(a/2)*h*6; {s:=3*sqrt(3)*(sqr(a))/2;} write(round(s)); end; end. В программе ошибка на 14 тесте, которой по логике быть не должно... ====== Тест #14 ======= --- Входные данные ---857747244 --- Результат работы программы ---4414382007537573215 --- Правильный ответ ---4414382007537573216 --- Ошибки --- --- Вывод проверяющей программы ---Answers do not match: out = 4414382007537573215, corr = 4414382007537573216
мдаа.. я в шоке.
1. Почему то студенты думают что преподы, дают сложные задачи, чтобы завалить.. а на самом деле дают чрезвычайно легкие чтобы студент хотя бы что то сделал. .
Поэтому эта задача просто смешная.
2. Пробовал хотя бы упростить те формулы которые ты использовал? Думал ли ты над тем почему сторона шестиугольника была дана именно такая, а не любая иная, скажем?
Ладно.. хватит об этом. .
1. Программа ни к черту не годится. Ты берешь квадраты а, из них сразу же извлекаешь корень? нельзя вынести а из под корня? неужели не видно что при вычислении h у тебя вылезет sqrt(3), который при последующих подстановках сократится с заданным знаменателем в стороне треугольника? А комп еще считает експоненту, логарифм, которые вообще считать не нужно. .
Потому что в программе должна быть только одна формула.. а именно s=6*L^2 (иными словами 6*L*L)
Какая программа будет быстрее?
2. Какой round? По условию у тебя L - целое число? Если L- целое, то ты считаешь что 6*L^2 уже будет чуточку не целым? А каким? Рациональным или иррациональным? К сожалению площадь тоже будет целым числом, не трать такты - выбрось round.
3. По условию задачи у тебя L лежит в диапазоне от 1 до 109, с какого перепугу ты задаешь его как 857747244 ??(Хотя даже если нужно находить квадраты хоть 100-значных чисел.. это тоже можно реализовать)
4. 4(последняя цифра в L)*4(ибо в формуле L^2 )=16, 6(последняя цифра с предыдущего результата) *6 (ибо в формуле 6*L^2)=36, последняя цифра говорит о том, что верный ответ действительно совпадает по последней цифре с ответом corr.
5. Я не думаю что написать программу для вывода квадратов чисел (пусть и с постоянным множителем 6) для диапазона 1...109 есть сверхзадача.
1. Почему то студенты думают что преподы, дают сложные задачи, чтобы завалить.. а на самом деле дают чрезвычайно легкие чтобы студент хотя бы что то сделал. .
Поэтому эта задача просто смешная.
2. Пробовал хотя бы упростить те формулы которые ты использовал? Думал ли ты над тем почему сторона шестиугольника была дана именно такая, а не любая иная, скажем?
Ладно.. хватит об этом. .
1. Программа ни к черту не годится. Ты берешь квадраты а, из них сразу же извлекаешь корень? нельзя вынести а из под корня? неужели не видно что при вычислении h у тебя вылезет sqrt(3), который при последующих подстановках сократится с заданным знаменателем в стороне треугольника? А комп еще считает експоненту, логарифм, которые вообще считать не нужно. .
Потому что в программе должна быть только одна формула.. а именно s=6*L^2 (иными словами 6*L*L)
Какая программа будет быстрее?
2. Какой round? По условию у тебя L - целое число? Если L- целое, то ты считаешь что 6*L^2 уже будет чуточку не целым? А каким? Рациональным или иррациональным? К сожалению площадь тоже будет целым числом, не трать такты - выбрось round.
3. По условию задачи у тебя L лежит в диапазоне от 1 до 109, с какого перепугу ты задаешь его как 857747244 ??(Хотя даже если нужно находить квадраты хоть 100-значных чисел.. это тоже можно реализовать)
4. 4(последняя цифра в L)*4(ибо в формуле L^2 )=16, 6(последняя цифра с предыдущего результата) *6 (ибо в формуле 6*L^2)=36, последняя цифра говорит о том, что верный ответ действительно совпадает по последней цифре с ответом corr.
5. Я не думаю что написать программу для вывода квадратов чисел (пусть и с постоянным множителем 6) для диапазона 1...109 есть сверхзадача.
какая-то странная формула вычисления площади правильного шестиугольника...
Если у вас два умножить на эль, как указано, а не два в степени аль, то непонятно, откуда такие порядки получаются, должны быть десятки тысяч. Если это степень, то это задача на вычисление дробной степени с точностью чуть более 200 двоичных знаков после запятой. Не уверен, что арифметика паскаля с плавающей точкой это позволяет.
Владимир Тетерук
Кстати, где-то около 64 бите и ошибка получается. Тут надо затащить все под одну степень и считать вручную до 2L бита, как мне кажется.
Татьяна Николаева
Программа работает...
Для проверки можете запустить её через FreePascal...
Но где-то есть маленький нюанс...
Для проверки можете запустить её через FreePascal...
Но где-то есть маленький нюанс...
Похожие вопросы
- C++ расчет площади методом монте-карло
- как в visual basic определить методом Монте-Карло площадь треугольника?
- Треугольник задан координатами своих вершин. вычислить его площадь. На языке СИ!
- помогите составить алгоритм вычисления площади трапеции по двум основаниям и высоте. На языке программирования Basic
- Имеется треугольник с известной гипотенузой(c=5).Найти размеры катетов при которых треугольник имеет наибольшую площадь.
- помогите с кодом С++ для вычесления площади равнобедреной трапеции...
- не очень сложная прога на c++ не робит: Написать функцию, сравнивающую площадь двух треугольников, по координатам их вер
- С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...
- Как найти площадь пересечения колец?
- Заданы площади квадрата и круга. Определите, поместится ли квадрат в круге В ПАСКАЛЕ ПОЖ ПОМОГИТЕ
В данный момент используется следующий алгоритм:
a:=(2*l)/exp(0.25*ln(3));
h:=sqrt(sqr(a)-sqr(a/2));
s:=(a/2)*h*6;