Попалась на глаза задача-шутка.
Требуется вывести на экран (или в текстовый файл) таблицу синусов для целых значений углов в градусах от 0 до 90 с заголовком «угол» и «синус».
Прямо скажем, задание для восьмиклассников на уроке информатики.
Но добавлены три смешных ограничения:
а) внутри текстовых констант нельзя указывать пробелы явно;
б) таблица должна начинаться с 50-го столбца;
в) весь вывод должен быть записан единственным оператором.
Собственно это пример из сборника задач Фролова и Олюнина, который демонстрирует возможности вывода на PL/1 (и, разумеется, на Коболе, откуда и были взяты подобные возможности).
Первое ограничение имеет практический смысл, так как иногда сходу трудно сосчитать число пробелов в константах. Остальные ограничения, похоже, нужны лишь для усложнения решения. Но, тем не менее, на PL/1-KT решение:
таблица_синусов: проц главная;
опс i точное;
писать в_форме('─'(20),'│угол│','синус','│','─'(20))(2(col(50),т),2(п(4),т))
(('│',i,'│',sind(i),'│','─'(20) цикл i=0 до 90))(col(50),т,ч(3),п(1),т,ч(12,8),п(1),т,col(50),т);
конец таблица_синусов;
или то же с привычными английскими ключевыми словами:
tabl_sin: proc main;
dcl i fixed;
put edit('─'(20),'│угол│','синус','│','─'(20))(2(col(50),a),2(x(4),a))
(('│',i,'│',sind(i),'│','─'(20) do i = 0 to 90))(col(50),a,f(3),x(1),a,f(12,8),x(1),a,col(50),a);
end tabl_sin;
Результат:
────────────────────
│угол│ синус │
────────────────────
│ 0 │ 0.00000000 │
────────────────────
│ 1 │ 0.01745240 │
────────────────────
│ 2 │ 0.03489949 │
────────────────────
│ 3 │ 0.05233595 │
……
────────────────────
│ 87 │ 0.99862950 │
────────────────────
│ 88 │ 0.99939080 │
────────────────────
│ 89 │ 0.99984770 │
────────────────────
│ 90 │ 1.00000000 │
────────────────────
Чуть сжульничал – для красивости таблицы набил в FAR в константах вертикальную и горизонтальную черту как alt+179 и alt+196, но в остальном все по заданию.
А вот получится ли так же компактно и просто на других языках?