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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 203
от 20.08.2006, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 202, Экспертов: 47
В номере:Вопросов: 1, Ответов: 2


Вопрос № 52243: Добрый вечер. Как разбить рядок посимвольно. Я хочу решить такую задачу: Допустим дано число записанное римскими цифрами: М -1000, D – 500, C – 100, L – 50, X – 10, V – 5, I – 1. Вывести запись арабскими. Я думаю надо разбивать с...

Вопрос № 52.243
Добрый вечер.
Как разбить рядок посимвольно.
Я хочу решить такую задачу:
Допустим дано число записанное римскими цифрами: М -1000, D – 500, C – 100, L – 50, X – 10, V – 5, I – 1.
Вывести запись арабскими.
Я думаю надо разбивать строку на символы отдельные.
Отправлен: 15.08.2006, 21:35
Вопрос задал: ataman (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, ataman!
В принципе, да, посимвольно - наиболее правильное решение.
Там в цикле i:= от 1 до length(RomeNumber)-1 примерно след. (RomeNumber: string):

if (RomeToArab(RomeNumber[i]) > RomeToArab(RomeNumber[i+1])) then
inc(Result, RomeToArab(RomeNumber[i]) else dec(Result, RomeToArab(RomeNumber[i]);

И в конце цикла inc(Result, RomeToArab(RomeNumber[length(RomeNumber)])

Функцию RomeToArab(char): intager; напишите сами =)
Я вам только скажу, что самым быстрым вариантом будет либо case of (если компилятор выполняет соотв. оптимизацию - "развешивание" в двоичное дерево) либо вообще создать массив RomeValue['I', 'V', 'X', 'L', 'C', 'D', 'M'] = (1, 5, 10, 50, 100, 500, 1000);
PS: За синтаксис объявления массива не ручаюсь. Может быть, придется создавать RomeValue: array['C'..'X'] of integer; и инициализировать отдельные элементы.

Ну и в цикле надо сохранять значения: текущего символа и следующего, чтобы не вызывать/вычислять ее по 2 раза. Опять же, оптимальным будет сделать CurrentValue: array[0..1] of integer; и обращаться к ним вот так: CurrentValue[i and 1], чтобы не делать "лишних движений" ;-)
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 15.08.2006, 23:24
Оценка за ответ: 5

Отвечает: Coupler
Здравствуйте, ataman!
Пример, переводящий римские цифры в арабские - в приложении.

Приложение:

Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 16.08.2006, 05:16
Оценка за ответ: 5


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное