С Новым годом! Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219

Не хочет сравнивать числа Real с Integer

23.12.2019, 21:25. Показов 5171. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задачка простая.
Вычислить значение функции 1/(2+x) на интервале от [-4, 4] c шагом h= 0.2
вот код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var f,x,h:real;
begin
 x:=-4; //начинаем от -4
 h:=0.2; //шаг 0.2
 while (x<=4) do
 begin
 f:=1/(2+x);
 writeln('При x = ',x,'. F = ',f:0:3);
 x:=x+h;
 end;
readln;
end.
что я делаю не так?
почему он x=4 говорит false когда x=4... он говорит что x>4 когда x=4
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2019, 21:25
Ответы с готовыми решениями:

Нельзя преобразовать тип function(z: integer;w: integer;e: integer): real к real
program pract18; uses crt; var x,a,i,k:integer; y:real; function prm1 (z,w,e:integer):real; begin for e:=1 to 20 do ...

Дано описание массива, у которого индексы имеют ограниченный тип над integer, а тип элемента – integer или real
Дано описание массива, у которого индексы имеют ограниченный тип над integer, а тип элемента – integer или real. Выведите на экран, сколько...

Integer и Real
короче, как с этим быть? если сделать тип данных REAL и сделать просто какойнить калькулятор он както коряво отображает результат если...

11
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
23.12.2019, 21:38
попробуйте так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  f, x, h: real;
 
begin
  x := -4; //начинаем от -4
  h := 0.2; //шаг 0.2
  while abs(x - 4) > 0.001 do
  begin
    f := 1 / (2 + x);
    writeln('При x = ', x, '. F = ', f:0:3);
    x := x + h;
  end;
  readln;
end.
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
23.12.2019, 21:43  [ТС]
Цитата Сообщение от Пс Посмотреть сообщение
var
  f, x, h: real;
begin
  x := -4; //начинаем от -4
  h := 0.2; //шаг 0.2
  while abs(x - 4) > 0.001 do
  begin
    f := 1 / (2 + x);
    writeln('При x = ', x, '. F = ', f:0:3);
    x := x + h;
  end;
  readln;
end.
это все понятно... так и пришлось сделать x<4.01...
меня не этот вопрос интересовал.
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
23.12.2019, 21:43
Fakeoke, а какой?
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
23.12.2019, 21:44  [ТС]
Цитата Сообщение от Fakeoke Посмотреть сообщение
почему он x=4 говорит false когда x=4... он говорит что x>4 когда x=4
вот этот.
почему он не дает сравнить 4integer с 4 real
и как их тогда правильно сравнить?
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
23.12.2019, 21:57  [ТС]
кстати ваш вариант почему-то 4 не включает...
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
23.12.2019, 22:00
Fakeoke, не знаю с чем это может быть связано
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
24.12.2019, 10:53
Цитата Сообщение от Fakeoke Посмотреть сообщение
почему он не дает сравнить 4integer с 4 real
это связано с тем, как вещественные числа представлены внутри компьютера (машинное представление вещественных чисел). об этом уже тонны исписаны. И ссылки есть. Почитай, очень полезно и познавательно.
если кратно - НИКОГДА нельзя сравнивать вещественные числа на равенство. Ни друг с другом, ни с константой в коде, никак.

почитай статью по ссылке тут - Вычислить значение выражения

Цитата Сообщение от Fakeoke Посмотреть сообщение
и как их тогда правильно сравнить?
только операции сравнения меньше или больше.
Поэтому, если нужно сравнить два вещественных числа на равенство, нужно найти их разность и сравнить её по модулю (абсолютное значение) с заведомо малой величиной эпсилон. Обычно тысячных или десятитысячных значений достаточно для практических задач.
Как это делать - тебе показали. Да ты и сам уже к этом пришёл (x<4.01)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
24.12.2019, 11:10
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a,b,h,x,f:real;
begin
a:=-4;
b:=4;
h:=0.2;
x:=a;
while x<b+h/2 do
 begin
  if abs(2+x)<0.001 then writeln('При x=',x:4:1,' F не определена')
  else
   begin
    f:=1/(2+x);
    writeln('При x=',x:4:1,' F=',f:8:3);
   end;
  x:=x+h;
 end;
end.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
24.12.2019, 12:34
Цитата Сообщение от Fakeoke Посмотреть сообщение
x<4.01
4.0
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
24.12.2019, 14:18
Цитата Сообщение от ProMix0 Посмотреть сообщение
4.0
нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2019, 14:18
Помогаю со студенческими работами здесь

преобразование integer в real
Ребята есть элементарная задачка (надо для девушки моей решить, а я Паскаль уже не помню :((: &quot;ввести одно число в показательной...

Преобразовать тип real к integer
uses crt; var a,b,c:integer; begin write('Введите ваш вес(кг):'); readln(a); write('Введите ваш рост(м):'); readln(b); ...

Нельзя преобразовать real к integer
В программе, где надо найти НОК из 2 чисел в 8 строке не могу преобразовать real к integer var m,n:integer; function nok(var a,b:...

Нельзя преобразовать тип real к integer
в строке 13 ошибка Нельзя преобразовать тип real к integer. Что исправить? Задание: вывести на экран элементы целочисленных матриц A(n,m) и...

Нельзя преобразовать тип real к integer
Выдает ошибку, нельзя преобразовать тип real к integer, только я не пойму где ошибка function f(x:real):real; var s:real; begin if...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru