НА СМЕНУ ФОКАЛУ
У владельцев бытового компьютера «БК-0010» сейчас в ходу три языка программирования. Во-первых, Фокал. Во-вторых, Бейсик, специально разработанный в Вильнюсе для этой машины. В-третьих, Бейсик, используемый в компьютере «ДВК-1», несколько адаптированный, чтобы на нём можно было писать программы для «БК-0010».
Каждый из этих языков имеет свои преимущества и недостатки. Попробую кратко их охарактеризовать.
Поскольку Фокал хранится (или, как говорят специалисты, зашит) в постоянной памяти компьютера, вы можете использовать почти всю оперативную память машины, отведённую для программиста, размещая в ней текст программы и результаты расчёта. Недостаток Фокала в том, что программы, написанные на этом языке, выполняются не очень быстро. В таком случае принято говорить, что данный язык программирования медленный. Практически отсутствует программное обеспечение на Фокале: для наиболее часто встречающихся расчётов нет стандартных программ, которые написаны на других языках программирования, например на Бейсике.
Бейсик-ДВК хорош тем, что программы, разработанные для ЭВМ «ДВК-1», практически без изменений можно переносить на «БК-0010». Чтобы машина смогла понимать этот язык, необходимо записать его в оперативную память, воспользовавшись магнитофоном. Соответственно уменьшается свободный объём памяти, отведённый для программиста, так называемое ОЗУ пользователя. Этот вариант Бейсика имеет весьма скромные возможности. Один из существенных недостатков - отсутствие средств машинной графики. Пользуясь его командами, трудно вывести на экран даже рассчитанную кривую, не говоря о более сложных рисунках.
Вильнюсская версия Бейсика для «БК-0010» удачно сочетает в себе многие преимущества различных диалектов этого языка. Широко используются возможности бытового компьютера: можно создавать цветные картинки, вычерчивать графики по результатам расчётов. Кроме того, скорость выполнения программ почти в десять раз выше, чем при программировании на Фокале. Как и в случае Бейсика-ДВК, недостаток заключается в уменьшении объёма оперативной памяти пользователя.
По-моему, избавиться от всех перечисленных недостатков несложно. Для этого версию Бейсика, обладающую достаточно широкими возможностями, конструкторы машины должны поместить непосредственно в постоянную память компьютера «БК-0010».
А. БАТЮК (г. Москва).
СЛУЧАЙНЫ ЛИ «СЛУЧАЙНЫЕ» ЧИСЛА?
Мне не приходилось встречаться с человеком, который бы жаловался, что его компьютер неправильно вычисляет синусы или логарифмы. Столкнувшись с ЭВМ новой марки, можно не ломать голову над тем, по какому алгоритму она вычисляет синус, - важно ли это, если результат вычисления нас полностью удовлетворяет?
Но если ваша программа использует генератор псевдослучайных чисел, будьте внимательны! Среди многочисленных генераторов, имеющихся в ЭВМ различных типов, очень мало хороших. Остальные порождают числа, обладающие свойствами, весьма далёкими от случайных.
В числе команд Фокала, стандартного языка «БК-0010», есть команда FRAN, по которой машина выдаёт псевдослучайные числа, равномерно распределённые на отрезке -1≤х≤1. Период их последовательности равен 215=32768. Это значит, что, выдав цепочку из 215 чисел, генератор псевдослучайных чисел повторяет её вновь и вновь. Столь короткий период - большое неудобство. Легко представить себе выражение лица человека, написавшего программу для моделирования случайных блужданий броуновской частицы, когда он обнаруживает, что уже через час частица принялась бегать по раз и навсегда проложенному маршруту.
Короткий период не единственный недостаток генератора FRAN. Предположим, вам понадобилось двумерное случайное поле - случайные точки (х, у), равномерно распределённые в квадрате -1≤х≤1, -1≤y≤1. Для этого вызываем два псевдослучайных числа: первое будет координатой х, второе - у. Точки с такими координатами будем выводить на экран. Вместо ожидаемого равномерного заполнения получаем вовсе не случайный узор:
Алгоритм, который порождает такие удивительные «случайные» числа, очень близок к тому, что описаны в книге Д. Кнута «Искусство программирования для ЭВМ». К сожалению, разработчики Фокала не вняли предупреждению автора книги, опытного программиста: такие алгоритмы хороши для генерации псевдослучайных последовательностей нулей и единиц, но плохи для генерации псевдослучайных десятичных чисел!
Помимо Фокала, я пишу программы для своего компьютера «БК-0010» на языке Бейсик. Для этого я загружаю в компьютер с магнитофонной кассеты разработанную в Вильнюсе программу длиной около девяти килобайт. Здесь есть генератор псевдослучайных чисел RND. Выдаваемые им числа равномерно располагаются в промежутке от нуля до единицы в соответствии с алгоритмом: rn=(а*rn-1) mod m; а = 216+3 = 65539; m = 231; r0 = 1; RNDn = rn/m. Этот алгоритм носит название линейного конгруэнтного метода и известен как одни из самых распространённых.
RND не так прост, как FRAN. Он имеет большой период 229 ≈ 5*108, даёт прекрасное равномерное распределение точек в единичном квадрате. Однако он может привести и к конфузу, как случилось с печально известным генератором псевдослучайных чисел RANDU, включённым в середине 60-х годов фирмой ИБМ в библиотеку научных подпрограмм для популярной машины IBM-360, аналога ЕС ЭВМ: когда пытаются использовать тройки последовательных псевдослучайных чисел для генерации случайных точек в единичном кубе, оказывается, что все они лежат на пятнадцати равноотстоящих параллельных плоскостях. Между этими плоскостями нет ни одной точки! (Неудачные свойства этого генератора связаны с выбором множителя а=65539; точно такой же генератор, но с а=69069 считается вполне хорошим.)
В одной из распространённых версий Бейсика, так называемом Бейсике-ДВК, также есть генератор псевдослучайных чисел. Московские энтузиасты «БК-0010» адаптировали эту версию для своего компьютера. Используемый здесь генератор псевдослучайных чисел сочетает недостатки двух генераторов, обсуждавшихся выше. В его основу также положен линейный конгруэнтный алгоритм с параметрами: а = 28+3 = 259, m = 215. В результате у возникающей последовательности чисел получается очень короткий период 213 = 8192. Кроме того, есть у этих чисел другие особенности, которые не позволяют назвать их случайными. Например, для каждой тройки соседних чисел a, b, c выражение c - 6b + 9а всегда равно целому числу. (Таков же, кстати, и генератор RANDU.)
Похоже, что, когда речь идёт о случайных числах, человек, использующий ЭВМ, не может положиться на мастерство её разработчиков! Приходится каждый раз интересоваться: а что за алгоритм порождает в ней псевдослучайные числа? К сожалению, разработчики об этом обычно умалчивают...
М. МАКСИМОВ (г. Москва).
МАЛЕНЬКИЕ ХИТРОСТИ
Я занимаюсь цифровой обработкой изображений, поэтому мне часто необходимо делать снимки с экрана телевизора, который подключён к «БК-0010». Прежде чем стали получаться контрастные фотографии, пришлось много экспериментировать. Снимаю я камерой «Зенит», со штатива и в затемнённой комнате, - при этом устраняются посторонние блики на экране. Объектив - «Волна 9», плёнка - 32 или 65 единиц ГОСТ. Диафрагмирование - 5.6-8 с выдержкой от руки 3-4 секунды для 32 единиц или 1-2 секунды для 65 единиц. Проявитель стандартный, время проявления - то, что указано на коробочке с плёнкой. Снимки теперь получаются превосходные.
И. ЛЬВОВ (Москва).
О том, что к «БК-0010» можно подключить любой телевизор, цветного или чёрно-белого изображения, знает, наверное, каждый. Интересно, что для этого не требуется сложное согласующее устройство. Не имеет также значения, есть ли у телевизора видеовход. Однако, если его нет, вам понадобится помощь работника телеателье или знакомого радиолюбителя. Попросите подключить оплётку кабеля «БК-0010» к «земле» телевизора, а центральную жилу - к входу видеоусилителя через несложную приставку, изображенную на рисунке. Наилучшее качество изображения получают, поворачивая ручку потенциометра. Ёмкость конденсатора можно варьировать от 20 до 1000 мкФ, тип резистора любой.
Б. САНИН (Москва).