Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198

Ошибка плавающей точки

25.04.2009, 11:09. Показов 2376. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, что у меня за ошибка в программе?
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
uses CRT;
type TLimits=record
             LeftFrontier:extended;
             RightFrontier:extended;
     end;
     TFunctionParametrs=record
                        Radius:extended;
                        ThirdPointOfCrossing:extended;
                        FourthPointOfCrossing:extended;
     end;
 
Procedure InputPositiveValue(var Variable:extended);
begin
  repeat
    readln(Variable);
      if (Variable<0) then writeln ('Ошибка ввода! Повторите ввод!');
  until (Variable>=0);
end;
 
Procedure InputLimitsOfIntegration(var j:TLimits);
begin
  write('Введите a, левую границу интеграла ');
  readln(j.LeftFrontier);
  write('Введите b, правую границу интеграла ');
  readln(j.RightFrontier);
end;
 
Procedure InputFunctionParametrs(var s:TFunctionParametrs);
begin
  write('Введите R, радиус, 1-ую и 2-ую точки перехода функции ');
  InputPositiveValue(s.Radius);
  write('Введите c, 3-ю точку перехода функции ');
  InputPositiveValue(s.ThirdPointOfCrossing);
  write('Введите d (d>R), 4-ую точку перехода функции ');
  InputPositiveValue(s.FourthPointOfCrossing);
end;
 
Procedure InputTask(var e:extended; var j:TLimits; var s:TFunctionParametrs);
begin
  write('Введите e (e>0), точность вычислений ');
  InputPositiveValue(e);
  InputLimitsOfIntegration(j);
  InputFunctionParametrs(s);
end;
 
Function FunctionX(x:extended; s:TFunctionParametrs):extended;
begin
  if x<=-s.Radius then
    FunctionX:=s.Radius+x
  else if x<=0 then
    FunctionX:=sqrt(sqr(s.Radius)-sqr(x))
  else if x<=s.ThirdPointOfCrossing then
    FunctionX:=exp(x)
  else
    FunctionX:=s.FourthPointOfCrossing;
end;
 
Procedure MethodOfLeftRectangles(j:TLimits; s:TFunctionParametrs; n:longint; var f,h:extended);
var i:longint;
    x:extended;
begin
  h:=(j.RightFrontier-j.LeftFrontier)/n;
  x:=j.RightFrontier;
  for i:=1 to n do
    begin
      f:=f+FunctionX(x,s);
      x:=x+h;
  end;
end;
 
Procedure CalculationIntegral(j:TLimits; s:TFunctionParametrs; e:extended; I1:extended);
var n:longint;
    I,I2:extended;
    f,h:extended;
begin
  I1:=0;
  I2:=0;
  n:=100;
  repeat
    I2:=I1;
    MethodOfLeftRectangles(j,s,n,f,h);
    I1:=f*h;
    I:=abs(I1-I2);
    if I>e then
    begin
      n:=n*2;
      I2:=I1;
    end;
  until I<e;
end;
 
var j:TLimits;
    s:TFunctionParametrs;
    e:extended;
    Integral:extended;
begin
  clrscr;
  writeln('Здравствуйте, уважаемый пользователь!');
  writeln('Эта программа вычмсляет интеграл.');
  InputTask(e,j,s);
  CalculationIntegral(j,s,e,Integral);
  writeln('Значение интеграла равно ',Integral:6:4);
  readln;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2009, 11:09
Ответы с готовыми решениями:

Получить число после плавающей точки
Есть таймер, который вызывается 10 раз в секунду, нужно каждую секунду выводить его значение. В таймере есть переменная: float fNum =...

Деление с результатом без плавающей точки
Привет. Например есть код, в котором одно число делит другое. Числа генерируются с помощью rand();. Как зделать так что бы генерировались...

Вывод двух чисел после плавающей точки
Собственно проблема. Никак не могу найти инструкцию для операции выводу, чтобы она выводила всегда 2 знака после десятичной точки. Выводить...

14
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
25.04.2009, 11:19
Вот попробуйте так
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
{$N+}
uses CRT;
type TLimits=record
             LeftFrontier:extended;
             RightFrontier:extended;
     end;
     TFunctionParametrs=record
                        Radius:extended;
                        ThirdPointOfCrossing:extended;
                        FourthPointOfCrossing:extended;
     end;
 
Procedure InputPositiveValue(var Variable:extended);
begin
  repeat
    readln(Variable);
          if (Variable<0) then writeln ('Ошибка ввода! Повторите ввод!');
  until (Variable>=0);
end;
 
Procedure InputLimitsOfIntegration(var j:TLimits);
begin
  write('Введите a, левую границу интеграла ');
  readln(j.LeftFrontier);
  write('Введите b, правую границу интеграла ');
  readln(j.RightFrontier);
end;
 
Procedure InputFunctionParametrs(var s:TFunctionParametrs);
begin
  write('Введите R, радиус, 1-ую и 2-ую точки перехода функции ');
  InputPositiveValue(s.Radius);
  write('Введите c, 3-ю точку перехода функции ');
  InputPositiveValue(s.ThirdPointOfCrossing);
  write('Введите d (d>R), 4-ую точку перехода функции ');
  InputPositiveValue(s.FourthPointOfCrossing);
end;
 
Procedure InputTask(var e:extended; var j:TLimits; var s:TFunctionParametrs);
begin
  write('Введите e (e>0), точность вычислений ');
  InputPositiveValue(e);
  InputLimitsOfIntegration(j);
  InputFunctionParametrs(s);
end;
 
Function FunctionX(x:extended; s:TFunctionParametrs):extended;
begin
  if x<=-s.Radius then
    FunctionX:=s.Radius+x
  else if x<=0 then
    FunctionX:=sqrt(sqr(s.Radius)-sqr(x))
  else if x<=s.ThirdPointOfCrossing then
    FunctionX:=exp(x)
  else
    FunctionX:=s.FourthPointOfCrossing;
end;
 
Procedure MethodOfLeftRectangles(j:TLimits; s:TFunctionParametrs; n:longint; var f,h:extended);
var i:longint;
    x:extended;
begin
  h:=(j.RightFrontier-j.LeftFrontier)/n;
  x:=j.RightFrontier;
  for i:=1 to n do
    begin
      f:=f+FunctionX(x,s);
      x:=x+h;
  end;
end;
 
Procedure CalculationIntegral(j:TLimits; s:TFunctionParametrs; e:extended; I1:extended);
var n:longint;
    I,I2:extended;
    f,h:extended;
begin
  I1:=0;
  I2:=0;
  n:=100;
  repeat
    I2:=I1;
    MethodOfLeftRectangles(j,s,n,f,h);
    I1:=f*h;
    I:=abs(I1-I2);
    if I>e then
    begin
      n:=n*2;
      I2:=I1;
    end;
  until I<e;
end;
 
var j:TLimits;
    s:TFunctionParametrs;
    e:extended;
    Integral:extended;
begin
  clrscr;
  writeln('Здравствуйте, уважаемый пользователь!');
  writeln('Эта программа вычмсляет интеграл.');
  InputTask(e,j,s);
  CalculationIntegral(j,s,e,Integral);
  writeln('Значение интеграла равно ',Integral:6:4);
  readln;
end.
Добавлено через 51 секунду
У вас небыл включен математический сопроцессор.
Не забывайте про кнопку спасибо!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.04.2009, 14:40
Вообще неверно написана функция.
Pascal
1
2
3
4
5
6
7
8
if x<=-s.Radius then
    FunctionX:=s.Radius+x
  else if x<=0 then
    FunctionX:=sqrt(sqr(s.Radius)-sqr(x))
  else if x<=s.ThirdPointOfCrossing then
    FunctionX:=exp(x)
  else
    FunctionX:=s.FourthPointOfCrossing;
Все меньше и меньше и меньше, а где же больше?
Программа выбирает самое маленнькое ограничение и пытается по нему считать, а там начинаются непонятки с извлечением корня из отрицательных чисел.
Условие то надо писать так. Допустим есть возрастающие ограничения a, b, c.
Тогда пишем
if z<=a then hhhhhh
else if(z>a)and(z<=b) then ggggggggg
else if(z>b)and(z<=c) then dddddd
else kkkkkkkkkkkkkkkkk;

Добавлено через 3 часа 15 минут 21 секунду
У вас небыл включен математический сопроцессор.
А вот у меня он всегда включен и все равно извлекать корень из отрицательных чисел отказывается!
1
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
25.04.2009, 15:05  [ТС]
Sergei, всё равно не работает(
Puporev, а как тогда надо мне написать эту функцию???
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.04.2009, 15:21
Puporev, а как тогда надо мне написать эту функцию???
Так хоть условие напиши. Что за манера выкладывать болванку программы ничего не пояснив, и требовать помощи.

Добавлено через 4 минуты 37 секунд
Думаю что так.
Pascal
1
2
3
4
if x<=-s.Radius then  FunctionX:=s.Radius+x
else if (x>-s.Radius)and(x<=0) then  FunctionX:=sqrt(sqr(s.Radius)-sqr(x))
else if (x>0)and(x<=s.ThirdPointOfCrossing) then  FunctionX:=exp(x)
else  FunctionX:=s.FourthPointOfCrossing;
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
25.04.2009, 15:38  [ТС]
Извините, признаю свою ошибку. Вот задание: составить программу на языке Pascal вычисления значения интеграла на интервале [a, b] для функции, заданной графически. Значение интеграла вычислить приближённо по итерационной формуле левых прямоугольников.
Попробовал, всё равно не работает(((
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.04.2009, 15:39
для функции, заданной графически.
Потрясное условие!
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
25.04.2009, 15:40
Конечно объясните, что Вам нужно сделать тогда поможем.
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
25.04.2009, 15:48  [ТС]
Вот задание http://www.rapidshare.ru/1022410, график и мат обоснование.
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
25.04.2009, 16:10
Да а пароль зачем ставить?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.04.2009, 16:11
А это ничего что эта процедура
Procedure CalculationIntegral(j:TLimits; s:TFunctionParametrs; e:extended; I1:extended);
ничего не выдает?
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
25.04.2009, 21:28  [ТС]
ой, забыл сказать, пароль 123

Добавлено через 36 секунд
Puporev, действительно, очень даже чего!!!

Добавлено через 3 часа 7 минут 53 секунды
Help!!!!!!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.04.2009, 15:35
Ошибку 207 переполнение стека выдает из-за того, что не инициирована переменная f здесь надо написать
f:=0;
for i:=1 to n do
begin
f:=f+FunctionX(x,s);
x:=x+h;
end;
Но кроме этого в программе столько ошибок, а написана она настолько тяжело, что ковыряться и ковыряться. Как можно из простого задания соорудить такое чудо?
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
28.04.2009, 17:30  [ТС]
Ну не знаю как я так смог... А как тогда мне её переделать???

Добавлено через 22 часа 19 минут 41 секунду
А какие ещё ошибки???
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
30.04.2009, 21:43  [ТС]
HELP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2009, 21:43
Помогаю со студенческими работами здесь

Команды atof и fcanf: пропадают числа после плавающей точки
Пытаюсь запустить прогу на считывание данных и преобразование их во float, но после преобразования строки, значения после точки...

Ошибка с плавающей запятой
Решая систему наткнулся на вот такую неприятную вещь. подскажите пожалуйста как исправить

Ошибка с плавающей запятой
program zadacha3_3; uses crt; ...

Ошибка в плавающей запятой
Здравствуйте... Видела данную тему несколько раз на вашем форуме, но решение своетак и не нашла. Пишет, что ВОт файл

Ошибка с плавающей запятой
Почитал форум про подобные ошибки, но не смог найти, как исправить свою. Делал лабу, решение системы уравнений методом Гусса-Зейделя. Из-за...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru