Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмдеу жане багдарламалау негиздери 4 г.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Тақырыбы: Манипулирование строками

Задание:

Изучить все варианты поиска подстроки в строке. Провести сравнительный анализ.

Написать программу преобразования в десятичные римских чисел, состоящих из символов I, V и X.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

Методическое указание:

Для решения задачи проще всего использовать ав­томатный распознаватель, реализованный на вложенных операторах CASE. Этот подход дает способ на­глядной записи алгоритмов распознавания текстов. Представленная таблица предназначена для перево­да римских чисел, составленных из символов I, V иХ.

Символ жағдайы

'X'

'V’

‘T’

1

n:=10;

state:=2

n:=5;

state:=3

n:=1;

state:=6

2

n:=n+10; state:=2

n:=n+5; state:=3

n:=n+1; state:=6

3

ok:=FALSE

ok:=FALSE

n:=n+1; state:=4

4

ok:=FALSE

ok:=FALSE

n:=n+1; state:=5

5

ok:=FALSE

ok:=FALSE

n:=n+1; state:=7

6

n:=n+8; state:=7

n:=n+3; state:=7

n:=n+1; state:=5

7

ok:=FALSE

ok:=FALSE

ok:=FALSE

Для расшифровки XIV начинаем с состояния 1, как указано стрелкой. Первый символ — 'X', поэто­му смотрим столбец 'X' и находим последовательность операторов п: = 10; state: = 2. Итак, полагаем п рав­ным 10 и сдвигаем стрелку на вторую строку. Теперь смотрим столбец, определяемый вторым символом, т.е. Т, и находим п: =п+ 1; state: = 6. Значение л, таким образом, становится 10+1 = 11. Сдвигаем стрелку к строке 6. Теперь в столбце 'V’ находим п: —п + 3; state: = 7. Значение п становится равным 11 + 3 = 14. Сдвигаем стрелку на строку 7 и замеча­ем, что любая следующая цифра 'X', 'V’ или ‘Т’ будет теперь ошибкой (например, XIVX).

Эта таблица позволяет декодировать римскую за­пись чисел, содержащих любое количество цифр X (в начале) и цифры V, I, записанные по обычным правилам:

I, II, III, IV, V, VI, VII, VIII, IX, X, XI и т.д.

Вместе с тем такое число, как ИИ, будет воспри­нято как ошибочное, и переменная ok примет значе­ние FALSE. Для работы с цифрами М, D, С және L цифрларымен таб­лицу можно расширить.

program roman;

var n, state: integer;

symbol : char;

ok: boolean;

begin {}

state:=1; ok:=TRUE; n:=0;

while not eoln do

begin

read(symbol);

if symbol in ['X', 'V, 'I'] then

case state of

1: case symbol of

'X': begin n:=10; state:=2 end;

'V’: begin n:=5; state:=3 end

‘I’: begin n:=l; state:=6 end;

end

2: case symbol of

'X' :begin n:=10;,state:=2 end;

'V’: begin n:=n+5;state:=3 end;

'I': begin n:=n+l;state:=6 end

end;

3: case symbol of

'X' , 'V : ok:=false;

'I': begin n:=n+l;state:=4 end

end;

4: case symbol of

'X' ,'V : ok:=false;

'I': begin n:=n+l;state:=5 end

end;

5: case symbol of

'X', 'V : ok:=false;

'I': begin n:=n+l;state:=7 end

end;

6: case symbol of

'X': begin n:=n+8; state:=7 end;

'V: begin n:=n+3; state:=7 end;

'I': begin n:=n+l; state:=5 end

end;

7: ok:=false;

end {CASE state}

else

begin

if ok

then writeln(n:2)

else writeln('Error!');

state:=1; ok:=true

end {else}

end {while not}

end. {программы}

38 жұмыс