Здравствуйте, кт, Вы писали:
кт>Попалась на глаза задача-шутка.
кт>Требуется вывести на экран (или в текстовый файл) таблицу синусов для целых значений углов в градусах от 0 до 90 с заголовком «угол» и «синус».
кт>Прямо скажем, задание для восьмиклассников на уроке информатики.
кт>Но добавлены три смешных ограничения:
кт>а) внутри текстовых констант нельзя указывать пробелы явно;
кт>б) таблица должна начинаться с 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;
кт>А вот получится ли так же компактно и просто на других языках?
На разных языках получится по разному, даже на одном есть тьма вариантов.
#!/usr/bin/lua
function F(...) return string.format(...) end
function sin(x) return math.sin(x/180*math.pi) end
function gen_table(p)
local res,append={}
append=function(x) table.insert(res,x) end
append(p.line) append(p.header) append(p.line)
p.walk(function(i) append(p.row(i)) append(p.line) end)
return table.concat(res,"\n")
end
V,H='|','+----+'..string.rep('-',13)..'+'
print(gen_table{
header=F("%51sугол%s%14s%5s",V,V,'синус',V), line=F("%70s",H),
row=function(i) return F("%51s%3d%2s%12.8f%2s",V,i,V,sin(i),V) end,
walk=function(row) for i=0,90 do row(i) end end,
})
| output |
| +----+-------------+
|угол| синус |
+----+-------------+
| 0 | 0.00000000 |
+----+-------------+
| 1 | 0.01745241 |
+----+-------------+
| 2 | 0.03489950 |
+----+-------------+
| 3 | 0.05233596 |
+----+-------------+
| 4 | 0.06975647 |
+----+-------------+
| 5 | 0.08715574 |
+----+-------------+
| 6 | 0.10452846 |
+----+-------------+
| 7 | 0.12186934 |
+----+-------------+
| 8 | 0.13917310 |
+----+-------------+
| 9 | 0.15643447 |
+----+-------------+
| 10 | 0.17364818 |
+----+-------------+
| 11 | 0.19080900 |
+----+-------------+
| 12 | 0.20791169 |
+----+-------------+
| 13 | 0.22495105 |
+----+-------------+
| 14 | 0.24192190 |
+----+-------------+
| 15 | 0.25881905 |
+----+-------------+
| 16 | 0.27563736 |
+----+-------------+
| 17 | 0.29237170 |
+----+-------------+
| 18 | 0.30901699 |
+----+-------------+
| 19 | 0.32556815 |
+----+-------------+
| 20 | 0.34202014 |
+----+-------------+
| 21 | 0.35836795 |
+----+-------------+
| 22 | 0.37460659 |
+----+-------------+
| 23 | 0.39073113 |
+----+-------------+
| 24 | 0.40673664 |
+----+-------------+
| 25 | 0.42261826 |
+----+-------------+
| 26 | 0.43837115 |
+----+-------------+
| 27 | 0.45399050 |
+----+-------------+
| 28 | 0.46947156 |
+----+-------------+
| 29 | 0.48480962 |
+----+-------------+
| 30 | 0.50000000 |
+----+-------------+
| 31 | 0.51503807 |
+----+-------------+
| 32 | 0.52991926 |
+----+-------------+
| 33 | 0.54463904 |
+----+-------------+
| 34 | 0.55919290 |
+----+-------------+
| 35 | 0.57357644 |
+----+-------------+
| 36 | 0.58778525 |
+----+-------------+
| 37 | 0.60181502 |
+----+-------------+
| 38 | 0.61566148 |
+----+-------------+
| 39 | 0.62932039 |
+----+-------------+
| 40 | 0.64278761 |
+----+-------------+
| 41 | 0.65605903 |
+----+-------------+
| 42 | 0.66913061 |
+----+-------------+
| 43 | 0.68199836 |
+----+-------------+
| 44 | 0.69465837 |
+----+-------------+
| 45 | 0.70710678 |
+----+-------------+
| 46 | 0.71933980 |
+----+-------------+
| 47 | 0.73135370 |
+----+-------------+
| 48 | 0.74314483 |
+----+-------------+
| 49 | 0.75470958 |
+----+-------------+
| 50 | 0.76604444 |
+----+-------------+
| 51 | 0.77714596 |
+----+-------------+
| 52 | 0.78801075 |
+----+-------------+
| 53 | 0.79863551 |
+----+-------------+
| 54 | 0.80901699 |
+----+-------------+
| 55 | 0.81915204 |
+----+-------------+
| 56 | 0.82903757 |
+----+-------------+
| 57 | 0.83867057 |
+----+-------------+
| 58 | 0.84804810 |
+----+-------------+
| 59 | 0.85716730 |
+----+-------------+
| 60 | 0.86602540 |
+----+-------------+
| 61 | 0.87461971 |
+----+-------------+
| 62 | 0.88294759 |
+----+-------------+
| 63 | 0.89100652 |
+----+-------------+
| 64 | 0.89879405 |
+----+-------------+
| 65 | 0.90630779 |
+----+-------------+
| 66 | 0.91354546 |
+----+-------------+
| 67 | 0.92050485 |
+----+-------------+
| 68 | 0.92718385 |
+----+-------------+
| 69 | 0.93358043 |
+----+-------------+
| 70 | 0.93969262 |
+----+-------------+
| 71 | 0.94551858 |
+----+-------------+
| 72 | 0.95105652 |
+----+-------------+
| 73 | 0.95630476 |
+----+-------------+
| 74 | 0.96126170 |
+----+-------------+
| 75 | 0.96592583 |
+----+-------------+
| 76 | 0.97029573 |
+----+-------------+
| 77 | 0.97437006 |
+----+-------------+
| 78 | 0.97814760 |
+----+-------------+
| 79 | 0.98162718 |
+----+-------------+
| 80 | 0.98480775 |
+----+-------------+
| 81 | 0.98768834 |
+----+-------------+
| 82 | 0.99026807 |
+----+-------------+
| 83 | 0.99254615 |
+----+-------------+
| 84 | 0.99452190 |
+----+-------------+
| 85 | 0.99619470 |
+----+-------------+
| 86 | 0.99756405 |
+----+-------------+
| 87 | 0.99862953 |
+----+-------------+
| 88 | 0.99939083 |
+----+-------------+
| 89 | 0.99984770 |
+----+-------------+
| 90 | 1.00000000 |
+----+-------------+
|
| |