Вывод точек со случайными координатами |
Главная / ЭКВМ / Программы для ЭКВМ / Демонстрации |
Работа генератора случайных чисел в советских программируемых микрокалькуляторах МК-61 и МК-52 имела много недостатков. Количество выдаваемых чисел до повторения было ограничено всего несколькими сотнями, а последовательность повторялась после каждого выключения и включения питания. Это было связано с жестким ограничением на объем памяти в этих калькуляторах. В современных ЭКВМ вычислительных ресурсов значительно больше, имеется также энергонезависимая память, что позволило реализовать более удачный генератор случайных чисел. Попробуем визуально оценить характеристики генератора ЭКВМ. Для этого напишем программу, которая вычисляет и устанавливает точку на графическом экране по координатам Y=64·ξi; X=128·ξi+1, где ξ - очередное случайное число, получаемое по команде "К СЧ". Например, для мультипликативных генераторов, входящих в большинство компиляторов языков высокого уровня, такие точки будут расположены на параллельных линиях. Программа "Звездное небо" - вывод точек со случайными координатами
Инициализация регистров перед запуском программы не требуется. Программа достаточно проста. В 00-06 происходит запись констант в регистры RA и RB. В 07-10 очистка графического экрана. В 11-15 запись количества точек в регистр R0. В 16-26 расположен цикл в котором вычисляются координаты и вызывается функция вывода точки через регистр R9011. В 27-34 полученная картинка выводится на экран ЭВМ и ожидается нажатие любой клавиши. После нажатия программа останавливается оператором С/П, для повторного запуска следует нажать "В/О", "С/П".
Для вывода одной и той же последовательности псевдослучайных чисел перед каждым запуском программы в регистр R9046 нужно записать выбранное число. Это позволит при каждом запуске программы получать одну и ту же картину распределения. Быстродействие ЭВМС помощью этой программы можно оценить не только качество генератора случайных чисел, но и быстродействие ЭВМ. Приведенная программа выводит тысячу точек приблизительно за 8 сек. Сравним это значение с быстродействием современных зарубежных калькуляторов. В [1] приведен аналогичный пример для графического калькулятора TI-89/92/92 Plus. Почти каждый учащийся программированию на языке BASIC наверняка готовил программу "звездное небо" - построение множества точек со случайными координатами в окне графики с декартовыми координатами. Эта программа является хорошим средством освоить построение точек и оценить, насколько случайными являются числа генератора случайных чисел, который используется для задания координат точек. Один из простых вариантов этой программы показан на рис.... Кроме случайных точек, программа строит прямоугольник из 4 отрезков прямых линий. :prnd() :Prgm :setMode("Graph","FUNCTION") :ClrDraw :PxlLine 0,0,0,238 :PxlLine 0,238,100,238 :PxlLine 100,238,100,0 :PxlLine 100,0,0,0 :For i, 1, 1000 :PxlOn int(100*rand()),int(239*rand()) :EndFor :EndPrgm Эта программа настолько же проста, сколь и эффектна. Не стоит, однако, путать эффектность программы с ее эффективностью, ибо свои 1000 случайных точек программа строит довольно медленно - около минуты. Можно заметить, что программа для калькулятора TI-89/92 написана на диалекте языка BASIC, который является интерпретируемым. Однако программа в системе команд МК тоже выполняется на микроконтроллере этой ЭКВМ в режиме эмуляции. Оба этих языка применяются для написания программ пользователя, каждый для своей вычислительной платформы, так что условия можно считать равными. Отрисовка четырех линий по краям поля незначительно увеличит время работы ЭКВМ и может не приниматься во внимание. Хотя можно ввести аналогичный блок в программу при помощи обращения к регистру функции рисования линии R9012. Можно воспользоваться и функцией вывода рамки R9014. Отсюда можно сделать вывод, что при выполнении пользовательских графических программ ЭКВМ "Электроника МК" в несколько раз эффективнее по быстродействию, чем современный зарубежный графический калькулятор TI-89/92. Литература
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |