Вводится последовательность целых чисел, не превышающих 1000 (как минимум из одного числа), 1000 – конец последовательности. Найти наименьшее число в введённой с клавиатуры последовательности чисел Тема: Программирование циклов с заданным условием окончания работы.
1. Константы 3.1 и 0.8 переведены в машинное представление а затем назад в десятичное с максимальной для паскалевских данных вещественного типа real (он же double) точностью (вложения 1 и 2).
2. В системе компьютерной алгебры, позволяющей работать с произвольной точностью (выбрана точность в 30 значащих цифр) для полученных констант выполнены соответствующие заданному фрагменту программы вычисления (вложение 3)
3. Результат 0.499999999999999955591079014996 был переведен в машинное представление. Затем в машинное представление была переведена константа 0.5, которая, как видно во вложении 4, представляется в компьютере точно. Поэтому проверка на точное равенство с 0.5 дает не тот результат, который Вы ожидали.
4. Можно было также воспользоваться программой на паскале.
begin
var x:=3.1;
var y:=0.8;
var p:=2;
var a:=Frac(x); // =0,1
var b:=Frac(y)-0.5; // =0,3
var kp:=sqrt(sqr(0.5-a)+b*b); // =0,5
if abs(kp-0
Writeln(kp-0.5)
end.
Результат: -5.55111512312578E-17
Это как раз то, что так портит Вам всю картину.
По поводу Вашего условия if kp>=0.5 then p=p+1;
Ошибка имеет порядок 0.6·10⁻¹⁶ и наверно ничего страшного не будет, если оператор (с запасом) подправить на if kp>=(0.5-1e-15) then p:=p+1;
program Vozrasr;
var
AGE: integer;//Переменная возраста
begin
writeln('Введите любое число от 1 до 120');
Readln(AGE); //Ввод возраста
if (AGE < 1) or (AGE > 120) then
begin
writeln('ERROR!')
end
else
begin
case AGE of //для чисел от 11 до 20 создаем отд-ый кейс
11..20: Writeln('ответ: Мне ', AGE, ' лет');
Else //иначе если они не входят в диапазон от [11..20], то выполняется второй кейс
begin
case AGE mod 10 of //делим на 10 и получаем остаток =
1: Writeln('ответ: Мне ', AGE, ' год');
2..4: Writeln('ответ: Мне ', AGE, ' года');
0, 5..9: Writeln('ответ: Мне ', AGE, ' лет');
end;
end;
end;
end;
end.