Правец 16.

Сегодня на просторах Интернета встретил фотографию компьютера «Правец 16» и вспомнил, что в далеком 1992 году начинал писать на нем свою первую коммерческую программу.

Фото Правец 16
Правец 16

Персональный компьютер «Правец 16»  — программный и аппаратный аналог IBM PC производился с 1984 по 1988 год в болгарском городе Правец. Сейчас я понимаю, что это был компьютер снятый с производства 4 года назад, но тогда для меня это был вполне нормальный компьютер не хуже тех, что стояли в университете для обучения студентов.

Интересный факт. Город Правец — это родина первого секретаря болгарской компартии Тодора Живкова, который при выборе места для завода по производству компьютеров выбрал своё родное село.  Впоследствии село стало городом. Так, что можно считать, что эти компьютеры производились в деревне.

Постижение рекурсии.

К третьему курсу университета, я как и положено студенту, считал, что знаю о программировании все и любую программу могу написать без проблем. Так вот на третьем курсе у нас появился предмет «Архитектура ЭВМ». Все лекции я обычно пропускал (не знаю как сейчас, а тогда была лафа в виде свободного посещения лекций), а с этим предметом обстоятельства сложились так, что мне пришлось сидеть на лекциях по независящим от меня причинам. К моему удивлению я обнаружил, что знаю о программировании далеко не все. Особенно поразил меня пример рекурсии.
Как написать программу для подсчета факториала числа n. Классический способ заключается в использовании цикла. Получается вот такая программка на языке Pascal.


function Fact( n : Integer) : Integer ;
var
  i : Integer ;
  f : Integer ;
begin
  f:=1 ;
  for i:=1 to n do  f:=f*i ;
  Fact:=f ;
end ;

Эта программа конечно работает, но можно написать более красивую программу с использованием рекурсии.


function Fact( n : Integer) : Integer ;
begin
  if n=0 then Fact:=1
         else Fact:=n*Fact(n-1) ;
end ;

Вторая программа позволяет понять, что в программировании есть много интересных моментов и программа это не просто сборник циклов и операторов ветвления. Для того что бы написать программу надо, себе четко представлять, как компьютер будет ее выполнять. К сожалению далеко не все программисты представляют себе это. В итоге на свет появляются чудовищно не эффективные программы, это отдельная тема для обсуждения.

Первая программа.

Как я уже писал ранее нас допустили до компьютеров ДВК-2, и стали обучать программированию. С этой целью класс был разбит на группы по 3-4 человека и каждому такому коллективу было дано задание написать свою программу на Basic. Моей группе досталась программа про три сосуда различного объема с жидкостью. Жидкость можно было переливать из одного сосуда в другой с непонятной целью (цель на самом деле была понятная, но сейчас я не могу ее вспомнить). В голову одного из членов нашего коллектива пришла «гениальная» мысль — сделать переливание воды в графическом режиме с изображением сосудов и переливающейся воды. Учитывая, что дисплей был алфавитно-цифровой, задача была не для слабонервных.

Двое из четырех членов нашего коллектива не проявляли интереса к программированию, поэтому фактически мы писали эту программу вдвоем с тем человеком, которому пришла в голову мысль о «графическом» интерфейсе. В результате наших трудов на свет появилась работающая (причем без глюков !) программа по переливанию жидкости между тремя сосудами.

Листинг этой программы был длинной порядка двух метров. Для того времени и возможностей ДВК-2 это была крутая программа, которой я по праву горжусь до сих пор.

Знакомство с ПК.

Осенью 1986 года наш класс наконец допустили к персональным компьютерам. До этого как я уже описывал мы занимались программированием на калькуляторах.  Первым компьютером который я увидел и потрогал в своей жизни был ДВК-2.

ДВК-2
ДВК-2

ДВК расшифровывается, как диалоговый вычислительный комплекс, а цифра два обозначает, что это уже вторая версия этого комплекса. Этот компьютер был советским аналогом PDP-11 фирмы DEC. В качестве устройства отображения информации использовался алфавитно-цифровой терминал. Для хранения информации использовались две 8-ми дюймовые дискеты (жесткого диска не было !!!).

Вот на таком чуде техники, я начал писать программы для компьютеров. В качестве языка программирования использовался Basic. С современной точки зрения самым необычным в ДВК-2 (как наверное и в других компьютерах того времени) является способ включения. Для включения компьютера надо было вместо одной кнопки нажать несколько переключателей в определенном порядке и с интервалом во времени.

Первое понимание.

Как я уже рассказывал в предыдущей записи мой путь в программирование начался с микрокалькулятора «Электроника МК-54». Этот калькулятор для вычислений использовал польскую нотацию. Для выполнения арифметических действий над числами использовался стек.  Например, сложение двух чисел происходило следующим образом:

  1. Вводим первое число.
  2. «Проталкиваем» число в стек.
  3. Вводим второе число.
  4. Вводим требуемую операцию, в данном примере сложение.
  5. Первое и второе число исчезают, из стека, а на его вершине появляется результат.

Как в такой системе производить операции над числами я освоил сразу, а вот всю мощь и прелесть стека оценить сразу не смог. Понимание того, как устроен стек, я считаю своим действительно первым пониманием в программировании. Как это не печально, но произошло оно на экзамене по информатике. Я получил 4, но зато узнал как работает стек. Преподаватель задал мне вопрос: «Как выполнить на калькуляторе (2+10)*(15-3) без использования регистров памяти ?» Если Вы не можете это сделать, то Вы так же, как и я 25 лет назад не понимаете, как работает стек !