Необходимо узнать, есть ли цифра ноль в первых трех цифрах дробной части заданного положительного числа(выводится true или false)(нельзя использовать операторы циклов и условий).
Вот сама программа:
program drob(input,output);
var n:real; a,b,c:integer;
begin
realn(n);
a:=trunc(n*10) mod 10;
b:=trunc(n*100) mod 10;
c:=trunc(n*1000) mod 10;
writeln((a=0)or(b=0)or(c=0))
end.
Суть проблемы: при n=1.111 выдается true, хотя первые три цифры в дробной части не нули(число "c" почему-то получается равным нулю). Как можно это исправить, обойти и т.д.?
(p.s. на abc паскале все работает, но сдавать надо на turbo или borland)
Другие языки программирования и технологии
Помогите найти ошибку в несложной программке на Паскале
Ну, realn(n); - явная описка, надо readln
Проверил сейчас на Turbo Pascal на Windows 7 32 - работает как часы, в том числе при 1.111
Однако работать, конечно, не обязана. Вещественные числа представляются в памячти приближенно (т. к в другой системе счисления) , поэтому 1.111 может в памяти являться 1.1110000001 или 1.110000099
Выхода два - или вводить и проверять непосредственно десятичное представление числа, то есть строку, или предварительно множить введенное число, скажем на 1.00000001
Вообще все это не так просто, и корни уходят в арифметику. Например, ты знаешь, что у числа один есть две эквивалентные формы записи: 1,000000 или попросту 1, и 0,9999999...,причем это две формы записи ОДНОГО И ТОГО ЖЕ числа?
Задача вообще принципиально некорректна. 1,111 и 1,110999999....-одно и то же число, так есть у него четвертая единица или нет? Можно говорить не о числе, а только о его записи, а в ней может быть и три единицы. и четыре - для одного и того же числа. Поэтому ответ для такого числа: единственного ответа нет, в одной форме записи так, в другой иначе, а компьютер не обязан хранить число именно в нашей форме записи, больше того, он применяют третью, свою.. .
Поэтому я всегда считал, что программированию в школах учить не надо, это дело для профессионалов, после школы можно писать только неверные программы.
Проверил сейчас на Turbo Pascal на Windows 7 32 - работает как часы, в том числе при 1.111
Однако работать, конечно, не обязана. Вещественные числа представляются в памячти приближенно (т. к в другой системе счисления) , поэтому 1.111 может в памяти являться 1.1110000001 или 1.110000099
Выхода два - или вводить и проверять непосредственно десятичное представление числа, то есть строку, или предварительно множить введенное число, скажем на 1.00000001
Вообще все это не так просто, и корни уходят в арифметику. Например, ты знаешь, что у числа один есть две эквивалентные формы записи: 1,000000 или попросту 1, и 0,9999999...,причем это две формы записи ОДНОГО И ТОГО ЖЕ числа?
Задача вообще принципиально некорректна. 1,111 и 1,110999999....-одно и то же число, так есть у него четвертая единица или нет? Можно говорить не о числе, а только о его записи, а в ней может быть и три единицы. и четыре - для одного и того же числа. Поэтому ответ для такого числа: единственного ответа нет, в одной форме записи так, в другой иначе, а компьютер не обязан хранить число именно в нашей форме записи, больше того, он применяют третью, свою.. .
Поэтому я всегда считал, что программированию в школах учить не надо, это дело для профессионалов, после школы можно писать только неверные программы.
Подтверждаю - работает
Похожие вопросы
- Помогите найти ошибку Delphi легкая программка
- Помогите найти ошибки в коде (паскаль)
- Помогите найти ошибку в задачи,Паскаль...
- помогите найти ошибку в задаче по паскалю
- Помогите найти ошибку в программе Паскаль!
- Помогите найти ошибку в программе (паскаль)
- помогите найти ошибку в коде. ПАскаль
- Помогите найти ошибку в коде в паскале
- Помогите исправить ошибку в коде программы на паскале.
- программирование C++. Помогите найти ошибку