Помощь - Поиск - Пользователи - Календарь
Полная версия: паскаль и алгебра
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
candy888
Привет всем. Необходимо перевести формулу та что на картинке в язык паскаля. что то с алгеброй туго, ни как не могу сообразить как правильно разобраться с логарифмами в паскале.
вот что сам накидал, но вроде не правильно.
Код
Program chast1;
var a,b,y:real;
begin
Write('Введите b=');
Readln (b);
a:=(ln(ln(b)+b))/ln(10);
y:=(1/(Pi*(Sqr(a)+Sqr(b))))*((3*sin(Sqr(a)+Sqr(b)))*sin((Sqr(a)+Sqr(b))+2*((Sqr(a)+Sqr(b)))));
Writeln('a=',a);
Writeln ('y=',y);
end.
IUnknown
Цитата
((3*sin(Sqr(a)+Sqr(b)))*sin((Sqr(a)+Sqr(b))
Откуда взялось выделенное красным? Этого не было на картинке. А вот квадратный корень - был, а у тебя он отсутствует.

Вообще, лучше бы упростить выражение: введи еще одну переменную, скажем Z = A2 + B2, и все сразу станет гораздо проще:

a:=(ln(ln(b)+b))/ln(10);
z := sqr(a) + sqr(b);
y:=(1 / (Pi * Sqrt(z)) * sin(z) * sqr(sin(z));
Writeln('a=',a);
Writeln ('y=',y);
candy888
Тоесть правильная формул для sin^3 (a^2 + b^2) бужет такая sin(a^2+b^2)* (sin(a^2+b^2))^2 ???
так что ли?а то я сейчас запутался что с логарифмами сперва, скачл маткад уже там попробовал-по ходу с логарифмом разобрался. остался вопрос по формуле синус в кубе преобразовать.
Спасибо за подсказку!!!
как кстати а форуме плюсики людям ставить?
Lapp
Я бы, наверное, предварительно присвоил бы значение синуса некоторой переменной, а потом уже возводил бы в куб как a*Sqr(a). Зачем заставлять машину два раза считать функцию?

Цитата(candy888 @ 1.09.2011 0:36) *
как кстати а форуме плюсики людям ставить?
Я поставил. Сам сможешь после набора 5 постов (зеленый плюсик под ником и аватаром, слева)
candy888
СПАСИБО ТОВАРИЩИ!!!Очень помогли!!!
TarasBer
> Зачем заставлять машину два раза считать функцию?

Действительно, зачем компилятор заставляет машину два раза считать функцию, а человека - вручную кешировать результат функции?
Lapp
Цитата(TarasBer @ 1.09.2011 10:23) *
Действительно, зачем компилятор заставляет машину два раза считать функцию, а человека - вручную кешировать результат функции?
Это неизбежные издержки. Была бы функция для куба или хотя бы для степени - этого делать было бы не нужно в данном случае. А так - приходится выбирать "меньшее из зол". Выделенные болдом слова являются ключевыми. Не в этом, так в другом случае придется что-то "кешировать". Сама по себе математическая запись тоже не идеальна. Все доказательства пестрят словами "обозначим это выражение через Q". И что это, по-твоему, как не "кеширование"? ))

Сомневаюсь, что возможно сделать компилятор, который будет совершенно свободен от этого "недостатка". Оптимизация, конечно, может это учесть (то есть, минимизировать количество вычислений для данного конкретного случая) - но, мне кажется, ты, Тарас, первый взвоешь от такой оптимизации (извини за переход на личности)).
TarasBer
> но, мне кажется, ты, Тарас, первый взвоешь от такой оптимизации (извини за переход на личности)).

Почему?
Я всё равно оптимизированные версии для отладки не использую (только на асмовыхлоп смотрю, что там компилятор насочинял), а отключать оптимизации для отладки всегда можно.
Lapp
Цитата(TarasBer @ 2.09.2011 9:56) *
Почему?
Я всё равно оптимизированные версии для отладки не использую (только на асмовыхлоп смотрю, что там компилятор насочинял), а отключать оптимизации для отладки всегда можно.

Ладно, оставим личности (не очень удачная была шутка, но такое уж у меня сложилось мнение о тебе)).

Отключить оптимизацию на отладке? Хорошо. Но если баг как раз в оптимизации?

Допустим, мы делаем на заказ прогу для владельца машинописного цеха, считающую среднее время между нажатиями на клавишу (для оценки скорости работы машинисток)). В цикле вызываем функуцию Time и вычитаем старое (запомненное) значение из нового. На стадии отадки оптимизация отключена. Отладили, все считается правильно. Мы включаем оптимизацию, компилируем и передаем экзешник в эксплуатацию. А назавтра заказчик звонит и мы понимаем из 2% его слов (которые не мат), что результат всегда 0. Угадаешь, почему? smile.gif

Теперь ответь: как компилятор отличит функцию типа sin от функции типа time? То есть - как он разберет, какую можно кешировать, а какую нельзя?
-TarasBer-
> Теперь ответь: как компилятор отличит функцию типа sin от функции типа time? То есть - как он разберет, какую можно кешировать, а какую нельзя?

Чем отличаеться синус от функции времени? Ну понятно: синус чистый, и время - нет.
Как определять чистоту функции? Ну можно вшить в компилятор список чистых функций. Можно разрешить составлять новые чистые функции (если они используют только локальные и входные данные и чистые внешние функции).
TarasBer
Пипец, я вчера умудрился облажаться с мягким знаком.
Это просто эпидемия какая-то, читаю сообщения серьёзных людей, и там тоже повально.
Lapp
Цитата(TarasBer @ 5.09.2011 12:54) *
Пипец, я вчера умудрился облажаться с мягким знаком.
Это просто эпидемия какая-то, читаю сообщения серьёзных людей, и там тоже повально.
Ну, тебе мы это спишем на то, что клавиши рядом - задел нечаянно )).
А "серьезных людей" тыкать мордой, как котят! Надеюсь, это не относится к посетителям этого форума.. чего тут серьезного?.. и люди тут как люди..

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.