таблица синусов
От: кт  
Дата: 09.12.21 18:23
Оценка:
Попалась на глаза задача-шутка.
Требуется вывести на экран (или в текстовый файл) таблицу синусов для целых значений углов в градусах от 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, но в остальном все по заданию.
А вот получится ли так же компактно и просто на других языках?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.