Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 089
от 29.01.2003, 20:00

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 150
Отправлено ответов: 456
Активность: 304 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

X-RayMan
Статус: Доверительный
Общий рейтинг: 148
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.18
[Подробней >>]
hackishD
Статус: Начальный
Общий рейтинг: 133.33
[Подробней >>]
 
Tancho
Статус: Доверительный
Общий рейтинг: 140
[Подробней >>]
Byter
Статус: Опытный
Общий рейтинг: 125.36
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 147. Добрый день, уважаемые эксперты! Не могу найти ошибку в программке. Задание следующее: «Переменные y... (ответов: 5)

Вопросов: 1, ответов: 5


 Вопрос № 147

Добрый день, уважаемые эксперты!
Не могу найти ошибку в программке.
Задание следующее:
«Переменные y ,m, d имеют смысл год, месяц, день. Переменной t присвоить значение true, если тройка y ,m, d образует правильную дату, и false – в противном случае».
Почему-то если ввести неправильную дату (например 34 25 2000), то она все равно выдается на экран (если ввести буквы, то тогда программа работает). Проверку соответствия максимального числа соответствующему месяцу я пока не добавил.
Заранее спасибо.


Приложение:


Вопрос отправлен: 26.01.2003, 18:04
Отправитель: Евгений

[Следующий вопрос >>] [Список вопросов]

Отвечает X-RayMan

Доброго времени суток, Евгений!
Это происходит из-за того, что {$I-} - проверка правильности ввода/вывода. А ошибка должна возникать в связи с превышением диапазона, за это отвечает {$R+} и {$R-}. Но или я не знаю, или нету такой переменной, типа IOResult, для этой директивы. Могу посоветовать одно - вводи день и месяц в переменную типа byte, а потом:
if (d<=31) and (m<=12) then t:=true;

Ответ отправлен: 26.01.2003, 20:04
Отправитель: X-RayMan


Отвечает Ayl

Доброе время суток, Евгений!
Можешь, конечно, написать как в Приложении, возложив ответственность за проверку на компилятор. Но, боюсь, что это немного не то, что тебе нужно. Потому что при возникновении ошибки выхода за пределы диапазона программа будет завершена. Поэтому тебе придется, скорее всего, писать проверку самому.
Насчет проверки соответствия дня месяца - лучше всего, наверное, использовать массив количества дней в месяце. Соответственно, вся проверка будет выглядить так:
t := (m in [1..12]) and (d in [1..dm [m]);
где dm - массив дней.
При этом немного повозится нужно будет с февралем и високосными годами. Напоминая, что по Григорианскому календарю (современному, новый стиль) год считается високосным, если его номер делится без остатка на 400 или делится на 4, но не делится на 100. Введен с 15.10.1582 года.

Приложение:

Ответ отправлен: 27.01.2003, 10:55
Отправитель: Ayl


Отвечает hackishD

Доброе время суток, Евгений!
Попробуй переменные d, m, y заменить на обычные, скажем integer, а month и day вообще убрать, а проверку сделать, например, такой
if (y<1) or (y>3000) then WriteLn('Неправильная дата'); и что-нибудь вроде того.
А вообще посмотри приложение. Там описана моя программа, она тебе должна помочь.
Удачи.

Приложение:

Ответ отправлен: 27.01.2003, 10:56
Отправитель: hackishD


Отвечает Tancho

Приветствую Вас, Евгений!
Опция компилера $i в твоем случае не годиться.
Та опция которая тебе нужна - {$R}.
На место {$i-} -> {$R+}, а на место
{$i+} -> {$R-}, тогда если индекс месяц вне
интервала [1,12], а индекс дня вне [1,31] то
прога при выполнений даеть ошибка
'Run-time error 201', но сколко я зная здесь IOresult не
годиться. Если все таки надо контролировать дня и месяцу,
то я предлагаю тебе немножко модифицировать твоя прогу.
Смотри приложение!


Приложение:

Ответ отправлен: 28.01.2003, 16:18
Отправитель: Tancho


Отвечает Byter

Здравствуйте, Евгений.
Дело в том, что типовый предел,которы ты указываешь для месяца и дня может быть превышен,без возникновения иошной
ошибки.Если возмешь тип байт и загонешь туда число 256(хотя там максимум 255) , там бедет не 256 ,а 0.Так что лучше
проверяй, чтобы месяц и год не превышали допустимые значения.

Ответ отправлен: 29.01.2003, 15:26
Отправитель: Byter



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (38)
C / C++ (29)
Perl (7)
Delphi (17)
Pascal (23)
Basic / VBA (14)
Java / JavaScript (12)
PHP (9)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (30)
"Железо" (34)
Поиск информации (18)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (13)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное