Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить выражение в Паскаль / 13 сообщений из 13, страница 1 из 1
04.06.2013, 23:07
    #38285891
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
Есть задание, прикрепляю фото. Пользователь вводит значение х, показатель степени n и требуюмую точность eps. Значение синуса х в первой степени сохраняю в переменной с. В общем встал вопрос, как сделать количество проходов от 2 до n....
Что-то совсем поплыл я с этим заданием. Не подскажете, как можно решить данное задание? Спасибо!
Код: sql
1.
2.
3.
4.
5.
6.
7.
c := sin(x);
for i := 2 to n do
begin
x := x * x;
y := y * sin(x) + c;
end;
       writeln('Y = ', y:3:3);

...
Рейтинг: 0 / 0
04.06.2013, 23:46
    #38285940
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
alexander4321Значение синуса х в первой степени сохраняю в переменной с.А зачем ты это делаешь?
Возьми бумажку с карандашом и вручную просчитай эту формулу. Пойми как ты делаешь этот расчет вручную. А теперь запиши последовательность ручных действий на паскале. И все.
...
Рейтинг: 0 / 0
05.06.2013, 00:03
    #38285959
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
Логичней было бы значение показателя степени sin и x для i от 1 до n увеличивать на 1 и суммировать в переменную.
Но в степень то не получится возвести символом ^. Препод объяснял, чтобы возвести в определенную степень, нужно перемножать нужное количество раз. Такое в данной ситуации, когда заранее не известна степень, я сделать не смогу. Читаю сейчас в интернете что-то через натуральный логарифм можно, еще какие-то способы.
...
Рейтинг: 0 / 0
05.06.2013, 00:30
    #38285987
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
alexander4321Но в степень то не получится возвести символом ^. Препод объяснял, чтобы возвести в определенную степень, нужно перемножать А ты знаешь как по английски будет "возведение в степень"?
Вот возьми это слово, вбей его в гугль вместе с названием языка и наслаждайся.
...
Рейтинг: 0 / 0
05.06.2013, 01:21
    #38286022
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
Все получилось. Спасибо за подсказку.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
program L_2_Z_3;
var a, b, x, y, c: real;
    n, i:      integer;
begin
    writeln('Vvedite znachenie x'); readln(x); 
    writeln('Vvedite pokazatel stepeni n'); readln(n);
    y := 0;
for i := 1 to n do
begin
x := exp(ln(x)*i);
b := sin(x);
y := y + exp(ln(b)*i);
end;
       writeln('Y = ', y:3:5);
       readln;
end.


Единственный нюанс с вводимыми значениями. Попробовал ввести х=1 и показатель степени n=2. Выдало верный результат, пересчитывал на калькуляторе. Когда ввожу немного большие числа, то выдает ошибку "Floating point overflow". Прочитал, что это произошло потому, что величина вещественного числа вышла за пределы диапазона, допускаемого Паскалем. Если это проблема Паскаля, то с меня взятки гладки. Но вдруг я в чем то ошибся? Не посмотрите код? Заранее спасибо!
...
Рейтинг: 0 / 0
05.06.2013, 01:41
    #38286033
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
alexander4321,

Вместо Real попробуйте Double или Extended .
Код: pascal
1.
var a, b, x, y, c: Double;
...
Рейтинг: 0 / 0
05.06.2013, 01:59
    #38286041
Вычислить выражение в Паскаль
alexander4321Все получилось. Спасибо за подсказку.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
program L_2_Z_3;
var a, b, x, y, c: real;
    n, i:      integer;
begin
    writeln('Vvedite znachenie x'); readln(x); 
    writeln('Vvedite pokazatel stepeni n'); readln(n);
    y := 0;
for i := 1 to n do
begin
x := exp(ln(x)*i);
b := sin(x);              { sin может принимать отрицательные значения }
y := y + exp(ln(b)*i);    { аргумент ln должен быть НЕ отрицательным }
end;
       writeln('Y = ', y:3:5);
       readln;
end.


Единственный нюанс ...
...
Рейтинг: 0 / 0
05.06.2013, 02:02
    #38286042
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
White Owlalexander4321Но в степень то не получится возвести символом ^. Препод объяснял, чтобы возвести в определенную степень, нужно перемножать А ты знаешь как по английски будет "возведение в степень"?
Вот возьми это слово, вбей его в гугль вместе с названием языка и наслаждайся.В TP нет встроенной функции для возведения в степень, о чем ТС и говорил... Используем:
Код: pascal
1.
2.
3.
4.
function power(a,b:real):real;
begin
 power:=exp(b*ln(a));
end;

Начинаем проверять код... Там уже ошибка в формулах степени - перепутаны местами аргумент и степень... Но и наш код падает... Тестим...
А ведь все очевидно - логарифм от отрицательных чисел не взять, просто знак аргумента надо вынести за вычисления. И получаем:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
program L_2_Z_3;

var p, x, xi, si: real;
    n, i: word;

function power(a:real;b:word):real;
var
 sign:shortint;
begin
 sign:=1;
 if a<0 then begin
  a:=-a;
  if odd(b) then sign:=-1
 end;
 power:=sign*exp(b*ln(a));
end;

begin
 writeln('Vvedite znachenie x'); readln(x);
 writeln('Vvedite pokazatel stepeni n'); readln(n);
 p := 0; xi:=1;
 for i := 1 to n do
 begin
  xi := xi*x;
  si := sin(xi);
  p := p + power(si,i);
 end;
 writeln('Y = ', p:3:5);
 readln;
end.
...
Рейтинг: 0 / 0
05.06.2013, 02:03
    #38286043
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
AndreTMперепутаны местами аргумент и степень* соврал я, всё там правильно... но это просто ночь на дворе
...
Рейтинг: 0 / 0
05.06.2013, 18:27
    #38287274
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
alexander4321Логичней было бы значение показателя степени sin и x для i от 1 до n увеличивать на 1 и суммировать в переменную.нет. не логичнее. лишние вычисления.
ведь когда у нас уже есть х в пятой, то что-бы получить х в 6-й, достаточно только домножить на х.
...
Рейтинг: 0 / 0
05.06.2013, 22:11
    #38287516
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
AndreTM,
Спасибо за код! Все работает. Возник вопрос по работе функции:
Код: sql
1.
if odd(b) then sign:=-1


Не понимаю, зачем выражение
Код: sql
1.
power:=sign*exp(b*ln(a));

нужно умножать на -1 (минус 1), если степень нечетная (например, 3 или 5)?
...
Рейтинг: 0 / 0
05.06.2013, 23:56
    #38287625
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
alexander4321,

-3 ^ 2 = 9; -3 ^ 3 = -27
...
Рейтинг: 0 / 0
06.06.2013, 00:11
    #38287635
alexander4321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить выражение в Паскаль
Lelouch,

Точно, это же только для аргумента меньше нуля (отрицательного). А я не придал внимания условию
Код: sql
1.
if a<0

Спасибо!
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить выражение в Паскаль / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]