Городская олимпиада по программированию
(19 января 2003 г.)
Задачи
1. "Шашки". На шахматной доске находится 10 шашек (некоторое количество
белых и черных не обязательно равное).
- Необходимо определить количество шашек, которые могут быть срублены при ходе
белых в предположении, что на поле нет "дамок".
- Решить задачу для случая, когда у белых имеется не более 3-х "дамок".
Входные данные:
- в файле с именем input.dat находится числовая матрица размером 8*8;
- каждая строка матрицы находится в отдельной строке файла;
- цифры располагаются подряд без пробелов;
- цифра 1 соответствует белой шашке, цифра 2 - черной, 0 - пустой клетке;
- для задачи под буквой b - цифра 3 соответствует "дамке" белых;
- шашка может рубить как вперед, так и назад;
- шашка обязана рубить все подпадающие под сруб шашки;
- имеется только один путь позволяющий рубить шашки.
Выходные данные: в файл с именем output.dat вывести количество срубленных шашек.
Замечание. Решения задач под буквами a и b оцениваются отдельно.
2. "Очень сложная?". Пусть язык программирования описывается следующим образом:
|
|
Примеры |
"Выражение" |
"операнд" + или - или * "операнд" |
A+4 |
Y*D |
7-R |
"Операнд" |
"Переменная" или "целое без знака" |
A |
9 |
"Переменная" |
Заглавная латинская буква: A, B, C,:,Z |
|
"Целое без знака" |
0, 1, 2, 3,:, 9 |
|
"Оператор" |
"IF-оператор" или "WHILE-оператор" или "присвоить" или "оператор ввода" |
|
"Оператор ввод" |
INPUT "переменная" |
INPUT A |
INPUT D |
"Присвоить" |
"Переменная" = "выражение" |
С=3 |
D=A+1 |
E=E-W |
"IF-оператор" |
IF "условие" THEN "присвоить" ELSE "присвоить" |
IF A>2 THEN E=1 ELSE E=2+3 |
IF V=4 THEN U=U-1 ELSE U=U-2 |
"WHILE-оператор" |
WHILE "условие" "операторы" WEND |
WHILE A<10 A=A+1 WEND |
WHILE 2*A<C-1 F=F+1 S=S+F WEND |
"Условие" |
"выражение" "лог.операция" "выражение" |
E<1 |
E+3>=4*Y |
3=4 |
"Лог.операция" |
<, >, <=, >=, =, <> |
|
Имеется текст программы, записанный по правилам описанным выше. Необходимо
- подсчитать количество переменных, использованных в программе;
- преобразовать исходную программу по следующим правилам:
- если в операторе IF условие всегда истинно (ложно) (например
2>1,1>2, A+1=7 (при "условии", что A=6)),
то в текст преобразованной программы включается только оператор, стоящий за THEN
(за ELSE, если он есть);
- если в ветках THEN и ELSE оператора IF стоит один и тот же оператор
присваивания (переменные в левых частях этих двух операторов совпадают, а
значения правых частей одинаковы, например,
IF A>B THEN L=A+B ELSE L=B+A),
то этот оператор присваивания записывается вместо IF-оператора;
- если в операторе WHILE условие всегда ложно, то "WHILE-оператор" из текста программы исключается;
- если внутри тела цикла оператора WHILE стоит оператор присваивания,
переменная из левой части этого оператора не встречается в "условии" и
выражение в правой части не изменяется внутри цикла,
то этот оператор выносится из цикла и ставится перед ним;
- если в операторах IF, WHILE в "условии" или в правой части
оператора присваивания стоит выражение, численное значение операндов которого
известно, то это значение вычисляется и записывается вместо "выражения"
в "условие" или вместо правой части оператора присваивания
соответственно.
Входные данные:
- текст программы находится в файле, имя которого вводится с клавиатуры;
- каждый оператор программы начинается с новой строки и записан в одну строчку длиной не более 100 символов;
- в одной строке записан только один оператор;
- все переменные и ключевые слова записаны заглавными буквами латинского алфавита;
- текст исходной программы синтаксически и логически правильный;
- программа содержит не более 50 строк текста;
- все внутренние составляющие операторов разделены одним пробелом.
Выходные данные: в файл с именем output.dat вывести в первую
строку количество использованных переменных в программе, а в последующие строки
преобразованную программу.
Замечание: при тестировании вашей программы выполнение каждого пункта
задачи будет оцениваться отдельно.
УДАЧИ ВАМ!
Результаты олимпиады
Фамилия, имя | Школа | Класс | 1a | 1b | 2.1 | 2a | 2b | 2c | 2d | 2e | Сумма | Место
|
---|
Королев Н.А. | 36 | 11 "в" | 4 | 2 | 3 | 0 | 3 | 3 | 0 | 0 | 15 | 1
|
Лазарев И. | 30 | 11 "б" | 5 | 2 | 2 | 0 | 0 | 0 | 3 | 0 | 12 | 2
|
Харин М. | 22 | 10 "б" | 5 | 1 | 3 | 0 | 2 | 0 | 0 | 0 | 11 | 2
|
Меньшаков А. | 22 | 11 "б" | 5 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 3
|
Томин Д. | 33 | 11 | 3 | 2 | 3 | - | - | - | - | - | 8 | поощ
|
Лукичев А. | 28 | 10 "а" | 5 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 8 | поощ
|
Капранов В. | 33 | 11 "а" | 5 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 7 | поощ
|
Конюшенко Д. | 21 | 11 | - | - | 3 | 2 | 2 | 0 | 0 | 0 | 7 | поощ
|
Великодный В. | 44 | 11 "б" | 5 | 0 | - | - | - | - | - | - | 5 |
|
Горячев М. | 44 | 11 "б" | 3 | 0 | - | - | - | - | - | - | 3 |
|
Филатов С. | 23 | 10 | 2 | 0 | - | - | - | - | - | - | 2 |
|
Жульков А. | 23 | 11 "б" | 2 | 0 | - | - | - | - | - | - | 2 |
|
Данилин А. | 67 | 11 "б" | 2 | 0 | - | - | - | - | - | - | 2 |
|
ИвГУ: Математический факультет. Главная страница