powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить выражение в Паскаль
13 сообщений из 13, страница 1 из 1
Вычислить выражение в Паскаль
    #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
Вычислить выражение в Паскаль
    #38285940
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander4321Значение синуса х в первой степени сохраняю в переменной с.А зачем ты это делаешь?
Возьми бумажку с карандашом и вручную просчитай эту формулу. Пойми как ты делаешь этот расчет вручную. А теперь запиши последовательность ручных действий на паскале. И все.
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #38285959
alexander4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логичней было бы значение показателя степени sin и x для i от 1 до n увеличивать на 1 и суммировать в переменную.
Но в степень то не получится возвести символом ^. Препод объяснял, чтобы возвести в определенную степень, нужно перемножать нужное количество раз. Такое в данной ситуации, когда заранее не известна степень, я сделать не смогу. Читаю сейчас в интернете что-то через натуральный логарифм можно, еще какие-то способы.
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #38285987
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander4321Но в степень то не получится возвести символом ^. Препод объяснял, чтобы возвести в определенную степень, нужно перемножать А ты знаешь как по английски будет "возведение в степень"?
Вот возьми это слово, вбей его в гугль вместе с названием языка и наслаждайся.
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #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
Вычислить выражение в Паскаль
    #38286033
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander4321,

Вместо Real попробуйте Double или Extended .
Код: pascal
1.
var a, b, x, y, c: Double;
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #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
Вычислить выражение в Паскаль
    #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
Вычислить выражение в Паскаль
    #38286043
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMперепутаны местами аргумент и степень* соврал я, всё там правильно... но это просто ночь на дворе
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #38287274
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander4321Логичней было бы значение показателя степени sin и x для i от 1 до n увеличивать на 1 и суммировать в переменную.нет. не логичнее. лишние вычисления.
ведь когда у нас уже есть х в пятой, то что-бы получить х в 6-й, достаточно только домножить на х.
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #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
Вычислить выражение в Паскаль
    #38287625
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander4321,

-3 ^ 2 = 9; -3 ^ 3 = -27
...
Рейтинг: 0 / 0
Вычислить выражение в Паскаль
    #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]