НА СМЕНУ ФОКАЛУ

У владельцев бытового компьютера «БК-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 мкФ, тип резистора любой.

Б. САНИН (Москва).

Performed by © gid, 2012-2022.