META
  • Метапрограммирование
    METAPROGRAMING


Задача
Метапрограммой называется программа, которая сама создает другие программы. В этой задаче следует написать метапрограмму, которая создаст программу на языке Паскаль для нахождения максимального из заданных n целых чисел (1<=n<=9). Программа должна удовлетворять следующим требованиям:

  • она должна начинаться со строки 
    program maximum (input, output);

  • программа должна зарезервировать в памяти место ровно для n целочисленных переменных. Имена этих переменных должны быть взяты из первых n букв латинского алфавита (a, b, c, d, e, f, g, h, i, j). Значения для всех этих переменных должны быть прочитаны одним вызовом процедуры readln;

  • кроме вызова процедуры writeln, в оставшейся части программы разрешается использовать только операторы if then else. Логическим условием в каждом из операторов должно быть строгое неравенство (< или>) с двумя целочисленными переменными, без скобок;

  • в программе должна быть использована ровно одна пара операторных скобок begin end, обозначающая начало и конец основной программы;

  • в программе должно быть использовано ровно три точки с запятой:
    ·после заголовка программы;
    ·после объявления переменных;
    ·после вызова процедуры readln;

  • не должно быть избыточных сравнений переменных. Например, если в процессе выполнения программы стало ясно, что переменная a не может быть максимумом, эта переменная не должна более сравниваться;

  • программа должна компилироваться и выполняться. Результатом работы программы для введенных n целых чисел должно быть напечатанное в отдельной строке максимальное из них.

  • программа не должна содержать иных конструкций Паскаля, кроме перечисленных выше.

Входные данные находятся в текстовом файле META.IN, единственная строка которого определяет значение n. 

Выходные данные
помещаются в текстовый файл MAXIMUM.PAS, содержащий программу на языке Паскаль, которая находит максимум из n чисел.

Например:

META.IN

3

MAXIMUM.PAS
program maximum(input,output);
i a,b,c: integer;
begin 
    readln(a,b,c);
    if a>b then 
      if a>c then
        writeln(a)
      else
        writeln(c)
    else
    if c<b then
      writeln(b) 
    else
      writeln(c)
end.