IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проверка действительного числа на целость, и нахождение диапазона целых
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской
Реальное имя: Григорий

Репутация: -  0  +


Вообщем задали в школе задачу по паскалю.Там нужно ввести границы диапазона с клавы и потом еще 3 числа (тип real) нужно вообщем написать какие числа проходят по диапазону,какое первое отрицательное/положительное,с этим я справился,а вот еще нужно определить сколько целых чисел и вывести.С этим проблема.Как переменные типа real проверить на целость?Mod как я понял не подходит.Задача для 10 класса,не предлагайте сложных решений пожалуйста.Спасибо заранее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


http://www.delphibasics.ru/Trunc.php
http://www.delphibasics.ru/Frac.php
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Проверку на целость действительного числа можно сделать как-то так:
if Abs(a-Round(a))<=e*a then writeln('число целое') else writeln('число нецелое');

Параметр e можно положить равным 1E-10 для чисел типа real или 1E-14 для чисел типа double.

2 Sheka:
тебе лень по клаве пальцами двигать? либо отвечай на вопрос, либо промолчи..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я так понял, автору надо узнать, сколько целых на диапазоне?
Тогда проверка числа на целость не поможет.
Ну не будете же вы перебирать все вещественные числа в диапазоне и проверять их на целость.

В диапазоне от a до b целых чисел ровно

down(b)-up(a)+1

где down ищет ближайшее целое снизу, а up - ближайшее целое сверху.
Таких функций стандартных нету, но их можно написать, используя round


function down(x: real): integer;
var
r: integer;
begin
r := round(x);
if r>x then r:=r-1;
down := r;
end;

function up(x: real): integer;
var
r: integer;
begin
r := round(x);
if r<x then r:=r+1;
up := r;
end;



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Я так понял, автору надо узнать, сколько целых на диапазоне?
С чего бы? Вводятся границы диапазона, числа, и для введенных трех чисел выводятся результаты: сколько попадает в диапазон, сколько целых, сколько - положительных/отрицательных...

Хотя я бы за такую постановку задачи снял бы преподавателя тут же. Не делается так: введите данные в переменные типа real, и потом проверьте, сколько из введенных значений - целые. Ну, введу я 14.9999999999 (10 девяток для real, 16 - для double и 20 - для extended), это что, значит я ввел целое значение? Нет, это значит, что введенное мной вещественное значение будет считаться целым из-за особенностей машинного представления вещественных чисел. Проверить, вводится ли именно целочисленное значение, можно только одним способом: читать в LongInt с проверкой ошибок ввода (тогда даже 10.0 не будет пропущено, ибо это уже вещественное. Только 10. Но у этого метода есть другой подводный камень: не удалось прочесть в LongInt - всё, значение потеряно, чтоб прочитать его в real надо вводить заново, что не есть хорошо). Все остальные методы изначально завязаны на погрешность...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(TarasBer @ 20.09.2011 11:08) *
Я так понял, автору надо узнать, сколько целых на диапазоне?
Тогда проверка числа на целость не поможет.

Гм. Да, скорее всего, ты прав..
Я повелся на его фразу "Как переменные типа real проверить на целость?", а она, возможно, была уже выводом (неверным).

Цитата(TarasBer @ 20.09.2011 11:08) *
Таких функций стандартных нету, но их можно написать, используя round
Хочу на всякий случай добавить.. Если кто-то подумает, что функция Trunc - это то же самое, что Down - таки это не так! smile.gif Для отрицательных чисел результат Trunc больше или равен аргументу. Так что для них она скорее Up smile.gif. И еще добавлю, что в общем случае Up(x) не всегда равно Down(x)+1, иногда Down(x)=Up(x).


Добавлено через 9 мин.
Цитата(volvo877 @ 20.09.2011 12:34) *
Хотя я бы за такую постановку задачи снял бы преподавателя тут же.

Согласен (хотя автор просил не усложнять)).
Кстати, интересно: на форуме (то есть, от студентов) задач с таким безобразием гораздо больше, чем их встречается на практике. Реально, встречаются иногда ситуации, когда приходится извращаться с точностью, но гораздо реже. Такое впечатление, будто препы нарочно их вытаскивают (но явно не с целью продемонстрировать эту проблему).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Я хочу извиниться перед Sheka. Он не нарушил абсолютно никаких правил (ни форумских, ни моральных и т.п.), так что я зря наехал.. Каждый отвечает, как считает нужным.
Извини, Шека.
)


Сейчас пересмотрел тему - везде нужно сделать оговорки, что эти методы годятся только для диапазона целых (или длинных целых), поскольку используется Round. Это на самом деле не так уж и много по сравнению со всем диапазоном действительных. Думаю, для школьной задачи этого хватит, но в общем случае требует дополнения.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 22:37
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name