Факультет математики и компьютерных наук, история


Городская олимпиада по программированию

(19 января 2003 г.)


Задачи


1. "Шашки". На шахматной доске находится 10 шашек (некоторое количество белых и черных не обязательно равное).
  1. Необходимо определить количество шашек, которые могут быть срублены при ходе белых в предположении, что на поле нет "дамок".
  2. Решить задачу для случая, когда у белых имеется не более 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
"Лог.операция" <, >, <=, >=, =, <>  

Имеется текст программы, записанный по правилам описанным выше. Необходимо

  1. подсчитать количество переменных, использованных в программе;
  2. преобразовать исходную программу по следующим правилам:
  1. если в операторе IF условие всегда истинно (ложно) (например 2>1,1>2, A+1=7 (при "условии", что A=6)), то в текст преобразованной программы включается только оператор, стоящий за THEN (за ELSE, если он есть);
  2. если в ветках THEN и ELSE оператора IF стоит один и тот же оператор присваивания (переменные в левых частях этих двух операторов совпадают, а значения правых частей одинаковы, например, IF A>B THEN L=A+B ELSE L=B+A), то этот оператор присваивания записывается вместо IF-оператора;
  3. если в операторе WHILE условие всегда ложно, то "WHILE-оператор" из текста программы исключается;
  4. если внутри тела цикла оператора WHILE стоит оператор присваивания, переменная из левой части этого оператора не встречается в "условии" и выражение в правой части не изменяется внутри цикла, то этот оператор выносится из цикла и ставится перед ним;
  5. если в операторах IF, WHILE в "условии" или в правой части оператора присваивания стоит выражение, численное значение операндов которого известно, то это значение вычисляется и записывается вместо "выражения" в "условие" или вместо правой части оператора присваивания соответственно.

Входные данные:

Выходные данные: в файл с именем 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


ИвГУ: Математический факультет. Главная страница