Pascal, Условные оператор If

Компьютеры программирование программы Образование pascal

У меня возник вопрос к настоящим экспертам Pascal'я. Я новичок в программировании и в этом самом языке, но все же я получил задание, которое мне предстоит решить именно при помощи pascal. Вот кусок кода, в котором цикл и условные операторы, и в результате он должен выводить числовую последовательность: "-1 , -0.75 , -0.5 , -0.25 , 0 , 0.25 , 0.5 , 0.75 , 1 , 1.2 , 1.4 , 1.6 , 1.8 , 2 , 2.25 , 2.5 , 2.75 , 3"
Но на деле, вот что он выводит: "-1 , -0.75 , -0.5 , -0.25 , 0 , 0.25 , 0.5 , 0.75 , 1 , 1.2 , 1.4 , 1.6 , 1.8 , 2 , 2.2 , 2.45 , 2.7 , 2.95 "
Я прошу у вас помощи. Вот кстати сам код: "
var
i, h: real;

begin
i := -1;
while i <= 3 do
begin
write( i, ' , ');

if (i >= -1.0) AND (i < 1.0) then begin
h := 0.25;
end;
if (i >= 1.0) AND (i < 2.0) then begin
h := 0.2;
end;
if (i >= 2.0) AND (i <= 3.0) then begin
h := 0.25;
end;

i := i + h;

end;

readln
end.
"
В заранее благодарен, дорогие эксперты.

Примечание:
Заранее*
Ответы:
Проблема тут не с pascal, а с представлением числа в машинном виде в форме с плавающей запятой.
Проблема в том, что число 0.2 не может быть представлено в типе real. Вместо него в переменную записывается некоторое число близкое к 0.2. Поэтому прибавив пять раз 0.2 к единице Вы получаете не два, а некоторое число близкое к двум. По всей видимости оно оказывается чуть меньше двух, поэтому срабатывает второе условие, а не третье, и следующим числом, которое Вы получаете, оказывается 2.2, а не 2.25.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.