reyesphile Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) Не знаю, есть ли тут программисты. Но вдруг...Сама преподаю информатику, но Бейсиком уже давно не занимаюсь. Работаем на Паскале. А тут на олимпиаде один "товариСч" решил отличиться и написал программу на Бейсике. Проверяю - не работает. Не могу понять, где ошибка. Помогите...Задача:Составьте программу, которая к числительному от 1 до 100 подставит слово «ворона» в нужном падеже. При неверно введенном исходном числе ворон, программа должна выдавать сообщение «Неверно ввели число!»Формат входных данных Водится натуральное число от 1 до 100. Формат выходных данныхВ результате работы программы на экране выводится число и слово «ворона» в нужном падеже. Например:1 ворона11 ворон99 воронКод программы:DEFINT A-ZCLSINPUT "skolko: ", APRINT STR$(A);IF A \ 10 <> 1 THENB = A MOD 10IF B = 1 THEN PRINT " vorona"IF B > 1 AND B < 5 THEN PRINT "voroni"IF B > 4 AND B < 10 OR B = 0 THEN PRINT " voron"ELSEPRINT " voron"END IFПропущено сообщение о неправильно введенном числе. Как и куда его вставить - не могу вспомнить. Заклинило.IF B > 100 then print “Neverno vvedeno chislo!” Изменено 6 октября, 2014 пользователем reyesphile Ссылка на комментарий Поделиться на другие сайты Поделиться
Наташа и Стив Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) IF B > 1 AND B < 5 THEN PRINT "voroni"IF B > 4 AND B < 10 OR B = 0 THEN PRINT " voron"Мне вот этот кусок не понравился. Там может циклиться. Это не про пропущенный кусок про неправильное число, но разве система сама не даст worning? Обязательно ли програмировать его?Но это я по наитию, я давно очень этим не занималась, с института. Изменено 6 октября, 2014 пользователем Наташа и Стив Ссылка на комментарий Поделиться на другие сайты Поделиться
reyesphile Опубликовано 6 октября, 2014 Автор Поделиться Опубликовано 6 октября, 2014 (изменено) Код почти рабочий (хоть и примитивный). Проверила на Бейсике. Сообщение об ошибке (при числе больше 100) не выдается. Идет по кругу, требуя новое число. Изменено 6 октября, 2014 пользователем reyesphile Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Вместо многих условных конструкций IF проще было Select CASE использовать.Ну и фильтр не правилен в паре мест.Если надо листинг подправленой то тока после 21 смогу. На работе тока VS 2013.Дома есть и QBX. Ссылка на комментарий Поделиться на другие сайты Поделиться
Наташа и Стив Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) А, передумала :) Давно это было. Изменено 6 октября, 2014 пользователем Наташа и Стив Ссылка на комментарий Поделиться на другие сайты Поделиться
reyesphile Опубликовано 6 октября, 2014 Автор Поделиться Опубликовано 6 октября, 2014 Ergo Proxy, буду очень благодарна. Мне на завтра нужно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Валидация бессмысленна IF B > 100 then print “Neverno vvedeno chislo!” B вообще никак не будет >=10, т.к это остаток от деления на 10. Ссылка на комментарий Поделиться на другие сайты Поделиться
Наташа и Стив Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Валидация бессмысленна IF B > 100 then print “Neverno vvedeno chislo!” B вообще никак не будет >=10, т.к это остаток от деления на 10.То есть, надо:IF А > 100 then print “Neverno vvedeno chislo!” Да, Даш? Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) DEFINT A-ZCLSINPUT "skolko: ", AIF A <1 OR A > 100 THEN print "Neverno vvedeno chislo!" ELSE PRINT STR$(A); IF A>=11 AND A<=19 THEN PRINT " voron" ELSE B = A MOD 10 IF B = 1 THEN PRINT " vorona" ELSEIF B > 1 AND B < 5 THEN PRINT " voroni" ELSEIF B > 4 AND B < 10 OR B = 0 THEN PRINT " voron" END IF END IFEND IFКак-то так. С точностью до синтаксиса, т.к. мой из ASP VB, который хоть как-то помню еще. :)Но алгоритм должен вроде... Изменено 6 октября, 2014 пользователем Даша Шулеко Ссылка на комментарий Поделиться на другие сайты Поделиться
DaneSoul Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Не помешало бы еще проверку на то, что введенное число целое добавить, кстати. Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Не помешало бы еще проверку на то, что введенное число целое добавить, кстати.По условиям задачи:Формат входных данныхВодится натуральное число от 1 до 100.Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam: Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Не помешало бы еще проверку на то, что введенное число целое добавить, кстати.Тогда и проверку ввода, что введены именно цифры, а не буквы.)Иначе краш.)Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam:Судя по листингу это досовский Бэйсик и все операции в полно экранном окне .)Но конечно это уже придирки из ТРПП.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 ТЗ есть ТЗ. :gleam: PS Я бы скорее на пустое значение проверила, для начала ;) Если уж. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) ТЗ есть ТЗ. :gleam:О да к ТЗ тоже вопросов много.Как вообще решили - ворона или ворон?Под хвост смотрели?По чет-нечет?)) Изменено 6 октября, 2014 пользователем Ergo Proxy Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Как вообще решили - ворона или ворон?Под хвост смотрели?Это разные виды! :doh: ворона и ворон Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Это разные виды! :doh: ворона и воронЯ знаю что разные.Не к тому шутка была.Кстати листинг 21 проходит адекватно? Ссылка на комментарий Поделиться на другие сайты Поделиться
DaneSoul Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) По условиям задачи:Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam:Ну если исходить из того, что ввод всегда строго соответствует условиям задачи, то и эти строки можно выкинуть:IF A <1 OR A > 100 THEN print "Neverno vvedeno chislo!" ;) Изменено 6 октября, 2014 пользователем DaneSoul Ссылка на комментарий Поделиться на другие сайты Поделиться
_Sakura_ Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Тогда и проверку ввода, что введены именно цифры, а не буквы.)Иначе краш.)Меня когда учили программированию - учили даже в самых простых задачах делать все-все проверки и "защиты от дурака") Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Меня когда учили программированию - учили даже в самых простых задачах делать все-все проверки и "защиты от дурака")По ТРПП сим доставали жутко. Например "Сделать проверку ввода чтоб человек не мог ввести в поле ничего кроме цифр\букв".Ну типа кому придет в голову на вопрос числа покупаемых дисков написать хз?))Но.. надо.) В итоге прога разрасталась модулем фильтрации или просто блочилась вся клава кроме нужных кнопок и пусть юзер хоть удавится.))Это в визуальном все просто, назначил условия местам ввода и все. Система сама отфильтрует, а в ДОСовских вечно самим доделывать. В BC++ это вымораживало.)По теме лично я не люблю куча вложений IF оператора условий.Куда как проще выглядит кусок :SELECT CASE B CASE 1 PRINT " vorona" CASE 2 TO 4 PRINT " voroni" CASE 5 TO 9, IS = 0 PRINT " voron"END SELECT Ссылка на комментарий Поделиться на другие сайты Поделиться
_Sakura_ Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 (изменено) По ТРПП сим доставали жутко. Например "Сделать проверку ввода чтоб человек не мог ввести в поле ничего кроме цифр\букв".Ну типа кому придет в голову на вопрос числа покупаемых дисков написать хз?))Но.. надо.) В итоге прога разрасталась модулем фильтрации или просто блочилась вся клава кроме нужных кнопок и пусть юзер хоть удавится.))Это в визуальном все просто, назначил условия местам ввода и все. Система сама отфильтрует, а в ДОСовских вечно самим доделывать. В BC++ это вымораживало.)По теме лично я не люблю куча вложений IF оператора условий.Куда как проще выглядит кусок :SELECT CASE B CASE 1 PRINT " vorona" CASE 2 TO 4 PRINT " voroni" CASE 5 TO 9, IS = 0 PRINT " voron"END SELECTВ визуальных тоже проверок приходилось делать чуть больше, чем дофига)+1 за конструкцию с кейсами. Она стилистически более грамотна и легче отлаживается, помимо прочего, чем десяток if'ов. Изменено 6 октября, 2014 пользователем Sakura-13 Ссылка на комментарий Поделиться на другие сайты Поделиться
Ergo Proxy Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 В визуальных тоже проверок приходилось делать чуть больше, чем дофига)В визуалках базовые поля хоть сами имеют начальные фильтры.Выставил настройки например ввод только чисел целых и уверен, что тупой юзер не введет там буквенную хрень или спец символы.Прога просто не пример в поле это.А в старых добрых ДОСовских, как и сейчас в Яве для Андройда я парюсь, приходится все фильтровать.Еще и тыканье пальцем в менюшки лишнее блочить.)Хуже было только когда я игру под DXSDK чисто писал, вот уж где все досовские фени пригодились. Создаешь окно ввода имени перса, а некоторые умудряются туда спец символы пихать и ругаются "А пачему незя?:)" - "Ибо нефиг!".)Лучшее решение "от идиотов" блок ввода и считывание непосредственно клавиш.Ни разу не смогли обойти.Но критиковали что "ограничиваешь свободу юзера". Угу, свободу на тупление.)) Ссылка на комментарий Поделиться на другие сайты Поделиться
DaneSoul Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Лучшее решение "от идиотов" блок ввода и считывание непосредственно клавиш.Ни разу не смогли обойти.Но критиковали что "ограничиваешь свободу юзера".А с копи-пастой тогда как быть? За блокирование копи-пасты в поле я бы лапки разработчикам откручивал с особой жестокостью! Ссылка на комментарий Поделиться на другие сайты Поделиться
_Sakura_ Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 А с копи-пастой тогда как быть? За блокирование копи-пасты в поле я бы лапки разработчикам откручивал с особой жестокостью!Зависит от того, для каких задач поле. Хотя я бы в любом случае разбирала посимвольно и проверяла на предмет недопустимых символов (у меня в нескольких математических прогах проверка введенных значений была подобным образом реализована, если попадался недопустимый символ - выдавалось предупреждение и фокус снова возвращался в тоже поле ввода). Ссылка на комментарий Поделиться на другие сайты Поделиться
Даша Шулеко Опубликовано 6 октября, 2014 Поделиться Опубликовано 6 октября, 2014 Ну если исходить из того, что ввод всегда строго соответствует условиям задачи, то и эти строки можно выкинуть: ;)Вообще-то да. Фиговая постановка задачи. :)я бы в любом случае разбирала посимвольно и проверяла на предмет недопустимых символовВ мало-мальски развитых языках есть операции приведения типов. Dim s As String = "1234"Dim n As IntegerTry n = Integer.Parse(s) Console.WriteLine(n) Catch ex As FormatExceptionEnd Try Ссылка на комментарий Поделиться на другие сайты Поделиться
_Sakura_ Опубликовано 7 октября, 2014 Поделиться Опубликовано 7 октября, 2014 В мало-мальски развитых языках есть операции приведения типов.Ну так-то да)Я иногда ей и пользовалась, если надо было проверить, что в поле для числа не попали никакие буквенные символы (try IntToString (a) catch...) Тьфу, забыла уже синтаксис весь.Но если надо проверить на один конкретный символ - как делать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти