Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69

Вычисления значения функций

11.10.2022, 16:00. Показов 4182. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите разобраться проблемой.
1.Нужно написать программу вычисляющие значение функций:
(x / ln(x))*(-x/cos(x)), если x < -6;
x*3*x+cos(x)/lg(x), если -6 <=x<1;
cos(x)/x^3, если 1<=x<4;
cos(2*x)*68+lg(x)/x^3, если 4<=x.
2.Вычислить значение функций на интервале [-8,6] с шагом 0.1
Я написала следующее
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
31
32
33
34
35
36
37
38
39
40
program Firtlab;
uses crt,math;
var x,y:real;
 k:integer;
 begin
        clrscr;
        x:=-8;
        k:=0;
        while x<=6 do
        begin
        if x<-6 then writeln ('x=', y:0:1,' y= not defined ')
        else if x<1 then
        begin
        y:=cos(x);
        writeln('x=',x:0:1,'y=',y:6:3)
        end
        else if x<4 then
        begin
        if x<=0 then writeln('x=',x:0:1,' y= not defined')
        else
        begin
        y:=cos(x)/sqr(x);
        writeln('x=',x:0:1,'y=',y:6:3);
        end
        end
        else
        begin
        y:=cos(2*x)*68+ln(x)/sqr(3);
        writeln('x=',x:0:1,' y=not defined ',y:6:3)
        end;
        x:=x+0.1;
        inc(k);
        if k mod 20=0 then
        begin
        write('Press Enter');
        readln
        end;
        end;
        readln
        end.
И программа мне выдает вот это
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
Press Enter

Помогите разобраться в чем дело.Оно не так должно работать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2022, 16:00
Ответы с готовыми решениями:

Составить программу вычисления значения функций

Составить программу для вычисления значения функций f(x)
Заранее спасибо :)

Написать программу для вычисления значения заданных функций
Помогите с решением, написать программу для вычисления значения заданных функций.

53
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
07.11.2022, 23:49  [ТС]
Студворк — интернет-сервис помощи студентам
Изменила код -
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
31
32
33
34
35
36
37
38
39
program Firtlab;
 
uses
  crt,
  Math;
 
var
  x, y: real;
  k:    integer;
begin
  clrscr;
  x := -8;
  k := 0;
  while x <= 6 do
  begin
    if x <= 0  then
      writeln('x=', x: 0: 1, ' y= No defined ')
    else
    begin
       if x < -6 then
     y :=(x / ln(x)) * (-x / cos(x))
    else if x < 1 then
      y := (x*x*x)*x+cos(x)/ln(x) / ln(10)
      else  if x < 4 then
          y :=cos(x) / (x*x*x)
    else
      y := cos(2 * x) * 68 + ln(x) / (x*x*x);
      writeln('x=', x: 0: 1, ' y= ', y: 6: 3);
    end;
    x := x + 0.1;
    Inc(k);
    if k mod 20 = 0 then
    begin
      Write('Press Enter');
      readln;
    end;
  end;
  readln;
end.
Получилься такой результат -
Кликните здесь для просмотра всего текста

x=-8.0 y= No defined
x=-7.9 y= No defined
x=-7.8 y= No defined
x=-7.7 y= No defined
x=-7.6 y= No defined
x=-7.5 y= No defined
x=-7.4 y= No defined
x=-7.3 y= No defined
x=-7.2 y= No defined
x=-7.1 y= No defined
x=-7.0 y= No defined
x=-6.9 y= No defined
x=-6.8 y= No defined
x=-6.7 y= No defined
x=-6.6 y= No defined
x=-6.5 y= No defined
x=-6.4 y= No defined
x=-6.3 y= No defined
x=-6.2 y= No defined
x=-6.1 y= No defined
Press Enter
x=-6.0 y= No defined
x=-5.9 y= No defined
x=-5.8 y= No defined
x=-5.7 y= No defined
x=-5.6 y= No defined
x=-5.5 y= No defined
x=-5.4 y= No defined
x=-5.3 y= No defined
x=-5.2 y= No defined
x=-5.1 y= No defined
x=-5.0 y= No defined
x=-4.9 y= No defined
x=-4.8 y= No defined
x=-4.7 y= No defined
x=-4.6 y= No defined
x=-4.5 y= No defined
x=-4.4 y= No defined
x=-4.3 y= No defined
x=-4.2 y= No defined
x=-4.1 y= No defined
Press Enter
x=-4.0 y= No defined
x=-3.9 y= No defined
x=-3.8 y= No defined
x=-3.7 y= No defined
x=-3.6 y= No defined
x=-3.5 y= No defined
x=-3.4 y= No defined
x=-3.3 y= No defined
x=-3.2 y= No defined
x=-3.1 y= No defined
x=-3.0 y= No defined
x=-2.9 y= No defined
x=-2.8 y= No defined
x=-2.7 y= No defined
x=-2.6 y= No defined
x=-2.5 y= No defined
x=-2.4 y= No defined
x=-2.3 y= No defined
x=-2.2 y= No defined
x=-2.1 y= No defined
Press Enter
x=-2.0 y= No defined
x=-1.9 y= No defined
x=-1.8 y= No defined
x=-1.7 y= No defined
x=-1.6 y= No defined
x=-1.5 y= No defined
x=-1.4 y= No defined
x=-1.3 y= No defined
x=-1.2 y= No defined
x=-1.1 y= No defined
x=-1.0 y= No defined
x=-0.9 y= No defined
x=-0.8 y= No defined
x=-0.7 y= No defined
x=-0.6 y= No defined
x=-0.5 y= No defined
x=-0.4 y= No defined
x=-0.3 y= No defined
x=-0.2 y= No defined
x=-0.1 y= No defined
Press Enter
x=-0.0 y= No defined
x=0.1 y= -0.188
x=0.2 y= -0.263
x=0.3 y= -0.337
x=0.4 y= -0.411
x=0.5 y= -0.487
x=0.6 y= -0.572
x=0.7 y= -0.691
x=0.8 y= -0.946
x=0.9 y= -1.906
x=1.0 y= -19752729881681.059
x=1.1 y= 0.341
x=1.2 y= 0.210
x=1.3 y= 0.122
x=1.4 y= 0.062
x=1.5 y= 0.021
x=1.6 y= -0.007
x=1.7 y= -0.026
x=1.8 y= -0.039
x=1.9 y= -0.047
Press Enter
x=2.3 y= -0.055
x=2.4 y= -0.053
x=2.5 y= -0.051
x=2.6 y= -0.049
x=2.7 y= -0.046
x=2.8 y= -0.043
x=2.9 y= -0.040
x=3.0 y= -0.037
x=3.1 y= -0.034
x=3.2 y= -0.030
x=3.3 y= -0.027
x=3.4 y= -0.025
x=3.5 y= -0.022
x=3.6 y= -0.019
x=3.7 y= -0.017
x=3.8 y= -0.014
x=3.9 y= -0.012
Press Enter
x=4.0 y= -0.010
x=4.1 y= -23.042
x=4.2 y= -35.292
x=4.3 y= -46.135
x=4.4 y= -55.137
x=4.5 y= -61.940
x=4.6 y= -66.274
x=4.7 y= -67.964
x=4.8 y= -66.945
x=4.9 y= -63.255
x=5.0 y= -57.044
x=5.1 y= -48.558
x=5.2 y= -38.135
x=5.3 y= -26.192
x=5.4 y= -13.204
x=5.5 y= 0.311
x=5.6 y= 13.814
x=5.7 y= 26.767
x=5.8 y= 38.653
x=5.9 y= 48.998
Press Enter
x=6.0 y= 57.390
Можно ли считать что алгоритм теперь правильно решим?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 14
08.11.2022, 00:07
cos(x) / ln(x) / ln(10) равносильно cos(x) / ( ln(x) * ln(10) ), а это далеко не то, что требуется. Расставляйте скобки для корректных вычислений.

Добавлено через 2 минуты
И для x>=4 нужно умножать на lg(x), а не ln(x).

Добавлено через 35 секунд
Перепроверьте все формулы.

Добавлено через 2 минуты
А структура программы - похожа на правильную.
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
08.11.2022, 00:21  [ТС]
ФедосеевПавел, Исправила
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
31
32
33
34
35
36
37
38
39
program Firtlab;
 
uses
  crt,
  Math;
 
var
  x, y: real;
  k:    integer;
begin
  clrscr;
  x := -8;
  k := 0;
  while x <= 6 do
  begin
    if x <= 0  then
      writeln('x=', x: 0: 1, ' y= No defined ')
    else
    begin
       if x < -6 then
     y :=(x / ln(x)) * (-x / cos(x))
    else if x < 1 then
      y := (x*x*x)*x+cos(x)/((ln(x) / ln(10)))
      else  if x >= 4 then
          y :=cos(x) / (x*x*x)
    else
      y := cos(2 * x) * 68 + ln(x) / (x*x*x);
      writeln('x=', x: 0: 1, ' y= ', y: 6: 3);
    end;
    x := x + 0.1;
    Inc(k);
    if k mod 20 = 0 then
    begin
      Write('Press Enter');
      readln;
    end;
  end;
  readln;
end.
Получилось -
Кликните здесь для просмотра всего текста

x=-8.0 y= No defined
x=-7.9 y= No defined
x=-7.8 y= No defined
x=-7.7 y= No defined
x=-7.6 y= No defined
x=-7.5 y= No defined
x=-7.4 y= No defined
x=-7.3 y= No defined
x=-7.2 y= No defined
x=-7.1 y= No defined
x=-7.0 y= No defined
x=-6.9 y= No defined
x=-6.8 y= No defined
x=-6.7 y= No defined
x=-6.6 y= No defined
x=-6.5 y= No defined
x=-6.4 y= No defined
x=-6.3 y= No defined
x=-6.2 y= No defined
x=-6.1 y= No defined
Press Enter
x=-6.0 y= No defined
x=-5.9 y= No defined
x=-5.8 y= No defined
x=-5.7 y= No defined
x=-5.6 y= No defined
x=-5.5 y= No defined
x=-5.4 y= No defined
x=-5.3 y= No defined
x=-5.2 y= No defined
x=-5.1 y= No defined
x=-5.0 y= No defined
x=-4.9 y= No defined
x=-4.8 y= No defined
x=-4.7 y= No defined
x=-4.6 y= No defined
x=-4.5 y= No defined
x=-4.4 y= No defined
x=-4.3 y= No defined
x=-4.2 y= No defined
x=-4.1 y= No defined
Press Enter
x=-4.0 y= No defined
x=-3.9 y= No defined
x=-3.8 y= No defined
x=-3.7 y= No defined
x=-3.6 y= No defined
x=-3.5 y= No defined
x=-3.4 y= No defined
x=-3.3 y= No defined
x=-3.2 y= No defined
x=-3.1 y= No defined
x=-3.0 y= No defined
x=-2.9 y= No defined
x=-2.8 y= No defined
x=-2.7 y= No defined
x=-2.6 y= No defined
x=-2.5 y= No defined
x=-2.4 y= No defined
x=-2.3 y= No defined
x=-2.2 y= No defined
x=-2.1 y= No defined
Press Enter
x=-2.0 y= No defined
x=-1.9 y= No defined
x=-1.8 y= No defined
x=-1.7 y= No defined
x=-1.6 y= No defined
x=-1.5 y= No defined
x=-1.4 y= No defined
x=-1.3 y= No defined
x=-1.2 y= No defined
x=-1.1 y= No defined
x=-1.0 y= No defined
x=-0.9 y= No defined
x=-0.8 y= No defined
x=-0.7 y= No defined
x=-0.6 y= No defined
x=-0.5 y= No defined
x=-0.4 y= No defined
x=-0.3 y= No defined
x=-0.2 y= No defined
x=-0.1 y= No defined
Press Enter
x=-0.0 y= No defined
x=0.1 y= -0.995
x=0.2 y= -1.401
x=0.3 y= -1.819
x=0.4 y= -2.289
x=0.5 y= -2.853
x=0.6 y= -3.591
x=0.7 y= -4.697
x=0.8 y= -6.780
x=0.9 y= -12.929
x=1.0 y= -104726961236479.300
x=1.1 y= -39.946
x=1.2 y= -50.037
x=1.3 y= -58.149
x=1.4 y= -63.948
x=1.5 y= -67.199
x=1.6 y= -67.769
x=1.7 y= -65.634
x=1.8 y= -60.879
x=1.9 y= -53.692
Press Enter
x=2.0 y= -44.361
x=2.1 y= -33.258
x=2.2 y= -20.825
x=2.3 y= -7.558
x=2.4 y= 6.013
x=2.5 y= 19.348
x=2.6 y= 31.913
x=2.7 y= 43.210
x=2.8 y= 52.785
x=2.9 y= 60.259
x=3.0 y= 65.332
x=3.1 y= 67.803
x=3.2 y= 67.572
x=3.3 y= 64.649
x=3.4 y= 59.150
x=3.5 y= 51.295
x=3.6 y= 41.395
x=3.7 y= 29.847
x=3.8 y= 17.110
x=3.9 y= 3.692
Press Enter
x=4.0 y= -9.872
x=4.1 y= -0.008
x=4.2 y= -0.007
x=4.3 y= -0.005
x=4.4 y= -0.004
x=4.5 y= -0.002
x=4.6 y= -0.001
x=4.7 y= -0.000
x=4.8 y= 0.001
x=4.9 y= 0.002
x=5.0 y= 0.002
x=5.1 y= 0.003
x=5.2 y= 0.003
x=5.3 y= 0.004
x=5.4 y= 0.004
x=5.5 y= 0.004
x=5.6 y= 0.004
x=5.7 y= 0.005
x=5.8 y= 0.005
x=5.9 y= 0.005
Press Enter
x=6.0 y= 0.004
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
08.11.2022, 15:54  [ТС]
Мой преподаватель показал мне ошибки и я исправила код( функций не там стояли -
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
31
32
33
34
35
36
37
38
39
40
program Firtlab;
 
uses
  crt,
  Math;
 
var
  x, y: real;
  k:    integer;
begin
  clrscr;
  x := -8;
  k := 0;
  while x <= 6 do
  begin
    if x <= 0  then
      writeln('x= ', x: 0: 1, ' y= no defined ')
    else
    begin
       if x < -6 then
     y :=(x / ln(x)) * (-x / cos(x))
     else
   if x < 1 then
      y := cos(x) / (x*x*x)
      else
      if x >= 4 then
          y := cos(2 * x) * 68 + ln(x) / (x*x*x);
      writeln('x= ', x: 0: 1, ' y= ', y: 6: 3);
    end;
   x := x + 0.1;
    Inc(k);
    if k mod 20 = 0 then
    begin
      Write('Press Enter');
 
      readln;
    end;
  end;
 readln;
end.
Но есть еще ошибка, которая появляется после if x >= 4 then - результат не тот
Кликните здесь для просмотра всего текста

x= -0.0 y= no defined
x= 0.1 y= 995.004
x= 0.2 y= 122.508
x= 0.3 y= 35.383
x= 0.4 y= 14.392
x= 0.5 y= 7.021
x= 0.6 y= 3.821
x= 0.7 y= 2.230
x= 0.8 y= 1.361
x= 0.9 y= 0.853
x= 1.0 y= 0.540
x= 1.1 y= 0.540
x= 1.2 y= 0.540
x= 1.3 y= 0.540
x= 1.4 y= 0.540
x= 1.5 y= 0.540
x= 1.6 y= 0.540
x= 1.7 y= 0.540
x= 1.8 y= 0.540
x= 1.9 y= 0.540
Press Enter
x= 2.0 y= 0.540
x= 2.1 y= 0.540
x= 2.2 y= 0.540
x= 2.3 y= 0.540
x= 2.4 y= 0.540
x= 2.5 y= 0.540
x= 2.6 y= 0.540
x= 2.7 y= 0.540
x= 2.8 y= 0.540
x= 2.9 y= 0.540
x= 3.0 y= 0.540
x= 3.1 y= 0.540
x= 3.2 y= 0.540
x= 3.3 y= 0.540
x= 3.4 y= 0.540
x= 3.5 y= 0.540
x= 3.6 y= 0.540
x= 3.7 y= 0.540
x= 3.8 y= 0.540
x= 3.9 y= 0.540
Press Enter

x= 4.0 y= 0.540 - это не тот результат который нужен
x= 4.1 y= -23.042
x= 4.2 y= -35.292
x= 4.3 y= -46.135
x= 4.4 y= -55.137
x= 4.5 y= -61.940
x= 4.6 y= -66.274
x= 4.7 y= -67.964
x= 4.8 y= -66.945
x= 4.9 y= -63.255
x= 5.0 y= -57.044
x= 5.1 y= -48.558
x= 5.2 y= -38.135
x= 5.3 y= -26.192
x= 5.4 y= -13.204
x= 5.5 y= 0.311
x= 5.6 y= 13.814
x= 5.7 y= 26.767
x= 5.8 y= 38.653
x= 5.9 y= 48.998
Press Enter
x= 6.0 y= 57.390
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 14
08.11.2022, 18:23
Внимательнее нужно быть
Pascal
26
27
28
29
      else  if x < 4 then
          y :=cos(x) / (x*x*x)
    else
      y := cos(2 * x) * 68 + ln(x) / (x*x*x);
и автоформаттером пользоваться для публикации и сдачи кода преподавателю.
1
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
09.11.2022, 20:37  [ТС]
Мне не нравиться вот этот ответ

x=0.8 y= -6.780
x=0.9 y= -12.929
x=1.0 y= -104726961236479.300 как от этого избавить?
x=1.1 y= 0.341
x=1.2 y= 0.210
x=1.3 y= 0.122
x=1.4 y= 0.062
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 14
09.11.2022, 20:55
Скорее, всего - никак. При x чуть меньшем 1 вычисления по формуле x*3*x+cos(x)/lg(x), если -6 <=x<1;, т.е. lg(1)=0 и производится деление на 0.

Можно попробовать ввести целочисленную переменную i, которая меняется на 1 в каждой итерации цикла, и значение x вычислять сразу после while ... do begin x:=-8+i*0.1
Может, повезёт и переменная x будет чуть больше или равна 1 и тогда вычисления будут по другой формуле.
1
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
09.11.2022, 23:48  [ТС]
Понятно, спасибо что помогаете мне.
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
10.11.2022, 09:21
Цитата Сообщение от Lari76 Посмотреть сообщение
как от этого избавить?
избавиться можно с помощью дополнительной проверки - проверяй знаменатель дроби, что он по модулю больше некоего заведомо маленького числа
if abs(ln(x))<0.000000001 then -> undefined (ну или https://www.cyberforum.ru/cgi-bin/latex.cgi?+ \infty или https://www.cyberforum.ru/cgi-bin/latex.cgi?- \infty)
но, по хорошему, тогда тебе везде, где есть дробь, нужно проверять знаменатель.
0
Модератор
10478 / 5772 / 3413
Регистрация: 17.08.2012
Сообщений: 17,533
10.11.2022, 20:22
Лучший ответ Сообщение было отмечено Lari76 как решение

Решение

mr-Crocodile, нет, это ничего не исправит. Дело в усечении чисел при переводе в двоичную форму.
Цитата Сообщение от Lari76 Посмотреть сообщение
Мне не нравиться вот этот ответ
Это всё потому, что при (якобы) x=1 у Вас вычисляется y :=(x / ln(x)) * (-x / cos(x)), а не cos(x)/x^3, как планировалось.

Так происходит потому, что -8 + 90 раз по 0.1 получится не равным 1, а чуть меньшим 1, из-за ошибок усечения и накопения этих ошибок при суммировании. Происходит такое потому, что число 0.1 не может быть представлено точно с помощью типа real.

Тест:
Pascal
1
2
3
4
5
6
7
var
  x: real;
begin
  x := 0.1;
  writeln(x);
  readln;
end.
Результат теста: 1.0000000000000001E-001

Как видите, 0.1 на самом деле в машинной форме равен 0.10000000000000001. Это потому, что десятичное 0.1 эквивалентно бесконечной двоичной дроби 0.0(0011), а бесконечное количество цифр люди запоминать не умеют. Поэтому 0.1 при переводе в двоичную форму заменяется двоичным числом, которое влезает в мантису типа real и максимально близкое к 0.1, оно равно в двоичной форме
0.000110011001100110011001100110011001100110011001101
как видите, в конце числа вместо бесконечного 0011 присутствует урезанное 01.

Посмотрим, чему на самом деле равны Ваши значеия "x". Тест:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  x: real;
begin
  x := 0.1;
  writeln(x);
  writeln;
  x := -8;
  while x <= 6 do
    begin
      writeln(x);
      x := x + 0.1;
    end;
  readln;
end.
Результаты теста
-8.0000000000000000E+000
-7.9000000000000004E+000
-7.8000000000000007E+000
-7.7000000000000011E+000
-7.6000000000000014E+000
-7.5000000000000018E+000
-7.4000000000000021E+000
-7.3000000000000025E+000
-7.2000000000000028E+000
-7.1000000000000032E+000
-7.0000000000000036E+000
-6.9000000000000039E+000
-6.8000000000000043E+000
-6.7000000000000046E+000
-6.6000000000000050E+000
-6.5000000000000053E+000
-6.4000000000000057E+000
-6.3000000000000060E+000
-6.2000000000000064E+000
-6.1000000000000068E+000
-6.0000000000000071E+000
-5.9000000000000075E+000
-5.8000000000000078E+000
-5.7000000000000082E+000
-5.6000000000000085E+000
-5.5000000000000089E+000
-5.4000000000000092E+000
-5.3000000000000096E+000
-5.2000000000000099E+000
-5.1000000000000103E+000
-5.0000000000000107E+000
-4.9000000000000110E+000
-4.8000000000000114E+000
-4.7000000000000117E+000
-4.6000000000000121E+000
-4.5000000000000124E+000
-4.4000000000000128E+000
-4.3000000000000131E+000
-4.2000000000000135E+000
-4.1000000000000139E+000
-4.0000000000000142E+000
-3.9000000000000141E+000
-3.8000000000000140E+000
-3.7000000000000139E+000
-3.6000000000000139E+000
-3.5000000000000138E+000
-3.4000000000000137E+000
-3.3000000000000136E+000
-3.2000000000000135E+000
-3.1000000000000134E+000
-3.0000000000000133E+000
-2.9000000000000132E+000
-2.8000000000000131E+000
-2.7000000000000131E+000
-2.6000000000000130E+000
-2.5000000000000129E+000
-2.4000000000000128E+000
-2.3000000000000127E+000
-2.2000000000000126E+000
-2.1000000000000125E+000
-2.0000000000000124E+000
-1.9000000000000123E+000
-1.8000000000000123E+000
-1.7000000000000122E+000
-1.6000000000000121E+000
-1.5000000000000120E+000
-1.4000000000000119E+000
-1.3000000000000118E+000
-1.2000000000000117E+000
-1.1000000000000116E+000
-1.0000000000000115E+000
-9.0000000000001157E-001
-8.0000000000001159E-001
-7.0000000000001161E-001
-6.0000000000001164E-001
-5.0000000000001166E-001
-4.0000000000001168E-001
-3.0000000000001170E-001
-2.0000000000001170E-001
-1.0000000000001169E-001
-1.1690647094050183E-014
9.9999999999988307E-002
1.9999999999998830E-001
2.9999999999998828E-001
3.9999999999998825E-001
4.9999999999998823E-001
5.9999999999998821E-001
6.9999999999998819E-001
7.9999999999998817E-001
8.9999999999998814E-001
9.9999999999998812E-001
1.0999999999999881E+000
1.1999999999999882E+000
1.2999999999999883E+000
1.3999999999999884E+000
1.4999999999999885E+000
1.5999999999999885E+000
1.6999999999999886E+000
1.7999999999999887E+000
1.8999999999999888E+000
1.9999999999999889E+000
2.0999999999999890E+000
2.1999999999999891E+000
2.2999999999999892E+000
2.3999999999999893E+000
2.4999999999999893E+000
2.5999999999999894E+000
2.6999999999999895E+000
2.7999999999999896E+000
2.8999999999999897E+000
2.9999999999999898E+000
3.0999999999999899E+000
3.1999999999999900E+000
3.2999999999999901E+000
3.3999999999999901E+000
3.4999999999999902E+000
3.5999999999999903E+000
3.6999999999999904E+000
3.7999999999999905E+000
3.8999999999999906E+000
3.9999999999999907E+000
4.0999999999999908E+000
4.1999999999999904E+000
4.2999999999999901E+000
4.3999999999999897E+000
4.4999999999999893E+000
4.5999999999999890E+000
4.6999999999999886E+000
4.7999999999999883E+000
4.8999999999999879E+000
4.9999999999999876E+000
5.0999999999999872E+000
5.1999999999999869E+000
5.2999999999999865E+000
5.3999999999999861E+000
5.4999999999999858E+000
5.5999999999999854E+000
5.6999999999999851E+000
5.7999999999999847E+000
5.8999999999999844E+000
5.9999999999999840E+000

Как видите, для Ваших x не получается ни одного верного числа, кроме -8.

Что же делать? Можно, конечно, воспользоваться эпсилон-костылём, наподобие того, как предложил mr-Crocodile, но это приведёт только к неоправданному усложнению программы.

Поскольку у Вас границы кусков функци целые, можно воспользоваться целочисленным счётчиком от -80 до 60, получать "x" делением счётчика на 10, а куски функции выбирать по счётчику, а не по "x", поскольку при выборе по "x" наступим ровно на те же "грабли усечения"

Мой вариант:
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
31
32
33
34
35
program Firtlab;
 
uses
  crt,
  Math;
 
var
  x, y: real;
  k:    integer;
begin
  clrscr;
  for k := -80 to 60 do
    begin
      x := k / 10;
      if k <= 0  then
        writeln('x = ', x:4:1, ', y is undefined')
      else
        begin
          if k < 10 then
            y := x * x * x * x + cos(x) / ln(x) / ln(10)
          else
            if k < 40 then
              y := cos(x) / x / x / x
            else
              y := cos(2 * x) * 68 + ln(x) / x / x / x;
          writeln('x = ', x:4:1, ', y = ', y:7:3)
        end;
        if (k > -80) and (k mod 20 = 0) then
          begin
            Write('Press Enter');
            readln
          end
      end;
  readln
end.
2
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
10.11.2022, 23:33  [ТС]
mr-Crocodile,
Вау спасибо вам, не много исправила свой код и действительно теперь другой результат!
Большое спасибо
0
Модератор
10478 / 5772 / 3413
Регистрация: 17.08.2012
Сообщений: 17,533
11.11.2022, 00:01
Lari76, я Cyborg Drone.

Добавлено через 24 минуты
Кстати... При k, кратном 10, частное k/10 будет посчитано точно. Значит, куски функции можно выбирать по x:
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
31
32
33
34
35
program Firtlab;
 
uses
  crt,
  Math;
 
var
  x, y: real;
  k:    integer;
begin
  clrscr;
  for k := -80 to 60 do
    begin
      x := k / 10;
      if x <= 0  then
        writeln('x = ', x:4:1, ', y is undefined')
      else
        begin
          if x < 1 then
            y := x * x * x * x + cos(x) / ln(x) / ln(10)
          else
            if x < 4 then
              y := cos(x) / x / x / x
            else
              y := cos(2 * x) * 68 + ln(x) / x / x / x;
          writeln('x = ', x:4:1, ', y = ', y:7:3)
        end;
        if (k > -80) and (k mod 20 = 0) then
          begin
            Write('Press Enter');
            readln
          end
      end;
  readln
end.
2
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 69
11.11.2022, 00:14  [ТС]
Cyborg Drone,
Извините, перепутала.
Простите за мою грубость.
0
Модератор
10478 / 5772 / 3413
Регистрация: 17.08.2012
Сообщений: 17,533
11.11.2022, 00:17
Lari76, ничего страшного.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2022, 00:17

Составить программу вычисления значения функций F(x)=cosa/sina
Составить программу вычисления значения функций F(x)=cosa/sina на отрезке в точках {X}_{i}=A+iH, где H=(B*A)/M A=пи/4 B=пи/2 M=15

Дополните программу на языке Паскаль для вычисления значения функций
Здравствуйте! Помогите, пожалуйста, решить задачу по информатике 8 класса для сына, т.к. я в этом вообще ничего не соображаю ( Дана...

Написать программу вычисления заданных функций. На экран вывести значения x, y, z в следующем виде:
Написать программу вычисления заданных функций. На экран вывести значения x, y, z в следующем виде: y=(sin x - cos x)/(x^2 +x+2) z=lg...

Составить программу вычисления N значений функций Y для X, изменяющегося от начального значения Х1 c шагом dx
Помогите пожалуйста решить

Составить программу вычисления N значений функций Y для X, изменяющегося от начального значения Х1 c шагом dx
помогите пожалуйста,заранее спасибо:)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru