Другие языки программирования и технологии
Программа в паскале на анализ последовательности
На вход программе подаётся последовательность символов, заканчивающаяся точкой (точка – признак конца и в последовательность не входит). Проверить является ли эта последовательность правильной записью римского числа меньшего 3000. Если является, то нужно перевести в десятичное число и вывести на экран. Массивы и строки не использовать.
>Массивы и строки не использовать.
Вообще-то римское число состоит из букв. Если нельзя использовать строки, то как предлагается его считывать?
Ладно, допустим, считывается по одному символу. Но при этом, скажем, сочетание IX является вполне допустимым, в то время как IM - нет. Т. е. встретив М я должен все равно вернуться и посмотреть, какой символ был перед ним. Как это предлагается сделать без массивов?
ОК, давайте хранить последний символ. Но тогда что делать, скажем, с повторами более 3, например IIII? Хранить отдельно 3 последних символа? Да ну нахрен, запутаться тут - как 2 пальца об асфальт.
В общем, я бы применил тут грубую силу и делал так:
1. Генерируем список списков (раз уж массивы нельзя) всех римских цифр от 1 до 3000 вместе с их десятичными значениями и длиной. Сие займет пару секунд, но куда деваться...
2. При вводе каждого символа удаляем из списка неподходящие значения.
3. Если по дороге список опустел, значит, ввели херню.
4. Самое короткое из оставшихся после точки значений и будет искомым.
Например, ввели Х.
Значит, мы удаляем все, что начинается не на Х - все наши I IV, IX MMM и все прочее.
Потом ввели I - удаляем все XX... XV... XC... У нас останется XI XII XIII XIV
Потом вводят точку - самый короткий у нас XI, значит, это 11.
Собссно, вперед, разминай пальцы...
Вообще-то римское число состоит из букв. Если нельзя использовать строки, то как предлагается его считывать?
Ладно, допустим, считывается по одному символу. Но при этом, скажем, сочетание IX является вполне допустимым, в то время как IM - нет. Т. е. встретив М я должен все равно вернуться и посмотреть, какой символ был перед ним. Как это предлагается сделать без массивов?
ОК, давайте хранить последний символ. Но тогда что делать, скажем, с повторами более 3, например IIII? Хранить отдельно 3 последних символа? Да ну нахрен, запутаться тут - как 2 пальца об асфальт.
В общем, я бы применил тут грубую силу и делал так:
1. Генерируем список списков (раз уж массивы нельзя) всех римских цифр от 1 до 3000 вместе с их десятичными значениями и длиной. Сие займет пару секунд, но куда деваться...
2. При вводе каждого символа удаляем из списка неподходящие значения.
3. Если по дороге список опустел, значит, ввели херню.
4. Самое короткое из оставшихся после точки значений и будет искомым.
Например, ввели Х.
Значит, мы удаляем все, что начинается не на Х - все наши I IV, IX MMM и все прочее.
Потом ввели I - удаляем все XX... XV... XC... У нас останется XI XII XIII XIV
Потом вводят точку - самый короткий у нас XI, значит, это 11.
Собссно, вперед, разминай пальцы...
вот ответ


Похожие вопросы
- Программа на паскале! Помогите(бесплатно)
- Нужно написать программы в Паскале! Массивы! Срочно! Помогите!
- Нужно написать программу на паскале
- Написать программу в Паскале для построения графика функций. К программе желательно составить алгоритм.
- Программа в Паскале
- Помогите составить программу на паскале!
- Время работы программы в Паскаль
- Объясните как работает программа в паскаль!!!
- помогите с программами в паскале
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале