pascal
«99 бутылок пива» на PERQ Pascal
Мои читатели знают, что последние несколько дней я возился с эмулятором PERQ. PERQ — это персональный компьютер, выпускавшийся в начале
Последние пару дней я пытался написать на тамошнем «Паскале» «песню о пиве», но поскольку на моём ноутбуке потребовалась двойная эмуляция, скорость работы встроенного в систему редактора была ниже плинтуса. Писать было очень сложно, а править ошибки — ещё сложнее. Тем не менее, я справился.
79. PERQ Pascal — диалект некогда широко распространённого в учебных учреждениях языка «Паскаль». Компилируемый язык,
Не думаю, что
{$MESSAGE Written by Evgeny Stepanischev, 2024}
PROGRAM BOTTLES_OF_BEER;
const
MAX_BOTTLES = 99;
Function BotStr(count: integer): string;
begin
if count = 1 then
BotStr := ' bottle of beer'
else
BotStr := ' bottles of beer';
end;
Procedure SingSong;
var
i: integer;
b: string;
begin
for i := MAX_BOTTLES downto 1 do
begin
b := BotStr(i);
writeln(i:0, b, ' on the wall,');
writeln(i:0, b, '!');
writeln('Take one down, pass it around,');
if i > 1 then
begin
b := BotStr(i-1);
writeln((i - 1):0, b, ' on the wall!')
end
else
writeln('No more bottles of beer on the wall!');
writeln;
end;
writeln('No more bottles of beer on the wall,');
writeln('No more bottles of beer!');
writeln('Go to the store and buy some more,');
b := BotStr(MAX_BOTTLES);
writeln(MAX_BOTTLES:0, b, ' on the wall!');
end;
begin
SingSong;
end.Из того, с чем мне пришлось столкнуться, когда я писал программу.
Больше всего ушло времени на ошибку Error 116: Error in type of standard procedure parameter. Речь тут, вроде, идёт о том, что я
Оказалось, что вызов функции BotStr нельзя напрямую поместить во writeln, надо обязательно использовать промежуточную переменную (у меня это b). Учитывая, что скорость работы с эмулятором не позволяет быстро попробовать разные варианты, пришлось изрядно поскрипеть мозгом, чтобы дойти до сути.
Вторая вещь оказалась проще для исправления. В этом диалекте «Паскаля» вывод чисел происходит с отступом. В моём случае выглядит это неаккуратно. К счастью убрать его просто — нужно добавить параметр :0 для каждого числа, выводимого на экран.
import pyautogui, time
FILE_PATH = '99.pas'
time.sleep(5)
with open(FILE_PATH, 'r') as file:
for line in file:
for x in line.lstrip():
pyautogui.typewrite(x)
time.sleep(.6)
time.sleep(1)Вчера ночью всё наконец запустилось и я смог посмотреть как работает моя первая (и наверняка единственная) программа для PERQ.
Кстати, вот ещё одна интересная деталь.
Чтобы получить исполняемый файл, надо исходный код программы сначала скомпилировать командой COMPILE в объектный файл (.SEG), потом скомпоновать командой LINK в исполняемый (.RUN). У обеих команд есть параметр, где указывается имя файла, с которым мы работаем.
Но если мы открывали на редактирование
«Трубо Паскакаль»
В конце
Это был хоть и случайный, но удачный выбор, — позже появилась совершенно гениальная среда разработки «Делфи», где я заработал немало масла на свой хлеб. Кроме того, в Университете всё программирование преподавалось на Паскале, очень выручило, что я знал тогда этот язык.
До «Делфи» разработка происходила в среде «Турбо Паскаль», глядя в синие окошки которой, я провёл
Поэтому, наверное, понятно, почему когда я в комментариях к одной из статей на «Хабре» увидел упоминание пародийной программы «Трубо Паскакаль», не смог пройти мимо.
Программа поверхностно имитирует «Турбо Паскаль», где в меню спрятаны разные приколюхи. Если вы
Не «Пайтоном» единым
Писал недавно про засилье «Пайтона» — там, где надо изобразить компьютерную программу, сейчас в основном используют в качестве основы именно этот язык, исключения встречаются всё реже.
И вот на днях, на конференции «Казан Диджитал Вик» встретил одно из приятных исключений — на одном из участников гонок на беспилотных миниавтомобилях была футблока
Это единственный язык, кстати, который я прочно забыл. Непонятно почему — писал на нём всё детство, а в Университете делал на «Делфи» (это диалект) несколько дипломных работ за деньги.
То есть плотненько работал с ним несколько лет, но когда два года назад поковырялся в нём в рамках решения одной из задач для программисткого