Перейти к содержанию
Лабрадор.ру собаки - ретриверы

Рекомендуемые сообщения

Опубликовано (изменено)

Не знаю, есть ли тут программисты. Но вдруг...

Сама преподаю информатику, но Бейсиком уже давно не занимаюсь. Работаем на Паскале. А тут на олимпиаде один "товариСч" решил отличиться и написал программу на Бейсике. Проверяю - не работает. Не могу понять, где ошибка. Помогите...

Задача:

Составьте программу, которая к числительному от 1 до 100 подставит слово «ворона» в нужном падеже.

При неверно введенном исходном числе ворон, программа должна выдавать сообщение «Неверно ввели число!»

Формат входных данных

Водится натуральное число от 1 до 100.

Формат выходных данных

В результате работы программы на экране выводится число и слово «ворона» в нужном падеже.

Например:

1 ворона

11 ворон

99 ворон

Код программы:

DEFINT A-Z

CLS

INPUT "skolko: ", A

PRINT STR$(A);

IF A \ 10 <> 1 THEN

B = A MOD 10

IF 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"

ELSE

PRINT " voron"

END IF

Пропущено сообщение о неправильно введенном числе. Как и куда его вставить - не могу вспомнить. Заклинило.

IF B > 100 then print “Neverno vvedeno chislo!”

Изменено пользователем reyesphile
Опубликовано (изменено)

IF B > 1 AND B < 5 THEN PRINT "voroni"

IF B > 4 AND B < 10 OR B = 0 THEN PRINT " voron"

Мне вот этот кусок не понравился. Там может циклиться.

Это не про пропущенный кусок про неправильное число, но разве система сама не даст worning? Обязательно ли програмировать его?

Но это я по наитию, я давно очень этим не занималась, с института.

Изменено пользователем Наташа и Стив
Опубликовано (изменено)

Код почти рабочий (хоть и примитивный). Проверила на Бейсике. Сообщение об ошибке (при числе больше 100) не выдается. Идет по кругу, требуя новое число.

Изменено пользователем reyesphile
Опубликовано

Вместо многих условных конструкций IF проще было Select CASE использовать.

Ну и фильтр не правилен в паре мест.

Если надо листинг подправленой то тока после 21 смогу. На работе тока VS 2013.Дома есть и QBX.

Опубликовано

Валидация бессмысленна

IF B > 100 then print “Neverno vvedeno chislo!”

B вообще никак не будет >=10, т.к это остаток от деления на 10.

То есть, надо:

IF А > 100 then print “Neverno vvedeno chislo!”

Да, Даш?

Опубликовано (изменено)

DEFINT A-Z
CLS
INPUT "skolko: ", A
IF 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 IF
END IF

Как-то так. С точностью до синтаксиса, т.к. мой из ASP VB, который хоть как-то помню еще. :)

Но алгоритм должен вроде...

Изменено пользователем Даша Шулеко
Опубликовано

Не помешало бы еще проверку на то, что введенное число целое добавить, кстати.

По условиям задачи:

Формат входных данных

Водится натуральное число от 1 до 100.

Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam:

Опубликовано

Не помешало бы еще проверку на то, что введенное число целое добавить, кстати.

Тогда и проверку ввода, что введены именно цифры, а не буквы.)Иначе краш.)

Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam:

Судя по листингу это досовский Бэйсик и все операции в полно экранном окне .)

Но конечно это уже придирки из ТРПП.)

Опубликовано (изменено)

ТЗ есть ТЗ. :gleam:

О да к ТЗ тоже вопросов много.Как вообще решили - ворона или ворон?Под хвост смотрели?

По чет-нечет?))

Изменено пользователем Ergo Proxy
Опубликовано (изменено)

По условиям задачи:

Так что будем считать что там поле с маской(?) в которую ничего кроме цифр не ввести. Или клава из одних цифр. Для подсчета ворон, специальная. :gleam:

Ну если исходить из того, что ввод всегда строго соответствует условиям задачи, то и эти строки можно выкинуть:

IF A <1 OR A > 100 THEN

print "Neverno vvedeno chislo!"

;)

Изменено пользователем DaneSoul
Опубликовано

Тогда и проверку ввода, что введены именно цифры, а не буквы.)Иначе краш.)

Меня когда учили программированию - учили даже в самых простых задачах делать все-все проверки и "защиты от дурака")

Опубликовано

Меня когда учили программированию - учили даже в самых простых задачах делать все-все проверки и "защиты от дурака")

По ТРПП сим доставали жутко.

Например "Сделать проверку ввода чтоб человек не мог ввести в поле ничего кроме цифр\букв".

Ну типа кому придет в голову на вопрос числа покупаемых дисков написать хз?))

Но.. надо.) В итоге прога разрасталась модулем фильтрации или просто блочилась вся клава кроме нужных кнопок и пусть юзер хоть удавится.))

Это в визуальном все просто, назначил условия местам ввода и все. Система сама отфильтрует, а в ДОСовских вечно самим доделывать. В 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

Опубликовано (изменено)

По ТРПП сим доставали жутко.

Например "Сделать проверку ввода чтоб человек не мог ввести в поле ничего кроме цифр\букв".

Ну типа кому придет в голову на вопрос числа покупаемых дисков написать хз?))

Но.. надо.) В итоге прога разрасталась модулем фильтрации или просто блочилась вся клава кроме нужных кнопок и пусть юзер хоть удавится.))

Это в визуальном все просто, назначил условия местам ввода и все. Система сама отфильтрует, а в ДОСовских вечно самим доделывать. В 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'ов.

Изменено пользователем Sakura-13
Опубликовано

В визуальных тоже проверок приходилось делать чуть больше, чем дофига)

В визуалках базовые поля хоть сами имеют начальные фильтры.Выставил настройки например ввод только чисел целых и уверен, что тупой юзер не введет там буквенную хрень или спец символы.Прога просто не пример в поле это.

А в старых добрых ДОСовских, как и сейчас в Яве для Андройда я парюсь, приходится все фильтровать.Еще и тыканье пальцем в менюшки лишнее блочить.)

Хуже было только когда я игру под DXSDK чисто писал, вот уж где все досовские фени пригодились. Создаешь окно ввода имени перса, а некоторые умудряются туда спец символы пихать и ругаются "А пачему незя?:)" - "Ибо нефиг!".)

Лучшее решение "от идиотов" блок ввода и считывание непосредственно клавиш.Ни разу не смогли обойти.Но критиковали что "ограничиваешь свободу юзера". Угу, свободу на тупление.))

Опубликовано

Лучшее решение "от идиотов" блок ввода и считывание непосредственно клавиш.Ни разу не смогли обойти.Но критиковали что "ограничиваешь свободу юзера".

А с копи-пастой тогда как быть? За блокирование копи-пасты в поле я бы лапки разработчикам откручивал с особой жестокостью!

Опубликовано

А с копи-пастой тогда как быть? За блокирование копи-пасты в поле я бы лапки разработчикам откручивал с особой жестокостью!

Зависит от того, для каких задач поле. Хотя я бы в любом случае разбирала посимвольно и проверяла на предмет недопустимых символов (у меня в нескольких математических прогах проверка введенных значений была подобным образом реализована, если попадался недопустимый символ - выдавалось предупреждение и фокус снова возвращался в тоже поле ввода).

Опубликовано

Ну если исходить из того, что ввод всегда строго соответствует условиям задачи, то и эти строки можно выкинуть:

;)

Вообще-то да. Фиговая постановка задачи. :)

я бы в любом случае разбирала посимвольно и проверяла на предмет недопустимых символов

В мало-мальски развитых языках есть операции приведения типов.

Dim s As String = "1234"

Dim n As Integer

Try

n = Integer.Parse(s)

Console.WriteLine(n)

Catch ex As FormatException

End Try

Опубликовано

В мало-мальски развитых языках есть операции приведения типов.

Ну так-то да)

Я иногда ей и пользовалась, если надо было проверить, что в поле для числа не попали никакие буквенные символы (try IntToString (a) catch...)

Тьфу, забыла уже синтаксис весь.

Но если надо проверить на один конкретный символ - как делать?

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...