KRIEGSSPIELE!
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Матчасть диванного танкиста

Страница 3 из 6 Предыдущий  1, 2, 3, 4, 5, 6  Следующий

Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Янв 18, 2023 12:26 am

10/86
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

От Москвы до свмых до окраин - так словами популярной песни можно сказать о городах, откуда приходят письма, публикуемые в разделе "Человек и компьютер". Однако, если пробежать глазами подписи статей, помещенных в начале его нынешнего выпуска, то может показаться, будто добрая традиция нарушена. Все авторы этих статей - москвичи. Более внимательный взгляд обнаружит, что и пишут-то они на одну тему - про бытовой компьютер "БК-0010".
Совпадения объясняются просто. Москвичи, имеющие этот компьютер, наладили между собой творческие связи, образовали своеобразный клуб. Его представители и выступают в нынешнем выпуске раздела - делятся плодами своего увлечения, опытом работы. Мы надеемся, что это не последняя их встреча на страницах журнала "Наука и жизнь". Трудно переоценить такую возможность создать свой круг общения.
Кстати говоря, до недавнего времени весь раздел представлял собой клуб владельцев программируемого микрокалькулятора "Электроника Б3-34". Несколько тысяч писем прислали они в редакцию за время существования раздела. Несколько сотен этих писем было опубликовано. В числе наиболее активных авторов - ленинградец В.В.Козлов и одессит А.И.Неклюдов, А.В.Мержеевский из Житомира и А.Н.Тулайкоа из Долгопрудного Московской области... Такие читатели заслуживают огромной благодарности. Их энтузиазм - одна из основных творческих сил нашего раздела.
Новое время - новые машины. Каждой из них могут быть посвящены страницы раздела "Человек и компьютер". Все зависит от эпистолярной активности читателей.

КОМПЬЮТЕР-МОДЕЛЬЕР
Все началось с того, что мама шутя спросила: "А вязать твоя БК может?". Оказалось, что за этим шуточным вопросом стоит серьезная задача построения двухцветных вязальных орнаментов. Расположение цветов в каждом из них должно удовлетворять двум условиям. Первое - ни в одном квадратном фрагменте орнамента 2*2 не должно быть сочетания петель типа "крестик". Если обозначить цифрой 0 нити одного цвета, а 1 - нити другого, то такие сочетания выразятся двумя левыми матрицами на приведенном рисунке. Второе условие - недопустимыми считаются сочетания одинаковых нитей, выраженные двумя правыми матрицами на том же рисунке. Орнаменты, удовлетворяющие двум этим условиям, удобны тем, что каждый ряд вяжется нитью одного цвета, а узор образуется из вытянутых петель предыдущего ряда другого цвета.

Матчасть диванного танкиста - Страница 3 86100510

Я решил, что программа будет выводить на экран орнамент в виде сочетаний светлых и темных квадратиков периодическими фрагментами. 4*4, 6*4, 8*6 и т.д. В этом прямоугольнике компьютер с помощью датчика псевдослучайных чисел рассеивает светлые и темные квадратики и проверяет условия. Если они выполняются, то весь орнамент выводится на экран, если нет - расчет повторяется. От варианта к варианту орнамент трансформируется сравнительно плавно. Я построил простой алгоритм, который позволяет проверить сразу оба условия с помощью функции F = 4*a11 + 8*a12 + a21 + 2*a22, где числа aij - элементы фрагмента 2*2 (нули или единицы; см. рисунок). Если F принимает значения 0, 6, 9 или 15, это значит, что условия не выполняются. Во всех остальных случаях фрагмент допустим.

Матчасть диванного танкиста - Страница 3 86100610

Программа получилась короткой и выполняется быстро - за несколько минут можно просмотреть более сотни орнаментов. Мама очень довольна и обещала связать мне к зиме "компьютерный" свитер.
П.КОНОПЛЕВ (Москва)

[ 0 МАЛЕНЬКИЕ ХИТРОСТИ
О том. что к "БК-0010" можно подключить любой телевизор, цветного или черно-белого изображения, знает, наверное, каждый. Интересно, что для этого не требуется сложное согласующее устройство. Не имеет также значения, есть ли у телевизора видеовход. Однако, если его нет, вам понадобится помощь работника телеателье или знакомого радиолюбителя. Попросите подключить оплетку кабеля "БК-0010" к "земле" телевизора, а центральную жилу - к входу видеоусилителя через несложную приставку, изображенную на рисунке. Наилучшее качество изображения получают, поворачивая ручку потенциометра. Емкость конденсатора можно варьировать от 20 до 1000 мкФ, тип резистора любой.

Матчасть диванного танкиста - Страница 3 86100710

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

НА СМЕНУ ФОКАЛУ
У владельцев бытового компьютера "БК-0010" сейчас в ходу три языка программирования. Во-первых, Фокал. Во-вторых, Бейсик, специально разработанный в Вильнюсе для этой машины. В-третьих, Бейсик, используемый в компьютере "ДВК-1", несколько адаптированный, чтобы на нем можно было писать программы для "БК-0010".

Каждый из этих языков имеет свои преимущества и недостатки. Попробую кратко их охарактеризовать.

Поскольку Фокал хранится (или, как говорят специалисты, зашит) в постоянной памяти компьютера, вы можете использовать почти всю оперативную память машины, отведенную для программиста, размещая в ней текст программы и результаты расчета. Недостаток Фокала в том, что программы, написанные на этом языке, выполняются не очень быстро. В таком случае принято говорить, что данный язык программирования медленный. Практически отсутствует программное обеспечение на Фокале: для наиболее часто встречающихся расчетов нет стандартных программ, которые написаны на других языках программирования, например на Бейсике.

Бейсик-ДВК хорош тем, что программы, разработанные для ЭВМ "ДВК-1", практически без изменений можно переносить на "БК-0010". Чтобы машина смогла понимать этот язык, необходимо записать его в оперативную память, воспользовавшись магнитофоном. Соответственно уменьшается свободный объем памяти, отведенный для программиста, так называемое ОЗУ пользователя. Этот вариант Бейсика имеет весьма скромные возможности. Один из существенных недостатков - отсутствие средств машинной графики. Пользуясь его командами, трудно вывести на экран даже рассчитанную кривую, не говоря о более сложных рисунках.

Вильнюсская версия Бейсика для "БК-0010" удачно сочетает в себе многие преимущества различных диалектов этого языка. Широко используются возможности бытового компьютера: можно создавать цветные картинки, вычерчивать графики по результатам расчетов. Кроме того, скорость выполнения программ почти в десять раз выше, чем при программировании на Фокале. Как и в случае Бейсика-ДВК, недостаток заключается в уменьшении объема оперативной памяти пользователя.

По-моему, избавиться от всех перечисленных недостатков несложно. Для этого версию Бейсика, обладающую достаточно широкими возможностями, конструкторы машины должны поместить непосредственно в постоянную память компьютера "БК-0010".
А.БАТЮК (г.Москва)

СЛУЧАЙНЫ ЛИ "СЛУЧАЙНЫЕ" ЧИСЛА?
Мне не приходилось встречаться с человеком, который бы жаловался, что его компьютер неправильно вычисляет синусы или логарифмы. Столкнувшись с ЭВМ новой марки, можно не ломать голову над тем, по какому алгоритму она вычисляет синус,- важно ли это, если результат вычисления нас полностью удовлетворяет?

Но если ваша программа использует генератор псевдослучайных чисел, будьте внимательны! Среди многочисленных генераторов, имеющихся в ЭВМ различных типов, очень мало хороших. Остальные порождают числа, обладающие свойствами, весьма далекими от случайных.

В числе команд Фокала, стандартного языка "БК-0010", есть команда FRAN, по которой машина выдает псевдослучайные числа, равномерно распределенные на отрезке -1<=x<=1. Период их последовательности равен 2**15=32768. Это значит, что, выдав цепочку из 2**15 чисел, генератор псевдослучайных чисел повторяет ее вновь и вновь. Столь короткий период - большое неудобство. Легко представить себе выражение лица человека, написавшего программу для моделирования случайных блужданий броуновской частицы, когда он обнаруживает, что уже через час частица принялась бегать по раз и навсегда проложенному маршруту.

Короткий период не единственный недостаток генератора FRAN. Предположим, вам понадобилось двумерное случайное поле - случайные точки (x,y), равномерно распределенные в квадрате -1<=х<=1, -1<=y<=l. Для этого вызываем два псевдослучайных числа: первое будет координатой x, второе - y. Точки с такими координатами будем выводить на экран. Вместо ожидаемого равномерного заполнения получаем вовсе не случайный узор:

Матчасть диванного танкиста - Страница 3 86100810

Алгоритм, который порождает такие удивительные "случайные" числа, очень близок к тому, что описаны в книге Д.Кнута "Искусство программирования для ЭВМ". К сожалению, разработчики Фокала не вняли предупреждению автора книги, опытного программиста: такие алгоритмы хороши для генерации псевдослучайных последовательностей нулей и единиц, но плохи для генерации псевдослучайных десятичных чисел!

Помимо Фокала, я пишу программы для своего компьютера "БК-0010" на языке Бейсик. Для этого я загружаю в компьютер с магнитофонной кассеты разработанную в Вильнюсе программу длиной около девяти килобайт. Здесь есть генератор псевдослучайных чисел RND. Выдаваемые им числа равномерно располагаются в промежутке от нуля до единицы в соответствии с алгоритмом: rn=(a*r[n-1]) mod m: а=2**16+3=65539; m=*2**31; r0=1; RNDn=rn/m. Этот алгоритм носит название линейного конгруэнтного метода и известен как один из самых распространенных.

RND не так прост, как FRAN. Он имеет большой период 2**29 ~ 5e8, дает прекрасное равномерное распределение точек в единичном квадрате. Однако он может привести и к конфузу, как случилось с печально известным генератором псевдослучайных чисел RANDU, включенным в середине 60-х годов фирмой ИБМ в библиотеку научных подпрограмм для популярной машины IBM-360, аналога ЕС ЭВМ: когда пытаются использовать тройки последовательных псевдослучайных чисел для генерации случайных точек в единичном кубе, оказывается, что все они лежат на пятнадцати равноотстоящих параллельных плоскостях. Между этими плоскостями нет ни одной точки! (Неудачные свойства этого генератора связаны с выбором множителя а=65539; точно такой же генератор, но с а=69069 считается вполне хорошим).

В одной из распространенных версий Бейсика, так называемом Бейсике-ДВК, также есть генератор псевдослучайных чисел. Московские энтузиасты "БК-0010" адаптировали эту версию для своего компьютера. Используемый здесь генератор псевдослучайных чисел сочетает недостатки двух генераторов, обсуждавшихся выше. В его основу также положен линейный конгруэнтный алгоритм с параметрами: а=2**8+3=259, m=2**15. В результате у возникающей последовательности чисел получается очень короткий период 2**13=8192. Кроме того, есть у этих чисел другие особенности, которые не позволяют назвать их случайными. Например, для каждой тройки соседних чисел a, b, c выражение c-6b+9a всегда равно целому числу. (Таков же, кстати, и генератор RANDU).

Похоже, что, когда речь идет о случайных числах, человек, использующий ЭВМ, не может положиться на мастерство ее разработчиков! Приходится каждый раз интересоваться: а что за алгоритм порождает в ней псевдослучайные числа? К сожалению, разработчики об этом обычно умалчивают...
М.МАКСИМОВ (г.Москва)

ПУЛЬТ ДЛЯ ИГРЫ
Я заметил, что язык программирования Фокал не позволяет вмешиваться в работу "Электроники БК-0010" без того, чтобы не прервать счет. Для инженерных или научных расчетов это не так страшно, а вот игры, требующие непрерывного управления, теряют динамичность, становятся скучными. Скажем, путник идет по многоярусному подземному лабиринту. Вдруг обвал - нужно скорее выбираться наверх. Разверзается пропасть - быстрее назад. Изготовился для прыжка страшный хищник - надо успеть прицелиться в него раньше, чем он прыгнет. Что же должен предпринять игрок, сидящий за компьютером, чтобы незамедлительно отреагировать на внезапно изменившуюся ситуацию?

Есть у "БК-0010" специальное устройство, называемое портом ввода-вывода. Название не случайно - устройство действительно напоминает морской порт, куда приходят и откуда отправляются по всему свету корабли. Через свой порт "БК-0010" может получать информацию от каких-либо внешних устройств или подавать им команды - словом, общаться с окружающим миром.

Из нескольких переключателей я собрал выносной пульт для подключения к порту. Переключатели можно брать любые. Важно только, чтобы они были без фиксаторов, то есть после каждого нажатия самостоятельно возвращались в исходное состояние. Обычно переключатель имеет три контакта. Из них нужно выбрать те два, которые разомкнуты, пока кнопка не нажата. Я соединяю разряды регистра вывода с разрядами регистра ввода, как показано на рисунке справа, а игровые программы составляю так, чтобы в моменты, допускающие вмешательство игрока, на регистре вывода устанавливалось состояние логической единицы, то есть, говоря попросту, на выходе компьютера возникало напряжение. Если теперь нажать на кнопку пульта, то напряжение через цепь регистр - кнопка - регистр попадет на соответствующий нажатой кнопке регистр ввода и изменит его текущее состояние. Обращаясь к регистру ввода, программа сразу же "заметит" изменения и отреагирует необходимым образом.

Матчасть диванного танкиста - Страница 3 86100910

Теперь ничто не помешает игроку, сидящему за компьютером, проявить свои лучшие качества. Сообразительность и быстрота реакции плюс надежность вычислительной техники - залог успеха в игре.
А.СОМОВ (Москва)

[ МАЛЕНЬКИЕ ХИТРОСТИ
Я занимаюсь цифровой обработкой изображений, поэтому мне часто необходимо делать снимки с экрана телевизора, который подключен к "БК-0010". Прежде чем стали получаться контрастные фотографии, пришлось много экспериментировать. Снимаю я камерой "Зенит", со штатива и в затемненной комнате,- при этом устраняются посторонние блики на экране. Объектив - "Волна 9", пленка - 32 или 65 единиц ГОСТ. Диафрагмирование - 5.6-8с выдержкой от руки 3-4 секунды для 32 единиц или 1-2 секунды для 65 единиц. Проявитель стандартный, время проявления - то, что указано на коробочке с пленкой. Снимки теперь получаются превосходные.
И.ЛЬВОВ (Москва) ]

КАЛЬКУЛЯТОР-СВАРЩИК
Если производственный процесс несложен, то вряд ли стоит привлекать для его автоматизации ЭВМ. Здесь уместнее использовать программируемые микрокалькуляторы "Электроника МК-46" и "Электроника МК-64". Есть у них гнезда для приема информации от нескольких датчиков (до семи), есть индикаторы отклонения принятой информации от допусковых величин. Можно обрабатывать эту информацию по введенной в микрокалькулятор программе, а результаты выводить на внешние устройства. "Электроника МК-64" имеет к тому же аналогово-цифровой преобразователь, стало быть, может принимать сигналы непрерывного характера. К "Электронике МК-46" такой преобразователь приходится подключать дополнительно.

... Идет сварка. В микрокалькулятор введена программа, которая вычисляет функцию y=y(x), описывающую желаемую форму сварного шва, и функцию z=z(t), задающую высоту сгорающего со временем электрода. Введен шаг перемещения электрода вдоль оси абсцисс Дx, время сварки в одной точке Дt, абсциссы начальной и конечной точек сварного шва x0 и xk, минимальная и максимальная величина тока сварки Jmin и Jmax. По команде от нажатия клавиши "Пуск" микрокалькулятор по значению x0 рассчитывает значение y0, выдает управляющие сигналы иа двигатели, которые перемещают электрод в исходное положение. Затем выдается сигнал, включающий источник тока на время Дt. По истечении этого времени источник тока отключается, к значению абсциссы прибавляется величина Дx, вычисляется новое положение электрода, по соответствующим сигналам от микрокалькулятора двигатели перемещают электрод в новое положение, и процесс повторяется. На каждом его шаге контролируется величина тока, вводимая в микрокалькулятор от соответствующего датчика. Если она выходит за пределы интервала между Jmm и Jmax, вырабатывается два управляющих сигнала: один отключает источник, другой включает табло "Авария". Если же режим сварки не нарушен, текущая координата сравнивается с xk, и, если они равны, источник тока отключается, и зажигается табло "Конец сварки". По ходу процесса выдаются сигналы также и на двигатель, который перемещает электрод в вертикальном направлении, обеспечивая его должную высоту.

Матчасть диванного танкиста - Страница 3 86101110

Сварка - лишь один из примеров подобного применения "Электроники МК-46" и "Электроники МК-64". Другие известные нам примеры - производство древесностружечных плит, гальваническое покрытие радиодеталей, контроль параметров зерна, регистрация расхода газа и др.
Е.КУЗНЕЦОВ, В.ОКСМАН (г.Зеленоград)

[ УЗЕЛКИ НА ПАМЯТЬ
Программируемые микрокалькуляторы "MK-61" и "МК-52", сохранив основные черты и систему команд "БЗ-34", обладают расширенными возможностями. Рассказ о них можно найти в 6/85 год. Среди изменений, которым подвергалась исходная модель "Б3-34", есть и такое, которое нельзя признать удачным. Речь идет о команде с кодом ГЕ, то есть о команде КИП^. В калькуляторах "БЗ-34", "МК-54", "МК-56" эта команда действовала как команда КИП0, не уменьшая при этом содержимого регистра 0. В новых моделях "МК-61" и "МК-52" добавился пятнадцатый регистр Е, но теперь стало невозможно использовать команду КИП^. так же, как в старых моделях. Предлагаю несколько вариантов ее замены. Фрагмент ИП0 ПЕ F() КИПЕ годится для калькуляторов новых марок почти во всех случаях. Нередко можно сократить число нажимаемых клавиш: ИП0 ПЕ x-y КИПЕ или ИП0 ПЕ КИПЕ. Вместо регистра Е подойдет любой другой от 7 до 9 и А, В, С, Д. Какой из фрагментов использовать в конкретном случае - зависит от того, насколько важно сохранить текущее состояние стека. Так, первый фрагмент уничтожает содержимое регистра предыдущего результата PX1. Второй переставляет на новые позиции числа из РХ и РY, а содержимое PZ безвозвратно теряется вместе с числом из PX1. Третий фрагмент также оставляет только числа из РX и РY, но сдвигает их в PZ и РТ.
А.БОЙКО (г.Москва) ]

ЧЕЛОВЕК И ТЕХНИКА
Вокзал. У дисплейного автомата для продажи билетов образовалась очередь. Пожилая дама не может справиться с автоматом. Она набирает цифру за цифрой, качает головой, стирает набранное, набирает снова...

За ее спиной волнуются: "Что, не выходит?"

Дама нервничает. Она стучит по автомату, потом робко взывает: "Алло!"

"Там же написано все, что вы должны сделать!" - бросает проходящий мимо железнодорожник.

Молодой человек пробирается из конца очереди к даме: "Видно, в ваши школьные годы не было политехнического обучения! Сейчас я вам продемонстрирую эффективное обслуживание населения!"

Юноша набирает цифру за цифрой, качает головой, стирает набранное, набирает снова... Наконец билет у него в руках.

"Смотрите! - торжествует он.- Вот мой билет до Ростока!"

"Это называется пролезть без очереди!" - возмущается кто-то.

Пожилая дама снова нажимает клавиши.

"Ну вот, вышло! Я все сделала абсолютно так же, как молодой человек!.. Но мне ведь нужно в Галле!! Что мне делать с этим билетом до Ростока?!"

Матчасть диванного танкиста - Страница 3 86101010
На экране дисплейного автомата для продажи железнодорожных билетов появляются занумерованные предложения (на рисунке их русские аналоги), выбор одного из которых указывается прикосновением к соответствующей цифровой клавише. Клавиша жестко закреплена, и цифра выложена на ней металлическими бляшнами. Допустив ошибку при вводе информации, можно стереть введенное прикосновением к клавише "ошибка". После этого опрос начинается сначала - со ввода кода города, до которого требуется билет.

В.КЛОПШТЕГ ("Берлинер Цайтунг", 24/25.05.86)

ЛЮБИТЕЛЯМ МУЗЫКИ
При переписывании музыкальных произведений с пластинок на магнитофонную ленту часто возникает проблема: как оптимально заполнить ленту? Бывает очень обидно, если переписываемое произведение не умещается до конца. Не будешь же переносить его на другую сторону ленты! А более короткое произведение уместилось бы. Вот и переписывай по нескольку раз.

Можно, правда, рассчитывать заполнение ленты заранее. Емкость кассеты известна, а время звучания музыки обозначено иа конверте грампластинки. Но очень уж утомительно складывать минуты и секунды, переводя в уме или на бумаге числа из шестидесятиричной системы счисления в десятиричную. Несложная программа, которую я написал, позволяет облегчить эту работу.

После ввода программы в калькулятор и перехода в режим вычислений нужно нажать клавиши В/0, С/П. На индикаторе появится нуль. Теперь можно вводить время - минуты и секунды, разделяя их клавишей ^ и заканчивая ввод нажатием клавиши С/П. После остановки калькулятора на индикаторе будет дробное число. Целая его часть покажет минуты, а то, что после запятой,- секунды. Программа позволяет и вычитать временные интервалы из суммы. Для этого нужно вычитаемые минуты и секунды вводить со знаком "минус".

Для перехода к новой порции вычислений надо вновь нажать В/0 и С/П.

Программа. 00. 6 01. 0 02. П4 03. Сх 04. П5 05. П6 06. С/П 07. ИП6 08. + 09. П6 10. Fx<0 11. 20 12. ИП4 13. + 14. П6 15. x-y 16. 1 17. - 18. БП 19. 28 20. ИП4 21. - 22. Fx>=0 23. 27. 24. П6 25. КИП5 26. F() 27. x-y 28. ИП5 29. + 30. П5 31. ИП6 32. 2 33. F10X 34. / 35. + 36. БП 37. 06.

Контрольный пример В/0 С/П 2 ^ 45 С/П "2.45" 3 ^ 30 С/П "6.15" 1 /-/ ^ 20 /-/ С/П "4.55".
С.ЧУЧАНОВ (г.Дружковка, Донецкая обл.)

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
Институт прикладной математики имени М.В.Келдыша АН СССР выпустил препринты Ю.Б.Котова "Программы элементарной статистики для микрокалькулятора "Б3-34" (#25, 1985г., 19стр.) и "Программы статистических критериев для микрокалькулятора "Б3-34" (#26, 1985г., 30стр.). Препринты этого института продаются в московских магазинах "Академкниги" и распространяются через Библиотеку АН СССР в порядке обмена.

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

Программы, приводимые в обеих брошюрах, отличают высокий научный уровень, культура программирования, единство стиля, который автор называет "дружественным". Работать по ним очень удобно. Программа сама подскажет оператору, что он должен сделать на том или ином шаге ее выполнения. Обрабатываемые числа вводятся вручную только в регистр X - все остальное берет на себя программа.

Есть у "дружественного" стиля и оборотная сторона: программы стали длиннее, медлительнее. К примеру, при вычислении среднего и дисперсии выборки каждое число обрабатывается за 9 секунд; программа "без удобств" сделала бы это втрое быстрее.

Инструкции к некоторым программам, приводимым в брошюрах, недостаточно четки. Алгоритм точного критерия проверки сопряженности признаков неверен. Однако в целом препринты представляют собой наиболее глубоко проработанные публикации статистических программ для микрокалькулятора "Б3-34" ]

ОПАСНЫЙ РЕЙС
Представьте: вы - капитан корабля, следующего на остров, расположенный в Саргассовом море. Главная опасность здесь - круглые плавучие острова водорослей, попасть в которые значит повредить винт.

Для прокладки курса вам понадобится миллиметровка. Порт назначения расположен в точке с координатами (0,0). По данным последней воздушной разведки, известно, что вокруг него имеется свободная от водорослей акватория диаметром шесть миль. Также известно, что плавучих островов всего три, каждый диаметром 18 миль. Где они в настоящий момент - неизвестно, однако компьютерная модель состояния моря показала, что центр каждого острова расположен не ближе чем в 12 милях от точки (0,0). Не исключено, что плавучие острова перекрываются.

В этой игре нельзя обойтись без помощника, который незаметно для вас должен ввести координаты центров плавучих островов, не нарушив условий, о которых говорилось выше. (Играя вдвоем, вы можете стать помощниками друг для друга). Пункт отправления должен находиться не ближе чем в 40 милях от точки (0,0), а к любому из известных помощнику плавучих островов не ближе чем в пяти милях.

Начальная скорость корабля такова, что за каждый ход он преодолевает пять миль. Вводим, например, такие значения:

Матчасть диванного танкиста - Страница 3 86101210

Если корабль попал в опасный район, его скорость падает, и после этого он преодолевает за один ход на милю меньше, чем раньше. Ясно, что после пяти аварий корабль не сможет продолжать движение и затонет. Калькулятор сообщит об этом, высветив на индикаторе сообщение ЕГГОГ.

Матчасть диванного танкиста - Страница 3 86101310

Если программа введена, можно приступать к игре. Для этого необходимо перевести переключатель Р-Г в положение Г и нажать клавиши В/0, С/П. Через 10 секунд на индикаторе появится сообщение о текущей позиции корабля в виде XX.YY000K. XX - это координата "запад-восток", всегда со знаком плюс, YY - координата "север-юг", также всегда положительная, а К указывает номер квадранта, в котором находится корабль. Предположим, на индикаторе светится 40.350004. Это соответствует примеру ввода исходных данных и карте. Таким образом, корабль расположен в северо-западном районе. Курс, которым будут пройдены очередные пять миль, необходимо вводить в градусах: от 0 до 360 (они отсчитываются от северного направления по часовой стрелке). Направимся, к примеру, на юго-юго-восток: 165 С/П. Если корабль не попал в опасный район, на индикаторе через минуту появятся новые координаты. В нашем случае - это позиция 39.30 в четвертом квадранте. (Можете использовать эти данные для контрольного примера). Если вам не повезло и корабль, оказавшись в опасной зоне, получил разрушения, то на индикаторе появится число от О до 9, характеризующее расстояние от корабля до центра плавучего острова. Нажмите клавишу С/П, и через двадцать секунд индикатор высветит текущие координаты. При особо неудачном стечении обстоятельств корабль может оказаться в районе, где накладываются друг на друга смежные опасные зоны. В этом случае индикатор дважды при нажатии клавиши С/П сообщит вам о расстоянии до центров островов, а число разрушений также удвоится.
Как только корабль достигнет свободной зоны вокруг острова, калькулятор сообщит вам о победе, высветив на индикаторе число 3.1415926. Для новой игры повторите ввод исходных данных согласно таблице.

Полезен разбор итогов игры. Попробуйте отметить на карте координаты плавучих островов, с которыми вам "посчастливилось" встретиться. Сравните их с настоящими, записанными в Р3-Р8.

Программа. 00. ИПА 01. ПП 02. 73 03. ИПВ 04. ПП 05. 73 06. 2 07. F10X 08. / 09. + 10. ПД 11. ПП 12. 81 13. 6 14. F10X 15. / 16. ИПД 17. + 18. С/П 19. ^ 20. 9 21. 0 22. x-y 23. - 24. Fsin 25. FBx 26. Fcos 27. ИП1 28. * 29. ИПА 30. + 31. ПА 32. Fx2 33. x-y 34. ИП1 35. * 36. ИПВ 37. + 38. ПВ 39. Fx2 40. + 41. 9 42. П2 43. - 44. Fx>=0 45. 71 46. 3 47. П0 48. ИПА 49. КИП2 50. - 51. Fx2 52. ИПВ 53. КИП2 54. - 55. Fx2 56. + 57. Fsqr 58. ПД 59. 9 60. - 61. Fx<0 62. 68 63. FL1 64. 66 65. K+ 66. ИПД 67. С/П 68. FL0 69. 48 70. КБП0 71. Fпи 72. С/П 73. Fx2 74.Fsqr 75. 7 76. F10X 77. + 78. FBx 79. - 80. B/O 81. ИПА 82. Fx<0 83. 91 84. ИПВ 85. Fx<0 86. 89 87. 3 88. B/0 89. 4 90. B/0 91. ИПВ 92. Fx<0 93. 96 94. 2 95. B/0 96. 1 97. B/0.

ЕСЛИ ВЫ ИГРАЕТЕ В ШАХМАТЫ...

Матчасть диванного танкиста - Страница 3 86101410

... а под рукой нет шахматных часов, их заменят два программируемых микрокалькулятора "Электроника МК-56". Достаточно поставить их рядом, ввести приведенную ниже программу "Таймер" и исходные данные. Кнопки С/П калькуляторов следует соединить, например, линейкой с толкателями, как это показано на снимке, предварительно запустив на счет один из калькуляторов. Переключение осуществляется плавным кратковременным нажатием на центр линейки. ЕГГОГ на индикаторе означает проигрыш одного из игроков. Устойчивое ЕГГОГ на индикаторе, которое может быть занесено в любой регистр, можно получить, например, при умножении двух чисел, больших 1e50.

Программа. 00. 7 01. П9 02. ИП8 03. ^ 04. ^ 05. С/П 06. + 07. + 08. Кх<09 09. Кх<09 10. ИП7 11. ИП7 12. С/П 13. С/П.

Исходные данные: занести ЕГГОГ в Р7, -1 в Р8, С/П 300 С/П, заметить время Т (сек) до ЕГГОГ, ввести (-Т)/300/60 в Р8, В/0 С/П, после останова гаймер готов к запуску. Интервал времени в минутах заносим в РХ, нажимаем С/П на одном из калькуляторов, и таймер запущен.
И.ЭПШТЕЙН (г.Ленинград)

[ МАЛЕНЬКИЕ ХИТРОСТИ
Предлагаю блок команд для округления результата до заданного количества знаков.

Собственно тело блока состоит из шести команд ^ ВП n - FBx +, здесь n=8-m, где число m - число знаков результата, с которыми вы хотите иметь дело.

Блок удобнее ставить перед оператором С/П. если он встречается в программе один раз, или же оформить его в виде подпрограммы, к которой придется обращаться перед каждым оператором С/П.

Если появится необходимость изменять число знаков результата в процессе счета по программе, то следует заменить блок на другой: ^ ИПР F10 * - FBx +. где Р - регистр, в который можно записывать n программно или с клавиатуры. Число команд в этом блоке можно сократить: ИПР F10X - FBx +.
А.БОРИСОВ (г.Москва)

Положительные числа можно округлять и по-другому. Пусть требуется оставить в числе лишь n знаков после запятой Записываем число (-n) в регистр 0 и выполняем команды: ИП0 7 + F10X + FBx -. Если же требуется округлить число так, чтобы n его знаков влево от запятой обратились в нули, в регистр 0 следует записать число n и выполнить ту же последовательность команд.
Н.ТОПИЛИН (г.Воркута) ]

Матчасть диванного танкиста - Страница 3 86101510
Рис. В.ЧЕРНЯЕВА (г.Ленинград)

[ УЗЕЛКИ НА ПАМЯТЬ
Команда ВП преподносит внимательному исследователю все новые и новые сюрпризы.

Москвич В.АРХИПОВ отмечает в своем письме, что функция, описанная в статье "Эта таинственная команда ВП" (см. 12/85), обладает некоторой односторонностью, фрагмент ПР ВП отбрасывает первый разряд лишь у положительного числа. Читатель предлагает фрагмент, который позволяет распространить подобное действие на весь возможный диапазон чисел. Записывается он так: 00. x-y 01. x-y 02. ВП. Если удлинить фрагмент, например, так: 03. М, или так: 03. М 04. /-/, то помимо отбрасывания разряда, число будет умножаться или соответственно делиться на 1eM.

Ленинградец В.ПАЛЛАДЬЕВ заметил, что подобным образом фрагмент функционирует лишь в том случае, если регистр Y очищен. В противном случае команды 00-03 заменяют первый разряд мантиссы числа, находящегося в РХ, первым разрядом мантиссы числа из PY. Число в PY при этом не изменяется и может иметь любой знак. Если на индикаторе высвечивается нуль, то результатом выполнения цепочки команд будет число, большее первой цифры содержимого PY на единицу. Из девятки в PY и нуля в РХ получается не 10, а псевдотетрада 0110, которая изображается на индикаторе как "-" ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Янв 19, 2023 12:12 am

11/86
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДЕСЯТОЕ, на котором заканчивается обзор основных элементов, присущих всем языкам высокого уровня, и разбираются две несложные программы, составленные на Бейсике.
Ведет занятие кандидат технических наук И.Д.ДАНИЛОВ

ОПЕРАЦИИ НАД ДАННЫМИ. Любая программа создается для обработки данных. А обработка состоит в конечном счете в том, что с помощью различных операций исходные данные преобразуются в требуемые результаты.

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

Несколько данных, постоянных и переменных, объединенных знаками операций, образуют ВЫРАЖЕНИЕ. Вычисление выражений происходит в соответствии с определенной СУБОРДИНАЦИЕЙ операций, которую можно изменять с помощью скобок. Она несложна: сначала выполняется возведение в степень, потом умножение и деление, потом сложение и вычитание. Если какой-либо участник операции огражден скобками, то заключенное в нем выражение вычисляется до выполнения этой операции.

Практически во всех алгоритмических языках есть операторы для вычисления различных функций - синуса, логарифма и т.д. Такие функции принято называть ВСТРОЕННЫМИ, потому что алгоритмы их вычисления записаны, "встроены" в программы-трансляторы.

Для данных логического типа (напомним: они могут принимать только одно из двух значений - true или false, то есть истина или ложь) определяются свои операции: ИЛИ - логическое сложение, И - логическое умножение, НЕ - логическое отрицание и другие. Для каждой из этих операций существуют правила вычисления ее значений. Так, результат операции И для переменных А, В будет равен true, если обе переменные равны true, и равен false во всех остальных случаях. Как и для арифметических операций, здесь тоже существует своя субординация, позволяющая вычислять сложные логические выражения.

Еще один набор операций, особенно часто используемый для формирования логических величин,- это операция отношения. Так называются сравнения - равно, не равно, больше, меньше, не больше, не меньше. Выражения, построенные с помощью этих операций, дают в результате логические величины. Например, если x=2, а y=3, то значение выражения x<y будет равно true, а выражение x=y получит значение false.

Для символьных данных прежде всего определяется операция сложения (ее называют также конкатенацией или сцеплением), в результате которой нз нескольких данных получается одно - скажем, из TRACT и OR образуется TRACTOR. Набор допустимых операций и тут увеличивается с помощью встроенных функций, необходимых для того, например, чтобы извлечь из строки какую-либо ее часть (подстроку), подсчитать количество символов в строке, определить местоположение в строке какой-либо подстроки.

В некоторых языках допускаются операции (точнее, функции) по преобразованию данных одного типа в другой. С их помощью целое число можно записать в той нормализованной форме, в которой обычно записывают вещественные числа (скажем, 356 преобразовать в 0.356e3). Можно, наоборот, получить из вещественного числа целое, отбросив его дробную часть. Можно преобразовать числовое данное в символьное, представив его в виде последовательности кодов цифр, его составляющих, и т.д.

УПРАВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТЬЮ ДЕЙСТВИЙ осуществляется с помощью всего лишь трех основных конструкций, названия которых - следование, повторение, выбор. Этой тройки достаточно, чтобы записать любой алгоритм, будь то решение квадратного уравнения или расчет запуска искусственного спутника Земли.

На предыдущих занятиях нашего "Семинара по информатике" (см. 11/85, 1/86, 3/86) читатель мог составить представление об этих конструкциях. Здесь мы лишь напомним сказанное ранее на шутливом примере алгоритма, который то и дело выполняет каждая хозяйка, готовя для своих гостей чай, кофе и т.п. Блок-схема алгоритма:

Матчасть диванного танкиста - Страница 3 86110110

Варианты отдельных ее фрагментов:

Матчасть диванного танкиста - Страница 3 86110210

1. Здесь каждый блок (можно сказать, оператор, поскольку это - действие некой машины, в роли которой выступает хозяйка) следует один за другим и выполняется один за другим. Если переставить первый и второй блоки, то ничего страшного не произойдет. Если же первый блок поставить в конец... Впрочем, каждый знает, что происходит при нагревании пустого чайника. В практике программирования тоже встречаются похожие казусы: иной раз перестановка операторов проходит для программы безболезненно, но иногда она может приводить к сбоям, подобным кипячению чайника без воды.

Разобранная нами конструкция называется СЛЕДОВАНИЕМ. В программах она изображается простой записью операторов подряд: S1; S2; S3... Здесь Si-некоторый  оператор; порядок выполнения операторов указан их номерами.

Приведем попутно более соответствующий теме нашего разговора пример следования:

x:=x0; y:=x**2+1; z:=1/y; ...

Операторы, использованные в этом примере,- пожалуй, наиболее распространенные в программировании. Они называются операторами ПРИСВАИВАНИЯ. Действие их состоит в вычислении выражения, записанного справа от символа ":=", и присваивании его значения переменной, стоящей слева. Для разделения левой и правой частей часто используется символ "=", (пишут, например, X=Х0). Начинающим программистам при записи алгоритмов советуем избегать его, чтобы не путать с обозначением равенства.

2. Вариант на тот случай, если не известно, пуст ли сначала чайник или уже заполнен водой. Вначале проверяется условие, записанное в ромбе. Если оно истинно, то выполняется блок (оператор), записанный в ветви "ДА"; в противном случае конструкция никакого действия не выполняет.

Называется такая конструкция УСЛОВНЫМ ОПЕРАТОРОМ. Его можно записать так:

если G то S.

Здесь G - проверяемое условие, S - оператор.

Ради нового примера запишем с помощью условного оператора вычисление абсолютной величины числа:

если х<0 то х:=-х.

3. ЧАЙНИК ЗАКИПЕЛ. Теперь нам требуется заварить по желанию гостей либо чай, либо кофе. В отличие от предыдущего условного оператора здесь обе ветви - и ДА, и НЕТ - содержат какие-то действия. Если условие выполняется, отрабатываются действия, записанные в ветви ДА. Не выполняется- отрабатывается ветвь НЕТ.

Рассмотренная конструкция называется АЛЬТЕРНАТИВОЙ. Оператор, реализующий ее, записывается в виде:

если G то S1 иначе S2.

Здесь G - условие, S1 и S2 - операторы.

4. Вариант на случай, если есть возможность приготовить, кроме чая или кофе, еще несколько напитков. Чтобы учесть весь ассортимент, рассмотрим выбор: чай - кофе - какао - шиповник. Перенумеруем напитки в том порядке, как они записаны: чай - 1, кофе - 2 и т.д. Эта конструкция так и называется: ВЫБОР. Соответствующий оператор записывается так:

выб I из S1, S2, .... SN.

Здесь I - некоторое арифметическое выражение, которое может принимать значения от 1 до N. В зависимости от значения I выбирается для выполнения одни нз операторов, перечисленных в наборе. Так, если значение I равно 2, то выполняется второй по счету оператор S2.

Выбор - название этой конструкции является обобщающим для всех трех, определяющих разветвление алгоритмов. Однако третья, хоть и дает название всему триумвирату, существенно отличается от первых двух. Если в условном и альтернативном операторах вся информация заключена в них самих, то в операторе выбора логическая связь между величиной I и операторами не прослеживается. Кроме того, и условный, и альтернативный операторы всегда определены, то есть будут работать н при выполнении, и при невыполнении условия, записанного в них. Оператор же выбора не определен для значений I меньших 1 и больших N.

Эти обстоятельства могут затруднить проверку программ, использующих операторы выбора. Поэтому опытные программисты стараются использовать их пореже.

5. Напиток готов. Можно разливать его по чашкам. Наполнить одну и повторять это до заполнения всех остальных.

Мы используем при этом частный вид структуры, именуемой ПОВТОРЕНИЕМ. Называется используемая нами конструкция ЦИКЛ ДО и записывается в виде:

цикл S до G.

Здесь S - оператор, называемый телом цикла, G - условие.
Работа конструкции. ЦИКЛ ДО состоит в выполнении тела цнкла ДО того момента, когда условие G станет истинным.

6. Существует другой вариант повторения - ЦИКЛ ПОКА. Соответствующий оператор записывается в виде:

пока G цикл S.

Выполнение оператора начинается с проверки условия, после чего тело цикла выполняется вновь и вновь, ПОКА это условие истинно.

Кстати, уловили ли вы различия между циклами ДО и ПОКА? В первом случае сначала выполняется тело цикла, а затем проверяется условие. То есть операторы тела цнкла при этом всегда выполнятся хотя бы один раз. Во втором случае проверка условия предшествует выполнению. Может статься, что ЦИКЛ ПОКА не выполнится ни разу.

Итак, следование, выбор, повторение. Существование трех основных конструкций отнюдь не означает, что все они реализованы с помощью соответствующих операторов во всех языках программирования. В большинстве языков, например, нет оператора выбора. В Фортране и Бейсике нет альтернативного оператора, нет в них и оператора ЦИКЛ ПОКА. С другой стороны, в Алголе-60 и ПЛ/1 допускаются операторы, объединяющие конструкции ЦИКЛ ДО и ЦИКЛ ПОКА (от себя заметим, что такое "удобство" часто ведет к запутыванию программ).

Как же быть, если в языке нет операторов, реализующих некоторые из основных конструкций? Выходит; их нельзя и употреблять? Можно. Только в таком случае они реализуются с помощью нескольких операторов.

Назовем среди них в первую очередь не встречавшийся нам ранее ОПЕРАТОР ПЕРЕХОДА. В программах он записывается обычно так:

идти на М

(английский вариант - go to M). Он прерывает естественную последовательность выполнения операторов программы и передает управление тому оператору, который помечен после слов "идти на" ("go to") меткой М.

Как видите, для описания этого оператора приходится вводить новое понятие - метка, приходится размечать операторы программ своими метками.

Вопрос об использовании переходов в программировании стоит сейчас довольно остро. Это средство управления было перенесено в алгоритмические языки из языков низкого уровня. Голландский математик Э.Дейкстра первым обстоятельно проанализировал вредность оператора go to и показал, сколь трудно разобраться в написанной с его применением программе. Единственная возможность понять, как она работает, состоит в том, чтобы фактически выполнить всю программу, следуя за операторами go to туда, куда они ведут, и выполняя по дороге всю трудоемкую работу.

Но хорошо, если сам язык позволяет обходиться без переходов. А если нет? В Бейсике, например, без переходов не обойтись в принципе. Остается скрепя сердце их использовать. Однако и в этих случаях, выполняя определенные требования, можно писать простые и понятные программы. Об этом мы еще поговорим.

ОПЕРАЦИИ ПО ЗАПУСКУ, ТРАНСЛЯЦИИ И ОТЛАДКЕ ПРОГРАММ. Итак, программа написана на бумаге. Теперь нужно довести ее до сведения ЭВМ, загрузить ее в машину, как говорят программисты.

Способ загрузки зависит от типа ЭВМ. Чаще всего тексты программ вводят, набирая их на клавиатуре вводного устройства. Это не значит, что достаточно сесть за пульт и начать нажимать клавиши, как на пишущей машинке. Предварительно нужно "представиться" машине, набрать свой пароль, и если ЭВМ опознает его, то она допустит вас в свою "святая святых" - операционную систему. Так называется программа, постоянно находящаяся в памяти машины и организующая совместную работу всех устройств ЭВМ: процессора, памяти, внешних устройств.

У операционной системы есть свой язык, о котором пользователь машины должен иметь хотя бы элементарные представления. Без этого он не сможет совершить ряд необходимых манипуляций по вводу текстов в машину, редактированию их, вызову программы-транслятора для преобразования исходных текстов в машинные коды и т.д.

Манипуляции эти мало зависят от того, написана ли ваша программа на Фортране, Паскале, ПЛ/1... Однако, если вы работаете с интерпретатором Бейсика, проблема упрощается. В этом вы сможете убедиться очень скоро, поскольку мы уже переходим к рассказу собственно об этом языке.

Но прежде - одно предупреждение.

Чтению текстов на иностранном языке можно научиться, совсем не зная, как звучат его слова и фразы. А можно ли научиться играть на рояле, никогда не садясь за него? Попробуйте описать словами, как звучит нота "до" или "ми" - и вы согласитесь: чтобы научиться музыкальной грамоте, надо обязательно иметь инструмент - не рояль, так гитару, не гитару, так губную гармонику.

Правда, есть способ обойти эти препятствия: преподаватель может изображать ноты голосом. Хотя, насколько нам известно, так музыке никого не учат.
Примерно такие же проблемы появляются у того, кто хочет научиться (или научить) программированию. Очень трудно, никогда не видя дисплея, прочувствовать, как будет реагировать компьютер на нажатие той или иной клавиши.

Поэтому-то, уважаемый читатель, если есть у вас в зоне досягаемости ЭВМ (любая!), оснащенная транслятором с Бейсика, обучение пойдет намного эффективнее, да и веселее. Если же нет... Ничего не поделаешь, постараемся в этом случае заменить инструмент голосом. Конечно, будет это не так мелодично, но все равно обучение не пройдет даром. Хоть в посредственном исполнении, но мы постараемся изобразить вам "программистскую музыку".

И еще один момент. Почему рассказ о языках программирования начинается с Бейсика?

Надо сказать со всей откровенностью: автор не считает Бейсик ни самым универсальным, ни самым удобным, ни даже самым легким языком программирования.

Действительно, по универсальности и удобству написания программ Бейсик значительно уступает и Паскалю и ПЛ/1. Что касается легкости, то Фортран, пожалуй, не труднее и притом намного богаче.

Вообще легкость языка - понятие относительное. Как вы полагаете, какой язык легче - английский или японский? Уже ответили? А ведь еще не было сказано, для кого легче - для датчанина, например, или китайца?

Так почему же Бейсик? Дело в том, что на сегодня это самый распространенный язык программирования. Почему-то он приглянулся создателям персональных компьютеров, н сегодня все эти машины снабжены трансляторами именно с него. Число же персональных ЭВМ в мире неуклонно растет, и уже сейчас по количеству экземпляров они вышли на первое место.

Правда, нельзя сказать, что Бейсик был выбран абсолютно случайно. Ои хоть и не "самый-самый", но достаточно прост, универсален и удобен.

И еще одно. В отличие от подавляющего большинства языков, трансляторы с которых созданы по принципу компиляторов, для перевода программ Бейсика на язык ЭВМ используются интерпретаторы. А это значит, что пользователю нет необходимости дополнительно знакомиться с особенностями операционных систем, осваивать многочисленные и подчас довольно сложные манипуляции по трансляции, построению, запуску программ, изучать способы редактирования текстов программ в разных операционных системах. Вместо всего этого достаточно нажать пару клавиш на пульте ЭВМ, чтобы вызвать Бейсик. Интерпретатор Бейсика отвечает одним словом: "READY", что значит "ГОТОВ", н берет все заботы по редактированию, трансляции и запуску программ на себя.

Эти особенности привели к тому, что человек, владеющий Бейсиком, может сесть за пульт практически любой "обученной" этому языку ЭВМ и почти сразу начать работать.

"Почти", потому что на сегодня единого языка, называемого "Бейсик".., не существует. Уж так получилось, что создатели интерпретаторов для разных ЭВМ в стремлении подогнать их к конкретным машинам, наилучшим образом отразить в специфике языка машинную специфику напридумывали изрядное множество диалектов Бейсика. Расплодились эти диалекты настолько, что, наверное, не каждый человеческий язык может похвастаться таким многообразием. Это, естественно, накладывает определенные трудности при попытке изложить Бейсик "для всех".

С другой стороны, так же как диалекты любого языка сохраняют основные особенности, этому языку свойственные, так и диалекты Бейсика в основных аспектах схожи. Именно такие, наиболее типичные аспекты мы и постараемся осветить.

Что же касается специфических особенностей того или иного диалекта, приспособленного к наиболее распространенным типам ЭВМ, то с ними легко познакомиться, полистав в течение часа соответствующую документацию. Важно, что, пройдя наш курс, вы будете знать (как мы надеемся), на что именно следует обратить внимание, садясь за пульт вашей машины.

Начнем изучение Бейсика с конкретной задачи. Представьте себе, что хозяйка сварила суп.

Прежде чем поставить его на стол, суп надо немного остудить. Вопрос: через какое время можно ставить супницу на стол, если за каждую минуту температура супа падает на 10 процентов от разности его текущей температуры и температуры воздуха в комнате? Известно, что в комнате 20o. температура супа вначале равна 90o, а на стол его можно ставить при температуре не выше 50o.
Заранее просим извинения у тех, кто знаком с теорией дифференциальных уравнений, позволяющей свести решение задачи к расчетам по одной формуле. Наш рассказ адресован начинающим [В оригинале название языка Бейсик (BASIC) представляет собой аббревиатуру английских слов, которые можно перевести как "универсальный алгоритмический язык для начинающих"].

Алгоритм решения нашей задачи очень прост. Сначала вычисляем падение (D) температуры супа (Т) за минуту по формуле: D=(T-T3)*U, где Т3-температура в комнате, U - Степень падения температуры (10 процентов). Затем вычитаем эту разность из текущей температуры супа и проверяем, не оказался ли результат ниже той температуры, при которой суп можно ставить на стол (Т2). Если нет, то повторяем расчет снова, заодно добавляя единицу к счетчику минут. Если да, то заканчиваем расчет и выводим на печать результат.

Матчасть диванного танкиста - Страница 3 86110310

Вот блок-схема этого алгоритма и реализующая его программа.

Матчасть диванного танкиста - Страница 3 86110410

Прежде всего видно, что программа состоит из занумерованных строк. Число, стоящее в начале строки,- это ее номер (или метка). За ним следует оператор. Начинается каждый оператор с определенного слова - иероглифа, помогающего транслятору распознать действие оператора. Иногда оно состоит в ... отсутствии действия. Таков первый оператор программы, помещенный меткой 10. Начинается он со слова REM (от английского REMARC - ремарка, примечание). Содержимое этого оператора игнорируется при выполнении программы и служит для записи комментариев, помогающих в ней ориентироваться. В нашем примере в строке 10 помещено название алгоритма, реализуемого программой.

Следующая строка: 20 PRINT. Мы видим, что номера строк кратны десяти. Это удобно: если понадобится вставить новую строку между имеющимися, их не придется перенумеровывать - новой строке можно присвоить любой промежуточный номер. Мы замечаем также, что операторы Бейсика представляют собою либо целые английские слова, либо их сокращения. Это не составляет большой трудности для заучивания: операторов в Бейсике не так уж много, а обозначающие их английские слова относятся к числу весьма употребительных и, вероятно, уже знакомы вам.

Текст, стоящий после PRINT (печать) в кавычках, выводится на дисплей целиком и без изменений. Так что, запустив программу, вы прочтете с дисплея всю надпись, которую видите сейчас в строке 20

Строка 30 INPUT (ввести). Увидев это слово в программе, машина останавливается. Работа этого оператора состоит в присваивании перечисленным в нем переменным числовых значений, набираемых на клавиатуре в то время, пока машина стоит Заметим: величину 10%, то есть 0.1, мы будем набирать без нуля целых - так принято в Бейсике.

Строка 40 LET. Слово LET служит началом оператора присваивания. Среди многочисленных значений этого слова лучше всего, пожалуй, подойдет "пусть"; пусть переменная, записанная слева от знака равенства, получит значение выражения, написанного справа. Мы будем говорить просто: присвоить переменной такое-то значение. В строке 40 введенное нами ранее значение начальной температуры супа присваивается переменной Т.

Заметим: пока операторы программы в точности воспроизводят блоки схемы. Там, правда, не было вывода поясняющего текста, но и в программе он дан лишь для "сервиса".

Однако следующее присваивание (М=0) в нашей программе пропущено. Это не ошибка. Просто транслятор Бейсика перед началом работы программы "очищает" все переменные, то есть присваивает числовым переменным значение "нуль", а строковым "пробел". Поэтому мы и обошлись без лишнего в нашем случае оператора присваивания.

Далее по блок-схеме следует структура, уже известная нам как ЦИКЛ ПОКА. К сожалению, соответствующего оператора в Бейсике нет. Поэтому приходится программировать цикл, как говорят, вручную, то есть с помощью имеющихся средств языка.

Начинается ЦИКЛ ПОКА в нашей программе с оператора условного перехода (строка 50). В нем два иероглифа. Первый IF (если). После него записано условие. Если оно выполняется, то управление передается на метку, записанную после слов THEN (то). В противном случае выполняется оператор, записанный в следующей, 60-й строке. Там мы встречаем уже знакомый оператор присваивания. Еще два оператора присваивания записаны вслед за ним, в строках 70 и 80.

(Читатель, вероятно, сообразил, что спаренный символ <= означает "меньше или равно", а звездочка - умножение).

Оператор, записанный в строке 90, начинается со слов GOTO. Он называется оператором безусловного перехода. Работа его, как мы уже знаем, состоит в передаче управления на метку, записанную далее (50). Он соответствует линии на блок-схеме, соединяющей начало и конец цикла. Цикл выполняется, пока справедливо условие, записанное в строке 50.

Выйдя из цикла, мы попадаем на строку 100. Здесь записан оператор вывода PRINT. Он выведет окончательно вычисленные значения переменных М и Т. Кроме того, на печать будет выведен текст, записанный в кавычках.

Наконец, последняя строка 110 содержит оператор END (конец). Он как раз соответствует блоку с аналогичной записью и вызывает окончание работы по программе.

Программа написана. Остается ввести ее в ЭВМ. Делается это просто: набираем на клавиатуре символы, записанные в тексте программы. Набрали строку, нажали на клавишу ВК, "Возврат каретки", как на пишущей машинке, и набираем новую.

Если вы ошиблись при вводе, не беда. Достаточно повторить набор ошибочной строки. При этом ее предыдущий вариант, имеющий тот же номер, что и новый, сотрется из памяти, освободив место вновь введенной строке. Делать это можно в любой момент, необязательно сразу после ошибочной строки - можно и потом.

После ввода программы следует дать команду RUN (пуск), также набрав ее на клавиатуре. Заметьте: мы предлагаем набрать ее без номера, без метки. Такие команды не записываются в программу, а исполняются сразу после того, как набраны. Отданная нами команда запускает только что введенную программу на счет.

Если программа введена правильно, то на дисплее тотчас появится надпись:

ВВЕДИТЕ НАЧ. И КОН. ТЕМП. СУПА, ТЕМП. В КОМНАТЕ, СКОР. ОСТЫВАНИЯ?

Надпись - результат работы оператора вывода (строка 20). Символ "?" - приглашение к вводу (строка 30). Программа готова принять информацию, которая будет набрана на клавиатуре. Набираем запрашиваемые числа, разделяя их запятыми: 90, 50, 20, .1. Завершаем набор клавишей "Возврат каретки" и почти мгновенно получаем ответ: ЧЕРЕЗ 9 МИНУТ ТЕМП. СУПА БУДЕТ 47.11 ГРАДУСА.

Все. Задача решена, и через 9 минут суп можно подавать на стол.

Но Бейсик позволяет решать не только числовые задачи. Далее мы разберем программу-микрословарь, переводящую с русского языка на английский названия дней недели. Ограничимся первыми тремя буквами названий, как они записываются в часах с календарем.

Блок-схема для алгоритма решения этой задачи значительно сложнее самой программы, поэтому мы не будем ее приводить, а дадим сразу программу.

Матчасть диванного танкиста - Страница 3 86110510

Как и предыдущая, эта программа представляет собой последовательность занумерованных строк. Оператор REM в строке 10 нам уже знаком. Вообще говоря, знакомы и два следующих оператора, реализующих присваивание. Новое в них то, что отсутствует слово LET, необязательное во многих диалектах Бейсика. И еще: переменным присваиваются не числовые, а строковые значения.

Чтобы это было ясно, обозначения таких переменных снабжаются своеобразным крестиком (в типографском наборе этот знак отсутствует, и мы будем заменять его х). Постоянные значения, присваиваемые строковым переменным Rx и Ax, приведены в кавычках. Заметим: сами кавычки не являются частью константы, как раковина не является частью рака-отшельника. Они служат лишь для указания границ константы. Без кавычек опознать строковую постоянную было бы трудновато. Во-первых, как ее отличить от имени переменной? Во-вторых, пробелы - это ведь тоже символы, и поди узнай, сколько их после последнего символа строки.

В строке 40 мы видим оператор вывода и за ним - текст в кавычках. Он будет выведен на дисплей. Но там появится не только он. Его продолжат операторы, стоящие в следующих строках - с 50-й по 80-ю.

В них записан ЦИКЛ ДО. Начинается он оператором FOR (для) в строке 50 и заканчивается оператором NEXT (следующий) в строке 80. Телом цикла являются операторы, записанные в промежуточных строках, 60-70.

Работает оператор цикла так. Сначала переменная I (она называется параметром цикла) принимает значение "единица". Потом выполняется тело цикла. Оператором NEXT I величина I увеличивается на единицу, и цикл повторяется. Так продолжается до тех пор, пока значение I не превысит 7 - ту величину, которая указана последней в операторе FOR I=1 ТО 7. На этом цикл закончится, и начнут выполняться операторы, записанные за ним.

А делается в цикле следующее. С помощью встроенной функции SEGx из строки Rx выбираются подстроки. Функция SEGx имеет три аргумента. Первый из них - Rx, имя строковой переменной, из которой должна выбираться подстрока, второй и третий - числовые выражения, задающие границы вырезаемой подстроки. Так при первом проходе цикла (I=1, 3*I-2=1, 3*I=3) будут вырезаны символы с 1-го по 3-й, то есть ПНД, при втором (1=2, 3*I-2=4, 3*I=6) - символы с 4-го по 6-й, то есть ВТН, а затем все остальные трехбуквенные сокращения русских названий дней недели.

Записанный вслед за этой строкой оператор 70 PRINT будет выводить выбранные тройки на печать и отделять их друг от друга символом "запятая". Наконец, оператор 90 PRINT выведет записанный за ним текст в кавычках, и на дисплее практически мгновенно образуется надпись:

ВВЕДИТЕ ДЕНЬ НЕДЕЛИ (3 СИМВОЛА):
ПНД, ВТН, СРД, ЧТВ, ПТН, СБТ, ВСК,
ИЛИ КОН. ЧТОБЫ ЗАКОНЧИТЬ РАБОТУ

Оператор 100 INPUT дает пользователю возможность ввести трехсимволыюе название дня недели или слово КОН. После этого машина тотчас выясняет, не должна ли она закончить работу (строка 110). Если пользователь ввел КОН, управление будет передано последнему оператору программы: 240 END.

В строке 120 вновь условный оператор. Символами <> передается математический знак "!=" (не равно). Слева от него стоит встроенная функция LEN. Она вычисляет длину строкового аргумента Cx, то есть количество символов в строке Cx. Если это количество не равно трем, то управление передается на строку 210 и на дисплей выводится:

* ОШИБКА ВВОДА *
ПОВТОРИТЕ, ПОЖАЛУЙСТА, ВВОД

Затем (строка 230) управление передается на строку 100, где ЭВМ ожидает нового ввода.

В строке 130 - новая встроенная функция POS. Она определяет начальную позицию подстроки Cx (второй ее аргумент) в строке Rx (первый аргумент), причем начинается поиск с символа, номер которого задан третьим аргументом.

Полученное значение функции присваивается переменной D. Если введенная пользователем подстрока Cx в строке Rx не найдена, то D полагается равной нулю, и тогда условный оператор в строке 140, как и ранее при ошибочном вводе, передаст управление на строку 210.

Оператор присваивания в строке 150 вычисляет порядковый номер введенной тройки символов. Строка 160 улавливает возможную ошибку, не замеченную предыдущими проверками. Например, введены символы РДЧ. Они найдены в строке Rx, но смысла в них нет. Программа отметит это, вычислив позицию D начального символа введенной подстроки. Для сочетания РДЧ номер этой позиции равен 8. Стало быть, I=(D-1)/3+1=(8-1)/3+1=10/3, то есть представляет собой нецелое число. Оператор в строке 160 сравнивает вычисленный номер с его целой частью (встроенная функция INT) и при отрицательном результате сравнения переадресует программу к строке 210.

Лишь в том случае, если введенная тройка стоит на верном месте и величина I оказывается целой, программа перейдет к строке 170. Здесь функция SEGx(Ax,D,D+2) вырежет нз строки Ax трехсимвольную подстроку с начальной позицией D (то есть такой же, что у введенной нами тройки символов Cx в строке Rx) и присвоит это значение строковой переменной Dx. Обе переменные будут выведены на дисплей оператором, записанным в строке 180. Предоставляем читателю возможность самим разобраться в его работе - например, выяснить, что появится иа дисплее, если в качестве строки Cx было введено сочетание ВТН. Сравните свой ответ с нашим:

2-И ДЕНЬ НЕДЕЛИ - ВТН - TUE

После этого оператор, записанный в строке 200, передает управление на строку 40, и все можно повторить снова.

Как видите, разобранная программа довольно <умная>. Возможно, вы н не подозревали, каким сложным оказалось <в программном исполнении" то действие, которое столь просто выполняется нами "на глазок". Быть может, эта программа даже слишком • сложна для первого знакомства с Бейсиком. Хотя, с другой стороны, почему учиться плавать надо обязательно на мелкой воде? Если вы выдержали испытание и разобрались в этой программе, то с вами все в порядке - поплывете сразу. Если же не разобрались и программа показалась вам кладезем премудрости (или несусветной чушью), все равно программировать вы научитесь. Ведь хватило же у вас терпения прочесть все написанное об этой программе!

Подведем первые итоги. Что выяснилось по ходу разбора обеих программ?

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

Во-вторых, что грамотная программа, написанная иа Бейсике, не нуждается в дополнительных инструкциях. Как ею пользоваться, она подсказывает сама.

В-третьих, что Бейсик совсем не сложен, и совсем не прост. В общем, язык как язык, освоить его можно.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Янв 20, 2023 12:10 am

12/86
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Под Новый год принято обмениваться подарками. Программы, собранные в нынешнем выпуске нашего раздела,- своеобразные подарки читателям, увлечением которых стали компьютеры, от их товарищей по увлечению, чьи письма так или иначе можно отнести к новогодней тематике. Одна из этих программ поможет оптимальным образом приготовить праздничный стол, другая - составить полный и упорядоченный список приглашенных, третья - развлечь гостей веселой игрой...
Эти же программы могут найти и более серьезное применение. Например, первая - для составления различных каталогов и картотек. Оттого и написана она для "солидной" ЭВМ "Искра-226". На домашний компьютер ее можно перенести при условии, что тот оснащен дисководом. (Будем надеяться, что такие компьютеры когда-нибудь появятся в продаже).
Разумеется, программа, пригодная для столь разнообразного и непростого использования, иному читателю может показаться непонятной при первом прочтении. Отчаиваться не стоит. К публикуемым в нашем разделе программам для персональных компьютеров можно вернуться, как к упражнениям, пройдя курс языка Бейсик, публикуемый в нашем журнале начиная с 9/86.

К ВАМ НЕОЖИДАННО НАГРЯНУЛИ ГОСТИ
Почти каждая хозяйка в ситуации, описанной заголовком, первым делом побежит на кухню, лихорадочно соображая, что можно приготовить из домашних припасов.

Смею заверить, что, имея домашний компьютер и располагая составленной мною программой, хозяйка побежит сначала к ЭВМ, а потом уже на кухню.

Чем же может быть полезна электронная поваренная книга?

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

Но сначала опишу используемые в ней переменные. Литерные массивы. Ix() - имеющиеся в доме продукты. Nx() - продукты, которые входят в некоторый рецепт, имеющийся в книге. Rx() - единицы измерения продукта (килограммы, штуки и т.д.). Числовые массивы. N() - количество продукта в указанных единицах измерения. Литерные переменные. Nx - введенное пользователем название блюда. Bx - переписанное с диска название блюда. Rx - текст рецепта. Fx - номер рецепта, записанный в символьной форме. Числовые переменные. F - число рецептов в книге. А - номер режима работы в ней. N - число ингредиентов в рецепте. Р - число порций. N1 - число сообщаемых машине продуктов для поиска нужного рецепта. I, J, К - счетные индексы соответствующих циклов. В - признак: 1 - искомый рецепт имеется в книге, 0 - не имеется.

Матчасть диванного танкиста - Страница 3 86120110

Строка 1. Вводя символ для массива, указываем в скобках максимально возможное число его элементов, затем (для литерного массива) максимально возможное число символов в элементе. Если второе число отсутствует, то по умолчанию полагается равным 16. Вводя символ для литерной переменной, указываем максимально возможное число символов в ней.

Строка 2. DATA LOAD DC OPEN T: следуя этому приказу, машина откроет (OPEN) для считывания (LOAD) с диска (DC) файл с указанным далее именем. DATA LOAD DC F считанное содержимое файла (здесь число имеющихся рецептов) машина присваивает указанной далее переменной F. Полученные сведения машина выводит на дисплей - строка 3.

Строка 4. Меню, но пока еще не приготовленных блюд, а только режимов работы с электронной поваренной книгой. Указанный пользователем номер присваивается переменной А. У первого н второго режимов много общего, потому и начинаются они с одной строки. Выбор пути на дальнейших разветвлениях происходит по условию А = 2, как это видно уже в строке 5.

Строки 6-9. Запись нового кулинарного рецепта начинается с запроса числа ингредиентов, их характеристик (запрашиваются циклически), собственно текста рецепта и числа порций. Оператор LINPUT в отличие от оператора INPUT допускает исправления вводимых текстов.

Строка 10. Число рецептов увеличилось на единицу. Новый рецепт получает свой номер, под которым он будет храниться на магнитном диске, в символьном виде, формат которого задан цепочкой условных знаков в скобках. Последние знаки в цепочке при этом заменяются номером рецепта, остальные - нулями. Такое превращение (конвертирование) числовой переменной в литерную совершает оператор CONVERT. В других диалектах Бейсика он может называться VAL, STR.

Строка 11. DATA SAVE DC OPEN T(10): следуя этому приказу, машина откроет десять (указано в скобках) секторов диска для записи (SAVE) файла с указанным далее именем. DATA SAVE DC: машина записывает на диск значения указанных далее переменных. DATA SAVE DC END: машина закрывает файл после записи.

Строка 12. Рецептов стало больше. Следовательно, нужно изменить содержание файла "КУХНЯ" - стереть (SCRATCH) и снова записать (SAVE). С этим файлом проделываются разобранные выше операции. Машина возвращается на строку 3, сообщает пользователю изменившееся число рецептов и ждет дальнейших указаний - строка 4.

Строки 13-14. Начинаем поиск блюд по имеющимся продуктам, если на строке 4 введено А=3. Вводим в память ЭВМ их названия в надежде узнать от машины, что с ними можно сделать.

Строки 15-16. По мере нарастания счетного индекса I с диска считываются один рецепт за другим. Название очередного рецепта присваивается переменной Вx. Еще до выполнения цикла переменная В получает значение 0.

Строка 17. Ветвление в зависимости от того, ищется ли рецепт по названию (А=2) или по имеющимся продуктам (А=3).

Строка 18. Попадаем сюда, если А=3. Перебираем продукты, имеющиеся в доме Ix(J) и называемые в очередном считанном с диска рецепте Nx(К). В случае их совпадения машина печатает соответствующий рецепт (строка 19), в случае несовпадения при любом J - принимается за следующий рецепт (строка 20). Обратите внимание: выведя на дисплей хотя бы один рецепт, машина присваивает переменной В значение 1. Если машина не обнаруживает совпадения, перебрав все рецепты (В осталось равным нулю), она выходит из цикла со счетным индексом I на строку 21 и сообщает, что никакого подходящего рецепта у нее нет.

При А=2 строка 19 выполняется при одном лишь совпадении названий блюд - введенного пользователем Nx и считанного с диска Вx. Напечатав найденный рецепт, машина продолжает выполнять цикл со счетным индексом I (строки 15-20): ведь в книге может оказаться несколько рецептов с одинаковыми названиями. В.ЧИРКОВ (г.Москва)

КОМПЬЮТЕР ПОД ЕЛКОЙ
Когда на моем домашнем столе появился компьютер "БК-0010", проблема досуга окончательно перестала существовать. Электронный помощник уже превращен в телефонный справочник, книжку для записей памятных дат, служит отличным партнером в игре.

Поздний вечер. Домашние подсели к экрану телевизора, а я, конечно же, уединился с электронным другом. Что, если поручить ему еще н управление гирляндами новогодней елки?

Матчасть диванного танкиста - Страница 3 86120210

К компьютеру можно подключить до 16 устройств, однако для этого необходимо собрать несложные схемы, по одной на каждое из них (на рисунке - план подключения шести устройств). Программа основана на использовании функции FP(x,y). Аргумент x может принимать различные значения, однако в описываемой задаче управления важны лишь два из них - 1 и 2.

1 - засылает единицу в разряды, указанные шестиразрядным аргументом y, то есть подает напряжение на соответствующие штырьки разъема, который находится на задней стенке корпуса. 2 - очищает соответствующие разряды и снимает тем самым напряжение. Попробуем, например, включить гирлянды, соединенные с 0, 1 и 4 разрядами регистра вывода, а гирлянды, управляемые 2 и 3 разрядами, отключить. Чтобы вычислить аргумент y, записываем единицу под каждым разрядом, который задействован в команде, отсчитывая их справа налево. Под остальными разрядами пишем ноль. Получаем двоичные числа 010011 и 001100. Делим их на тройки, опять-таки справа налево: 010 011 н 001 100. Каждая тройка соответствует числу в восьмеричной системе счисления, получилось 23 и 14. Если теперь набрать команду X FP(1,23), то будут включены устройства, соединенные с 0, 1 и 4 разрядами регистра вывода; команда X FP (2,14), напротив, выключит устройства 2 и 3.

Пора подумать и о порядке переключения гирлянд. Для этого будем обращаться к функции FP(x,y) в цикле. Я также часто использую датчик псевдослучайных чисел FRAN.

Новогодний сюрприз готов. Осталось только терпеливо дожидаться новогодней ночи.
А.СОМОВ (г.Москва)

Матчасть диванного танкиста - Страница 3 86120310
Рис. П.Сушенцова (г.Киров)

ЖИВОТНЫЕ
Так называется эта игра с ЭВМ, отгадывающей задуманное человеком, хотя тот может задумывать не только животных, но и самые различные предметы. Условие игры единственное - честно отвечать "да" или "нет" на задаваемые машиной вопросы.

Если на очередной вопрос машины ("Может ли оно ползать?", например) последует ответ человека "да" или "нет", то ЭВМ выдаст свою догадку о задуманном ("Змея", к примеру) и спросит: "Угадала?" "Да" - игра закончена, "нет" - машина сдается, если у нее нет в запасе нового уточнения вопроса.

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

Действия машины в этой игре подобны карабканию на бинарное дерево (см. рисунок), каждая ветвь которого при ответе человека раздваивается: "Да" - налево, "нет" - направо. На ветвях "висят" ответы на вопросы.

Матчасть диванного танкиста - Страница 3 86120510

Нужные для игры сведения об окружающем мире ЭВМ может хранить либо в оперативном запоминающем устройстве, либо на внешнем носителе памяти. Второе предпочтительней, так как при отключении питания информация иа нем не сотрется. Из всех же носителей памяти для этой игры более всего подходит накопитель на магнитных дисках. Другие устройства (с перфокартами, перфолентами, магнитными лентами) слишком медленно находят искомую информацию. А ничто так не раздражает в игре, как партнер-тугодум.

Матчасть диванного танкиста - Страница 3 86120410

Здесь приводится программа, предназначенная для хранения данных в оперативной памяти. Литерные массивы. Вx() - альтернативные вопросы. Ох() - ответы машины. Рх() - признаки правильности ответа: 1 - верен ответ "да", 0 - "нет". Литерные переменные. Оx - дублирование ответа машины. Аx - ответ игрока. Рx - дублирование признака правильности ответа. Числовые переменные. I - номер ветви дерева ответов. J - счетный индекс цикла, где проверяется честность игрока. Р - ответ игрока, 0 или 1.

Матчасть диванного танкиста - Страница 3 86120610

По приведенному на цветной вкладке протоколу игры видно, как машина начинает ее, идя по строкам 2, 7, 3 (если первая догадка машины "это кот?", неверна; хотя, надо заметить, более половины играющих впервые задумывают это животное; на этой строке переменная Ox дублирует элемент Ox(0), а переменная Px - элемент Рx(0), равный нулю, поскольку при включении машины все массивы еще пусты), далее по строкам 5, 10 (так как переменная Bx(0) еще не приняла никакого значения; здесь ответ игрока помещается на первую ветку дерева ответов), далее 11, 12 (проверка, честно ли ведет себя игрок), 13 (обратите внимание: правильным ответом на вопросы, сообщаемые игроком машине, может быть не только "да", но и "нет"; в ином случае игра сильно усложнилась бы - это оправдывает употребление "лишнего", казалось бы, массива Px(), признаков правильности ответа), далее 8, 2 (если игрок продолжает игру).

В новом туре игры начальный путь в программе вновь пролегает по строкам 7, 3, 5... Но уже тут, поскольку элемент Bx(I) не пуст, машина идет в новом направлении, на строку 6. Здесь она задает свой первый альтернативный вопрос и завершает его вопросительным знаком (такова особенность оператора INPUT: если вслед за ним в программе ничего не написано, он просто выводит на дисплей знак вопроса). В зависимости от совпадения или несовпадения ответа игрока Ах с занесенным в память машины верным ответом Px(I) ЭВМ идет либо на строку 7, либо на строку 3. Очутившись на строке 7, машина выводит на дисплей свою догадку и, если угадала, спрашивает игрока о желании играть дальше. Если же не угадала, переходит на строку 3. дублирует тут свой неверный ответ Ox(I) и признак его верности Px(I), идет далее на строку 4, так как I!=0, здесь удваивает индекс I, то есть перемещается на новый ярус дерева ответов (если ствол и ветви дерева занумерованы, начиная с единицы, по ярусам снизу вверх, а на каждом ярусе слева направо, то первая ветвь каждого яруса имеет номер вдвое больший, чем первая ветвь предыдущего). В зависимости от совпадения или несовпадения Ax и Px машина "снимает" свою очередную догадку либо с первой, либо с дальнейших ветвей этого яруса. О каждой вновь рассматриваемой ветви машина осведомляется, не пуста ли она (строка 5). Если пуста, ЭВМ сдается и просит игрока сформулировать альтернативный вопрос, отличающий неизвестное ей животное от известных.

Если вести эту игру иа иностранном языке, то для ребенка и взрослого она станет эффективным и занимательным средством овладения иноязычной лексикой. Массивы Bx(I) и Ox(I) можно сделать двумерными и хранить в них вопросы и ответы на разных языках. С помощью этой нехитрой игры можно провести забавное социологическое обследование коллектива. Пусть его члены, играя с машиной, загадывают не животных, а своих коллег. Объектом начального сравнения Ox(0) должен стать какой-то известный всем член коллектива. После того, как играющие совместными усилиями вырастят приличное бинарное дерево, можно проанализировать его ветви-вопросы. Даже по одному вопросу, подчеркивающему разницу между двумя членами коллектива, можно делать выводы об атмосфере в нем.
В.ЩЕГЛОВ (г.Ленинград)

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
"Проектирование спускаемых автоматических космических аппаратов". (Под редакцией члена-корреспондента АН СССР В.М.Ковтуненко). Москва, Машиностроение, 1985. Трудно поверить, что книга со столь серьезным названием начинается с... игры. А между тем протоколы популярной игры "Посадка на Луну" помещены на первых страницах книги отнюдь не для развлечения. Оказывается, это отличный способ ввести читателя в существо разбираемых в книге задач.

Более того, играя с ЭВМ, читатель прочно осваивает диалоговый режим работы с нею, наилучший, по мнению авторов, режим, в котором конструктору на этапе эскизного проектирования удается решать свои проблемы в условиях значительной неопределенности в отношении многих параметров.

Как это делается, и описывается в книге. Авторы (А.Т.Базилевский, Е.И.Григорьев, С.Н.Ермаков, В.П.Карягии, К.М.Пичхадзе, С.В.Черемных) рассматривают ее как один из примеров разработки и использования диалоговой техники инженерного анализа. "Появление и быстрое развитие средств микропроцессорной техники,- пишут они,- приблизило ЭВМ к рабочему месту инженера. Возник новый класс ЭВМ - профессиональные персональные (ППЭВМ), специально предназначенные для решения инженерных задач средней сложности. В книге показано, какие новые возможности дает инженеру этот принципиально новый инструмент, пришедший на смену традиционной логарифмической линейке и микрокалькулятору".

Пример, достойный подражания!

Книга "Микрокалькуляторы в играх и задачах" (М., Наука, 1986) вводит читателя в мир программирования дорогой игр и головоломок.

"После знакомства с книгой остается ощущение интеллектуального напряжения и безграничного энтузиазма",- пишет в предисловии к ней академик А.П.Ершов.

К сожалению, в части тиража есть опечатки: "X=21" вместо "X=37" (стр.23), "0.65449859" вместо "0.65449853" (стр.35-37), "cos sqr с" вместо "sqr cos с" (стр.42), "первый адрес" вместо "адрес 00" (стр.52) ]

КОМПЬЮТЕР ЛИКВИДИРУЕТ СВОЮ НЕГРАМОТНОСТЬ
Вы составляете список гостей, приглашенных на праздник. Чтобы никого не забыть, вы расставляете фамилии приглашенных по алфавиту.

В любом, даже самом незатейливом житейском занятии можно усмотреть сюжет занимательной задачи. Мне пришла в голову мысль: нельзя ли поручить ЭВМ упорядочение фамилий или вообще произвольных слов? Программа для этой цели пригодилась бы и в более серьезной ситуации. Ученый, заканчивая работу над книгой или отчетом, расставляет фамилии авторов упомянутых книг в алфавитном порядке.

Есть в Бейсике функция CHRx(). Ею выводится на дисплей символ, код которого совпадает с аргументом в скобках. Если выполнить программу,

FOR 1=65 ТО 90: PRINT CHRx(I);: NEXT I

на экран выйдут в алфавитном порядке прописные латинские буквы от A (ее код 65) до Z (код 90).

Для компьютера слово "ABAK" меньше слова "ARAB", так как код буквы B (66) меньше кода буквы R (82). Это позволяет упорядочивать буквы и слова точно так же, как упорядочивают числа.

Если же попросить компьютер, в знакогенераторе которого есть русские буквы, напечатать их с помощью команд

FOR I=96 ТО 126: PRINT CHRx(I);: NEXT I

машина выдаст странный на первый взгляд набор из 31 буквы: Ю, А, Б, Ц, Д, Е, Ф, Г, X, И, И, К, Л, М, Н, О, П, Я, Р. С, Т, У, Ж, В, Б. Ы, 3, Ш, Э, Щ, Ч... В таком порядке увеличиваются коды букв кириллицы от 96 до 126.

Это связано с особенностями клавиатуры ЭВМ, где каждая клавиша несет двойную нагрузку на разных регистрах: С-Ц, Р-П, R-Р, F-Ф и т.д.

Вот почему программу, упорядочивающую по алфавиту русские слова (см. ниже), мне не удалось сделать простой и короткой.

Если в списке будет несколько слов с одинаковыми первыми буквами, то работающая но такой программе машина расставит их рядом в том порядке, как они вводились в ее память. Но программу несложно дополнить командами для полной сортировки. Читатель при желании может это сделать сам. (Просим тех, кого заинтересует эта задача, присылать в редакцию ее решения.- Прим.ред.)

Матчасть диванного танкиста - Страница 3 86120810

Описание переменных. Литерный массив Cx() - упорядочиваемые литерные переменные (в нашем номере - фамилии из списка). Массив N() - их номера. Cx, Вx - промежуточные литерные переменные, первая из которых хранит значение одного из переставляемых при упорядочении элементов массива Cx(), вторая - значение считываемой из русского алфавита буквы. Числовые переменные. S - длина списка. I, J - счетчики соответствующих циклов. N - промежуточная переменная. P - вспомогательная.

После запуска программы ЭВМ запросит количество S слов в списке, требующем сортировки (строка 3). Максимальный размер списка - 200 позиций, максимальная длина текста позиции - 200 знаков (см. строку 1).

Строка 3 (начиная с FOR I = 1 ТО S) - строка 6: цикл, в котором каждой из упорядочиваемых литерных переменных Сх() присваивается тот номер, который имеет в русском алфавите ее первая буква. В этот "большой" цикл вложен "малый", начинающийся в строке 5 с FOR J=1 ТО 30. В нем оператор READ считывает из блока, заданного в строке 2 оператором DATA, очередную букву, присваивает считанное значение переменной Bx и сравнивает его с первым знаком литерной переменной Сх(I), вырезанного с помощью функции STR [Напомним, что в разных диалектах Бейсика она называется по-разному - SEG, MID]. После каждого прироста индекса I просмотр алфавита должен начинаться с первой буквы. Об этом позаботится оператор RESTORE (восстановить). Если бы его не было, чтение (READ) требовало бы все новых элементов блока заданного оператором DATA.

В случае совпадения номер J присваивается элементу N(I). Так, элементы массива N(I) получают номера.

1. АГЕЕВ N(l) = 1
2. ЖУКОВ N(2) = 7
3. ГУРИН N(3) = 4

Если ни одного совпадения не обнаружено, машина выведет на дисплей сообщение ОШИБКА: либо первый знак очередного просмотренного машиной слова не из русского алфавита, либо сам алфавит (строка 2) задан неверно. В этом случае машина попросит повторить ввод (конец строки 5).

Строки 7-9 упорядочивают массив Сх(I) известным методом пузырька. Если у двух последовательных элементов массива номера убывают (как у элементов ЖУКОВ и ГУРИН в нашем номере), то меняются местами и они, и их номера (строка 8 ). Перед просмотром массива переменная P получает значение 0. При каждой перестановке она становится равной 1. Порядок наводится до тех пор, пока она не сохранит нулевое значение, а это будет, если однократный просмотр по командам строки 7 не обнаружит ни одного беспорядка. Тогда по выходе из цикла выполняется строка 10 - упорядоченный массив выводится на дисплей.
В.ОРЛОВ (г.Киев)

РИМСКИЕ И АРАБСКИЕ
В 2/86 читателям было предложено задание: составить программы для перевода арабских чисел в римские и для обратной операции. Мы получили более 30 программ на Бейсике. Как отметили многие читатели, задание оказалось неплохой разминкой для ума. Вместе с тем в некоторых письмах прозвучало сожаление: мол, подобные программы вряд ли имеют практическую ценность. Мы разделяли это мнение, пока его не изменило письмо москвича В.Птицына, признанного победителем конкурса. Он отметил, что подобными алгоритмами перевода чисел из одной системы в другую мы пользуемся по нескольку раз на дню, когда ведем денежные расчеты. Сумма денег - это арабское число, которой соответствует определенный набор банкнот и монет (аналоги римских цифр). Например:

255=CCLV=сто+сто+пятьдесят+пять.

Программы, реализующие эти алгоритмы, оказались бы полезными кассиру в банке - стоит только заменить в них римские цифры названиями имеющихся купюр и монет.

Подведение итогов конкурса мы поручили ЭВМ. В ее память ввели данные об участниках и обеих программах каждого, а машина ранжировала пары программ по суммарному числу использованных операторов. Вот десятка лучших:

1. В.Птицын, г.Москва, 17, "MZ-700".
2. Д.Цепов, г.Тольятти, 33, "ЕС ЭВМ".
3. В.Гуменников, г.Калининград, 38, "Электроника 100/25".
4. В.Иванов, г.Борислав Львовской обл., 41, "SILEX".
5. С.Пострехин, г.Херсон, 43, "Laser-200".
6. Ю.Зайцева, г.Волгоград, 45, "СМ-4".
7. NN. г.Ленинград, 50, "Искра-226".
8. В.Саханов, Московская обл., 63, "ДВК-2М".
9. А.Молчанов, г.Владивосток, 66, "СМ-4".
10. В.Токарев, г.Новокузнецк, 67, "Искра-226".

В каждой строке указано число операторов в обеих программах. Один участник конкурса пожелал остаться неизвестным (NN).

Матчасть диванного танкиста - Страница 3 86120710

Программы В.Птицына приводятся без комментариев ввиду их простоты и той наглядности, которую им придает примененная автором структурированная форма записи. По своей наглядности она не уступает блок-схемам, а сверх этого отличается тем, что в структурную диаграмму можно вписать всю программу целиком. Отметим, что в машине, использованной победителем, знак $ означает литерную переменную, функции LEFT и RIGHT вырезают из литерной переменной, указанной в скобках в первой позиции, столько знаков слева и справа соответственно, сколько указано во второй позиции в скобках. В запросе машины под N понимается арабское число, под N$ - римское.

[ Просим читателей ответить на вопросы:
1. Ваша профессия, увлечение, возраст?
2. Какими МК, ЭВМ Вы пользуетесь? На каких хотели бы работать?
3. Какие статьи больше всего понравились Вам в выпусках раздела за 1985-1986 годы? Какие не понравились и почему?
4. В каком соотношении Вам хотелось бы перераспределить объем раздела между его постоянными темами?
5. О чем бы Вы хотели прочесть на страницах раздела в новом году?
6. Какие прикладные программы для персональных ЭВМ Вы хотели бы увидеть в журнале?
7. Удовлетворяет ли Вас манера, в которой на страницах раздела ведется разговор о персональных компьютерах? Что бы Вы могли предложить, если не удовлетворяет? ]

[ У некоторых читателей возникли трудности при работе по программе "Пятиминутки с "Искрой" (4/86). При первом ее запуске на магнитном диске еще нет файла "КАРТОЧКИ", что приводит к программной ошибке на второй строке.

Этот файл необходимо организовать на предварительно размеченном для работы в режиме каталога (DC) диске, выполнив в непосредственном режиме команды:

Матчасть диванного танкиста - Страница 3 86120910

Защита от записи на диске должна быть при этом снята. После такой операции 90 секторов диска будут хранить пустую картотеку распоряжений и с ней можно будет начать работу запуском программы ]

Матчасть диванного танкиста - Страница 3 86121010
Рис. К.ИБРАГИМОВА (с.Леваши Дагестансной АССР)
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Янв 21, 2023 12:41 am

1/87
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВЕНАДЦАТОЕ, где говорится о том, как в Бейсике реализуются понятия, знакомые читателю по предыдущим семинарам.
Ведет занятие кандидат технических наук И.ДАНИЛОВ

АЛФАВИТ И СТРУКТУРА ПРОГРАММ НА БЕЙСИКЕ. Любая программа - это текст. Правда, внешне программа на Бейсике мало напоминает текст художественного произведения. Скорее она похожа на канцелярскую опись имущества: сначала номера, потом названия.

Но не будем слишком строги. Очень часто за непритязательной внешностью скрывается глубокое содержание. Таковы и программы на Бейсике. Если вы научитесь их читать (и писать!), то скоро начнете ценить простоту и даже красоту этих "неказистых" текстов.

Основной структурной единицей в программе на Бейсике является строка. Начинается каждая строка с номера, за которым через пробел следует оператор.

Строка от строки отделяется естественным образом, как при печати на пишущей машинке. Поэтому Бейсик можно назвать частично позиционированным языком: конец строки одновременно служит и границей, отделяющей один оператор от другого.

Любой оператор Бейсика обязательно начинается со служебного слова, которое указывает, ЧТО должен сделать оператор. За ним записываются операнды - то, С ЧЕМ производится действие.

Функции номера строки многообразны. Во-первых, только занумерованные строки заносятся в программу. Если вы попытаетесь ввести строку без номера, например, PRINT 2+2, то строка эта - точнее оператор, записанный в ней,- в программу не попадет, а будет выполнен немедленно, как только вы нажмете клавишу "Возврат каретки": на экране появится 4.

Во-вторых, номер строки указывает процессору последовательность выполнения строк. Независимо от того, в каком порядке вводились строки, выполняться они будут всегда в порядке возрастания номеров. Об этом позаботится транслятор. Если же в программе окажутся две строки с одинаковыми номерами, то введенная последней просто вытеснит предыдущую и займет ее место. Это облегчает ввод программ, позволяя исправлять ошибки и упущения.

Наконец, в-третьих, номер строки - это ее метка, указатель, на который можно передавать управление. Понятия номера строки и метки в Бейсике совпадают, поэтому мы будем употреблять их как синонимы.

В качестве меток можно использовать любые целые положительные числа. Однако для удобства принято нумеровать строки числами, кратными десяти. Это дает возможность при необходимости вставить между какими-либо двумя строками еще одну с промежуточным номером.

Диапазон допустимых номеров колеблется от одной версии языка к другой в довольно широких пределах. Так, в Бейсике, используемом на ЭВМ "СМ-4", допускаются числа вплоть до 32767, а в версии для ЭВМ "Искра-226" - только до 9999.

Алфавит Бейсика включает в себя буквы латинского алфавита, цифры от 0 до 9 и ряд специальных символов, играющих в зависимости от контекста разную роль.

Матчасть диванного танкиста - Страница 3 87010110

Эти символы и их устойчивые комбинации представлены таблицей. Рядом с непривычными знаками на темных полях приведены их аналоги в традиционной символике. Два символа, помещенные вместе в одной какой-либо клетке таблицы, представляют собой равнозначные варианты, используемые в разных версиях Бейсика или на разных машинах. Соответствия всегда легко устанавливаются из контекста.

Писать тексты программ на Бейсике дозволяется только с помощью перечисленных символов. Правда, есть исключение: при записи комментариев и строковых констант можно использовать любые знаки, имеющиеся на клавиатуре вашего дисплея, в частности буквы русского алфавита. Это очень удобно, так как позволяет составлять программы, понятные человеку, владеющему лишь русским языком (и Бейсиком, конечно).

ТИПЫ ДАННЫХ. Понятия, о которых пойдет речь в этом и двух последующих разделах, уже знакомы читателю по предыдущим занятиям. Посмотрим теперь, как они реализуются в Бейсике.

Мы уже говорили, что в программах на нем встречаются данные двух типов - числовые и символьные. В некоторых версиях языка числовые данные, в свою очередь, подразделяются на два типа: целые и вещественные (то есть такие, которые могут быть и не целыми).

Целочисленные постоянные имеют в Бейсике самое простое представление: они состоят из последовательности цифр, которой может предшествовать знак. После последней цифры обязательно записывается символ % - своеобразный признак целочисленности. Например:

2% 1987% -185%

Записи: 7; 6.2e5; 1.000% целыми числами с точки зрения Бейсика не являются: первые две не оканчиваются символом %, третья же, хоть и оканчивается этим символом, имеет в своем составе "нецифру" - десятичную точку.

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

Переменные и постоянные величины целого типа удобны тем, что требуют меньше места в памяти для своего хранения. Конечно, если на ЭВМ, "понимающей" Бейсик, решаются сравнительно несложные задачи, то машинной памяти обычно вполне хватает для хранения используемых данных. Экономия нескольких десятков ячеек, достигаемая при переходе на целочисленные переменные, тут вряд ли целесообразна. Из таких соображений и исходили разработчики некоторых трансляторов Бейсика, исключившие переменные целого типа из описания языка. Опыт показывает, что и там, где эта возможность есть, подобные переменные используются сравнительно редко.

Вещественные (или просто числовые) константы записываются почти так же, как в привычных математических выкладках. Отличие, пожалуй, только в том, что нет свободы в употреблении десятичной запятой и десятичной точки. В Бейсике применяется лишь второй из этих знаков: 3.1415, 2.718 и т.п. Причем если точке предшествует ноль, то его, можно опускать - скажем, писать не 0.5, а .5 и только. Если в записи числа указывается его порядок, то мантисса должна обязательно начинаться со значащей цифры. Для отделения величины порядка от мантиссы используется символ Е. Например, число 1*10**5 запишется как 1Е5, а число 2.5*10**-6 как 2.5Е-6. Такой способ записи называют формой с плавающей точкой - в отличие от предыдущего - формы с фиксированной точкой.

Использование той или иной формы записи с точки зрения языка равнозначно и диктуется лишь соображениями удобства. Правда, если число слишком велико по абсолютной величине (скажем, число Авогадро 6.02e23) или слишком мало (скажем, величина заряда электрона в кулонах 1.6e-19), то его с фиксированной точкой писать не только неудобно, но и невозможно. Дело в том, что любой транслятор воспринимает лишь сравнительно небольшое число значащих цифр, обычно шесть-семь.

Следующий тип величин, с которыми может работать Бейсик и которые значительно расширяют область его применения,- это символьные (или строковые) постоянные и переменные.

Константы этого типа представляют собой последовательность любых символов, ограниченную с обеих сторон кавычками. Кавычка не является частью константы, она лишь служит ее границей. Использование граничных символов необходимо, так как без них конец константы не был бы определен, ведь пробел - тоже символ и может являться частью константы. Примеры символьных постоянных:

"BASIC" "121" "НАУКА И ЖИЗНЬ"

В разных версиях языка существуют разные ограничения на длину строк. Например, в диалекте, используемом на "СМ-4", строка ограничивается 255 символами.

Имена переменных строкового типа обязательно должны оканчиваться специальным символом:

Матчасть диванного танкиста - Страница 3 87010210

Он не имеет названия, и программисты и зависимости от характера или настроения читают его либо как "солнышко", либо как "клоп". В типографском наборе его нет, и мы будем часто передавать его знаком x.

В некоторых версиях "Бейсика" (например, в той, что используется на "Искре-226") требуется в явном виде задавать длину строковой переменной. Если этого не делается, она считается (как говорят программисты, задается по умолчанию) равной 16 байтам, то есть 16 символам. Как описывать длину строковых переменных, мы скажем чуть позже.

Важный тип данных - массивы. В программах, где они уже встречались нам, индекс массива писался в скобках в виде целого числа или в виде переменной, которая, по нашему молчаливому предположению, могла принимать лишь целочисленные значения. Надо заметить, что в качестве индекса допускается использование любого арифметического выражения. Например, A(2*J+1). При этом вовсе не обязательно, чтобы в результате вычисления такого выражения получалась целая величина. Если результат окажется дробным, то в качестве индекса будет взята его целая часть. Например, если записано А(5.7), то машиной это будет понято как А(5).

Если вы намереваетесь использовать в своей программе массив, надо сообщить об этом транслятору, чтобы тот заблаговременно выделил область памяти для хранения элементов массива. Соответствующее сообщение оформляется с помощью специального описания. Так как в Бейсике все программные конструкции именуются операторами, то и это описание называется оператором размера. Он начинается со слова DIM (от английского dimension - размер), за которым стоит прежде всего имя массива, а далее в круглых скобках записывается число его элементов. Например:

10 DIM A(10),B%(25),Dx(5)

Как видите, тип элементов массива определяется по тем же правилам, что и тип простой переменной. Что же касается числа элементов...

Во-первых, здесь уже недопустимо употребление выражений. Здесь должно стоять число, и обязательно целое.

Во-вторых, в большинстве версий Бейсика нумерация элементов массива начинается с нуля, поэтому фактическое количество элементов на единицу больше числа, записанного в скобках. Так, в нашем примере вещественный массив А состоит из 11 элементов, целый массив В% - из 26 элементов и символьный Dx - из 6 элементов.

Нельзя сказать, чтобы это было очень удобно. Однако еще более неудобно, что это правило не всеобщее. Так, в версии, используемой на "Искре-226", нумерация элементов массива начинается с единицы.

Допускаются в Бейсике и двумерные массивы, элементы которых имеют уже два индекса, также записываемых в скобках и разделяемых запятой. Совокупность таких элементов удобно располагать в виде матриц, понимая первый индекс как номер строки, второй - как номер столбца.

Матчасть диванного танкиста - Страница 3 87010310

При описании таких массивов сначала указывается число строк матрицы, потом число ее столбцов. Массив, только что приведенный в качестве примера, в программе был бы описан так:

50 DIM C(2,3)

Оператор DIM никаких действий в программе не вызывает. Он лишь указывает транслятору, как распределить память для хранения массива. Поэтому он называется "невыполняемым".

Еще одну функцию приобретает он в тех версиях языка, где требуется явно задавать длины символьных переменных. Делается это также с помощью оператора DIM. Вот строка программы для "Искры-226":

70 DIM A1x20,Bx(10,10)10

Здесь описана символьная переменная A1x длиной 20 байтов и символьный массив Вx, состоящий из 100 элементов длиной 10 байтов каждый.

Оператор DIM, будучи невыполняемым, может стоять в любом месте программы. Важно только, чтобы логически он предшествовал обращению к элементам массива, описанного в нем.

И еще одно замечание. В программе может быть любое количество операторов размера, но имена массивов повторяться в них не должны. Недопустимо, к примеру, в одном из операторов DIM задать массив А(10), а в другом - А(7,8 ).

ПРИСВАИВАНИЯ. Как пешка самая распространенная из шахматных фигур, так и оператор присваивания наиболее употребительный из операторов любого алгоритмического языка. Читатель мог убедиться в этом на наших предыдущих занятиях. И подобно тому, как в традиционной шахматной нотации пешка не имеет собственного имени, так и в Бейсике оператору присваивания "разрешается" выступать, не представляясь своим титулом LET. Он единственный, кто распознается транслятором по его форме, даже без названия. Например:

Матчасть диванного танкиста - Страница 3 87010410

Самый простой из приведенных здесь операторов присваивания первый по счету. Все его действия заключаются в том, чтобы присвоить переменной А то значение, которое в данный момент имеет переменная В. Следующие операторы уже потребовали пояснений, помещенных справа. Непосвященный лишь с их помощью поймет, что SQR означает квадратный корень (сокращение от английского square root), ATN - это то же самое, что arctg, а символ ^ означает возведение в степень.

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

Сопоставьте вышеперечисленные операторы Бейсика с пояснениями к ним. В отличие от математической формулы выражение на Бейсике "одноэтажно": "хвост" от изображения квадратного корня не простирается над другими символами; деление записано в одну строчку, а не в две, как в формуле. Это заставляет использовать лишние (по сравнению с формулой) скобки.

После сказанного нетрудно сообразить, что последние два из приведенных операторов вычисляют длину вектора и угол, образованный им с осью абсцисс, через его координаты.

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

Матчасть диванного танкиста - Страница 3 87010510

В отличие от традиционной математической символики одноместный минус можно ставить без всяких скобок вслед за любым другим знаком. Например, 5*-3 или А+-В. Аргументом любой функции, записанной какими-либо буквосочетаниями, служит выражение, стоящее непосредственно далее в скобках. Поэтому SIN(X+Y)^2 следует отождествить с традиционным sin**2(x+y), а не с sin((x+y)**2). Если же мы хотим перевести па Бейсик вторую из последних двух символических записей, то писать надо так: SIN((X+Y)^2).

Вообще говоря, во избежание путаницы и для большей наглядности рекомендуем в "спорных" случаях без стеснения пользоваться скобками. Например, по нашему мнению, из двух выражений SIN(X+Y)^2 и (SIN(X+Y))^2, дающих одинаковый результат, второе, пожалуй, нагляднее.

В отличие от числовых выражений (то есть тех, что принимают числовые значения) символьные гораздо более просты в обращении. Действия над ними не знают иерархии, поскольку их всего одно - сложение, или конкатенация. Результат вычисления символьного выражения - всегда строка символов. Например:

10 A1x="КЕ"
20 A2x="PA"
30 АЗx="ТА"
40 Вx=A1x+A2x
50 Cx=A3x+A2x
60 Dx=A2x+A1x+A3x
70 PRINT Вx,Cx,Dx

КЕТА ТАРА РАКЕТА

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

По предыдущим занятиям нам знакома функция, вырезающая подстроку из строки. Ее обозначение SEGx завершается "солнышком", напоминающим, что ее значение тоже представляет собой строку - часть той, что указана вслед за обозначением SEGx в скобках. А далее в скобках стоят через запятую два числа: номера первого и последнего из вырезаемых символов. Например:

100 Ax="ПОБЕДА"
120 Cx=SEGx(Ax,2,5)
140 PRINT Cx

Результат: ОБЕД, то есть часть строки ПОБЕДА, начиная со второго символа и кончая пятым.

В некоторых версиях Бейсика есть функции LEFTx и RIGHTx. Они отрезают соответственно от левого или от правого конца строковой переменной такое количество знаков, которое указано в скобках далее, после запятой.

40 Ax="ПАССАЖИР"
50 Bx=LEFTx(Ax,3)
60 Cx=RIGHTx(Ax,3)
70 PRINT Bx, Cx

После выполнения такого фрагмента на дисплее появится:

ПАС ЖИР

Есть в Бейсике выражения еще одного типа - условные. В них записываются условия. Например: X<Y, (A+В)/С<1E-5 и т.п. О них речь пойдет в следующем разделе.

КОНСТРУКЦИИ ПРОГРАММИРОВАНИЯ. На предыдущих занятиях, говоря об управлении последовательностью операций, мы называли три основных конструкции программирования: следование, выбор, повторение.

Если следование во всех алгоритмических языках выражается практически одинаково, то о других конструкциях этого сказать нельзя.

Сначала поговорим о выборе. Как мы уже знаем, его простейшая разновидность, условный оператор, записывается в Бейсике в классической форме: IF (условие) THEN (оператор). Если условие выполняется, управление передается на оператор, стоящий после слова THEN. Если не выполняется, то этот оператор игнорируется.

Например, в программе, подсчитывающей число отрицательных элементов массива, может быть такая строка:

40 IF A(I)<0 THEN K=K+1

Здесь после слова IF записано условное выражение. В самом общем виде оно представляет собой два арифметических выражения, связанных знаками той или иной операции сравнения: "равно", "не равно", "меньше", "больше", "меньше или равно", "больше или равно".

Бейсик позволяет применять операции сравнения не только к числовым, но и к символьным величинам. Их можно сравнивать, во-первых, на совпадение и несовпадение. Пояснять эту процедуру вряд ли нужно. А вот по поводу следующей, в записи которой символьные величины связываются знаками "больше" или "меньше", пояснения необходимы. Дело в том, что коды букв упорядочены по латинскому алфавиту. Поэтому, например, если Ах=ABCD, а Вx =ACBD, то Ax<Bx.

Если длины строк не совпадают, то более короткая строка дополняется справа пробелом. Код символа "пробел" меньше, чем код любой буквы или цифры, поэтому, скажем, "X"<"XY", но "Y">"XY".

При проверке числовых выражений на равенство нужно соблюдать известную осторожность. Вот поучительный пример:

10 A=1/100=100
20 if A=1 then 50
50 PRINT "УСЛОВИЕ НЕ ВЫПОЛНЕНО A=";A
40 STOP
50 PRINT "УСЛОВИЕ ВЫПОЛНЕНО"

Результат работы этой программы на некоторых ЭВМ довольно занятен.

УСЛОВИЕ НЕ ВЫПОЛНЕНО А=1

Это уже ни в какие ворота не лезет! С одной стороны, условие не выполнено, то есть A!=1, а с другой А=1.

В чем же причина парадокса? Значение А, каким оно записывается в память машины после выполнения первого оператора нашей программы, отличается от единицы, поэтому условие не выполняется. Но отличие это настолько незначительно, что выводимое на дисплей значение величины А округляется и принимается равным единице.

(Хотим предупредить пользователей, на чьих машинах наш поучительный пример не приведет к парадоксу, то есть будет выведена строка "УСЛОВИЕ ВЫПОЛНЕНО": благоприятный исход не должен притуплять бдительности при проверке на равенство констант и результатов вычислений).

Чтобы обойти подобные казусы, можно порекомендовать два способа. Первый: сравнивать только целочисленные переменные и константы. Второй: отказаться от равенства. Например, в нашем случае можно было бы записать 20-ю строку так:

20 IF ABS(A-1)<1E-10 THEN 50

Иначе говоря, можно было бы сравнивать абсолютную величину разности с некоторым очень маленьким числом (в нашем примере с 1e-10). Никаких казусов тогда бы не произошло.

Но вернемся к условным операторам. В них вместо слова THEN позволительно ставить GOTO, то есть писать так: IF (условие) GOTO (метка) - как это сделано, например, в начальной строке следующей программы. Такая конструкция называется условным оператором перехода. Есть и безусловный оператор перехода: GOTO (метка).

Напомним: он позволяет прерывать естественный ход выполнения операторов программы (то есть ход их выполнения в той последовательности, как они записаны в тексте) и передавать управление оператору, записанному в другом месте программы. Например, так, как изображено на рисунке:

Матчасть диванного танкиста - Страница 3 87010610

Подобное использование GOTO и имел, вероятно, в виду известный голландский математик Э.Дейкстра, характеризуя оператор перехода как вредный, запутывающий.

Ни в коей мере не пытаясь оспорить мнение столь уважаемого авторитета, автор осмелится утверждать, что называть оператор GOTO вредным - это то же, что называть вредной линейку, которой в стародавние времена учитель безжалостно лупил по пальцам шаловливых учеников.

Вредна все же не линейка и не GOTO, a неправильное, нет, неразумное скорее, использование их.

А сам по себе оператор перехода - вещь довольно полезная. Например, в Бейсике его присутствие - суровая необходимость. Дело в том, что альтернативного оператора в этом языке нет. Однако с помощью операторов перехода альтернатива легко реализуется.

Рассмотрим программу, иллюстрирующую альтернативную конструкцию: если X>=0, то Y=sqr(X), иначе Y=X**2; вывод Y. Она может быть записана так:

10 IF X<0 GOTO 40
20 Y=SOR(X)
30 GOTO 50
40 Y=X^2
50 PRINT Y

Матчасть диванного танкиста - Страница 3 87010710

Обратите внимание: при записи этой программы нам понадобился не только условный, но и безусловный оператор перехода. Только в паре эти операторы позволяют реализовать любые альтернативные конструкции.

Можно с их помощью реализовать и выбор. Например, алгоритм, отрабатывающий в зависимости от значения величины К различные ветви программы, начинающиеся со строк 100, 200, 300, 400:

50 IF K=1 THEN 100
60 IF K=2 THEN 200
70 IF K=3 THEN 300
80 IF K=4 THEN 400

Впрочем, писать в программе такую цепочку нет необходимости. Есть в Бейсике для этой цели специальный оператор, позволяющий заменить ее всю одной такой строкой:

50 ON K THEN 100,200,300,400,500

Или такой:

50 ON K GOTO 100,200,300,400,500

Оператор ON... THEN (вариант - ON... GOTO) называется множественным ветвлением. После слова ON может стоять любое выражение, принимающее числовое значение. Если оно не целое, то от него берется целая часть. После этого управление передается на одну из меток, перечисленных после слова THEN (GOTO) - именно на ту, порядковый номер которой совпадает с полученной целой частью. Если эта целая часть меньше единицы или больше числа приведенных меток, то оператор выполниться не может и выдается сообщение об ошибке.

Операторов, с которыми мы теперь знакомы, вполне достаточно и для реализации повторений.

Начнем с конструкции ЦИКЛ ПОКА. Красивый пример его использования - решение уравнения вида x=f(х) итерационным методом.

Напомним, в чем состоит этот метод. Берется некоторое x0 - начальное приближение к искомому корню. Последующие приближения вычисляются по правилу x[n+1]=f(xn), пока не станет истинным условие |x[n+1]-xn|<=e, где e - заданная абсолютная погрешность.

Вычисление функции обозначается в нашей программе символом FNF(). Разберите приводимый ниже текст программы и убедитесь, что он соответствует описанию итерационного метода и его блок-схеме, структура которой и представляет собой графическое выражение конструкции ЦИКЛ ПОКА.

100 X=X0
110 Z=FNF(X0)
120 IF ABS(X-Z)<=E GOTO 160
130 X=Z
140 Z=FNF(X)
150 GOTO 120
160

Матчасть диванного танкиста - Страница 3 87010810

Теперь ЦИКЛ ДО. Здесь мы рассмотрим часто встречающуюся в статистических задачах проблему вычисления суммы N элементов массива A и суммы их квадратов. Обозначим эти суммы S1 и S2.

50 S1=0
60 S2=0
70 I=1
80 S1=S1+X(I)
90 S2=S2+X(I)^2
100 I=1+1
110 IF I<=N GOTO 80

Матчасть диванного танкиста - Страница 3 87010910

Цикл вычисляется до тех пор, как значение I превысит N.

Если ЦИКЛ ПОКА на Бейсике иначе, чем в рассмотренном примере, реализовать нельзя, то для структуры ЦИКЛ ДО есть специальный оператор, точнее, два оператора, работающих в одной упряжке.

Это оператор заголовка цикла FOR ... TO и оператор конца цикла NEXT. В первом вслед за словом FOR указывается начальное значение некоторой целочисленной величины, а после слова TO - ее конечное значение. Например, FOR I=1 TO N.

Переменная I называется параметром цикла. Если ее начальное и конечное значение задаются числовыми выражениями, то от них берется целая часть. Оператор NEXT с каждым повторением цикла увеличивает на единицу значение I, и когда оно превысит значение N, указанное в операторе FOR... TO, произойдет выход из цикла.

Наш недавний статистический пример с помощью только что разобранной пары операторов запишется так:

50 S1=0
60 S2=0
70 FOR I=1 TO N 80
80 S1=S1+X(I)
90 S2=S2+X(I)^2
100 NEXT I

Думаем, что работа этого фрагмента понятна и без комментариев. Скажем только, что операторы, записанные между FOR... TO и NEXT, представляют собой тело цикла.

КТО ЖЕЛАЕТ ПРОДОЛЖИТЬ ЗАНЯТИЯ?
Наш разговор о Бейсике завершится на одном из ближайших семинаров по информатике. Дальнейшие занятия "Школы начинающего программиста" планируется посвятить Паскалю, Фортрану, СИ, Алголу, Рапире. ПЛ/1, быть может, другим алгоритмическим языкам.

Желающих провести занятие по тому или иному из них просим сообщить об этом в редакцию. Текст предлагаемой публикации должен быть построен в том же порядке, что и наша беседа о Бейсике, не повторять уже сообщавшихся в ней сведений и содержать ие более 25 машинописных страниц. Отступления от этих пожеланий просим обосновать. Хотелось бы, чтобы по прочтении рассказа о том или ином языке у читателей сложилось представление о его специфике, о наиболее подходящих для него сферах применения, о методах составления программ на нем.

Подобная организация занятий уже применялась нами однажды, когда речь на них шла о программируемых микрокалькуляторах. Уроки нашей школы вели Г.В.Славин (Тарту), И.К.Вязовский (Люберцы, Московской области), М.Ф.Поснова и Н.Н.Поснов (Минск), Г.Н.Бакунин, В.Л.Леонтьев (Винница), Л.Ф.Штернберг (Куйбышев), А.Н.Цветков, М.И.Петров, С.В.Комиссаров (Москва), Я.К.Трохименко (Киев). Их выступления включены в книгу И.Д.Данилова и Ю.В.Пухначева "Микрокалькуляторы для всех", вышедшую в издательстве "Знание" в прошлом году. Дружное сотрудничество популяризаторов информатики приносит хорошие результаты.

Многообещающий путь от журнальной публикации к дальнейшим статьям, брошюрам, книгам мы вновь предлагаем читателям, желающим рассказать на наших страницах про Паскаль, Фортран и другие алгоритмические языки.

Расскажите об этом приглашении знакомым опытным программистам.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Янв 22, 2023 12:20 am

Очередная попытка понять, зачем нужны эти самые персоналки...

2/87
ИНСТРУМЕНТ ИНТЕЛЛЕКТА
Журналом "Вопросы философии" совместно с Московским домом ученых и Научным советом АН СССР по комплексной проблеме "Философские и социальные проблемы науки и техники" был проведен в Московском доме ученых "Круглый стол" на тему "Социальные и методологические проблемы информатики, вычислительной техники и средств автоматизации". Обсуждение проблемы привлекло внимание крупных ученых, представителей естественных и гуманитарных наук, специалистов самых разных научных направлений.
Мы публикуем в сокращении некоторые из выступлений участников "Круглого стола", полностью его материалы опубликованы в журнале "Вопросы философии" в ##9, 10 и 11 за 1986 год.

ИНФОРМАТИКА И ФИЛОСОФИЯ
Академик Г.ПОСПЕЛОВ
Во всем мире неуклонно происходит увеличение доли людей, работающих в информационной сфере в сравнении с производственной. Так, например, в США сто лет назад в информационной сфере было занято 5 процентов работающих и в производственной - 95 процентов, а в 1980 году это соотношение было уже 45 и 55 процентов, причем подобное перераспределение людей продолжается.

Автоматизация и компьютеризация информационной сферы, в общем, отстает от автоматизации производственной сферы. В связи с этим информационная сфера, если не принять энергичных мер, станет тормозить рост общественной производительности труда. Массовая компьютеризация информационной сферы должна повлечь за собой использование ЭВМ широкими кругами непрограммирующих специалистов, и нужно обеспечить машинам такие свойства, чтобы с ними можно было обращаться без всяких посредников: математиков, программистов, операторов. В связи с этим усилился интерес к искусственному интеллекту, к его программно-аппаратным средствам, получившим название "комплексный диалоговый интерфейс", или просто "интерфейс". К сожалению, до сих пор не изжито представление о том, что возможно создать искусственный интеллект как синоним искусственного разума - об этом и речи быть не может по целому ряду принципиальных соображений. Можно говорить лишь о важнейшем направлении в информатике, связанном с имитацией или моделированием на ЭВМ отдельных творческих процессов. Здесь одно из двух главных направлений - назовем его прагматическим - мало интересуется тем, что происходит в человеческом мозгу, а занято построением ЭВМ и их программ, позволяющих воспроизвести отдельные процессы, по нашим человеческим оценкам - творческие.

Возьмем шахматы. Чем руководствуется шахматист, делая тот или иной ход,- прецедентами, прошлым опытом, умением, интуицией, догадкой, просмотром на сколько-то ходов вперед? Мы не знаем. Но зато мы в точности знаем, как это делает ЭВМ, так как человек составил для нее программу-инструкцию, позволяющую количественно оценивать ту или иную ситуацию. На машине играет в шахматы не программа, а все тот же человек, который сумел формализовать шахматную игру и составить программу.

Прагматическое направление в работах по искусственному интеллекту сейчас делается господствующим, оно уже привело к появлению целого класса систем, ориентированных на знания. Подчеркиваю, не только на данные, но и на знания. И вопрос представления знаний в машине стал центральной проблемой искусственного интеллекта.

Сейчас среди всех систем, ориентированных на знания, особо важны так называемые экспертные системы. Мы хорошо знаем, что во всяком использовании ЭВМ существует триада: модель, алгоритм, программа. Для того чтобы использовать машину, мы должны обязательно иметь модель в виде уравнения или других математических категорий и далее построить алгоритм решения на основе этой модели и запрограммировать его.

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

Пояснение этих терминов потребовало бы много времени, я скажу несколько слов лишь о продукционных системах. Мы живем в мире правил и окружены правилами, или, другими словами, продукциями. В медицине - это правила диагностики и лечения, накопленные тысячелетиями. Вспомним грамматические правила, правила дорожного движения. Все правила укладываются в формулу "если - то". Как видно, в продукции есть левая часть - ситуация и правая часть - действие. Если взять статьи Уголовного кодекса, то левая часть - это диспозиция, а правая - санкция. Набор продукций из какой-либо области знаний образует базу знаний экспертной системы и в зависимости от состояния системы в диалоге с пользователем определяется по левым частям та или иная продукция, которая изменяет состояние системы.

С помощью названных выше формализмов, особенно продукционных систем, сейчас стали интенсивно развиваться экспертные системы искусственного интеллекта и построенные на этой основе так называемые мягкие модели. Примером применения давно привычных жестких моделей могут служить некоторые системы автоматизированного проектирования - САПР. Однако многое, в частности опыт проектировщика, может быть отражено лишь в мягких моделях. Синтез жестких и мягких моделей, переход к так называемым гибридным экспертным системам, резко повысит эффективность тех же САПР.

Переход к безбумажной информатике, о чем писал в свое время академик В.М.Глушков, совершенно необходим хотя бы потому, что иначе мы все леса скоро переведем на бумагу. В свое время мне попалась публикация, где было сказано, что в течение года у нас циркулирует в деловой сфере 80 миллиардов документов. Если предположить, что каждый документ - это примерно 10 машинописных страниц, то получится 150 печатных листов, или 5 книг по 30 печатных листов на душу населения. Нас затопил бумажный поток, причем боюсь, что большинство этих бумаг просто не читается.

Подводя итоги, хочу высказать уверенность, что ЭВМ, и в том числе персональные, объединенные в сети и оснащенные интеллектуальным интерфейсом, неотвратимо приведут к революционным изменениям, к которым нужно быть готовым и которые нужно готовить.

ВЗАИМОДЕЙСТВИЕ ЧЕЛОВЕКА С ЭВМ В РЕШЕНИИ ТВОРЧЕСКИХ ЗАДАЧ
Доктор философских наук В.ТЮХТИН

Никакое совершенствование информационно-логических программ не заменит творческого потенциала человека. Причина, в частности, в том, что нет универсального алгоритма открытия и формирования новых алгоритмов. Ставка только на совершенствование алгоритмов и программ представляет собой явное преувеличение роли машинного фактора и недооценку человеческого фактора в решении творческих задач. Перечислю важнейшие неформализуемые на сегодня творческие компоненты: постановка задачи или реализация проблемной ситуации; самостоятельная выработка критериев отбора нужных, приводящих к решению операций; генерация догадок и гипотез в процессе поиска основной идеи решения (это научная, художественная, техническая фантазия, не сводимая к комбинаторике и генерации случайных состояний); интерпретация формального решения; понимание и др.

Наиболее плодотворным представляется решение проблемы оптимизации общения человека с ЭВМ на пути усиления возможностей друг друга. Проблема оптимизации особенно актуальна в условиях, когда возрастает сложность задач, связанных с научно-техническим и социальным прогрессом.

Особо хотелось бы сказать об общей культуре людей, занимающихся информатикой, компьютерной техникой. Среди компонентов общей культуры большое значение имеет методологический и гносеологический анализ проблем и понятий. Нередко случается, что крупный ученый допускает элементарные методологические ошибки, на их основе вырастают и ошибки теоретические.

НОВЫЕ ФОРМИРУЮЩИЕСЯ НАУКИ
Кандидат технических наук Г.ПОВАРОВ

Наука XX века столкнулась с новым уровнем сложности, с необходимостью исследовать и создавать взаимодействие многих разнородных элементов. В ответ возник ряд широких, комплексных направлений, опирающихся на синтез и абстракцию. Они часто трактовались как новые науки, но, по существу, это проекты наук, своего рода протодисциплины. Их понятия не развиты, границы нечетки, они все в строительных лесах. Можно сказать, что они ищут себя и что это нелегкие поиски. Энтузиазм и критика сменяют друг друга, голос моды нарушает логику идей. Тем острее потребность в методологическом анализе и логическом упорядочении теории.

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

В свое время Н.Винер определил кибернетику как общую иауку об управлении и связи, но то была лишь свободно набросанная программа. Управление и связь были сведены к переработке и передаче информации. Н.Винер указал на проблемы самоорганизации и искусственного интеллекта как на высший предмет проектируемой науки. В дальнейшем кибернетика стала развиваться в сторону общей теории систем, и иногда ее прямо отождествляли с системологией.

Общие исследования сложных систем ныне довольно явственно распадаются на три главных отдела. Первый из них - общая теория систем, системология, ее основная задача - поведение системы, взаимодействие со средой. Входные и выходные переменные в системе предполагаются произвольными, в технике этот переход соответствует классической автоматике.

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

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

ВКЛАД ПСИХОЛОГИЧЕСКОЙ НАУКИ
Доктор психологических наук О.ТИХОМИРОВ

Социальные и методологические проблемы информатики, вычислительной техники и средств автоматизации тесно связаны с проблемами психологическими. Так, например, представляет интерес воздействие вычислительной техники на формирование новых общностей (таких, например, как группа пользователей системы коллективного пользования ЭВМ), изменения в структуре научного коллектива, изменения в структуре традиционных ролевых функций и возникновение новых, изменение значения терминов, таких, скажем, как "поведение", "общение", "интеллект", "знание", "цель", "сознание" и "самосознание".

Использование новейших информационных технологий приводит к существенным изменениям в психике, преобразует познавательные процессы, деятельность и общение человека, сознание и межличностные отношения. Эти изменения обычно включают как позитивные, так и негативные моменты, и сейчас нужен их конкретный анализ, так как массовая компьютеризация началась без проведения предварительного изучения ее психологических последствий.

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

ИНФОРМАЦИЯ - ИНФОРМАТИКА - ИНФОРМАЦИОННАЯ КУЛЬТУРА
Доктор технических наук Г.ВОРОБЬЕВ

Вступление человечества в информационную эру означает, в частности, что большая часть населения будет работать в сфере производства информации и информационных услуг. Слово "информация" вышло из задворков словарей европейских языков и стало выражением философского понятия. Вслед за "информацией" получили распространение производные понятия: информационная система, информационная культура, информационный образ жизни, информационная этика, информационный работник и др. Многие научные дисциплины обзавелись направлениями с присоединением слова "информационный", появились информационная география, информационная медицина, информационная экономика, информационное право.

Человек - информационная система, рассчитанная на обработку определенных объемов семантической (смысловой) информации в определенном режиме. Оптимизация этого режима обеспечивает здоровье работника и высокую производительность труда. Информационный образ жизни человека ближайшего будущего - вот чем должны заниматься вместе философы и специалисты по информатике.

В области массовой коммуникации изучаются пути повышения эффективности источников информации, которая должна быть полезной, новой, полной, достоверной. Разрабатываются способы борьбы с дезинформацией, и в частности методы восстановления правдивой информации (реинформация). Революция, которую несут персональные компьютеры, меняет функции учреждений и образ жизни людей. Все это требует серьезного изучения природы и свойств информации, создания новых методов ее обработки и преобразования. Этим как раз должна заниматься наука, для которой более всего подходит название "информатика", а начинается она с философского рассмотрения феномена информации и изучения ее свойств.

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

Информатика должна воочию показать, что общение "человек-человек" на человеческом (неформализованном) языке останется преимущественным видом общения, а общение "человек-машина" лишь дополнит его. Компьютеризация не подавляет, а раскрепощает личность, оставляя машине - машинное, а человеку - человеческое.

ТВОРЧЕСКОЕ МЫШЛЕНИЕ И КОМПЬЮТЕРНАЯ РЕВОЛЮЦИЯ
Доктор технических наук Д.ПОСПЕЛОВ

Сегодня, пожалуй, впервые в истории научно-технического прогресса возникла ситуация, связанная с массовым отчуждением профессиональных знаний от специалистов и передачей их в пользование другим специалистам. Конечно, передача знаний происходила всегда - ученики получали знания от своих учителей, авторы научных книг делились своими знаниями с читателями и т.п. Но этап, который наступил сейчас, имеет ряд радикальных отличий.

Прежде всего теперь знания деперсонализируются. Ученик всегда знал своего учителя, на обложке книги всегда стояло имя автора. И хотя это, к сожалению, не спасало от возможного присваивания чужих научных достижений и знаний без ссылки на источник, но все-таки сохраняло в большинстве случаев авторство. При передаче же профессиональных знаний компьютеру, помещении их в разного рода экспертные системы, происходит обезличивание знаний. Такое положение вызывает вполне обоснованные возражения ведущих специалистов. Их научное положение, социальная значимость, психологический комфорт во многом определяются тем, что их знания и умения находятся выше среднего уровня. Массовое же внедрение экспертных систем, аккумулирующих вложенные извне знания, низводит этих специалистов до среднего уровня. Широкое распространение "отчужденных" профессиональных знаний благотворно скажется на поднятии среднего профессионального уровня специалистов, но, вполне возможно, приведет к снижению творческой активности части специалистов - зачем напрягаться, если экспертные системы всегда могут прийти на помощь. Возможно также снижение активности учащихся при овладении специальностью, так как они будут надеяться скомпенсировать недостаток знаний за счет взаимодействия с экспертными системами.

Компьютеры как старых типов, так и новых поколений очень "логичны", они "привыкли" работать с символьными выражениями на высоком уровне абстракции. Общение с ними заставляет людей все больше и больше совершенствовать тот стиль мышления, который условно можно было бы назвать алгебраическим и который противопоставляется другому стилю мышления - геометрическому. Алгебраическое мышление имеет дело в основном с разложением объектов, всевозможными их классификациями по различным логическим основаниям. Именно это и требуется для компьютеров. Массовая компьютеризация, широкое внедрение машин в школьное и студенческое образование приведут к тому, что развитие алгебраического мышления получит мощный стимул. А наше образование, к сожалению, и так ориентировано главным образом на подавление образного, синтетического, эмоционально окрашенного геометрического мышления за счет алгебраического. Недаром так ценим мы умельцев, каким-то "шестым чувством" ощущающих суть предметов внешнего мира, ценим не слишком многочисленных крупных художников или композиторов, архитекторов и скульпторов - словом, всех тех, в ком геометрическое мышление не оказалось под влиянием мощной доминанты алгебраического мышления.

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

И последнее, что мне хотелось бы отметить: общение с компьютером во много раз проще, чем общение с другим человеком. Уход в мир компьютера может породить у ряда людей иллюзию жизни в созданном для себя вполне комфортном и психологически стопроцентно приемлемом мире. Такая опасность действительно существует, это подтверждается появлением пока еще немногочисленных "ультрапрограммистов", у которых социальные связи с внешним миром оказываются ослабленными. Такое положение вряд ли может быть благом для общества, здесь необходимы всесторонние исследования социологов, психологов и медиков.

КОМПЬЮТЕРНАЯ РЕВОЛЮЦИЯ И СОЦИАЛЬНЫЕ СТРУКТУРЫ
Доктор философских наук А.ЗОТОВ

Компьютеризация, как и связанная с нею роботизация производства, приводит к существенному изменению не только характера труда, но и многих социальных отношений и структур.

Начнем с того, что многие виды трудовой деятельности уже сегодня в принципе могут быть полностью автоматизированы. Если, по американским данным, 10-15 лет назад эта возможность открывалась для 20 процентов видов деятельности, то к 1990 году их доля возрастет до 80 процентов. Довольно сложные производства, которые практически полностью автоматизированы и роботизированы, сегодня уже не редкость, хотя даже в развитых капиталистических странах в целом их немного в общей массе промышленного производства.

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

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

Еще одна тенденция - распадение многотысячных производительных коллективов и крупных городов. Признаки этого уже заметны, в частности, в США, где, видимо, надвигается бум малых городов.

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

ИНФОРМАТИКА И КИБЕРНЕТИКА
Доктор технических наук Л.КУЗИН

Один из центральных разделов кибернетики - искусственный интеллект. Системы искусственного интеллекта, функционально моделирующие естественный интеллект, это своего рода усилители интеллектуальных способностей человека, такие, как механические устройства - экскаваторы, подъемные краны и другие,- являются усилителями мускульной силы. В мире сейчас наблюдается бум в области искусственного интеллекта, наступила эпоха интеллектуальных компьютеров, баз знаний, индустрии знаний, систем накопления и переработки знаний. На смену традиционной технологии построения систем электронной обработки данных в виде АСУ предложена так называемая новая информационная технология, которая должна обеспечить переход, перерастание индустрии электронной обработки данных в индустрию электронной обработки знаний.

По данным американских специалистов, в 1983 году было продано прикладных систем искусственного интеллекта на сумму 100 миллионов долларов, в 1990 году эта сумма возрастет до 4 миллиардов, в 1995 году - до 9 миллиардов долларов.

Трудно предсказать, к каким социально-экономическим последствиям приведет создание индустрии искусственного интеллекта. Достаточно отметить, что он резко повышает производительность труда, причем во многих случаях производительность (в частности проектировщика) повышается примерно в сто раз.

ПРОТИВОРЕЧИЯ КОМПЬЮТЕРИЗАЦИИ
Доктор философских наук И.НОВИК

Задумываясь о соотношении искусственного и естественного интеллекта, необходимо учитывать очевидное противоречие - то, что становится искусственным и передается машине, перестает быть интеллектом, а то, что подлинно интеллектуально, остается вне функций компьютера. Причем мы не можем получить выигрыш в искусственном интеллекте, не проиграв чего-то в естественном. Подобное уже бывало - когда мы что-то приобретали в техническом отношении, то и что-то теряли, например, в экологическом плане. Здесь нужен трезвый анализ максимально полного перечня всех "за" и "против". Например, такой негативный момент в условиях растущей электронизации: может начаться процесс исчезновения книг, а содержимое книг и журналов, выводимое из центральной машины на дисплеи индивидуальных пользователей, в каких-то отношениях может оказаться весьма неудобным. Мы очень активно начинаем развивать искусственный интеллект, весьма мало еще зная естественный. Мы, например, не знаем, как возникает качественный скачок в человеческом информационном процессе, а ведь в нем главная ценность творчества.

При любом росте электронизации остается вечный вопрос: как продуцировать новую информацию? Еще идут споры, дает ли ЭВМ принципиально новую информацию, или она лишь перерабатывает данные человека, переставляет их элементы. Признание существенных ограничений возможностей ЭВМ практически полезно: нельзя перегружать корабль чрезмерными надеждами. Машины за нас не решат человеческих проблем, и это важно сказать сейчас, когда происходит такое увлечение компьютерами. Дети часто даже полагают, что таблицу умножения сейчас учить не обязательно, раз счет автоматизирован. Если мы не задумаемся над противоречиями компьютеризации, а будем только говорить о ее плюсах, то рискуем упустить из вида объективный ход вещей.

Становление информатики как бы обошло трудности, которые связаны с определением природы информации, и это остается большой проблемой для философов. Уже в рамках самих информационных процессов остается важным понимание соотношения информации формальной и информации семантической.

ЛИНГВИСТИЧЕСКИЕ АСПЕКТЫ КОМПЬЮТЕРИЗАЦИИ ЧЕЛОВЕЧЕСКОЙ ДЕЯТЕЛЬНОСТИ
Доктор филологических наук Б.ГОРОДЕЦКИЙ

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

Что же конкретно заставляет уже сегодня говорить об острой потребности в лингвистическом обеспечении компьютеризации? Прежде всего это гигантские объемы накопленной и постоянно пополняемой информации, которая подлежит обработке с помощью ЭВМ. Поскольку эта информация часто организована средствами естественного языка, ее реальное освоение возможно лишь при автоматической смысловой обработке текстов, без предварительной препарации их человеком.

Эффективное использование знаний, содержащихся в текстах, требует новых стратегий обработки информации, отличных от традиционных логических подходов. Такие стратегии должны учитывать смысловые законы естественного языка. Например, из высказывания "Иван вернул мне книгу" следует, что книга была ранее у меня; этот вывод мы делаем на основании той части толкования глагола "вернуть", которая называется пресуппозицией. Или: из высказывания "Он заставил мотор остановиться" можно сделать заключение, что он остановил мотор нестандартным способом; это так называемая коммуникативная импликатура, подсказываемая в данном случае тем способом выражения, который выбрал говорящий.

Оперативная, удобная, развивающаяся кооперация человека и машины будет опираться на естественный язык, точнее, определенный подъязык, связанный с некоторой сферой общения или классом решаемых задач.

Лингвистическое обеспечение автоматизированных систем - это совокупность средств, позволяющих осуществлять компьютеризацию языковой деятельности. Речь, в частности, идет о создании того или иного типа автоматизированной системы обработки текста (АСОТ) - некоторого процессора, на входе и на выходе которого присутствует текстовая информация на естественном языке. Типы АСОТ многообразны и могут быть нацелены на моделирование различных языковых процессоров, таких, например, как диалоговое взаимодействие, сжатие информации, реферирование текста, логическая обработка содержания, перевод на другой естественный язык и т.д. С собственной лингвистической точки зрения процессы, осуществляемые в машине при решении подобных задач, сводятся к перезаписи информации на тех или иных (естественных и искусственных) языках. Внешние критерии, которыми руководствуются создатели АСОТ, подводятся под общую формулу "оптимизация общения человека и машины". Именно эту задачу решает такая комплексная научная дисциплина, как компьютерная (вычислительная) лингвистика и ее наиболее существенная часть - вычислительная семантика.

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

Язык - незаменимый помощник в сфере рационального мышления, так же как и в сферах эмоционального общения. Язык - фактор регулирования практически любой человеческой деятельности. Компьютерное моделирование языка и речевой деятельности нуждается в солидной теоретической базе. Нужны специальные теории, которые в настоящее время существуют в зачаточном состоянии либо отсутствуют вовсе. Думается, моделирование языков (естественных и искусственных) вписывается в проблему моделирования способностей человека. Языковая способность - это способность, делающая человека человеком, возникающая и развивающаяся под воздействием практических потребностей. Проявления ее многообразны, но особо следует подчеркнуть роль языка в мыслительной деятельности, в организации памяти, в процессах коммуникации человека с окружающими и самим собой.

Слов нет, лингвистика должна повернуться лицом к новым задачам, выдвигаемым компьютеризацией. И в то же время компьютерная грамотность должна непременно включать в себя и грамотность лингвистическую. А это, в частности, значит, что по-новому должно вестись и преподавание языковедческих предметов в школе.

Обзор подготовил доктор философских наук В.ГОРОХОВ

...
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Янв 22, 2023 12:24 am

...

ПОМОЩНИК НА ВСЕ РУКИ
Различными путями идет развитие вычислительной техники и, в частности, быстро улучшаются технические характеристики и растут вычислительные возможности малых ЭВМ. Качество, присущее любому современному компьютеру, даже совсем небольшому - это способность оказывать интеллектуальную поддержку человеку. Машины, в том числе и микроэвм, теперь не столько считают, сколько обрабатывают самую разную информацию и представляют результат в виде, наиболее удобном для человека, например, в виде чертежей, графиков, текстов, таблиц.

Чтобы проиллюстрировать эти возможности ЭВМ, мы сделали несколько снимков с экрана персональных компьютеров в различных лабораториях Вычислительного центра АН СССР, где наряду с решением других задач информатики разрабатывается программное обеспечение для персональных ЭВМ.

Матчасть диванного танкиста - Страница 3 87020110

1. Идет разговор оператора с системой геометрического моделирования, которая, в свою очередь, является частью системы автоматизации проектирования в машиностроении. В окошках на экране видны трехмерные изображения элементов проектируемой конструкции. Машина, по заложенным в нее параметрам, создает на экране изображение детали, позволяя просмотреть сотни вариантов или увидеть еще не изготовленное изделие "ожившим" - в процессе функционирования.

Матчасть диванного танкиста - Страница 3 87020210

2. В любой момент на экран можно вызвать чертеж или схему из огромного справочника машины - это особенно облегчает решение типовых задач проектирования когда можно воспользоваться фрагментом уже рассчитанной конструкции. Например, эту "гайку" (с шестиугольным отверстием) еще не изготовили, но конструктор уже может осмотреть ее со всех сторон и даже испытать на прочность.

Матчасть диванного танкиста - Страница 3 87020310

3. Если пройти недельный курс обучения диалогу с системой автоматизированного ввода чертежей в ЭВМ, то чертеж, на который квалифицированный чертежник затратил бы три-четыре дня, будет введен в машину всего за несколько часов. Оператор указывает, например, квадратик "штриховка" на планшете, подключенном к ЭВМ, отмечает курсором участок, который нужно заштриховать на чертеже, и через секунду все готово, машина ждет новых указаний. Более мощная вычислительная машина сможет прямо по чертежу написать программу управления для станков с числовым программным управлением.

В системе два плана. Задний план - это "лист ватмана", на котором размещается весь чертеж. Передний план - "калька", куда можно вынести произвольный фрагмент чертежа, сжать, растянуть, удалить или добавить несколько линии, а затем вернуть все это на основной чертеж. В системе предусмотрена "электронная лупа", она может во много раз увеличить любой фрагмент чертежа.

Матчасть диванного танкиста - Страница 3 87020410

4. На экране - множество точек, каждая - одно из решений задачи оптимизации по нескольким критериям. Нужно, например, снизить вес автомобиля, его стоимость и расход горючего и к тому же обеспечить максимальную надежность. Выигрывая по одному из этих критериев, можно проиграть в другом, поэтому существует много решений с различным соотношением разных выигрышей и проигрышей. Машина предлагает варианты решений, за человеком остается только выбор наиболее пригодного. Передвигая по экрану стрелочку-указатель, можно узнать значения расчетных параметров автомобиля для той или иной "точки" из множества решений, а также соответствующие этой "точке" стоимость, надежность и другие требуемые характеристики.

Решение подобных, как их называют, многокритериальных задач - только одна из возможностей, представляемых системой ДИСО, диалоговой системой оптимизации, которая образована из множества взаимодействующих программ. Безусловная оптимизация, нелинейное программирование, динамическое управление, решение систем алгебраических уравнений - неполный перечень задач, решаемых системой.

Матчасть диванного танкиста - Страница 3 87020510

5. В распоряжении проектировщика - набор схематичных изображений станков, транспортных тележек, накопителей деталей, и все это нужно оптимальным образом распределить по цеху. Манипулируя клавишами пульта, оператор создает макет будущего цеха, компьютер ее "оживляет" (тележки приходят в движение) и рассчитывает эффективность загрузки станков. В любой момент можно внести необходимые изменения, например, отправить тележки по новому маршруту. В диалоге с машиной легко отыскать оптимальное решение среди нескольких десятков, а порой и сотен возможных вариантов.

Матчасть диванного танкиста - Страница 3 87020610

6. Эти графики нарисовал "Мастер" - система, представляющая новую технологию обработки информации на небольших машинах. Информация может быть различной: текстовой, графической, табличной, причем все виды информации обрабатываются в едином технологическом процессе.

Результаты вычислений машина выводит на экран наглядно - в виде графиков либо рисунков, однако можно заглянуть и в исходную таблицу с числами. Стоит изменить формулу или даже одно число в исходных данных, и графики сразу же изменятся в полном соответствии с новыми результатами расчетов.

Матчасть диванного танкиста - Страница 3 87020710

7. Климатическая модель Земли, учитывающая множество факторов, а потому сложная и громоздкая, требующая гигантского числа расчетов, хранится в памяти большой ЭВМ. Результат расчета температуры воздуха над поверхностью планеты передается в машину поменьше, которая ведет графическую обработку, создает на экране стилизованное изображение поверхности Земли с нанесенными на него изотермами - линиями равной температуры. Специалисту работать с такой картинкой во много раз легче, чем с огромными таблицами чисел.

Матчасть диванного танкиста - Страница 3 87020810

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

На основе "Дебюта" создается банк шахматной информации при Центральном шахматном клубе.
А.БОЙКО.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Янв 24, 2023 12:11 am

2/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Дискуссии стали привычными в нашем разделе. Порою их темы предлагаются, порою их затевают читатели, не дожидаясь приглашения.
"Как навыки счета на программируемом микрокалькуляторе помогают вам в работе на больших ЭВМ!" - спрашивали мы читателей. В нынешнем выпуске раздела киевлянин А.Хоменко вспоминает про свой удачный опыт оптимизации одной из программ на Фортране: поводом к ее переработке стала попытка провести аналогичный расчет на "Электронике Б3-34".
"Программировать неструктурно - безответственно!" - утверждает москвич М.Вахтеров в письме, недавно пришедшем в редакцию. Его суждения, возможно, вызовут полемический отклик у многих читателей. Надеемся, что несогласные не станут таить свои возражения и изложат в письмах свое мнение по вопросу: "Что такое структурное программирование!"
Затравкой очередной дискуссии может оказаться любая статья из раздела. Важно лишь, чтобы желание в чем-то поспорить с автором того или иного выступления обязательно реализовалось в письме, посланном в журнал. Каждая реплика, какой бы незначительной она ни казалась сама по себе, имеет заведомую ценность: в столкновении мнений рождается истина.

ОТ КАЛЬКУЛЯТОРА ЗА ПУЛЬТ КОМПЬЮТЕРА
При выполнении одной научно-исследовательской темы мне пришлось изучать труд рабочих-многостаночников в легкой промышленности. Определенную часть расчетов пришлось переложить на микрокалькулятор "Электроника Б3-34".

Алгоритм расчета, который я нашел в одном из пособий, был реализован в виде программы на Фортране. При "буквальном переводе" на язык команд микрокалькулятора она не умещалась в его памяти. Пришлось заняться переделками и сокращениями. Итогом этой работы была не только программа для "Электроники Б3-34": мне стало ясно, что исходную программу на Фортране можно заменить новой, более короткой и быстрой.

Матчасть диванного танкиста - Страница 3 87021210

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

Принципы моделирования этих событий хорошо изучены в теории массового обслуживания.

Число машин, обслуживаемых вязальщицами, обозначим m, число вязальщиц - s, интенсивность обслуживания, равную отношению времени на ликвидацию обрыва к среднему интервалу времени между остановками одного автомата,- р.

По этим исходным данным определяются: вероятность остановки в данный момент сразу i автоматов - Pi; вероятность безотказной работы всех автоматов - Р0: среднее число простаивающих автоматов - К; число автоматов, ждущих устранения обрыва,- V; число свободных вязальщиц (при отсутствии обрывов) - Z.

Матчасть диванного танкиста - Страница 3 87021110

На рисунке - формулы для подсчета этих величин вместе с теми изменениями, благодаря которым удалось написать программу для микрокалькулятора. Она заняла всего 64 ячейки памяти и при m = 20, s = 2 выполняется за 110 секунд.

Этот пример лишний раз подтверждает полезность навыков, полученных при вычислениях на программируемых калькуляторах, в работе на больших ЭВМ.
А.ХОМЕНКО (г.Киев)

ДВА ПРОСТЫХ ПРАВИЛА
Я бы хотел поспорить с мнением Л.Уварова, автора статьи "Все хорошо в меру" (6/86), утверждающего, что программу можно писать небрежно, как попало - лишь бы работала. Такой стиль прежде всего нанесет вред тем, кто делает первые шаги в информатике.

Все, кто хочет приобщиться к искусству программирования, должны знать о существовании нескольких простых, но строгих правил, объединенных понятием СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ. Их использование делает программы легко читаемыми, быстро отлаживаемыми и просто переводимыми на любые другие типы микрокалькуляторов или персональных ЭВМ, а не похожими на блюдо спагетти, которое часто напоминают "эффективные" программы из-за обилия всякого рода переходов. По-видимому, таким правилам следует и автор упомянутой статьи, в результате чего его "небрежная" программа с точки зрения структурного программирования выглядит прекрасно.

Суть этих правил заключается, во-первых, в пошаговой детализации алгоритма нисходящим путем. Для этого каждый модуль (блок) исходного алгоритма многократно разлагается на все более мелкие и простые модули вплоть до выполняемых микрокалькулятором команд. В таком виде алгоритм интерпретируется как обозримое множество вложенных друг в друга модулей, имеющих всего по одному входу и выходу. Второе правило требует четкой реализации этих модулей из конструкций лишь двух типов - ветвление и цикл, которые были рассмотрены в "Школе начинающего программиста" на страницах журнала.

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

Пока наиболее известными языками программирования, ориентированными на структурный подход, являются Паскаль, Ада, Модула-2 и алгоритмический язык академика А.П.Ершова (11/85 и 1/86). Для демонстрации их преимуществ привожу программы, анализирующие возможность построения треугольника со сторонами a, b и с, написанные на трех языках: языке команд "Электроники Б3-34", Бейсике и Паскале. Для анализа используется известное свойство треугольника: сумма двух любых его сторон должна быть больше третьей. Это эквивалентно выполнению неравенства:

(a+b-c)*(a+c-b)*(b+с-а)>0

На этой, пусть тривиальной, но часто используемой в системах автоматического проектирования задаче можно увидеть преимущества Паскаля. Если я в дальнейшем захочу вычислить какие-то параметры треугольника, то вставлю новый программный модуль "вычисление" между then и else. В примере же на Бейсике и языке команд "Электроники БЗ-34" нужно предварительно проверить, в какие "точки" передается управление в программе, чтобы не нарушить ее ход после внесения модуля. В Паскале также бросается в глаза отсутствие безусловного перехода - БП и GOTO, затрудняющего чтение программ и создающего почву для недоразумении.

Матчасть диванного танкиста - Страница 3 87021410
Инструкция для микрокалькулятора: В/0 С/П "0" А С/П В С/П С С/П. Если треугольник построить можно, на индикаторе "0.7777777" С/П "0". Далее новый ввод. Если треугольник построить нельзя, на индикаторе "0". Далее новый ввод.

Программируемые микрокалькуляторы и персональные компьютеры с Бейсиком остаются нашими основными инструментами при ликвидации компьютерной безграмотности в силу своей доступности и легкости освоения. Чтобы программы для них становились достоянием широкого круга людей, соприкасающихся в своей деятельности с компьютерами, разработчики программ должны придерживаться передовых методов программирования.
М.ВАХТЕРОВ (г.Москва)

Матчасть диванного танкиста - Страница 3 87021310
Рис. А.Тягнирядно (пос. Володарск Ворошиловградской обл.).

ЛИНИЯ ЖИЗНИ

Матчасть диванного танкиста - Страница 3 87021510

Такая серия гистограмм возникла в итоге социологического исследования, проведенного в Балашихинском районе Московской области под руководством профессора В.И.Болгова. Это обобщенная характеристика социальной активности мужского населения района. По оси абсцисс отложен возраст опрошенных; буква Д отмечает наличие детей до 12 лет, Б - их отсутствие. Высота черных столбиков - уровень политической культуры, процент тех, кто с желанием занимается общественной работой. Высота заштрихованных - уровень культуры общеобразовательной, процент постоянно читающих литературу по специальности. Высота белых - уровень физической культуры, процент тех, кто постоянно занимается спортом.

Картина получилась не очень наглядная, не правда ли?

Есть способ представить те же данные более выразительно: откладывать каждую из трех названных характеристик по осям трехмерной системы координат, потом соединить определяемые ими точки пространства непрерывной кривой и рассматривать ее в направлении прямой, равноотстоящей от осей. Характер кривой выразит динамику культурного развития опрошенных.

На первый взгляд такой метод представляется трудно осуществимым. Простым и эффективным становится он, если к делу привлечь калькулятор "Электроника Б3-34". Причудливая петля, представленная на рисунке, рассчитана с его помощью.

Матчасть диванного танкиста - Страница 3 87021610
Разметка осей: a - политическая, b - общеобразовательная, c - физическая культура; xi, yi, - координаты на плоскости чертежа.

Ее изгибами описан жизненный цикл большой социальной группы, от тянущейся к спорту молодежи до пожилых любителей обсудить последние газетные новости.

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

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

Матчасть диванного танкиста - Страница 3 87021710

Диаграмма на рисунке рассчитана по этому усовершенствованному методу для той же социальной группы - мужского населения Балашихинского района Подмосковья. Из основной группы резко выделились юноши до 24 лет, которые считают себя вполне образованными и выполняют общественную работу без желания. В противоположной стороне обособились и сблизились друг с другом дедушки и молодые отцы: они ощущают неполноту своих знаний и потребность в активной общественной работе. (Любопытно, что на аналогичной диаграмме, построенной для женского населения того же района, почти в такой же зоне, но еще ближе к оси политической активности, оказались все женщины без детей, а также в возрасте 40-49 лет).

Такие диаграммы, представляющие собой модификацию известного в точных науках метода кластерного анализа, совмещают в себе оперативность достижения результатов и многосторонность анализа. Основное их достоинство - наглядность. Хорошо видно, какие признаки преобладают в обследованной социальной группе, обнаруживается разбиение на подгруппы, вскрываются тенденции, трудно заметные при других подходах, облегчается прогнозирование развития группы.

Программа. 00. П1 01. С/П 02. П2 03. С/П 04. П3 05. + 06. 2 07. / 08.- 09. П5 10. ИП2 11. ИП3 12. - 13. ИП4 14. * 15. П6 16. Fx2 17. ИП5 18. Fx2 19. + 20. Fsqr 21. 3 22. ИП1 23. F1/x 24. ИП2 25. F1/x 26. + 27. ИП3 28. F1/x 29. + 30. / 31. ^ 32. / 33. П7 34. ИП5 35. * 36. С/П 37. ИП6 38. ИП7 39. * 40. С/П 41. БП 42. 00.

Инструкция. Занести в Р4 sqr(3)/2. Набрать a С/П b С/П c С/П. На индикаторе y. Нажать С/П. На индикаторе x. После этого вводить новую триаду a, b, c.

Пример: a=37, b=22, a=20; y=24.2; x=3.7.

Н.АНАНЬЕВА, В.ШВЕДОВСКИЙ (г.Москва)

СВОИМИ РУКАМИ
Что делать, если барахлит кнопка включения?

В.КРИТИНИН (г.Москва). В своем "МК-54" я зафиксировал переключатель кусочком липкой ленты, наклеив его на кнопку сверху. Когда я не пользуюсь батарейками, то включаю и выключаю машинку, не трогая кнопку,- просто отсоединяю шнур питания от разъема на корпусе.

В.ШАКОЛЮКОВ (г.Москва). Для своего "МК-51" я вырезал из жести тонкую пластинку и, согнув ее под прямым углом, просунул между кнопкой включения и корпусом микрокалькулятора. В результате при включении контакт получается надежным, обеспечивается безотказная работа клавиши и всего калькулятора в целом.

Матчасть диванного танкиста - Страница 3 87021810

В.КОЗЛОВ (г.Иркутск). У меня "МК-61". Кнопка включения в нем очень тугая, переключается с треском. Пружинные контакты развивают значительное усилие. Давление на печатную плату настолько большое, что кои-гакты режут фольгу подложки. Я смазал их вазелином - и контакты, и фольгу. Результат налицо - фольга не продирается, контакт не теряется. Кстати, этим средством конструкторы пользовались еще на заре электротехники.

Д.ХРУСТАЛЕВ (г.Москва). Контактные площадки в моем "МК-54" окислились, и контакт стал не очень надежным. Тогда я залудил контакты движка переключателя и напаял небольшие капли олова на контактные площадки. С таким усовершенствованием переключатель надежно работает вот уже полгода. Кстати, панель, прижимающую клавиши и включатель к печатной плате, после ремонта выключателя я не стал крепить жестко, расплавляя торцы фиксаторов, а лишь вставил фиксаторы в отверстия: в собранном микрокалькуляторе панель надежно зажата между корпусом и печатной платой.

А.ОСТРОУМОВ (пос.Нахабино Московской обл.) Плохую фиксацию выключателя в "МК-61" я исправил так: приклеил к кнопке справа пластмассовую пластинку толщиной полмиллиметра. Теперь выключатель работает безотказно.

ПРОГРАММА, ПУБЛИКУЕМАЯ ЗДЕСЬ ВПЕРВЫЕ,- одна из тех, которые АЛЕКСЕЙ НИКОЛАЕВИЧ ЦВЕТКОВ готовил для второго издания своей известной книги, написанной км совместно с В.А.Епанечниковым.
Алексею Николаевичу уже не доведется увидеть этого издания.
Прикованный к постели, он работал до последних дней.
С 19S2 года он был сотрудником Института радиотехники и электроники АН СССР, занимался вопросами радиозондирования, автоматизации физического эксперимента. Как только появились программируемые микрокалькуляторы, он верно оценил их место и значение в арсенале вычислительных средств. Его статьи и книги, посвященные малой вычислительной технике, принесли ему заслуженную известность.
В "Науку и жизнь" он пришел вскоре после создания нашего раздела с горячим желанием помочь его становлению, был нашим неизменным советчиком.
Есть люди, масштаб личности которых постигаешь даже за короткое время сотрудничества с ними, чтобы потом ие забыть их никогда. Алексей Николаевич Цветков был одним из таких людей.

В книге А.Н.Цветкова и В.А.Епанечникова "Прикладные программы для микро-ЭВМ "Электроника Б3-34", "МК-56", "МК-54", вышедшей в 1984 году, имеется программа для перехода от декартовых координат к полярным (стр.38 ). Радиус-вектор р вычисляется в ней как корень квадратный из суммы квадратов декартовых координат, а полярный угол - по двум различным формулам: если х>=0, то ф=arcsin(y/р); если х<0, то ф=пи*sign(y)-arcsin(y/р).

00. ПА 01. Fx2 02. С/П 03. ПВ 04. Fx2 05. + 06. Fsqr 07. ПС 08. C/П 09. ИПВ 10. x-y 11. / 12. Farcsin 13. ИПА 14. Fx<0 15. 28 16. F() 17. 1 18. /-/ 19. Farccos 20. x-y 21. Fx<0 22. 26 23. + 24. /-/ 25. 0 26. - 27. ^  28. F() 29. ПД 30. С/П.

Инструкция. В/0 x С/П y С/П.

Для нового издания книги А.Н.Цветковым была предложена программа, насчитывающая всего 18 команд. Полярный угол вычисляется в ней иначе: ф=sign(y)arccos(x/р).

00. B^ 01. Fx2 02. С/П 03. Fx2 04. FBx 05. F() 06. + 07. Fsqr 08. С/П 09. / 10. Fcos-1 11. x-y 12. B^ 13. Fx2 14. Fsqr 15. / 16. * 17. С/П.

Инструкция В/0 x С/П y С/П.

Программа не использует ни одного адресуемого регистра! Внимательный читатель найдет в ней немало интересного и поучительного. Обратит он внимание и на новые обозначения некоторых команд. Новое издание книги задумывалось для владельцев новых калькуляторов "МК-61" и "МК-52".

ОТ КОНКУРСА К ВНЕДРЕНИЮ
Дан ряд чисел. Требуется ранжировать их, то есть расположить в порядке убывания или возрастания. Поставленная в таком виде задача (4/85) собрала немало решений (2/86), но ни одна из присланных программ не могла конкурировать по скорости с чисто ручными способами ранжировки.

Был объявлен второй тур конкурса. На сей раз 52 человека искали наилучшее с точки зрения поставленной задачи сочетание достоинств калькулятора и работающего на нем человека. Успех ждал тех, кто развивал идею минского девятиклассника С.Нуднова: с помощью калькулятора распределять числа ряда по группам, а затем упорядочивать числа в группах, но уже без помощи машины (в отличие от метода С.Нуднова). Это нетрудно сделать визуально, если в группе лишь несколько чисел. При достаточно равномерном распределении чисел в ряду так оно и будет, если количество групп задать достаточно большим.

Словно рекомендуя этот прием к внедрению, А.ПРИВЕНЬ из Коистантиновки Донецкой области характеризует его так: "Человек без калькулятора справляется с сотней трехзначных чисел в произвольном интервале минут за 30, вместе с калькулятором - за 15-20 минут. Если чисел не сто, а, скажем, двести, разница еще внушительнее: без калькулятора - примерно 100 минут, вместе с ним - около 35. А может быть, и меньше: где гарантия, что мой метод наилучший?"

Что ж, приступим к сравнению методов. Пусть xi - произвольное число ряда, N - количество групп разбиения, А - максимальное из чисел xi или заведомо превосходящая их величина, В - минимальное или заведомо не превосходящая их величина. Номер группы, в которую попадет число xi, определим формулой pi=1+N(xi-B)/(A-B), точнее - целой частью выражения, стоящего в правой части.

А.САМАРИН из Дзержинска Горьковской области, признанный победителем конкурса, справедливо считает, что pi следует выводить на индикатор, не округляя: на выделение целой части калькулятор потратит больше времени, нежели человек, который должен будет считывать одну только целую часть выводимого числа; дробная его часть коротка и не мешает работе, если дробь N/(A-В) конечна, что достижимо подбором.

Выигрыш в скорости А.Самарину обеспечило еще и удачное преобразование вышеприведенной формулы:

Матчасть диванного танкиста - Страница 3 87021910

Выражения в скобках вычисляются заранее и в нужный момент вызываются из адресуемых регистров. Массив, приведенный для примера в 2/86, ранжируется менее чем за 8 минут. Особенность метода: скорость обработки одного числа не зависит от величины массива, так что, если он велик, метод особенно выгоден.

Столь же быстрой была бы и очень похожая на "победительницу" программа Н.КЛИМЕНКО из Челябинска, если бы в ней не округлялось pi. Ее достоинство в том, что после ввода N, А, В калькулятор сигнализирует о своей готовности к работе нулем на индикаторе, а после получения pi нажатием клавиши x-y можно вызвать на индикатор только что обработанное xi.

С.ЛОГИЧЕВ, земляк Н.Клименко, работает по непреобразованной формуле, также теряя в скорости. Округляют pi с помощью короткой и потому быстродействующей цепочки ПМ КИПМ ИПМ (М=7, 8, 9) Н.Клименко, А.Привень, А.Беликов (Нововолынск Волынской обл.). Прибавление и последующее вычитание 1e7 применяют для той же цели А.Виноградов (Киев), Г.Ильин (Новосибирск), А.Коганцев (Москва), И. и Н.Смаглюк (Зеленодольск Днепропетровской обл.; их вариант округления наиболее остроумен: они увеличивают на 1e7 второе выражение в скобках в преобразованной формуле, так что для округления остается лишь вычитать 1e7 из полученного по формуле значения pi).

Программа А.Самарина. 00. П1 01. - 02. / 03. ПА 04. ИП1 05. * 06. 1 07. - 08. ПВ 09. С/П 10. ИПА 11. * 12. ИПВ 13. - 14. БП 15. 09.

Инструкция. В/0 N ^ A ^ B ^ С/П x1 С/П "р1" ... xn С/П "рn".

А.Привень и А.Беликов предлагают размещать группы разбиения по клеткам разграфленного квадрата, Н.Клименко - справа от вертикальной черты, слева от которой проставлены номера групп.

Матчасть диванного танкиста - Страница 3 87022210

Содержимое строк затем переписывается, при этом числа из каждой строки расставляются по порядку. Если числа распределены в массиве достаточно равномерно, то, по мнению Н.Клименко, количество групп N должно быть вчетверо меньше числа элементов массива n: тогда в каждой строке оказывается, как правило, не более 5-6 чисел, даже с учетом повторов. На случай, если какая-то строка будет "перегружена" из-за неравномерности распределения, Н.Клименко предлагает дополнение к программе (см.ниже). Переходим иа него, дважды нажимая клавишу "ШГ вправо. "Перегруженная" группа при этом дробится на десять равных подгрупп. Разбиение ведется далее, как раньше; при этом единицы выводимого иа индикатор числа означают номер подгруппы (от 0 до 9), десятки - номер группы. Подобное дробление можно совершать сколько угодно раз.

Программа Н. Клименко. 00. П8 01. - 02. x-y 03. / 04. ИП8 05. x-y 06. П7 07. - 08. П8 09. Сх 10. С/П 11. ^ 12. ИП8 13. - 14. ИП7 15. / 16. П9 17. КИП9 18. ИП9 19. С/П 20. БП 21. 11 22. ИП7 23. ВП 24. 1 25. /-/ 26. П7 27. БП 28. 09.

Инструкция. В/0 (N-1) ^ A ^ B  С/П "0" xi С/П "р1" ... хn С/П "pn".

[ УЗЕЛКИ НА ПАМЯТЬ
Первые мои попытки воспользоваться генератором псевдослучайных чисел на микрокалькуляторе "МК-61" успехом не увенчались. Я надеялся, что последовательность команд КСч 1 0 * 1 + ПЕ КИПЕ 1 + КПЕ FL0 00 поможет равномерно распределить числа по регистрам. Увы, заполнив один или два регистра, генератор выдавал одно и то же число, зацикливался. То же произошло, когда я попытался воспользоваться "МК-52". В конце концов мне удалось найти ряд команд, которые в большинстве случаев исключают повторы. В программе после команды КСч я дополнительно ставлю две других, например, ^ x-y или K{} K{}. В этом случае зацикливания, как правило, не бывает. Может быть, кому-то известно лучшее решение?
А.БОРИСОВ (г.Москва)

Мне понравилась игра "Охота на лис" (12/85), и я решил переписать программу для моего "МК-61". Встроенный генератор псевдослучайных чисел вначале зацикливался, однако мне удалось заставить его работать удовлетворительно. Фрагмент программы "Охота на лис", начиная с адреса 69, будет иметь следующий вид: 69. П-хД 70. B^ 71. КСч 72. х-ПД 73. 9 74. * 75. 1 76. + 77. K[] 78. В/0.
А.ДОРОХОВ (г.Днепропетровск)

Для работы со стеком предназначены команды ^, x-y, F(), FBx. К ним можно добавить еще одну, вводимую клавишей "запятая". Ею на индикатор будет выведено число, которое было последним введено в РХ, даже если оно казалось утерянным. Вот программа 00. Fx2 01. П1 02. F1/x 03. П2 04. , 05. С/П. Запустим ее: 2 В/0 С/П. После останова на индикаторе высветилась "утерянная" двойка, состояние стека не изменилось, в регистрах Р1 и РВх записано число 4, а в Р2  0.25.
В.САЛЬНИКОВ (г.Москва) ]

В ЛОТО С КОМПЬЮТЕРОМ
Когда я был ребенком, любимой игрой в нашей семье было лото. Вспомнив любимое развлечение, я написал программу для персонального компьютера.

Матчасть диванного танкиста - Страница 3 87022110

Если запустить ее, на дисплее будут появляться целые случайные числа от 1 до 90. Ведущему остается поглядывать на дисплей, а игрокам - в свои карточки, накрывая называемые числа. Карточки надо предварительно расчертить по приведенному образцу и каждую заполнить случайным образом числами от 1 до 90 - по 5 чисел на строчку.

Матчасть диванного танкиста - Страница 3 87022010

Несколько слов о программе. Строка 1 не только резервирует в памяти ЭВМ место для хранения элементов массива А (номер фишек), но н присваивает им нулевые значения. Если в процессе игры выпадет, например, фишка с цифрой 5, то элемент А(5) станет равным единице (см. конец строки 4), и при новом ходе условный оператор IF... THEN (конец строки 3) не допустит повторного вытаскивания этой фишки из мешка.

Строка 3. Функция INT округляет свой аргумент, то есть берет от него целую часть, функция RND выдает псевдослучайное число. Аргумент этой функции может быть либо нулевым, либо большим нуля. При нулевом аргументе генератор случайных чисел устанавливается в начальное положение, при большем нуля - нет. Поэтому наша программа, где написано RND(l), в каждой новой игре выдает новый ряд чисел. "Помешать мешок с фишками" можно, запустив, а через произвольный промежуток времени прервав короткую программу: 1 B=RND(1):GOTO1.

Условные операторы, записанные в строках с 5 по 14, узнают те фишки, которые имеют специфические названия, и выводят их иа дисплей вместо номера. Остальные фишки демонстрируются иа дисплее своими номерами.

В строке 16 записан "пустой" цикл для задержки вывода очередного номера, чтобы игроки успевали отреагировать на возглас ведущего. В.ЩЕГЛОВ (г.Ленинград)

ВНИМАНИЕ! КОНКУРС!
Предлагается написать программу для персонального компьютера, составляющую карточки для игры в лото. Наряду с программой должна быть разработана методика проверки, по результатам которой можно судить о том, насколько близко к случайному распределение чисел по полям каждой карточки и по всем карточкам в целом.
Владельцам микрокалькуляторов предлагаем составить программу, позволяющую расставить на шахматной доске 8 ферзей так, чтобы ни один не бил другого. Программа должна давать все варианты такой расстановки.

ЗАМЕНА КОНСТАНТ
Довольно часто при составлении программ приходится использовать в вычислениях многосимвольные константы, входящие в отдельные формулы. При записи в текст программы их обычно стремятся сократить за счет преобразований, например, 0.25 = 4 F1/x (экономия в два шага). Подбор однозначных целых чисел и функций, преобразующих их к нужным значениям констант, может быть автоматизирован с помощью программы:

00. 0 01. 9 02. П0 03. 2 04. П1 05. ИПС 06. 1 07. + 08. П2 09. 1 10. ИПС 11. - 12. П3 13. 5 14. 3 15. ПВ 16. 0 17. П4 18. КИП4 19. 1 20. П5 21. ИП4 22.Fexp 23. КППВ 24. Flg 25. КППВ 26. Fln 27. КППВ 28. КИП5 29. КИП5 30. ИП4 31. Farctg 32. КППВ 33. Fsin 34. КППВ 35. Fcos 36. КППВ 37. Ftg 38. КППВ 39. Fsqr 40. КППВ 41. F1/x 42. КППВ 43. Fx2 44. КППВ 45. FL0 46. 18 47. Fпи 48. П4 49. FL1 50. 19 51. 0 52. С/П 53. ИПД 54. / 55. Fx2 56. Fsqr 57. П6 58. ИП2 59. - 60. Fx>=0 61. 64 62. БП 63. 88 64. ИП6 65. ИП3 66. - 67. Fx>=0 68. 88 69. ИП4 70. Fпи 71. - 72. Fx=0 73. 85 74. 3 75. , 76. 1 77. 4 78. ^ 79. 6 80. F10X 81. * 82. ИП5 83. + 84. С/П 85. ИП4 86. БП 87. 79 88. КИП5 89. ИП4 90. B/0.

Заносим в регистр Д значение константы, которую требуется получить в результате преобразования какого-либо однозначного числа, а в регистр С - желаемую абсолютную точность замены константы результатом преобразования. Переключатель Р-Г устанавливаем в положение Г, запускаем программу - В/0 С/П. После счета на табло высвечивается число вида K 00000 F, где K - целое однозначное число, a F - номер функции, которую надо применить к этому числу (F в пределах 1-9 совпадает с номерами клавиш, над которыми обозначены соответствующие функции; F=10, 11, 12 означает соответственно функции sqr, 1/х и х2; K = 314 указывает, что надо использовать число пи). Нулевой результат означает, что выполнить замену не удается. В этом случае можно попытать счастья при другом положении переключателя Р-Г. Программа работает долго, до 30 минут, поэтому поручать эту работу микрокалькулятору лучше, занимаясь другими делами. Диапазон замен от - 6.8 до 8103.
А.ЛЫЧЕВ (г.Куйбышев)

[ УЗЕЛКИ НА ПАМЯТЬ
Сообщение "00" легко получить, если перед командой С/П записать 0 и Farctg, установив переключатель Р-Г в положение Г. Содержимое регистра X можно использовать в дальнейшем как обычный нуль, например, для очистки адресуемых регистров.
Ю.НАДУБОВИЧ (г.Норильск) ]

[ БЮРО СПРАВОК
На кафедре метеорологии Томского государственного университета разработан пакет программ "Метеорология" для решения задач по физике атмосферы, аэрологии, радиометрологии, прикладной климатологии на калькуляторе "Электроника МК-52". Программы могут использоваться в научной, оперативно-производственной работе, в учебном процессе. Пакет содержит около 100 программ, которые предполагается записывать в модули ПЗУ при их заводском изготовлении. Для изготовления серии специализированных модулей необходима предварительная оценка потребности в них.

Предварительные запросы направлять по адресу: 634100, Томск, пр.Ленина, 34, НБ ОНТИ ТГУ. Просьба указывать в заявках название организации и требующееся количество модулей.

Для широкого круга изыскателей и проектировщиков может быть полезна работа "Методические указания и программы комплекса вычислений на микрокалькуляторе "Электроника Б3-34" при изысканиях и проектировании плана и профиля железной дороги и железнодорожных станций", изданная Ленгипротрансом в 1985 году. В работе приводятся многочисленные программы по прикладной геодезии, вкратце изложены правила работы с микрокалькулятором. (196105, Ленинград, Московский проспект, 143, Ленгипротранс, ОАП).

Многие геодезические задачи связаны с измерением длин и расстояний. Используемый при этом светодальномер МСД-1М можно соединить с микрокалькулятором "Электроника Б3-34". Электроэнергией его обеспечивает блок питания светодальномера, что очень удобно при работе в полевых условиях. Программу, позволяющую производить автоматическую обработку по трем измеряемым частотам световых волн за 20-25 секунд на одно измерение, и ряд других программ для маркшейдерских работ разработал И.Е.Мощинский (324006, Кривой Рог, ул.Постышева, д.11, кв.124).

При настройке некоторых типов металлорежущих станков требуется обеспечить определенное передаточное отношение кинематических цепей станка. Достигается это с помощью подбора пар зубчатых колес, где нужное передаточное отношение выражено простой дробью с числом зубьев ведущих шестерен в числителе и ведомых в знаменателе. Простые дроби для заданного передаточного отношения быстро отыскиваются без специальных таблиц по программе, разработанной Г.Ф.Полозневым (625039, Тюмень, ул.Мельникайте, д.58, кв.58 ).

В Московском театральном художественно-техническом училище Е.Куликовой и И.Покровской составлены программы для микрокалькулятора "Электроника МК-54" и его аналогов для акустических расчетов концертных залов и театров (вычисление площадей различных поверхностей зрительного зала, его акустического объема, акустического эквивалента технологической оснащенности, времени реверберации и мощности электроакустической системы). В Центральном доме литераторов звукорежиссером Л.М.Абрамзоном разработаны программы для оптимизации акустической среды зрительных залов при различном заполнении зала зрителями, различной технологической оснащенности, температурно-влажностных параметрах воздуха и т.п. (125315, Москва, пр.1-й Амбулаторный, 8/7, МТХТУ, отдел "Радиосвязь и радиовещание", Емельянову Е.Д.) ]

Матчасть диванного танкиста - Страница 3 87022310
Рис. Ю.Килбаса (г.Николаев)
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Янв 25, 2023 12:27 am

3/87
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВЕНАДЦАТОЕ, на котором заканчивается описание программных средств, при искусном владении которыми можно составлять достаточно эффективные и разнообразные программы на Бейсике.
Ведет занятие кандидат технических наук И.Д.ДАНИЛОВ

Если вы попросите своих знакомых перечислить наиболее употребительные математические функции, то они, полагаясь на свое образование и опыт, скорее всего составят тот список, который вы видите в правой колонке помещенной здесь таблицы.

Матчасть диванного танкиста - Страница 3 87030110

Последних представителей этого списка, пожалуй, упомянет не каждый. Поэтому мы скажем про них несколько пояснительных слов. Квадратными скобками обозначается целая часть заключенного в них числа (то есть наибольшее целое число, не превосходящее данного), a sign(x) - это функция, которая равна единице при положительных x, минус единице - при отрицательных и нулю - при x=0.

Перечисленные в нашем списке функции составляют тот "джентльменский набор", которым наделена практически каждая ЭВМ, "обученная" языку высокого уровня. Эти функции называются встроенными, поскольку алгоритмы их вычисления записаны, "встроены" в программу-транслятор.

В левой колонке таблицы даны обозначения этих функций, принятые в Бейсике.

В каждую из этих функций вместо X можно подставлять любое арифметическое выражение. Естественно, что для функции SQR(X) его значения должны быть неотрицательными, а для логарифмических функций к тому же и не равными нулю. Аргументы тригонометрических функций (синуса и косинуса) задаются в радианах, а значение арктангенса получается в диапазоне от -пи/2 до пи/2.

Левая колонка таблицы длиннее правой: две функции, приведенные здесь последними, не имеют аналогов в привычной математической символике. Первая из них, PI(x), определяется просто - как произведение ее аргумента на число пи. О второй следует поговорить подробнее.

Известно немало вычислительных алгоритмов, для выполнения которых требуется, чтобы компьютер выдавал одно за другим числа, выбранные наугад, случайным образом из какого-либо определенного промежутка. Нетрудно сообразить, что для этой цели достаточно иметь датчик случайных чисел ei, лежащих в интервале от нуля до единицы. Числа xi из произвольного интервала (А, В) тогда несложно получить благодаря пересчету xi=А+(В-А)ei.

Надо сказать, что используемые в современных компьютерах датчики обладают недостатком, несовместимым с понятием случайности: последовательность выдаваемых ими чисел периодична. И хотя повторяющийся фрагмент этой последовательности может быть весьма длинным (миллионы, миллиарды чисел), случайной ее уже не назовешь. Потому и принято название: датчик (или генератор) псевдослучайных чисел.

Для обращения к нему в Бейсике существует функция RND. И если в какой-то строке программы есть запись А=RND(X), то при выполнении этой строки переменная А примет случайное значение из интервала (0, 1).

Какой же смысл имеет тогда аргумент функции RND(X)? Это формальный параметр. При отрицательном или нулевом X генератор при каждом выполнении программы выдает одни и тот же ряд псевдослучайных чисел. При положительном - начинает его с произвольного места, определяемого, как правило, моментом запуска программы.

В некоторых версиях Бейсика генератор псевдослучайных чисел представляет собой функцию без параметра и записывается просто как RND. При Каждом использовании программы ряд случайных чисел начинается с произвольного места. Чтобы повторить его сначала, надо употребить оператор RANDOMIZE. Отметим, что возможность воспроизвести одну и ту же последовательность псевдослучайных чисел очень полезна при отладке программ.

До сих пор мы говорили о функциях, и аргументы и значения которых - числа. Поговорим о тех, чьи аргументы - строковые переменные, то есть последовательности символов, в частности - слова. Напомним, что такие переменные в программах на Бейсике отмечаются "солнышком".

В разных диалектах Бейсика эти функции различаются обозначениями и действиями, да и наборы их различны. Мы назовем здесь лишь те, без которых при обработке строк не обходится, пожалуй, ни один диалект.

Функция LEN(Ax) подсчитывает число символов в строке, указанной в скобках

40 Cx="НАУКА И ЖИЗНЬ"
50 A=LEN(Cx)
60 PRINT a

Результат: 13. Столько символов насчитывает название нашего журнала. Заметьте, что пробел - полноправный символ.

Функция SEGx(Ax, M, N) выделяет подстроку в строке, указанной в скобках в качестве первого аргумента. Следующие аргументы - номера символов строки, которыми начинается и кончается выделяемая подстрока. Коснувшись однажды этой функции, мы приводили пример:

100 Ax="ПОБЕДА"
120 Cx=SEGx(Ax,2,5)
140 PRINT Cx

Читатель, вероятно, помнит, что результат выполнения этого фрагмента - слово ОБЕД, то есть часть слова ПОБЕДА, начиная со второго символа и кончая пятым.

Если аргумент M меньше единицы, то вырезаемая подстрока начинается с того же символа, что и строка Ах. Если М больше N или длины строки АХ, то значением функции будет пустая строка, то есть строка, не содержащая символов. Если аргумент N больше длины строки Аx, то вырезаемая подстрока закончится тем же символом, что и строка Аx.

Функция POS(Ax,Bx,N) отыскивает положение подстроки Вx в строке Ах. Поиск начинается с N-ного символа строки Аx. Результат - номер первого элемента подстроки Bx в строке Ах. Например:

10 Ax="КОЛОКОЛ"
20 C=POS(Ax,"ОЛ",3)
30 PRINT C

Результат: 6.
Если заданная подстрока в просматриваемой строке не найдена, функция POS принимает нулевое значение.

Так же, как при использовании предыдущей функции, здесь возможны варианты. Если аргумент N отрицателен, то просмотр строки Ах начинается с первого ее символа, а если N превышает длину строки АХ, то значение функции POS равно нулю.

Последние две функции, которые мы сейчас рассмотрим, служат для преобразования данных одного вида в данные другого.

Пусть в строке Ax записано некоторое число. Скажем, Ax="1987". Функция VAL(Ax) преобразует эту строковую переменную в числовую, равную, естественно, записанному в строке Аx числу. В нашем случае VAL("1987")=1987.

Пусть, наоборот, у нас есть число А. Функция STR(А) преобразует его в строковую переменную, в запись этого числа в виде соответствующей цепочки цифр и, если требуется, других употребительных для такой записи символов (десятичной точки, знаков плюс и минус, символа E).

Аргументом этой функции может служить и какое-либо сложное выражение. Тогда в строковую переменную преобразуется его значение.

Обе только что описанные функции мы поясним единым примером.

Предположим, вы решили создать каталог своей домашней библиотеки. Запись о книгах можно делать в такой, например, форме: сначала автор, потом название, потом количество томов. Скажем: "ПУШКИН А. С."; ПОЛН. СОБР. СОЧ.; 10", "ТОЛСТОЙ Л. Н."; ВОИНА И МИР; 4", "ДОСТОЕВСКИЙ Ф. М.; ИЗБРАННОЕ; 2".

Допустим также, что для удобства обработки вы выделили для записи фамилии автора 20 позиций, названия книги - 25, количества томов - 3, как это показано на рисунке.

Матчасть диванного танкиста - Страница 3 87030210

Каталог библиотеки, естественно, оформить в виде массива из N строковых переменных Кx(I).

И вот вам захотелось узнать, сколько всего томов в вашей библиотеке. Помочь в этом может такая программа:

100 S=0
110 FOR I=1 TO 3
120 S1x=SEGx(Kx(I),46,48)
130 S1=VAL(S1x)
140 S=S+S1
150 NEXT I
160 Rx=STRx(S)
170 R1x="ВСЕГО В БИБЛИОТЕКЕ: "+Rx+ " ТОМОВ"
180 PRINT R1x

Попробуйте внимательно разобрать, что будет, если через такую программу пропустить приведенный выше перечень книг русских классиков, массив из трех элементов. В итоге у вас должна получиться фраза: "ВСЕГО В БИБЛИОТЕКЕ: 16 ТОМОВ".

Спасибо создателям Бейсика за встроенные функции, предоставленные в наше распоряжение. Не меньшей благодарности заслуживают они еще за один подарок: возможность самостоятельно выдумывать новые функции, которые можно использовать точно так же, как встроенные.

Для этой цели служит специальный оператор. Познакомимся с ним на примерах.

10 DEF FNT(X,V)=SIH(X+Y)/COS(X+Y)
20 DEF FN1(Z)=EXP(-Z^2/2)/SQR(PI(2))
30 DEF FN2(Y)=LOG(Y+SQR(Y^2+1))

Как видим, оператор описания функции начинается со слова DEF; далее через пробел следуют буквы FN и за ними - еще одна буква или цифра, отличающие данную конкретную функцию. Затем, если нужно, ставится, символ, указывающий на строковый или целочисленный характер значений функции ("солнышко" или знак процента). Затем в скобках, через запятую перечисляются ее формальные параметры, затем через знак равенства пишется в виде формулы алгоритм вычисления ее значений.

Читатель, освоившийся с символикой Бейсика, распознает в первой функции тангенс суммы аргументов х и у, а две следующие отождествит с приводимыми ниже формулами.

Матчасть диванного танкиста - Страница 3 87030310

При использовании функции на место формальных параметров встают параметры фактические. Именно их конкретные значения берутся при вычислении значения функции. Соответствие между фактическими и формальными параметрами определяется исключительно их взаимным расположением.

Рассмотрим такой пример. Описана функция:

70 DEF FNF(A,B)=A/B

Используется эта функция в таком контексте:

150 A=20
160 В=100
170 T=FNF(B,A)
180 PRINT T

Величина T после выполнения этого фрагмента станет равной 5. Иначе говоря, замещение формальных параметров фактическими происходит совсем не по именам. Никакого значения имена при этом не имеют. Важно лишь, в каком порядке перечислены фактические параметры.

Еще одно замечание. Оператор DEF, как и оператор описания массива DIM, относится к числу невыполняемых. Поэтому появиться он может в любом месте программы. Нужно только следить за тем, чтобы он предшествовал первому обращению к функции.

Читатель может поинтересоваться: что делать, если нужную для расчета функцию не удается выразить с помощью одних лишь арифметических операций и встроенных функций? Что если при ее вычислении не обойтись одним-единственным оператором присваивания, а требуется написать пусть короткую, но все-таки программу, несколько операторов?

Например, нужно вычислить число сочетаний из n элементов по m. Эта проблема возникает в целом ряде прикладных задач. Формула для расчета имеет вид:

Матчасть диванного танкиста - Страница 3 87030410

Здесь символом n! обозначен факториал числа n, произведение всех целых чисел от 1 до n. Дополнительно предполагается, что 0!=1.

Ясно, что в программе для вычисления числа сочетаний из n no m нужно будет несколько раз проводить вычисления по одному и тому же алгоритму, подсчитывая сначала факториал числа n, потом m, потом (n-m).

В подобном случае лучше всего составить подпрограмму.

Подпрограмма - это часть программы, оформленная в виде, допускающем многократное обращение к ней из различных точек программы.

Согласно нормам Бейсика, подпрограмма может начинаться с любого оператора, а заканчиваться должна обязательно оператором возврата RETURN. Для обращения к ней в соответствующем месте программы нужно записать оператор перехода на подпрограмму. Он состоит из служебного слова GOSUB и стоящего далее через пробел номера начальной строки подпрограммы N. Как только процессор встречает оператор GOSUB N, он совершает переход на указанную N-ную строку, выполняет подпрограмму и, дойдя до оператора RETURN, передает управление на оператор, записанный в следующей за GOSUB строке.

Описанным путем мы и пойдем, составляя программу для подсчета числа сочетаний из n элементов по m. Вычисление факториала оформим в виде подпрограммы. Запишем ее в каком-нибудь дальнем участке программной памяти, например, начиная со строки 1000. Так принято поступать при записи подпрограмм. Редко ведь бывает известно заранее, сколько места займет основная программа и сколько она оставит свободным для размещения подпрограмм.

100 K=N
110 GOSUB 1000
120 F1=F
130 K=N
140 GOSUB 1000
150 F2=F
160 K=N-M
170 GOSUB 1000
180 C=F1/F2/F

1000 F=l
1010 IF K=0 THEN RETURN
1020 FOR I=1 TO К
1030 F=F*I
1040 NEXT I
1050 RETURN

Подпрограмма может насчитывать несколько операторов RETURN, как в нашем случае. Выполнение ее заканчивается, как только встречается первый из них. В приведенном примере, если К=0, то никаких действий ие выполняется, подпрограмма лишь передает в основную программу значение 0!, равное единице. В противном случае, когда K!=0, отрабатывается цикл умножений.

Кроме оператора перехода иа подпрограмму, есть в Бейсике оператор выбора подпрограмм. Записывается он в такой форме:

70 ON K GOSUB 300,500,600

При К=1 этот оператор передаст управление подпрограмме, начинающейся со строки 300, при K=2 - со строки 500, при K=3 - со строки 600.

Итак, мы рассмотрели, как реализуются на Бейсике все основные типы программных конструкций. Язык приобрел очертания законченного здания, в котором можно жить, пользуясь определенными удобствами и соблюдая, естественно, определенные правила общежития.

Неясной осталась одна весьма важная деталь. Как войти в здание и как покинуть его? Где расположены в нем входы и выходы? Или, отбрасывая аналогии, как вводить информацию в программу и как выводить результаты ее работы?

ВВОД И ВЫВОД ИНФОРМАЦИИ. Для того чтобы вводить данные с терминала во время работы программы, используется оператор ввода INPUT. Например:

30 INPUT A,B,C

Когда процессор встречает в программе такой оператор, ее выполнение приостанавливается, а иа дисплее появляется знак вопроса (или в других версиях-двоеточие). После этого следует набрать на клавиатуре нужные значения вводимых величин, отделяя их друг от друга запятыми. Закончив набор, надо нажать клавишу "Возврат каретки". Это сигнал: "Ввод закончен!".

Три числа, которые вы введете по приглашению оператора, приведенного абзацем выше, станут текущими значениями переменных A, B, C. Кстати, если вы наберете меньше значений, чем просит оператор (в нашем примере - одно или два), то на дисплее вновь возникнет знак вопроса. Процессор просит вас продолжить ввод. Так будет до тех пор, пока количество введенных чисел не станет равным количеству переменных, перечисленных в операторе ввода после слова INPUT.

В некоторых версиях Бейсика позволяется использовать в операторе ввода поясняющий текст. Это сделано не только для удобства забывчивых пользователей. Текст, появляющийся на дисплее перед вводом необходимой для дальнейшей работы информации, запрашивающий у пользователя эту информацию,- один из элементов культуры программирования. Благодаря такой особенности программа не нуждается в дополнительной инструкции, как программа для микрокалькулятора. Она сама подсказывает, как с ней работать.

100 INPUT "ВВЕДИТЕ ДЛИНУ, ШИРИНУ, ВЫСОТУ";A,B,C

Если вы не хотите вводить новые значения всех переменных, перечисленных в операторе ввода, то достаточно вместо ненужного значения просто набрать запятую. Так, если в нашем примере вы наберете 6,,7- переменная A примет значение 6, переменная C - значение 7, величина переменной B не изменится.

Значения строковых переменных вводятся так же. При этом их можно заключать, а можно не заключать в кавычки. Разница в том, что ограждающие кавычки, если они есть, могут отстоять от крайних символов строки, и образующиеся при этом пробелы будут включены в значение вводимой строки. Так, кстати, можно вводить и пустую строку, то есть ряд пробелов. Если же строка вводится без кавычек, то такие возможности отпадают.

Ну, а как быть, если хочется ввести вместе с текстом и ограждающие кавычки? В этом случае надо слегка видоизменить начальное слово оператора ввода: LINPUT. Тогда в качестве значения вводимой переменной компьютером будут восприняты все символы, набираемые на клавиатуре,- и кавычки, и пробелы, н запятые...

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

10 READ A,B,C
20 READ D,E,F
30 DATA 1,3,4,5,6
40 RESTORE
50 READ G,H,I,J,K,L,M,N,P
60 DATA 7,8,9

Оператор DATA относится к числу невыполняемых. Он может стоять в любом месте программы. Обращение к нему происходит лишь при выполнении оператора READ. Тот отыскивает в программе оператор DATA (если их несколько, что допустимо, то отыскивается первый из них) и считывает перечисленные далее значения переменных. При этом первой переменной из стоящих вслед за словом READ присваивается первое значение из стоящих вслед за словом DATA, второй переменной - второе значение и так далее. В нашем примере после выполнения строки 10 переменные A, B, C примут значения 1, 2, 3 соответственно. При этом специальный "указатель данных", настроенный сначала на первое значение в первом блоке DATA, переместится к очередному неиспользованному значению. Поэтому выполнение строки 20 в нашем примере приведет к считыванию следующих значений, перечисленных в строке 30. В итоге получается D=4, Е=5, F=6.

Программист по своему усмотрению может менять положения указателя, очищать его, устанавливая к началу первого блока. Это делается с помощью оператора восстановления RESTORE. Поэтому в нашем примере при выполнении строки 50 переменным G, H, I будут приданы значения 1, 2, 3.
Если оператор READ присвоил значение еще не всем своим переменным, а блок DATA, откуда эти значения считываются, исчерпан уже полностью, то в программе отыскивается и читается следующий блок данных. Так переменные J, К, L в нашем примере приобретают значения 4, 5, 6, а переменные M, N, P - значения 7, 8, 9.

Хотя операторы DATA могут стоять в любом месте программы, желательно все же ставить их все вместе в самом ее конце. Так удобнее отлаживать программу и следить за правильностью считывания значений, перечисленных после слова DATA.

Но вот исходные данные введены, программа запущена. Как вывести на дисплей результаты, полученные по ходу ее работы? Ниже - несколько примеров, иллюстрирующих действие оператора вывода PRINT.

20 PRINT A
30 PRINT Вx
40 PRINT "ПРИМЕР ВЫВОДА"
50 PRINT 2*2

В первом случае вслед за словом PRINT указана простая переменная. Если ее значение лежит в пределах от 0.01 до 999999 (на разных ЭВМ эти пределы могут различаться), то оно будет выведено в виде обычного десятичного числа. В остальных случаях Бейсик использует экспоненциальное представление. Выводимое число, как правило, содержит не более шести знаков. Лишние цифры отбрасываются.

Продолжим разбор наших примеров. Оператор в строке 30 выведет на дисплей значение строковой переменной. Ограничительные кавычки при этом опускаются. Также без кавычек будет выведен текст из оператора в строке 40. Наконец, в четвертом случае на дисплей будет выведено значение выражения, указанного вслед за словом PRINT. В нашем последнем примере это, как легко проверить, 4.

Результаты могут выводиться на дисплеи и группами. Предположим, в нашей программе есть фрагмент:

10 A=10.5
20 B=1.612
30 С=362.14
40 PRINT A,B,C
50 PRINT A;B;C

Операторы, записанные в двух последних строчках, выводят на дисплей одни и те же числа. Но выведены они будут по-разному. Причина разночтений - разные разделители. В строке 40 это запятая. Она предписывает помещать вводимые значения в специальные зоны, на которые поделена строка дисплея или печатающего устройства. Всего таких зон пять, длина каждой из них - 14 позиций. Запятая - это сигнал начать размещение очередного значения в следующей зоне. Если запятых несколько, то пропускается несколько зон.

Зонный вывод отменяется, если элементы вывода, перечисляемые после слова PRINT, разделяются точкой с запятой. В этом случае между выводимыми значениями вставляется лишь по одному пробелу, да и то, если эти значения числовые. После строковых значений пробел не выводится, и следующая величина начинается с первой свободной позиции. Например, результатом работы оператора

70 PRINT "A=";А

будет текст: А=10.5

Разделители можно ставить не только между элементами вывода, но и после последнего из них. В таком случае разделитель оказывает влияние на расположение первого элемента следующего оператора вывода. Если список кончается запятой, то следующий оператор начнет вывод в первую свободную зону, при точке с запятой - очередные данные будут располагаться в первой свободной позиции строки. И только если после последнего элемента не написано никакого разделителя, очередной вывод начнется с новой строки. Разберите в качестве примера такую последовательность операторов и выводимый ими текст:

10 PRINT "А=";
20 PRINT A,
30 PRINT В
40 PRINT С

Варьирование разделителей дает довольно большие возможности для компоновки выводимых строк. Еще более расширяет эти возможности использование специальной функции TAB(N). Здесь N - целое положительное число. Оно должно быть меньше максимального количества позиций в строке. Появление функции TAB(N) предписывает процессору начать вывод очередного значения с N-ой позиции строки. Правда, двигаться можно только вправо. Поэтому, если позиция, определяемая функцией TAB, меньше текущей позиции в строке, то функция эта игнорируется.
Вот, к примеру, оператор:

40 PRINT A,TAB(7),B;TAB(21);C

В этом операторе вслед за символом А стоит запятая. Поэтому после вывода величины А=10.5 вывод следующей величины В=1.612 может начаться лишь с 14-й или еще более далекой позиции. Но в первой из функций TAB в скобках указано меньшее число - семь. Оттого первая функция TAB игнорируется и величина В помещается во второй зоне, начиная с 14-й позиции. После ее вывода 21-я позиция, указанная в скобках во второй функции TAB, остается еще справа, так что эта функция выполняется, сдвигая выводимое число С=362.14 в 21-ю позицию.

ДЕЛУ ВРЕМЯ - ПОТЕХЕ ЧАС. После урока компьютерной премудрости хорошо развлечься компьютерной игрой. По этой причине решено перенести игровые программы из четных номеров нашего журнала, из раздела "Человек и компьютер" в нечетные и помещать по одной такой программе в заключение очередного занятия "Школы начинающего программиста".
Программы написаны для простейшего компьютера - программируемого микрокалькулятора. Пусть наши игры приведут в "Школу" тех, кто пока владеет лишь этой машиной. Быть может, придя сюда, они понемногу начнут осваивать более серьезную вычислительную технику. Итак, игра Г.Белавина (г.Рига) "Кто первый!"

Суть этой игры - соревнование на быстроту реакции. Играют двое. Каждый выбирает себе одну клавишу из двух: 0 или Сх. Требуется как можно быстрее нажать свою клавишу, лишь только на индикаторе высветится число 9.9999999-01. За преждевременное нажатие засчитывается поражение. В этом случае игра начинается сначала - В/0, С/П.

Итак, программа набрана, клавиши распределены. Нажимаем В/0, С/П. Через случайный промежуток времени (он может длиться от 10 до 70 секунд) на индикаторе появляются девятки. Теперь - кто быстрее! После того, как нажата клавиша 0 или Сх, продолжаем игру, нажав на клавишу С/П.

Если переключатель Р-Г находится в положении Р, то число на индикаторе указывает, насколько больше побед одержал игрок, нажимавший клавишу 0. Чтобы начать следующий раунд, необходимо еще раз нажать С/П. При положении Г игра идет непрерывно, счет - в РА.

ПРОГРАММА: 00. Сх 01. ПА 02. 1 03. 1 04. ^ 05. ПС 06. F1/x 07. ПД 08. * 09. ПВ 10. ИПД 11. ИПС 12. * 13. Fпи 14. + 15. ПД 16. КИПД 17. x-y 18. ИПД 19. - 20. ПД 21. ИПС 22. * 23. Fx2 24. 1 25. + 26. П0 27. Сх 28. ИПВ 29. FL0 30. 29. 31. С/П 32. + 33. 1 34. - 35. Fx>=0 36. 38 37. 1 38. ИПА 39. + 40. ПА 41. 2 42. Fcos 43. Fx<=0 44. 10 45. x-y 46. С/П 47. БП 48. 10.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Янв 26, 2023 12:11 am

Тем временем появилось нечто среднее между компьютером и калькулятором...

4/87
КОМПЬЮТЕР В КАРМАНЕ

Матчасть диванного танкиста - Страница 3 87040410
На лицевой панели микрокомпьютера МК-85 клавиши для ввода цифр, букв латинского и русского алфавита, команд Бейсика. На жидкокристаллический матричный индикатор в режиме бегущей строки выводится буквенная и цифровая информация (одновременно по ширине экрана укладывается 12 знаков), а также служебные слова и знаки.

В скором времени существующий арсенал отечественной вычислительной техники личного пользования получит пополнение - наша промышленность закончила разработку и готовит к серийному выпуску вычислительное устройство МК-85, внешний вид которого представлен на снимке. Ставшая уже привычной аббревиатура "МК" - "микрокалькулятор" в данном случае не очень точно отражает реальную ситуацию. Дело в том, что МК-85 не только может выполнять большой ассортимент вычислительных операций, как этого требует название "микрокалькулятор", но и, подобно "настоящему" компьютеру, открывает немалые возможности для решения довольно сложных задач в автоматическом режиме - по введенной пользователем программе. Здесь, правда, можно возразить, что и в семействе отечественных микрокалькуляторов есть несколько таких, которые могут выполнять вычисления по заданной программе,- это программируемые калькуляторы Б3-34, МК-54, МК-61, МК-52. Однако МК-85, по своему обозначению включенный в это семейство, резко отличается от всех других его представителей.

Для пользователя главное отличие состоит в том, что он, пользователь, общается с МК-85 на языке Бейсик, дает указания общепринятыми в этом языке командами-словами, а не комбинациями из цифр и нескольких букв, как в программируемых микрокалькуляторах. Это чрезвычайно важное отличие, как и ряд других, относящихся к основным параметрам машины, позволяет говорить о том, что МК-85 вышел уже из "весовой категории" микрокалькуляторов и имеет все основания быть принятым в большой класс микрокомпьютеров. В дальнейшем мы будем без оговорок уважительно называть МК-85 вычислительной машиной, хотя с учетом небольших габаритов (примерно 165*72*13мм) и малой массы (примерно 150г) очень хочется вместо "машина" говорить "машинка".

Чтобы завершить наши размышления о том, в какой класс вычислительной техники следовало бы зачислить МК-85, заметим, что на зарубежных карманных машинах такого типа, например, на известной модели РВ-100 F фирмы "Касио" рядом с названием указано - "Персональный компьютер". Формально это дополнение вполне оправданно. Компьютер? Да. Персональный? Бесспорно. Но во избежание терминологической путаницы в данном случае от него пока можно было бы воздержаться. Хотя бы потому, что за словосочетанием "персональный компьютер" мы привыкли видеть значительно большие возможности и удобства для пользователя, привыкли видеть значительно более комфортное устройство, позволяющее, в частности, работать с текстами и изображениями на достаточно большом экране дисплея, хранить и вводить в машину информацию из долговременной памяти, например, с магнитных дисков, выводить информацию на печатающее устройство или графопостроитель.

В то же время МК-85, уступая традиционным персональным ЭВМ, имеет в сравнении с ними и определенные достоинства. На МК-85 можно, в частности, часами работать, не подключаясь к электросети, и, наконец, его можно просто положить в карман.

Более подробный рассказ о карманном компьютере МК-85 мы начнем именно с того, что его разработчики решили отказаться от столь неудобного языка общения, с каким приходилось иметь дело владельцам программируемых микрокалькуляторов: например, приходилось заучивать коды команд, а процесс программирования походил больше на борьбу с многочисленными ограничениями - неразвитой логикой, крохотной памятью, сложной системой адресации.

Другое дело МК-85 - решая с его помощью огромное множество реальных задач, встречающихся в практике инженера, экономиста, студента, исследователя, вы не почувствуете ограничений подобного рода. А само программирование на Бейсике не потребует каких-либо переучиваний, связанных с особенностями машины. Так же, как на любой персональной ЭВМ, вы будете вводить программу с помощью клавиатуры - на лицевой панели компьютера есть для этого клавиши с буквами латинского и русского алфавита. Но реально все происходит еще проще: любая из команд передается машине нажатием двух определенных клавиш, в числе которых клавиши известных команд, например, "GOTO", "NEXT", "STOP", "RETURN", "PRINT" и других. Во время ввода данных и команд, подтверждение своих действий в виде слов и цифр вы видите на небольшом дисплее компьютера. Здесь же появляется все, что машина в процессе работы хочет сообщить пользователю.

Вариант Бейсика, используемый в микрокомпьютере МК-85, легко изучить даже тому, кто еще не знает ни одного языка программирования и ни разу не писал программу для компьютеров. Не случайно на Западе подобные языки программирования называют "кухонными". В то же время 54 команды и функции Бейсика, которые понимает МК-85, позволяют запрограммировать решение достаточно сложных задач, выполнять многие реально встречающиеся инженерные и статистические расчеты, проводить не очень громоздкий численный научный эксперимент, составлять игровые программы.

Внутри корпуса МК-85 разместились четыре соединенных последовательно миниатюрных серебряноцинковых элемента питания СЦ-0.18; размером они чуть больше тех, что установлены в наручных электронных часах. Емкость этой батареи - 0.18 ампер-часа, то есть она способна 180 часов давать ток в 1 миллиампер. Энергия, потребляемая микрокомпьютером, зависит от того, в каком режиме он работает. Составляя всего тысячную долю миллиампера в режиме хранения программы, потребление незначительно увеличивается во время ввода и отладки программ, но лишь изредка достигает своей предельной величины - 3 миллиампера. Нужно учесть, что серебряноцинковые элементы обладают способностью частично самовосстанавливаться в те моменты, когда они не работают, и поэтому реально МК-85 может с перерывами активно работать от одного комплекта батарей несколько сот часов и хранить введенную в него информацию, в частности программы, много месяцев. Программы хранятся здесь все время, пока "живы" гальванические элементы, независимо от того, включен компьютер или выключен - ОЗУ получает питание напрямую, минуя основной выключатель. Ток, потребляемый в этом режиме, настолько мал, что даже во время замены элементов все программы сохраняются, если пауза между отключением старых и установкой в компьютер новых источников питания не превысит 15 минут.

Высокая экономичность микрокомпьютера МК-85 в значительной степени связана с тем, что в нем используются интегральные схемы, которые имеют так называемую комплиментарную структуру металл-окисел-полупроводник (КМОП-структура). В этом случае в тончайшем поверхностном слое кристалла формируются полевые транзисторы с проводящими каналами двух разных типов: у одних электронная проводимость (n-каналы), у других - дырочная (p-каналы). Создание таких комплиментарных структур требует особо тонких технологий, на них, как правило, идут, когда нужно получить интегральные схемы с предельно низким потреблением энергии.

Решающий вклад в высокую экономичность МК-85 дает его жидкокристаллический дисплей, как принято его называть - ЖК-иидикатор. В программируемых микрокалькуляторах обычно используют катодо-люминесцентные индикаторы, на которых четко высвечиваются достаточно яркие зеленоватые цифры. Есть у таких индикаторов и немало недостатков. Этот непростой электровакуумный прибор очень чувствителен к толчкам и ударам, при слабом внешнем освещении он быстро утомляет зрение, а при ярком солнечном свете на экране трудно что-либо разобрать, несмотря на обязательный светофильтр.

Механические свойства ЖК-индикатора таковы, что за его судьбу можно не опасаться, даже при сильных толчках, а что касается потребления энергии, то здесь индикатор на жидких кристаллах вообще вне конкуренции. Хотя в катодолюминесцентном индикаторе нить накала (катод) обычно разогревается лишь до слабого, едва заметного свечения, ток, необходимый для ее разогрева, сравнительно велик. Довольно много энергии требуют и индикаторы на основе светоизлучающих диодов. В целом можно считать, что ЖК-индикатор потребляет в тысячи раз меньше энергии, чем его конкуренты, и, значит, при одинаковой массе источников тока может работать в тысячи раз дольше. Но, конечно, за такое достоинство приходится платить - ЖК-индикатор сам не светится, им можно пользоваться только при внешнем освещении, при свете. Кстати, в МК-85 имеется регулятор контрастности, он позволяет наилучшим образом согласовывать изображение на экране с условиями освещения.

Привычный жидкокристаллический индикатор в часах или микрокалькуляторе напоминает линейку в подвале почтового конверта, куда можно вписывать только стилизованные цифры индекса, составленные из черточек. Самая сложная цифра - восьмерка, для ее написания используются все семь черточек. Кроме цифр от нуля до девяти, семью черточками можно изобразить отдельные буквы, например: Б, Г, Н, П, Р, Ь, а чтобы отображать на экране используемые операторы Бейсика и введенные в программу слова (например, единица измерения или такие слова, как "масса", "цена", "скорость", "введите коэффициент А" и т.д.), нужен латинский и русский алфавит. Поэтому оказалось целесообразным усложнить конструкцию микросхемы, управляющей индикатором, и сделать его не штриховым, а точечным, матричным. Реально это значит, что каждый символ на экране - единичка, пятерка, буква А или знак "+" - изображается набором точек. На один знак выделяется 35 точек - семь горизонтальных рядов по пять точек в каждом. Такая матрица-прямоугольник размером 5*7 точек позволяет сформировать любой необходимый машине символ, всего их в МК-85 используется более ста.

На индикаторе в ряд поместились двенадцать матриц, то есть на индикатор можно вывести не больше двенадцати символов. В то же время в программах, написанных на Бейсике, встречаются строки и из 40-50 символов, и, чтобы не удлинять индикатор карманного компьютера, в нем использован принцип бегущей строки - аналог того, что можно увидеть в некоторых типах световой рекламы. Текст, появляясь буква за буквой у правого края индикатора, сдвигается влево до тех пор, пока не пройдет вся строка.

Индикатор - это как бы окно длиной в 12 символов, которое может скользить по неподвижной строке из 63 символов. В определенный момент на индикаторе появляется мерцающий темный квадратик, он предупреждает о том, что строка заканчивается. Положением окна можно управлять, сдвигая его влево и вправо по строке специальными клавишами.

В верхней части индикатора размещена так называемая служебная строка; в ней постоянно отображаются все сведения о текущем режиме работы машины, указывается объем оставшейся свободной памяти.

Оперативная память микрокомпьютера МК-85 сейчас имеет емкость два килобайта. Много это или мало? Байт - это восемь бит, то есть в оперативное запоминающее устройство - в ОЗУ микрокомпьютера - можно записать чуть больше шестнадцати тысяч единичек и нулей. В распоряжение пользователя предоставлена не вся имеющаяся оперативная память, часть ОЗУ используется для хранения информации, которая выводится на индикатор, другая часть необходима для работы самого Бейсика: ведь Бейсик - это тоже программа, она переводит наши, введенные с клавиатуры, указания на язык, понятный компьютеру. Всего вычислителю для свободного использования остается 1000 байт оперативной памяти.

Любая функция или команда Бейсика, независимо от того, из скольких букв она состоит, это так называемый шаг в действиях компьютера, для его хранения в памяти нужен байт, то есть 8 элементов, где будут записаны единицы или нули. Столько же уходит на любой символ - отдельную букву или цифру, два шага требует номер строки программы, и один шаг необходим для записи команды ЕХЕ, которая должна быть подана в конце строки. Тем самым минимальная длина одного оператора - четыре шага, в среднем каждый оператор требует десяти-двенадцати шагов.

С учетом этого максимальная длина программы, записанной в память МК-85, может составлять примерно 100 операторов Бейсика. Для хранения данных и необходимых констант можно использовать 26 ячеек памяти по 64 бита в каждой. К ним можно обращаться как напрямую - называя имя переменной, например, А или D, так и косвенно, называя номер ячейки.

Если важнее иметь больше ячеек для переменных и констант, то их число можно увеличить за счет длины программы по цене восемь байт за ячейку памяти (регистр) для записи каждой переменной либо константы. Максимально можно получить 1000/8+26=151 такую ячейку, однако на программу в этом случае не останется ни шага.

Важнейшая особенность микрокомпьютера, принципиально отличающая его от микрокалькулятора, даже самого совершенного,- это применение микропроцессора с разрядностью не менее восьми: такой процессор производит все операции одновременно, параллельно со всеми восемью (или более) единицами и нулями многоразрядного двоичного числа. Это обеспечивает высокое быстродействие микроЭВМ по сравнению с теми же программируемыми калькуляторами, во многих из них вообще числа обрабатываются последовательно, один двоичный разряд за другим.

Для оценки примерного быстродействия МК-85 в него была введена программа на Бейсике для вычисления факториала 33!, то есть произведения всех чисел от единицы до тридцати трех. Ответа пришлось ждать всего 4.7 секунды.

В МК-85 предусмотрен и режим повышенного быстродействия, когда на решение той же задачи компьютеру нужно всего 1.2 секунды; платой за скорость является повышенное потребление энергии.

Для сравнения заметим, что факториал 33! вычисляется на калькуляторе МК-52 в течение 37 секунд.

Поскольку потребление энергии в режиме повышенного быстродействия может быть значительным, для того чтобы сохранить энергию батареи, используют преимущества универсального питания - МК-85 включают в сеть через блок питания. Впрочем, ускоренный режим необходим лишь для вычислений по сравнительно сложным программам, поэтому необходимость подключения к сети возникает сравнительно редко. Работать на микроЭВМ можно, не зная, как она устроена, и все же беглое знакомство с устройством МК-85 может оказаться интересным для кое-кого из будущих его пользователей. Отвернув три винта и сняв заднюю крышку (это рано или поздно придется сделать для замены батарей), мы увидим печатную плату с густорасположенными токоведущими дорожками и на ней несколько "многоножек" - больших, интегральных схем. Их всего шесть: микропроцессор, оперативное запоминающее устройство - ОЗУ, две микросхемы постоянного запоминающего устройства - ПЗУ, контроллеры (управляющие устройства) клавиатуры и индикатора.

Матчасть диванного танкиста - Страница 3 87040310

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

Если каким-либо проводящим предметом прикоснуться к контактной площадке, "пальцы" непременно окажутся замкнутыми, даже при случайном перекосе замыкателя наверняка окажутся соединенными два "пальца" разных "рук".

В отверстия на верхней панели микрокомпьютера вставлены пластмассовые толкатели с нанесенными на них обозначениями, то, что мы обычно называем клавишами или кнопками. Нажатая клавиша прижимает к "пальцам" вкладыш из токопроводящей резины и тем самым замыкает их. Клавиатура на "резиновом ходу" работает мягко, надежно, она намного приятней, чем клавиатура программируемого микрокалькулятора Б3-34, где использованы жесткие металлические мембраны.

Матчасть диванного танкиста - Страница 3 87040110

Чтобы хотя бы в общих чертах увидеть, как связаны между собой элементы схемы и какую роль играет каждый из них, рассмотрим работу МК-85 при выполнении операции сложения.

Пусть, к примеру, мы производим сложение 1+2 и первой нажали клавишу "1". Толкатель, надавливая на токопроводящий резиновый вкладыш, замкнет расположенные под этой клавишей контакты на плате клавиатуры. Что же происходит дальше?

Есть в МК-85 микросхема, ответственная за ввод информации,- контроллер клавиатуры. Он устроен таким образом, что при нажатии любой клавиши соответствующий ей условный код - набор нулей и единичек - записывается в специальную ячейку памяти. Там код будет храниться все время, пока клавиша нажата. Чтобы отличить истинные, полезные замыкания контактов от ложных, возникающих нз-за явления, которое принято называть дребезгом клавиатуры, предусмотрена защита.

Как в любом электронном вычислительном устройстве, в микрокомпьютере имеется главный метроном - тактовой генератор. Он как бы отбивает такт, задает ритм, в соответствии с которым функционируют все элементы схемы. Каждые несколько тактов микропроцессор заглядывает в ячейку памяти микроконтроллера клавиатуры, проверяя, что за код там записан. Если тысячу раз подряд будет обнаружен один и тот же код, это произойдет, если клавиша нажата хотя бы несколько сотых долей секунды, процессор примет решение считать клавишу нажатой и перейдет в другой режим работы.

Матчасть диванного танкиста - Страница 3 87040210

С помощью контроллера процессор обратится к постоянному запоминающему устройству. Здесь в ПЗУ с достаточно большой емкостью - 16 килобайт - собраны все знания компьютера, необходимые ему для работы, в частности в ПЗУ хранится и программа Бейсик. Но программа эта пока нам не нужна, наша задача 1+2 будет решена без нее, хотя даже в таком простейшем случае технология работы компьютера совершенна и продуманна.

Сравнивая условный код клавиши, полученный от контроллера с кодами, информация о которых хранится в ПЗУ, компьютер находит соответствующий стандартный код, необходимый для дальнейшей работы, - в нашем случае это код единицы, и направляет его в ту часть оперативного запоминающего устройства, которая носит название строки редактирования.

Вслед за тем процессор (опять-таки через контроллер) вновь обращается в ПЗУ и по стандартному коду нажатой клавиши находит информацию, необходимую контроллеру, управляющему индикатором. Так формируется информация, соответствующая графическому представлению единицы, и сведения о том, какие точки в матрице нужно "зажечь", а какие оставить "потушенными", отправляются в другую часть оперативного запоминающего устройства - в экранное ОЗУ. Контроллер индикатора, обращающийся к этой части ОЗУ в ритме тактовых импульсов, тут же принимается формировать изображение единицы на индикаторе.

Как здесь не удивиться оперативности микрокомпьютера - вряд ли кому-нибудь удастся заметить паузу между нажатием клавиши и появлением на индикаторе соответствующего знака. А ведь мы сильно упростили описание процессов, - реально их больше и они сложнее, а выполняется все, как говорится, в мгновение ока. Но не будем вдаваться в подробности - нажав клавишу "1", нажмем теперь "+" и "2". Описанный процесс повторится, в ОЗУ в строке редактирования будут записаны уже три кода, а на индикаторе появится изображение всего нашего примера 1+2.

Чтобы подсчитать сумму, нужно нажать клавишу ЕХЕ, она сообщает машине, что ввод информации завершен. Как только код этой клавиши будет прочитан процессором, он примется анализировать строку редактирования. Прежде всего процессор начнет выяснять, идет ли речь о данных или о команде. Единица, встретившаяся первой, явно относится к данным и попадает в ячейку памяти, расположенную в самом процессоре. Таких ячеек в процессоре несколько, их принято называть регистрами общего назначения, в один из них вскоре попадет и второе наше слагаемое - "2". Обнаружив в строке редактирования код команды "+", процессор находит в ПЗУ соответствующую этой команде программу сложения и немедленно исполнит ее, сложив имеющиеся в ОЗУ данные - "1" н "2". Код результата отправляется в строку редактирования, а графический образ тройки - в экранное ОЗУ. Контроллер индикатора немедленно выводит ответ на экран.

В принципе так же работает компьютер в автоматическом режиме по введенной в него программе. Усложнение схемы в этом случае прежде всего, конечно, связано с тем, что процессор, выполнив очередную операцию, получает указания для дальнейших своих действий не от замкнутых контактов клавиатуры, а из ОЗУ, куда занесена программа, исходные данные и необходимые результаты промежуточных вычислений.

Мы уже не раз были свидетелями, как тот или иной класс вычислительной техники, сформировавшись, недолго оставался в рамках своих первоначальных возможностей, быстро прогрессировал, резко улучшая наиболее важные для пользователя характеристики. Это, в частности, произошло с персональными компьютерами, многие модели которых, оставаясь небольшими настольными аппаратами, по некоторым важнейшим параметрам сейчас приблизились к большим вычислительным машинам, созданным всего лишь десять-двадцать лет назад.

Для класса карманных микрокомпьютеров, к которому относится МК-85, тоже можно прогнозировать заметные улучшения. Вполне возможно, например, увеличение объемов оперативной памяти, что, в частности, позволит решать более сложные задачи. Не исключено применение в машинах этого класса и более совершенных матричных индикаторов, в том числе цветных, позволяющих отображать большие, чем сейчас, объемы цифровой и текстовой информации и производить на экране некоторые графические построения - диаграммы, гистограммы, графики. Значительно более близкая перспектива - вывод текстовой и графической информации на большой экран дисплея, прежде всего на экран обычного телевизора. Подобным же образом вполне реально создание систем для вывода информации из микрокомпьютера на алфавитно-цифровое печатающее устройство (принтер) и графопостроитель. Достаточно близкой перспективой представляется возможность применения для микрокомпьютера устройств долговременной магнитной памяти, первым таким устройством скорее всего будет кассетный бытовой магнитофон. Это дополнение, кстати, резко повысит удобство работы с компьютером, так как на стандартных кассетах пользователь сможет хранить библиотеки нужных ему программ и при необходимости быстро вводить их в машину. На кассету можно будет также выводить из компьютера информацию, требующую длительного хранения, а также программы, первоначально введенные в компьютер с клавиатуры.

Практически все совершенствования карманного компьютера связаны с усложнением его схемы, и это в принципе должно было бы привести к увеличению массы и габаритов. Но в то же время прогресс наверняка будет идти и в направлении, как говорят специалисты, повышения интеграции, увеличения числа элементов в интегральных схемах и объединения нескольких схем в одной. Все это позволяет надеяться, что карманный компьютер, совершенствуясь, будет оставаться в своей весовой категории, которая, несомненно, найдет много поклонников, в частности из числа специалистов, работающих с вычислительной техникой в походных условиях, в деловых поездках или экспедициях.
А.БОЙКО, Р.ЧИКОРУДИ
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Янв 27, 2023 12:15 am

4/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Уж сколько раз твердили миру, как нехорошо писать анонимки, и тем не менее нам приходится вновь касаться этой надоевшей темы. Правда, в нетрадиционном аспекте: нас беспокоят не безымянные кляузники - наоборот, неизвестными порою желают оставаться авторы весьма глубоких и интересных корреспонденций.
Вот одно из таких писем, недавно пришедших в редакцию. Инженер-ремонтник персональных ЭВМ,- представляется его автор. Далее - умный, местами едкий разбор материалов раздела. В конце - ни подписи, ни обратного адреса. Лишь штемпель "Пулково" на конверте.
Уважаемый товарищ из Пулково! Мы познакомили с вашими суждениями авторов затронутых вами публикаций. Они ничуть не обижены на критику. Наоборот, они признательны за нее, хотели бы продолжить разговор со столь проницательным коллегой, который мог бы помочь им дельными советами. Но как наладить контакты с ним! Не обращаться же к нему одному через журнал с более чем трехмиллионным тиражом!
Нас очень обрадовало бы, если бы кто-то из читателей (не только москвичей) пожелал вступить в постоянное творческое сотрудничество с разделом, участвовать в поиске тем и информации для него, в анализе читательской почты, в подготовке статей и т.д.- словом, войти в круг энтузиастов, чьи фамилии регулярно появляются на страницах раздела.
Ждем нового письма из Пулкова, теперь уже с обратным адресом. Ждем писем из Москвы и других городов от тех, кто сознает, что постоянный широкий диалог сотрудников раздела с его читателями - необходимое условие его существования.

"ЭЛЕКТРОНИКА БК-0010": ДВА ГОДА СПУСТЯ
Опираясь на собственные наблюдения и опыт знакомых энтузиастов компьютера "БК-0010", я хочу рассказать о том, как обстоит дело с его программным обеспечением. Самый животрепещущий вопрос, который волнует сейчас не только владельцев компьютера, но и учителей тех школ, где появились кабинеты информатики, оборудованные "БК": какие программы для него существуют и где их взять?

Дело в том, что программы для "БК" гораздо сложнее тех, что нужны для калькуляторов. Написать такую программу по силам далеко не каждому, и даже набрать ее без ошибок на клавиатуре, имея готовый текст,- сущее мучение.

И все же человек, покупающий "БК", получает компьютер практически "голым" Отдельно кассеты с программами тоже не продаются.

Тем не менее за два года среди любителей распространилось довольно много программ, из них несколько системных: "Быстрый Бейсик" (Вильнюс), "Адаптация Бейсика ДВК-1" (Москва). Эти две программы позволяют компьютеру понимать Бейсик. О них рассказывалось в 10/86. "Система Рига" разработана специально с учетом нужд школьной информатики. Она особенно удобна для создания всевозможных обучающих программ.

Еще две программы, необходимые всем, кто программирует на "БК" в машинных кодах или хочет разобраться, как устроены и как работают программы, находящиеся в постоянной памяти компьютера,- это "Отладчик" и "Дисассемблер". "Отладчик для программ в машинном коде" (Рига) позволяет выполнять программу пошагово, команда за командой, выдавать на экран и менять содержимое памяти и т.д. "Дисассемблер" (Москва) умеет расшифровывать машинные команды, хранящиеся в памяти "БК" в двоичном коде, и изображать их на экране.

"Фокод" (Москва) позволяет вызывать из Фокала, встроенного языка программирования "БК", подпрограммы в машинном коде. Используя "Фокод", можно сочетать простоту программирования на Фокале с высокой скоростью, характерной для использования машинного языка.

Кроме того, существует довольно много игровых программ для "БК", например, "Шахматы", "Поиск сокровищ в лабиринте", экономическая игра "Менеджмент" из книги Ч.Уэзерелла "Этюды для программистов", "Реверси" и "Ним" из книги М.Гарднера "Математические головоломки и развлечения".

Большинство этих программ написали любители, которые не хотели ждать, когда в продаже появится профессионально сделанное программное обеспечение. К сожалению, программы для "БК" пока распространяются единственным способом: Вася переписывает у Коли, Коля у Саши... Часто цепочка работает по системе "испорченного телефона". Если учесть, что большинство программ не имеет никаких описаний или описания потерялись в дороге, легко представить хаос, который при этом возникает. Тем временем новички, недавно купившие "БК", не только не знают, где взять программы, но и не представляют, на что они могут рассчитывать в своих поисках. Если вы не встретили в моем списке каких-то известных вам программ, то это потому, что я их просто не знаю, они до меня еще не доползли!

Матчасть диванного танкиста - Страница 3 87041110 Матчасть диванного танкиста - Страница 3 87041210 Матчасть диванного танкиста - Страница 3 87041310
"БК-0010" способен играть в шахматы и демонстрировать ход партии, писать на экране тексты из любых символов, нарисовать перспективное изображение предметов заданной формы.

Неразбериха нарастает все сильнее, явно обгоняя темпы роста производства "БК-0010". Тут есть над чем подумать и любителям, и тем, кто занимается производством и продажей домашних компьютеров: ведь спрос на них непосредственно зависит от доступности, разнообразия и качества программ.
М.МАКСИМОВ (г.Москва)

ГОЛОС ДОМАШНЕГО КОМПЬЮТЕРА
Тот, кто интересуется персональными компьютерами, знает, что большинство этих машин обладает "голосом". В простейшем случае это писки или гудки. Существуют и звукосинтезаторы - электронные приставки, позволяющие воспроизводить речь и сложную музыку.

Такую простую ЭВМ, как "БК-0010", оказывается, тоже можно научить "говорить" и "музицировать", притом вовсе не прибегая к дополнительным устройствам.

Я поставил перед собой такую цель, как только услышал звуки, раздающиеся при считывании программ с магнитофона. Поскольку средствами языка Фокал извлекаются только гудки с разной частотой следования, пришлось освоить программирование в кодах.

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

Для получения музыкальной ноты надо строго периодически (например, 500 раз в секунду) подавать на этот разряд чередующиеся нули и единицы. Тогда мембрана колеблется с той же частотой, и раздается звук. Его высоту можно менять, изменяя частоту, с какой подаются сигналы,- иными словами, задерживая паузы между их поступлениями. Правда, чистый тон так не получится, ведь колебания электротока в проводниках компьютера не синусоидальные, а прямоугольные.

Приведенная программа создает музыкальные звуки именно по такому принципу. Блок, непосредственно издающий звуки, действует только в те моменты, когда на клавиатуре нажата одна из клавиш. Компьютер находит в тексте программы величину задержки, соответствующую коду клавиши. В течение всего времени, пока клавиша нажата, генерируется звук.

Матчасть диванного танкиста - Страница 3 87041410

К сожалению, на клавиатуре "БК-0010" в один ряд могут поместиться только две октавы, так как в ряду всего 15 клавиш. В моей программе основным нотам соответствуют клавиши третьего снизу ряда. Если у ноты есть бемоль, он расположен прямо над нею, диез же - правее бемоля по диагонали от основной ноты.

"Настройка инструмента" проходила так: сначала самой низкой ноте была поставлена в соответствие некоторая задержка t, a каждой следующем ноте, на полтона выше предыдущей, ставилась в соответствие задержка, равная t=2**(1/12). Именно такая разница в частотах характерна для равномерно темперированного строя.

Почти так же можно получать компьютерную речь. Сначала на кассету через микрофон записывают речь человека, затем считывают ее в память компьютера с помощью специальной программы, а затем уже другая программа управляет тем же самым шестым разрядом выходного регистра. Речь считывается примерно так, как это делает встроенная программа общения с магнитофоном, но по-другому организована запись в память. Конечно же, речь получается сугубо "машинная", но разобрать ее нетрудно.

Практическое использование речевых возможностей "БК-0010" может быть различным: игры, обучающие программы, телефонный автоответчик и многое другое.

Введите программу в компьютер с 1000-го адреса и запишите ее на магнитофон. Запустите программу по команде 1000G. Пьезодатчик компьютера очень слаб, поэтому не отключайте магнитофон. Нажмите клавиши "Пауза", "Пуск", "Запись", и магнитофон превратится в усилитель. Отрегулируйте громкость, и в вашей квартире появится новый электромузыкальный инструмент!
П.КОНОПЛЕВ (г.Москва)

ТАЙМЕРНАЯ ФУНКЦИЯ
Работая с "БК-0010", я столкнулся с необходимостью определять временные интервалы. Покопавшись в компьютере, я обнаружил, что он может одновременно решать задачу и отсчитывать время. Есть в нем для этого и специальная функция FCLK (), которая, как ни странно, не описана в справочных материалах по компьютеру, хотя и очень полезна.

Чтобы использовать эту функцию, к компьютеру нужно подключить генератор импульсов с напряжением 5 Вольт (вход А5 на леном разъеме). Лучше, если частота импульсов будет 50 или 100Гц, однако для более точного определения времени частоту можно поднять до килогерца или выше. Я подключаю к "БК" самодельный генератор (см. рисунок); питание он получает от компьютера.

Матчасть диванного танкиста - Страница 3 87041510

При работе "БК" будет отсчитывать импульсы, а их количество можно узнать, обращаясь к функции FCLK (). Решению основной задачи это не помешает: компьютер запоминает текущее состояние исходной задачи, выполняя функцию FCLK(), затем он восстанавливает исходное состояние и продолжает решать основную задачу. Говорят, что таймерное устройство "БК" работает по прерыванию.

Прерывания позволяют компьютеру эффективно использовать свои ресурсы. Если бы компьютер попеременно опрашивал то таймерный вход на наличие сигнала, то решал бы задачу (кстати, такой режим возможен и называется работой по опросу), время распределялось бы не так эффективно. Напротив, в режиме работы по прерыванию все время процессора посвящено основной задаче. Программа, приводимая ниже, поможет настроить таймер.

Матчасть диванного танкиста - Страница 3 87041610

А.БАТЮК (г.Москва].

[ УЗЕЛКИ НА ПАМЯТЬ
Речь пойдет об операторе ASK, который предназначен в Фокале для ввода данных с клавиатуры в ходе выполнения программы.

Оказалось, что возможности этого оператора гораздо шире, чем описано в руководстве.

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

Матчасть диванного танкиста - Страница 3 87041710

А.Николаев (г.Челябинск). Большое неудобство при вводе чисел по ASK доставляют ошибки ввода. Клавиши редактирования ->, <- и другие помочь не могут. Однако, если после ошибочно введенного символа нажать клавишу ЗБ, то Фокал позволит исправить число. На экране появятся символы -:. Останется только набрать правильное значение переменной.

А.Давыдов (г.Москва). Иногда нужно сохранить текущее значение переменной, а уже введены несколько цифр. Не заметить их машине поможет команда.

@

В качестве значений можно вводить не только числа, но и любые арифметические выражения с функциями или без них, другие переменные. Перед записью такого выражения должен быть + или -. В этом случае, к сожалению, текст редактировать невозможно. ]

БАТАРЕЙКИ ЕЩЕ ПОСЛУЖАТ
Израсходованные элементы "Квант", от которых питается большинство новых моделей калькуляторов, могут еще долго работать в качестве аккумуляторов небольшой емкости.

Обычно батареи восстанавливают пульсирующим током, однако можно ограничиться подзарядкой и от источника постоянного тока, например, от блока питания машинки. Для этого я включил в "МК-61" параллельно "сервисному" диоду Д-310 цепочку из резистора сопротивлением 15Ом и кремниевого диода КД-102, как на схеме. Разместить детали удалось прямо на выводах разъема. Теперь батарейки подзаряжаются все время, пока калькулятор подключен к сети, и при этом сохраняются все преимущества, описанные в статье "Всего один диод" (4/85).

Матчасть диванного танкиста - Страница 3 87041810

Даже после пятнадцати полных циклов "заряд-разряд" емкость Элементов "Квант" остается достаточной для пяти часов непрерывной работы "МК-61" после каждой разрядки. Для максимального восстановления полностью разряженных элементов необходимо примерно четырнадцать часов, машинка при этом должна быть выключена; если она работает, то подзарядка идет медленнее.

Аналогично я доработал и калькулятор "МК-52", но здесь пришлось немного увеличить напряжение блока питания. Для этого в блоке я заменил стабилитрон КС156А на КС168А. Схема осталась прежней, только вместо диода КД102 я впаял перемычку. К сожалению, в этом микрокалькуляторе элементы заряжаются до меньшего напряжения, и их хватает каждый раз только на два часа работы. К тому же сигнал разряда батарей иногда появляется преждевременно из-за плохого контакта в разъеме питания. В нем же иногда кроется и причина неудачного обращения к ППЗУ при работе от батареек.

В "МК-52" подзарядка идет быстро даже тогда, когда калькулятор включен. Если на каждый час работы от батарей придется три часа работы от сети, элементы всегда будут заряжены.
А.КИРПИЧНИКОВ (г.Москва)

От редакции: Изменения в схеме можно производить, лишь выключив микрокалькулятор и отключив от сети блок питания. Для работ подойдет любой низковольтный маломощный паяльник с питанием через понижающий трансформатор.

[ УЗЕЛКИ НА ПАМЯТЬ
Хорошей идеей делятся читатели В.Рыбант (г.Керчь) и С.Скалаух (г.Северодонецк):

Когда вводишь программу в микрокалькулятор, приходится смотреть поочередно то в текст, то на индикатор и клавиатуру. Это неудобно. Можно поступить иначе: вы записываете текст программы на магнитофон, читая его вслух не очень быстро, делая паузы между командами, потом при наборе программы пускаете ленту и вводите программу в микрокалькулятор на слух. Набор программы из 98 шагов занимает при этом около трех минут.

Читатель В.Мартынов (г.Калуга) пишет:

Увидев на индикаторе сообщение ЕГГОГ, нажмите клавишу ВП - и вы получите кодированную информацию о причинах ошибки. Г.ГГОГ: либо нулевой аргумент вычисляемой функции не входит в ее область определения, либо использован один из операторов аварийного останова (см. 12/84). ЕГГОГ и точка в произвольной позиции: либо ненулевой аргумент вычисляемой функции не входит в ее область определения, либо значение функции или ее аргумент вышли из диапазона допустимых значений, оговоренного в "Руководстве по эксплуатации". ЕГГОГ без точки: результат операции или значения операндов вышли из диапазона допустимых значений. Произвольное сообщение со знаком "минус" (например, -ЕГГОГ): знак аргумента не разрешен для используемой операции. ]

[ ДОСКА ОБЪЯВЛЕНИЙ
Клуб пользователей БК просит помощи у всех энтузиастов: расскажите, как программировать в кодах, помогите записать Бейсик. 310111, Харьков, Познанская, 8А, к.109, Примакову Д.А.

Призываю всех ленинградских пользователей БК к объединению в клуб. Мне удалось адаптировать к БК версию языка Форт, готов обмениваться и другим программным обеспечением. 199048, 14 линия, 67/69, кв.25, Цаплев А.В.

Консультационный центр владельцев БК просит выслать руководство системного программиста, а также откликнуться тех, кто интересуется машинной графикой. 690068, Владивосток, Магнитогорская, 22, к.34, Бурданову В.С.

Ищу единомышленников, занимающихся разработкой музыкальных синтезаторов на базе БК. Хотелось бы получить схему, описание монитора, драйверов, записать Бейсик. 428000, Чебоксары, пр.Ленина, 31, кв.23, Донскому А.Н.

Обменяюсь программами с владельцами БК. Располагаю библиотечкой различных нематематических, неинженерных программ для домашнего использования. 292220, г.Сокаль, Львовская обл., ул.Ленина, 35, кв.19, Онипко А.И. ]

[ ИЗ СЕРДИТОГО ПИСЬМА
... Заставила меня взяться за перо статья И.Данилова, напечатанная в рубрике "Школа начинающего программиста" 11/86. В ней, кроме всего прочего, описывался алгоритм заварки чая. так как я привык свято верить печатному слову, то взял лучший грузинский чай, какой смог найти в нашем продмаге, и выполнил все действия, описанные в статье. Заварил всю пачку и... У меня нет слов для описания жалкой бурды, полученной по предложенному алгоритму.

После этого я разыскал завалявшийся в моем кухонном шкафу индийский чай и заварил его по методу, предложенному В.Похлебкиным в его монографии "Как заваривать чай". Напиток был бесподобен! Вот что значит правильный алгоритм!

Считаю: чтобы избежать подобных казусов впредь, нужно потребовать от всех авторов журнала обязательного знакомства с первоисточниками. Ведь прочти И.Данилов упомянутую монографию, он не стал бы предлагать читателям свой сомнительный алгоритм.

Желаю всем сотрудникам журнала новых творческих успехов и поздравляю всех его читателей с праздником 1 апреля.
Р.АДИШЕВСКИЙ (г.Москва) ]

И ПРОГРАММИСТУ, И МАШИНИСТКЕ
Оформляя распечатки числовых данных на ЭВМ, машинописные тексты и плакаты, убеждаешься, что размещение информации на листе бумаги - не такое простое дело. Его облегчит предлагаемая программа.

00. ИПВ 01. ИПА 02. - 03. ИПС 04. - 05. x-y 06. Fx<0 07. 11 08. + 09. БП 10. 14 11. - 12. 2 13. / 14. 1 15. + 16. П3 17. КИП3 18. ИПА 19. ИП3 20. + 21. П7 22. FBx 23. ПП 24. 71 25. С/П 26. П1 27. П9 28. КИП9 29. F() 30. ИП9 31. - 32. Fx!=0 33. 42 34. 1 35. 0 36. * 37. 1 38. + 39. ИП9 40. + 41. П9 42. ИП1 43. ИП9 44. - 45. Fx>=0 46. 25 47. П4 48. 2 49. / 50. 1 51. + 52. П3 53. КИП3 54. ИП4 55. ИП3 56. - 57. П2 58. КППД 59. БП 60. 25 61. ИП1 62. ИП7 63. 1 64. + 65. + 66. П7 67. FBx 68. FBx 69. ПП 70. 87 71. 2 72. F10X 73. / 74. + 75. В/0 76. ИП7 77. ПП 78. 87 79. ИП3 80. П7 81. ИП2 82. x-y 83. ПП 84. 71 85. x-y 86. B/0 87. ИП2 88. + 89. 1 90. + 91. В/0.

Матчасть диванного танкиста - Страница 3 87041910

Работа с программой начинается с задания ширины листа, левого и правого полей: В-ПВ, А-ПА, С-ПС. Далее задается режим расчета: N-ПД.

N=61. Режим табуляции, когда место символа определяется как номер позиции от левого края листа бумаги, Тi. В этом режиме происходят расчеты при машинописи и программировании на Бейсике. N = 76. Режим пробелов, когда нужно определять xi - число пропусков позиций между последним символом предыдущего и первым символом очередного числа или слова. Этот режим характерен при работе на Фортране и ПЛ/1.

Разместить по центру поля заголовок, содержащий L позиций, можно по инструкции: В/0 L С/П... X0, XA. При работе с таблицей сначала вручную определяют ширину отдельных колонок таблицы, bi, зависящую от максимальной длины слова или числа, печатаемых в одной строке внутри колонки. Затем по числу колонок определяют полную ширину таблицы LT=sum(bi)+К+1. Это значение задают программе: В/0 LT С/П... X0, XA. Далее последовательно вводятся сведения о ширине колонки bi и длине печатаемого внутри колонки числа или слова Si:bi ПП Si С/П... В режиме табуляции на индикатор выводится число вида Ti, Ti'. Здесь Ti - номер позиции, куда впечатывается левый разделительный знак i-той колонки, Тi' - номер позиции, начиная с которой следует печатать число или слово внутри колонки с тем, чтобы разместить его по центру колонки. В режиме пробелов выводится xi - количество интервалов, которое нужно пропустить, чтобы впечатать число или слово по центру колонки без учета разделительных знаков. Если же они нужны, можно узнать количество пробелов слева и справа от числа до разделительных знаков колонки, нажав клавишу x-y и прочтя число вида Хiл, Xiп.

Обработка колонок ведется последовательно от 1 до К. При ошибке расчет следует повторить сначала, с задания LT. Если Si превышает число позиций в колонке, на индикаторе - отрицательное число, ввод данных можно повторить, изменив Si. Узнать позицию последнего разделительного знака таблицы в режиме табуляции можно, нажав клавишу С/П после обработки последней колонки: Тn, Tn. Варианты расчета: В/0 L /-/ С/П... X0, XA- заголовок или таблица прижаты к правому полю С; 1 БП 16 С/П... Xn -таблица прижата вплотную к левому полю A.
А.ХОМЕНКО (г.Киев), С.КОМИССАРОВ (г.Москва)

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
Первое, что привлекает к себе внимание читателя в книге, выпущенной киевским издательством "Технiка",- это прекрасные иллюстрации. Трудно удержаться, чтобы сразу же не сесть за игру с микрокалькулятором. А сыграть есть во что: в книге Я.К.Трохименко, которая так и называется - "Игры с микроЭВМ", собрано около шестидесяти программ. Это, по существу, первый сборник игровых программ для микрокалькуляторов семейства "Б3-34".

Книга знакомит с принципами построения математических моделей реальных ситуаций, помогает приобрести навыки алгоритмизации задач. Подробные блок-схемы игр помогут тому, кто решит перевести программы для персонального компьютера.

Особенно хочется отметить несколько игр, знакомство с которыми не оставит равнодушным ни начинающего, ни даже опытного поклонника микровычислительной техники,- это "Задача о пирамидке" ("Ханойская башня"), "Магараджа", "Чет-нечет", "Авиационный перелет", "Испытатели самолетов". ]

БЕГ ТРУСЦОЙ ПО-НАУЧНОМУ
По мнению "отца аэробики" К.Купера, чтобы обеспечить себе достаточный минимум здоровья, необходимо регулярными тренировками в беге набрать за неделю 30 очков (мужчинам) или 24 (женщинам), рассчитывая их по соответствующей формуле, приведенной в его книге "Аэробика для здоровья". Начисление очков можно поручить калькулятору. Получив сведения о длине дистанции в километрах Д, возрасте в годах В, времени бега в минутах Т и пульсе П, измеряемом числом ударов в минуту после бега, калькулятор вовремя предупредит вас, что нагрузки чрезмерны или, напротив, недостаточны.

Введите программу и исходные данные: В/0 170 ^ 140 ^ 0.8 ^ М С/П. М равно нулю для женщины, единице для мужчины, 170 на индикаторе - знак, что можно вводить основные данные П ^ В ^ T ^ Д С/П. Появившееся на индикаторе число от пяти и выше - отлично, четверка - хорошо, тройка - удовлетворительно. Нажмите С/П, и вы узнаете сумму очков, набранных вами за тренировку. Следующее нажатие С/П - рекомендация "электронного врача". Появление двойки - сигнал тревоги: бегун переутомился! Темп бега нужно снижать! Ноль - тренировка недостаточно интенсивна.

Контрольный пример. Мужчина тридцати лет пробежал три километра за 15 минут. Пульс после бега - 145 ударов в минуту. Вводим 170 ^ 140 ^ 0.8 ^ 1 С/П (2с) 145 ^ 30 ^ 15 ^ 3 С/П
(12с) "4" С/П (6с) "8,99" С/П (9с) "1"; цифры в скобках - время счета. Итак, бежал мужчина хорошо, набрал девять очков, тренировка была достаточно интенсивной, без перегрузок.

00. П4 01. F() 02. П3 03. F() 04. П2 05. F() 06. П1 07. С/П 08. П9 09. x-y 10. П8 11. / 12. x-y 13. П7 14. ИП9 15. * 16. Fsqr 17. 1 18. 0 19. + 20. * 21. ПД 22. F() 23. П6 24. 2 25. П5 26. ИП4 27. Fx=0 28. 35 29. ИПД 30. 0 31. , 32. 4 33. + 34. ПД 35. ИПД 36. 3 37. - 38. Fx>=0 39. 46 40. КИП5 41. x-y 42. ИП3 43. - 44. Fx<0 45. 40 46. ИП5 47. С/П 48. 3 49. ИП9 50. FxY 51. 7 52. 5 53. * 54. ИП8 55. Fx2 56. / 57. С/П 58. ИП6 59. ИП1 60. ИП7 61. 2 62. 0 63. - 64. 0 65. , 66. 7 67. * 68. ПА 69. - 70. - 71. Fx<0 72. 86 73. ИП6 74. ИП2 75. ИПА 76. - 77. - 78. Fx>=0 79. 83 80. 1 81. БП 82. 07 83. 0 84. БП 85. 07 86. 2 87. БП 88. 07

В.АВДЕНИН (г.Обнинск)

АДРЕС ИЗВЕСТЕН
Как определить адрес обращения к ППЗУ? Такой вопрос часто задают себе начинающие пользователи "МК-52".

Адрес обращения состоит из трех частей: Ц АААА НН. Ц - это любая цифра от единицы до девяти, например, номер программы по счету. АААА - адрес начальной ячейки, а НН - число пар ячеек, отведенных для программы, иными словами - число ее шагов.

Составить верный адрес не так уж просто. Надо помнить, что НН должно быть кратно семи, так как запись производится пачками по семь команд. АААА - также не любое число от 0000 до 9999, записывать приходится только с начала строки в ППЗУ. Дело в том, что стирание информации, необходимое перед записью, производится построчно по 16 ячеек в строке. Адрес начальной ячейки строки можно выразить формулой АААА=16K, где K изменяется от 0 до 63. Если записывать программы в ППЗУ не с начальных ячеек строк, есть риск при записи какой-то новой программы стереть часть записанной раньше по соседству.

Составление адреса можно поручить самому калькулятору. Вводим программу (см. ниже), помещаем адрес начальной ячейки предшествующей программы Аi в Р1, число пар ячеек предыдущей программы Hi в Р2 и число записываемых шагов H[i+i] в Р3. Если речь идет о первой программе, то вводим Hi=0 и Аi=0. Запускаем счет В/0 С/П. На индикаторе появляется A[i+1] - начальный адрес новой программы, в регистре В записано H[i+i] - число пар ячеек. В регистре Д хранится номер конечной ячейки. Номер должен быть меньше 1023, иначе ППЗУ переполнится.

ПРОГРАММА: 00. ИП3 01. ПВ 02. 7 03. / 04. ПС 05. К{х} 06. Fx!=0 07. 15 08. ИПС 09. К[х] 10. 1 11. + 12. 7 13. * 14. ПВ 15. ИП2 16. 2 17. * 18. ИП1 19. + 20. ПА 21. 1 22. 6 23. / 24. ПД 25. К{х} 26. Fx!=0 27. 36 28. ИПД 29. К[х] 30. 1 31. + 32. 1 33. 6 34. * 35. ПА 36. ИПВ 37. 2 38. * 39. ИПА 40. + 41. 1 42. - 43. ПД 44. ИПА 45. С/П.

Ю.САВИНКОВСКИИ, С.КУРГАНОВ (г.Ульяновск)

[ За один раз в ППЗУ удается записать только содержимое регистров Р0-РД. Это соответствует инструкции: 14 регистров по 14 ячеек на регистр - это 196 ячеек, то есть адрес обращения в ППЗУ выглядит так IAAAA98. Тем не менее, если в регистре Е содержится константа без знака и порядка, число от I до 99999999, то и его можно записать, если набрать адрес 8,АААА-2, который нетрудно сформировать с помощью команд логических операций, например, так 1000080 ^ 1AAAA22 KV. В таком случае по этому же адресу считывается содержимое всех пятнадцати регистров.
А.БОРИСОВ (г.Москва) ]

РЕПЬЮНИТЫ
Простейшие нз открытий, о которых пойдет речь, можно сделать с помощью микрокалькулятора. Объект исследования - числа, записываемые цепочкой единиц, репьюниты (от английского repeated unit - повторенная единица): 1, 11, 111 и т.д.

Этот термин придумал в 1964 году американец А.Бейлер. Первую же работу об этих удивительных числах написал двумя столетиями раньше Иоганн III Бернулли в связи с исследованиями периодических десятичных дробей. В 1895 году француз Э.Люка в книге "Занимательная математика" публикует проверенную им таблицу всех простых делителей репьюннтов до восемнадцатого (R18) включительно.

Матчасть диванного танкиста - Страница 3 87042010

Слева в таблице - первичные делители, то есть не делящие ни один из предыдущих репьюнитов. Справа - вторичные, то есть уже встречавшиеся ранее.

Что можно усмотреть нз таблицы? Первичные делители репьюнитов с номером n являются вторичными для репьюнитов с номерами, кратными n. Репьюниты с простым номером не имеют вторичных делителей. Начиная с R6, репьюниты с номером, на единицу меньшим простого числа, делятся на это простое число. Все первичные делители, кроме 3, на единицу больше числа, кратного соответствующему n.

Более двадцати лет прошло, прежде чем О.Хоппе из Нью-Йорка ценой немалого труда доказал, что следующий репьюнит, число 1111111111111111111 - простое.

Затем удалось доказать, что просты также R23 (1929 год), R317 (1978) и R1031 (1985). Сегодня таблица делителей репьюнитов достигла n=3000 (С.Ейтс, 1975), однако в ней еще достаточно много пробелов, и даже не все ясно в первой сотне репьюнитов.

Практический интерес к репьюнитам существует в теории арифметических кодов, служащей основой помехоустойчивого кодирования в компьютерной технике. И в проблеме простых чисел: их ищут сейчас в основном среди так называемых чисел Мерсенна, имеющих вид 2**n-1, и последним достижением на этом пути стало число 2**132049-1 (1984 год). А ведь числа Мерсенна - это репьюниты в двоичной системе счисления!

... Математическое открытие? Нет ничего проще! Нажмите несколько раз клавишу "1" на пульте микрокалькулятора и думайте, глядя на репьюнит, светящийся на индикаторе!
В.СТОЛЯР, В.ХИТРУК (г.Москва)

[ БЮРО СПРАВОК
В Омском сельскохозяйственном институте на кафедре селекции и семеноводства разработаны методические указания по обработке агробиологических экспериментов с помощью программируемых микрокалькуляторов. Наряду с программами статистической обработки данных приведены программы для подсчета урожайности при стандартной влажности, определения вегетационного периода растений, площади листа пшеницы и т.п. Автор методических указаний хотел бы обменяться с другими исследователями программами обработки экспериментального материала по селекции растений (644090, Омск, ул.Менделеева, 36, кв.66, Поликарпов Сергей Александрович).

Предлагаются прикладные программы для поиска констант уравнений Микаэлиса-Монтен, Моно, прогнозирования развития микробных популяций в кинетических моделях, имитации работы биохимического реактора. Программы составлены для микрокалькуляторов типа "Б3-34" и предназначены для биохимиков и микробиологов (392032, Тамбов, ул.Мичуринская, 24, кв.69, Арзамасцев А.А.).

На кафедре технической кибернетики Калининского политехнического института разработаны методические указания и микрокалькуляторные программы для расчета зубчатых механизмов и усилий, передаваемых с их помощью, рассчитанные на использование при курсовом проектировании (170005, Калинин, ул.Фарафоновой. 38, кв.17, Карелину В.С).

При расчетах сушильных установок, систем кондиционирования, отопления и вентиляции необходимо определять температуру образования влаги из водяного пара - точку росы. Этот и некоторые другие сопутствующие расчеты выполняет программа, чья погрешность определения точки росы при атмосферном давлении и интервале температур воздуха от -10oС до 100oС - не более 2 процентов (424033, Йошкар-Ола, бульвар Чавайна, 18-а, кв.59, Хлебников Валерий Алексеевич).

На кафедре теоретических основ электротехники Ульяновского политехнического института разработана серия программ для расчета электрических схем на программируемом микрокалькуляторе. Их отличие от существующих программ заключается в автоматизации составления уравнений цепей, обычно формируемых вручную. Авторы программ используют для этого метод контурных токов, кодируя структуру схемы по узлам и ветвям (432027, Ульяновск, ул.Радищева. 181, кв.50, Курганов Сергей Александрович). ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Янв 28, 2023 12:06 am

5/87

Матчасть диванного танкиста - Страница 3 87050110
Лианозовский электромеханический завод (Москва), выпускающий персональные компьютеры "Агат" и школьные "Микроша", организовал компьютерный центр, где каждый желающий за умеренную плату может поработать на машине. На снимке - в игровом зале компьютерного центра.

КОМПЬЮТЕРНЫЙ КЛУБ

Матчасть диванного танкиста - Страница 3 87050210
С вешалки начинается любое учреждение, и здесь, в "Компьютерном центре", это неплохое начало

Матчасть диванного танкиста - Страница 3 87050310
Популярность нового дела заметнее всего у кассы

Матчасть диванного танкиста - Страница 3 87050410
В ожидании свободной ЭВМ можно отдохнуть, посмотреть телевизор

Матчасть диванного танкиста - Страница 3 87050510
Залы компьютерных игр...

Матчасть диванного танкиста - Страница 3 87050610
... компьютеров "Микроша"...

Матчасть диванного танкиста - Страница 3 87050710
и программирования

Матчасть диванного танкиста - Страница 3 87050810
С одного из "Агатов" информация выводится на этот большой матричный экран, установленный в витрине у входа

Опасения, что новое учреждение в незнакомом районе придется долго искать, не оправдались - еще в автобусе несколько ребят школьного возраста живо обсуждали, велика ли сейчас очередь на "Агат": сразу стало ясно, что, следуя за ними, мы без труда попадем к цели. Автобус остановился, ребята пустились наперегонки, мы поспешили за ними и вскоре увидели то, что искали,- вывеску "Компьютерный центр".

Этот Центр создан Лианозовским электромеханическим заводом недавно (для тех, кто решит побывать в "Компьютерном центре", сообщаем адрес: Москва, Дмитровское шоссе, 115, телефон 485-31-34), но еще до его открытия завод накопил немалый опыт работы с молодежью, интересующейся вычислительной техникой.

В нынешнем Центре три зала. В зале программирования на столах разместились уже несколько лет выпускаемые Лианозовским заводом "Агаты" - первые серийные персональные ЭВМ отечественного производства. В комнате всего десять компьютеров. К любому из них по желанию посетителя можно подключить принтер - печатающее устройство.

В этот зал приходят и те, кто хорошо знаком с вычислительной техникой, и те, кто впервые садится за клавиатуру персонального компьютера. В московском радиоаппаратостроительном техникуме для таких новичков-посетителей была разработана специальная обучающая программа - пять уроков Бейсика: в непосредственном диалоге компьютер обучает вас азам программирования. Есть и другие программы, в частности редактор текста, необходимый для того, чтобы подготовить статью. Студент может здесь выполнить все расчеты, необходимые для курсового или дипломного проектирования. Приходят и те, кто хочет поставить численный эксперимент, например, для диссертационной работы.

Кроме принтера, при желании можно получить гибкий магнитный диск - дискетту (10/85): на нее можно записать тексты программ, которые вводились с клавиатуры, или необходимые промежуточные результаты. Дискетту заклеивают в бумажный конверт и надписывают предполагаемую дату следующего сеанса работы с компьютером. Конверт будет храниться нераспечатанным даже чуть дольше - Центр во всем стремится идти навстречу своим посетителям.

В следующем зале - зале предторговой рекламы - машины поменьше - это компьютеры "Микроша", серийный выпуск которых недавно начал завод. В этот зал приходят, чтобы поиграть в несложные компьютерные игры или, например, создать мелодию, воспользовавшись программой музыкального редактора. Те, для кого вопрос о приобретении ЭВМ уже давно решен, приходят сюда с целью изучить Бейсик: "Микроша", как и "Агат", умеет быть преподавателем. После покупки собственного компьютера уже не потребуются дополнительные затраты времени на его освоение.

Пользуясь случаем, сообщаем основные характеристики "Микроши" - в нем восьмиразрядный процессор и достаточно большое оперативное запоминающее устройство, его емкость 32 килобайта. В домашних условиях "Микрошу" без каких-либо переделок можно подключить к любому телевизору, вставив шнур с модулятором непосредственно в гнездо "Антенна". В качестве внешних, или, как говорят специалисты, периферийных, устройств используется не только телевизор, но и магнитофон. Кстати, эту микроЭВМ можно было приобрести в Саратове, вот-вот появится "Микроша" в Москве.

В третьем зале было весело. Звучала музыка, однако здесь она никому не могла помешать, тем более что ее то и дело перекрывали звуковые эффекты из динамиков персональных ЭВМ. За пятнадцатью "Агатами", что здесь разместились, сидели двадцать пять ребят школьного возраста. Вечером здесь собираются посетители постарше, некоторые родители приходят с детьми шести-восьми лет - двери открыты для всех.

Прочитав описание игр, что имеются в игротеке "Компьютерного центра", можно выбрать любую и загрузить в машину с магнитного диска. Многие игры рассчитаны на специальные игровые пульты, которые входят в комплект "Агата".

Посетителей в Центре немало. У окошечка кассы все время стоит небольшая очередь. После долгих обсуждений цены были установлены такими, чтобы оборудование "Компьютерного центра" окупилось за три года. Один час работы в зале программирования, как и в игровом зале, стоит 1 рубль 20 копеек (разница в том, что в игровом зале за пульт компьютера могут сесть одновременно двое). Час эксплуатации "Микроши" и того дешевле - 50 копеек. Каждый лист распечатки, полученный с принтера, обходится в десять копеек. С одной стороны - для пользователя расход небольшой, с другой - это неплохой стимул для экономного отношения к принтеру и бумаге.

Центр открылся совсем недавно. К тем услугам, о которых мы рассказали, вскоре добавятся новые, например, "Агат" с приставкой шестиголосого многооктавного музыкального синтезатора - для тех, кто хочет попробовать силы в сочинении музыки. Приставку по просьбе Лианозовского электромеханического завода разработали специалисты из Новосибирской консерватории.

По-видимому, опыт первого "Компьютерного центра" мог бы пригодиться не только другим предприятиям, выпускающим или готовящимся производить персональные ЭВМ, но и общественным организациям, в первую очередь молодежным. Они вполне могли бы взяться за организацию подобных клубов, а по сути дела, школ приобщения молодежи к современной вычислительной технике.

Пока что остается позавидовать жителям близлежащих районов и пожелать, чтобы первый "Компьютерный центр" недолго оставался единственным.
А.БОЙКО. Фото В.ИВАНОВА
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Янв 29, 2023 12:33 am

5/87
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ЧЕТЫРНАДЦАТОЕ, заключительное в цикле занятий по Бейсику. Ведет его кандидат технических наук И.ДАНИЛОВ

Каждый программист знает, что безошибочно ввести новую программу с клавиатуры не намного легче, чем угадать шесть номеров в "Спортлото". Да и что значит "без ошибки"? В соответствии с текстом, написанным на бумаге? Он и сам может содержать ошибки. Могут быть ошибки и в алгоритме задачи. Поэтому, чтобы заставить программу работать, прежде всего необходимо отредактировать ее текст.

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

Самый общий способ редактирования, допускаемый всеми версиями Бейсика,- это замена ошибочной строки другой. Мы уже упоминали об этом приеме. Он прост. Выяснив, в какой строке ошибка, вы набираете эту строку заново, с тем же номером. Так как две строки не могут иметь один и тот же номер, то прежняя будет вытолкнута и освободит место новой. Подобным же образом можно вычеркнуть лишнюю строку, введя вместо нее "пустую", то есть состоящую только из номера. Можно вставить недостающую строку между двумя имеющимися, набрав ее с каким-то промежуточным номером. Именно для того, чтобы создать возможность подобных вставок, рекомендуется при составлении первого варианта программы нумеровать ее строки не последовательными числами, а кратными пяти или десяти.

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

Напомним, что командой Бейсика мы условились называть предписание, в отличие от оператора не имеющее номера. Такие предписания не записываются в память, а выполняются незамедлительно, подобно армейским приказам. Для этого команду нужно набрать буква за буквой и затем нажать клавишу ВК.

Командой LIST на дисплей выводится полный текст программы. Если в такой полноте нет необходимости, то выводимый фрагмент можно указать, приписав к команде LIST одно из таких выражений:
L1 (вывод одной строки с номером L1)
L1-L2 (вывод строк с номерами от L1 до L2)
L1- (вывод всех строк, начиная с LI)
-L2 (вывод всех строк с начала до L2)

Команду DEL удобно использовать, если нужно стереть сразу несколько строк. Пределы стираемого фрагмента задаются так же, как в команде LIST.

Команда RESEQ (в некоторых версиях она называется RENUM) используется для придания "стройности" программе после того, как в ней были произведены вставки или вычеркивания. Полезно применять ее и в тех случаях, когда возникает необходимость раздвинуть две строки с последовательными номерами, чтобы вставить между ними новую.

Если отдать эту команду без добавочных указаний, то перенумеровке подвергаются все строки программы с начала и до конца. Причем новая начальная строка получает номер 10 и приращение номеров тоже равно 10.

Добавочные указания к команде RESEQ пишутся по такому образцу:

RESEQ L1, L2-L3, M

Это значит, что перенумерованы будут строки, имевшие в старой программе номера с L2 по L3, новая нумерация начнется с L1 и пойдет далее с приращением M.

Каждый из этих дополнительных параметров может отсутствовать. Если опущено число L1, то в качестве нового начального номера выбирается наибольший номер, меньший L2. Если не указано число L2, то нумерация начнется с начала, а если отсутствует L3, то она продолжится до конца программы. Если же не написано приращение М, то оно принимается равным 10.

Естественно, возникает вопрос: как же можно перенумеровывать строки в программе на Бейсике, если она буквально напичкана всевозможными операторами переходов, где фигурируют номера строк? Не придется ли после каждой перенумерации заново редактировать программу, изменяя адреса переходов?

К счастью, этого делать не надо. Перенумерация по команде RESEQ идет "по-умному". Меняются не только номера строк, но и адреса переходов.

... Два тысячелетия назад по предложению Юлия Цезаря был принят календарь, получивший название юлианского и просуществовавший полторы тысячи лет. Некоторые неудобства, связанные с неравенством астрономического года целому числу дней, с течением веков привели к накоплению заметных ошибок. День весеннего равноденствия сдвинулся более чем на неделю. Это весьма не устраивало руководство католической церкви, так как затрудняло определение дня пасхи. Чтобы уменьшить накопление ошибок, папа Григорий XIII в 1582 году принял проект календаря, предложенный астрономом Алоизием Лилием. Этот календарь, получивший название григорианского, используется повсеместно до сих пор.

Надо сказать, что с появлением ЭВМ родилась прямо-таки новая отрасль программирования - "календарология". Мимо программирования "Вечного календаря" - алгоритма, позволяющего определить день недели по заданной дате,- не проходит почти ни один программист, работает ли он на Фортране или на Паскале, на быстродействующей ЕС-1065 или на программируемом микрокалькуляторе.

Чтобы не остаться в стороне от моды, займемся и мы составлением программы-календаря.

Будем обстоятельны. Как известно, процесс решения прикладной задачи на ЭВМ подразделяется на несколько основных этапов: постановка задачи; ее математическая формулировка; выбор метода решения; построение алгоритма; составление его блок-схемы; программирование; редактирование и отладка программы; ее эксплуатация.

Путь не краткий. Но мы, к счастью, можем начать его с середины. Полистав литературу, мы довольно быстро найдем множество алгоритмов "Вечного календаря". Остановимся на том, что описан в книге Ж.-П.Ламуатье "Упражнения по программированию на Фортране IV". Есть в книге и блок-схема алгоритма, которую мы приводим здесь с некоторыми изменениями.

Матчасть диванного танкиста - Страница 3 87050910

Теперь все силы можно сосредоточить на написании программы.

Итак, программист, смелее в бой!

Только не очертя голову. Сначала надо выработать план операции, или, говоря техническим языком, составить "техническое задание". В нем следует предусмотреть максимум удобств для пользователя, ибо программа пишется для него.

Вводить даты можно, например, так: число, название месяца, год. Но удобно ли это? Название месяца состоит из многих букв, набирать их довольно долго, да и ошибку сделать ничего не стоит. Проще вместо названия месяца вводить его номер: и символов меньше, и работать при вводе придется только с цифрами.

Теперь о выводе. Желательно, чтобы он был нагляднее. Поэтому выводить результат в числовой форме, наверное, не очень удобно. И правда, представьте себе, что на дисплее появляется: 301219862. Лишь определенная сноровка поможет сообразить, что это означает: 30 декабря 1986 г.- вторник. А почему бы не выводить именно такой текст, уже расшифрованный?

Проясним заранее еще один момент. Должна ли наша программа работать "однократно" (задал дату, получил ответ) или "циклически", когда после одной даты можно ввести следующую, потом еще одну и так далее? Наверное, второй путь предпочтительнее, опять же с точки зрения пользователя. Но тогда встает еще один вопрос: как сообщить машине, что работа по программе окончена? Предусмотрим, что таким финальным сигналом машине будет ввод "нулевой" даты - тройки нулей.

Вот теперь можно приступать к созданию программы по приведенной блок-схеме.

Матчасть диванного танкиста - Страница 3 87051010

Начнем с "оформительской" части. В первую строку программы поместим с помощью оператора REM ее название. Это позволит нам с одного взгляда определить ее назначение, когда некоторое время спустя при необходимости ею воспользоваться мы станем искать ее в своей библиотеке программ.

Название дней недели и месяцев "запрячем" в символьные массивы. Опишем их во второй строке. Массив Nx(11) из 12 элементов будет содержать название месяцев, а массив Wx(6) из 7 элементов выделим для хранения названий дней недели.

(Кстати, вас не смущает, что числа в скобках на единицу меньше требующихся? Напомним, что нумерация элементов массивов в Бейсике начинается с нуля!)

В блок-схеме несколько раз встречается функция MOD. Называется она "делением по модулю" и определяется так:

MOD(A,B)=A-В[А/В].

Функции, выполняющей такие действия, в "джентльменском" наборе Бейсика нет. Поэтому опишем ее сами, используя оператор DEF (строка 30). Называться она будет FNF. Не очень благозвучно, но таков уж "стиль" Бейсика.

Теперь пора заполнять массивы Nx и Wx. Пояснив комментарием, что мы собираемся делать (стр.40-50), запишем две однотипные тройки операторов для считывания названий дней недели и месяцев в соответствующие массивы.

А откуда их считывать? Проще всего из блоков DATA, которые мы поместим в самый конец программы.

Закончив комментарием (стр.120) "служебную" часть программы, приступим к содержательной ее части.

(Чтобы не утомлять читателя обилием иллюстраций, условимся считать, что первый, отредактированный вариант составляемой нами программы состоит из строк, помеченных в приводимом на этой странице тексте числами, кратными десяти).

Блок за блоком переводим на язык операторов всю блок-схему.

У иного читателя эта рекомендация вызовет недоверчивую усмешку. Легко следовать ей, если блоки расположены друг за другом. А если ветвление?

Тогда пишем условие, заключенное на блок-схеме в ромб, далее ставим слово THEN или GOTO, а на месте адреса перехода - какое-то условное обозначение. Например, строка 180 в первой редакции будет выглядеть так:

180 IF M>2 GO ТО A1

Вслед за строкой с условным оператором пишем строки, реализующие ветвь "нет" на блок-схеме. Добравшись по ней до точки смыкания ветвей, ставим GOTO и вместо адреса перехода - условное обозначение. В последующих строках располагаем операторы, реализующие ветвь "да"; адрес первой из них указываем после слова THEN или GOTO в условном операторе, по которому происходит программируемое ветвление. Добравшись до точки смыкания ветвей, пишем строки, соответствующие следующим блокам схемы; адрес первой из них указываем вслед за словом GOTO в конце цепочки операторов, выполняющих ветвь "нет".

В какой-либо из ветвей может встретиться еще одно ветвление - мы наблюдаем это и в нашей блок-схеме "Вечного календаря". Не смущаясь такими сложностями, надо продолжать программирование, строго придерживаясь только что сформулированных правил. Всякий раз, дойдя по одной из ветвей до точки их смыкания, необходимо тщательно проследить, запрограммирована ли другая ветвь, и если нет, написать слово GOTO с условным адресом за ним.

При этом могут возникнуть повторы. Так, при буквальном соблюдении высказанных правил мы дважды запрограммируем присваивание N=2. Повторы нетрудно устранить при последующем редактировании. Главная же польза от этих правил в том, что они гарантируют создание пусть не идеальных, но во всяком случае работоспособных программ.

Закончив программирование, нужно проверить, все ли условные адреса переходов заменены конкретными номерами соответствующих строк. Так, метка A1 окажется равной 260.

Может показаться, что рекомендуемый способ перевода блок-схем в программы грешит обилием переходов по оператору GOTO. Повторим: вреден не сам этот оператор, а его бездумное использование. Обойтись же без него в Бейсике нельзя.

Добравшись до конца блок-схемы, мы убедимся, что "код" дня недели вычислен. Остается красиво оформить результат и вывести его на дисплей. Это сделает оператор PRINT, записанный в строке 300. Обратите внимание, что мы выводим не М-й элемент массива названий месяцев (M-номер месяца), а (M-1)-й. Еще раз напомним: нумерация элементов массива начинается у нас с нуля.

Вспомним теперь, что у нас еще нет операторов DATA, где собраны названия дней недели и месяцев. Запишем их в строках 320-340. Названия месяцев стоят в родительном падеже, чтобы пользователь не спотыкался о корявые выражения типа 25 январь 1938г.

Вот теперь можно написать последний оператор: 350 END - он прекратит выполнение программы, когда очередь дойдет до него.

Но работу над программой еще нельзя считать законченной. Просмотрим ее внимательно от начала до конца: нет ли в ней пропусков, описок?

Оказывается, есть. В ходе программирования расчетной части алгоритма мы учли значения вспомогательного параметра N, равные 2 и 0 (строки 240 и 260), но упустили из виду случай N=1. Исправим эту оплошность добавлением строк 255 и 257.

А где у нас оператор, выполняющий переход на конец программы при вводе нулевой даты? Он тоже отсутствует, и его надо куда-то вставить. Было бы также нелишне сообщить пользователю о таком порядке окончания работы над программой. Оператор, выводящий соответствующее сообщение на дисплей, впишем в программу 125-й строкой. Заметим, что после такой вставки в тексте программы оказались рядом два оператора PRINT. Выводимые ими фразы расположатся на дисплее друг под другом. Их неплохо было бы раздвинуть для удобства чтения. Для этого вписываем 127-й строкой оператор PRINT без всякого последующего текста. Он делает то же самое, что рычаг пишущей машинки, с помощью которого прокручивается валик: текст, выводимый на дисплей далее, начнется строкой ниже, и притом с самого левого края экрана.

В добавочной строке 152 напишем оператор перехода на конечную строку при вводе нулевой даты. Для удобства чтения программы, если кто-то заинтересуется ее текстом, в строке 155 поставим примечание: ниже, мол, начинается вычислительная часть.

Еще недочет: осталось невыполненным требование о "цикличности" работы нашей программы. Чтобы она работала именно так, запишем в строке 307 оператор перехода, который передаст управление начальным операторам программы, выводящим на дисплей инструкцию и предложение продолжить работу. Чтобы отделить текст ответа (строка 300) от текста вопроса (строка 130), прибегнем к уже опробованному, приему - выведем на дисплей "пустую" строку (305 PRINT).

Вот на этом работу иад программой можно считать законченной. С целью придать ей стройный вид выполним команду RESEQ, и на дисплее появится окончательный вариант длиной в 41 строку.

Много это или мало? Многовато, если учесть, что все вычисления, необходимые для определения дня недели, можно уместить в десяток строк. Вполне нормально, если вспомнить про наше обещание сделать программу как можно более удобной для пользователя. Ради этого дополнительных строк жалеть никогда не надо.

И еще совет: желая уменьшить вред от оператора GOTO, старайтесь писать программы так, чтобы по возможности исключить передачу управления "наверх". Делайте это только в крайних случаях. А таковыми, вообще говоря, являются структуры типа "цикл пока". При их записи не обойтись без передачи управления "наверх". Например, наша программа получилась в виде именно такого цикла. Состоит он в вводе даты, вычислении кода дня недели и выводе результата, а выполняется, пока дата не равна нулю: Поэтому нам поневоле пришлось употребить один оператор GOTO, у которого адрес перехода меньше метки самого оператора. Все остальные GOTO передают управление "вниз". Тем самым минимальным образом нарушается стройность программной структуры.

После того, как программа введена в память и отредактирована, нужно запустить ее на счет. Делается это с помощью команды RUN. Набираем ее по буквам и нажимаем клавишу ВК. Интерпретатор тотчас же начинает считывать и выполнять операторы программы в порядке возрастания номеров строк.

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

Упоминание о команде перехода вновь возвращает нас к разговору о работе на компьютере в "непосредственном" режиме, когда строка, набранная без номера, не записывается в память, а немедленно выполняется.

Этот режим часто используется при отладке программ. Дело в том, что после окончания работы программы значения переменных, определенных в ней, сохраняются. Благодаря этому после любого останова можно выводить на дисплей значения "подозрительных" переменных и контролировать таким образом процесс решения.

В этом режиме можно работать с компьютером, как с инженерным калькулятором, ведя оперативные расчеты.

Правда, при проведении подобных манипуляций мы засоряем память компьютера, поскольку она хранит значения всех использованных переменных. Чтобы очистить ее, используют команду CLEAR. После ее выполнения в памяти остается лишь текст программы. Можно уничтожить и его, прибегнув к команде SCR или NEW.

Первая из них употребляется без параметров. Она просто стирает всю информацию в памяти и подготавливает машину к работе с новой программой. Вторая делает то же самое, но дополнительно требует ввода имени, под которым будет числиться новая программа.

Зачем? В частности, ради долговременного хранения текста программы после того, как работа с нею окончена и она должна уступить свое место в оперативной памяти следующей программе. Если текст старой при этом исчезнет бесследно, его придется набирать заново при необходимости воспользоваться им вновь. Не лучше ли поместить его в какую-то компьютерную "кладовую"?

Роль такой "кладовой" в современных персональных компьютерах играют магнитные диски и магнитные ленты. Их называют внешними запоминающими устройствами. О них и пойдет речь далее.

Повторим еще раз определение файла, данное на одном из предыдущих занятий. Файл - это упорядоченный набор записей, рассматриваемый как единое целое.

Файлом является, например, текст программы на Бейсике. Здесь каждая запись - строка программы. Файл может состоять и из данных: либо результатов работы программы, либо исходной информации для нее.

Чтобы перенести во внешнюю память программу, находящуюся в памяти оперативной, следует набрать команду SAVE (сохранить) и далее указать имя, под которым будет числиться на диске или ленте переписываемая в виде файла программа. Если ничего после команды SAVE не указывать, то за программой сохранится имя, которое дал ей пользователь перед началом работы по ней.

Мы намеренно опускаем "физическую" часть реализации команды, то есть не говорим, куда будет записана программа. Дело в том, что разные ЭВМ оснащены периферийными устройствами разного типа. Если это диск, то он постоянно "крутится", постоянно в работе. Поэтому для записи программы достаточно одного набора команды. Если же вы имеете дело с кассетным магнитофоном, то нужно сделать дополнительные манипуляции по установке кассеты, включению магнитофона и т.д. Обо всем этом подробно написано в прилагаемом к каждой конкретной ЭВМ руководстве.

"Старую", уже существующую на внешнем устройстве программу вызывают в оперативную память командой OLD (старая), вслед за которой указывают имя программы. Перед ее считыванием оперативная память очищается.

Теперь о файлах данных.

На одном из предыдущих занятий мы приводили пример, касающийся обработки каталога домашней библиотеки. Тогда вопрос хранения каталога, записи и считывания из него информации мы скромно обошли. И неспроста. Эти процессы немыслимы без работы с файлами. Файлы данных позволяют накапливать большое количество информации, постоянно хранить ее и обновлять, а также считывать и обрабатывать записи из этих файлов.

Чтобы использовать файлы, в программе нужно предусмотреть специальные операторы. Первым из них всегда является оператор открытия файла. На примере соответствующих строк из приведенных ниже программ мы покажем, какую форму может он иметь.

(Мы говорим "может", потому что в разных версиях Бейсика эти операторы записываются по-разному).

10 OPEN "CAT" FOR INPUT AS FILE #2
20 OPEN "CAT" FOR OUPUT AS FILE #1

Смысл оператора открытия файла поясняется его начальным, ключевым словом OPEN (открыть). Далее стоит имя файла, в нашем примере "CAT" (мы употребили его, поскольку программа написана для работы с каталогом). Следующие два слова показывают цель использования файла. FOR INPUT-предстоит ввод информации из файла в программу. FOR OUTPUT - данные будут выводиться из программы в файл.

Писать эти два слова не обязательно, машина все поймет сама. Если файл существует на внешнем устройстве, то открывается он, очевидно, для считывания, то есть в операторе открытия подразумеваются слова FOR INPUT. Если файла нет, то он будет создан, подразумеваются слова FOR OUTPUT.

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

Считывание информации из файла и запись данных в него производятся аналогично обычным процессам ввода и вывода. Ввод данных из файла организует оператор, начинающийся со слова INPUT. В нашей программе он выглядит так:

60 INPUT #2,Bx,Cx,D

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

Похожим образом организован и вывод в файл.

70 PRINT #1,Fx,Nx,K

По выражению, записанному после знака диеза, программа определит, из какого файла следует выводить данные, а какие именно данные надо вывести, указывают написанные далее обозначения переменных.

Разобравшись с подобными операциями, займемся вплотную задачей обработки книжного каталога. Посмотрим, как этот каталог создать. Для этого нужно написать небольшую программу, которая позволит выводить информацию в файл. Выглядеть она может так:

Матчасть диванного танкиста - Страница 3 87051110

На ее примере легко заметить принципиальную разницу между файлом и многомерным массивом. Если в массиве все элементы принадлежат к одному типу, то в одном и том же файле могут присутствовать данные разного типа. В нашем примере это строковые значения переменных Fx и Nx (фамилия автора и название книги) и числовое значение переменной К (количество томов).

Кроме того, массив существует только до тех пор, пока машина работает по программе. Элементы его хранятся в оперативной памяти и исчезают, как только мы "выгружаем" программу. Что же касается файла, то он существует автономно от программы. В одной программе его можно создать, в другой использовать.

В нашей программе встретился еще один не описанный ранее оператор: CLOSE (закрыть). Его назначение в том, чтобы "закрыть" файл, отсоединить его от канала и сохранить информацию, записанную в нем, на внешнем носителе.

Продолжим работу с каталогом. Для того чтобы с помощью созданного файла разыскать в каталоге книги одного и того же автора, можно написать такую программу:

Матчасть диванного танкиста - Страница 3 87051210

Эта программа не сложнее предыдущей, но в ней мы встречаемся еще с двумя новыми операторами.

70 IF END #2 THEN 100

Этот оператор по своей структуре подобен условному. По ходу считывания проверяется, встретился ли признак "конец файла" (он заносится автоматически при закрытии файла). Если да, то выполняется оператор, записанный после слова THEN, или происходит переход на указанный вслед за этим словом адрес (вместо THEN можно употреблять слово GOTO). Если нет, то никаких действий процессор не совершает.

100 RESTORE #2

Этот оператор заставляет компьютер считывать записи с самого начала файла.

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

Многообразие версий Бейсика проявляется в целом ряде его характерных черт, описать которые во всем ассортименте вариантов нет ни возможности, ни смысла.

Здесь стоит упомянуть, пожалуй, лишь об одном приеме, выполнимом если не во всех версиях, то в большинстве их.

Речь идет о том, что в одной строке программы допустимо записывать сразу несколько операторов, разделяя их либо двоеточием, либо наклоненной влево чертой (это зависит от конкретной версии).

Такая возможность позволяет не только записывать тексты программ более компактно, но и по-иному интерпретировать условные операторы.

Допустим, в программе есть фрагмент:

200 IF A>B THEM X=A+B \ Y=1/(A-B) \ GО ТО 220
210 Х=B-A \ Y=1/(A+B)

Здесь, если условие A>B соблюдено, то выполняются все операторы, стоящие после слова THEN до конца строки. Если не соблюдено, то пропускаются также они все, а не только самый первый из них.

Используя описанную возможность, мы можем ужать недавно составленную нами программу "Вечный календарь" до 28 строк, то есть почти в полтора раза, без всякого ущерба для удобства работы с нею.

Описание Бейсика, которому было уделено несколько занятий "Школы начинающего программиста", не претендует на полноту. Нашей целью было дать начальное представление о Бейсике тем, кто никогда раньше программированием не занимался, и нашим старым читателям, чье знакомство с программированием ограничивалось работой на программируемом калькуляторе. Кроме того, мы постарались показать, как в конкретном языке отражаются основные принципы программирования.

Надеемся, что те из читателей, кто заинтересуется программированием после этих встреч с Бейсиком, смогут без труда освоить его дополнительные возможности, познакомившись со специальной литературой.

Мы же на этом поставим последнюю точку, или, подобно каждому программисту, завершающему набор программы, последний раз нажмем клавишу "Возврат каретки".

УЧЕБНЫЙ ПОЛЕТ
Цель игры - пролететь по заданному маршруту, то есть подняться над горой, поднырнуть под тучу, еще раз подняться над горой, зайти на посадку и приземлиться.

Матчасть диванного танкиста - Страница 3 87051310

Изменив программу, можно усложнить рельеф местности. Напротив, те, кому маршрут поначалу покажется чересчур сложным, смогут приподнять "тучу" повыше или сделать немного ниже "горы".

Самолет занимает исходную позицию на взлетной полосе аэродрома. Введите программу и рельеф местности в память калькулятора в соответствии с таблицей (внизу). Поставьте переключатель Р-Г в положение Г. Нажмите клавиши В/0, С/П. Самолет начнет разбег и поднимется в воздух.

Переключатель Р-Г - штурвал самолета. Положение Г - самолет устремляется вверх, причем за каждые 500 метров полета траектория самолета отклоняется на 15o вверх от прежнего направления. Положение Р - снижение, причем траектория меняется со скоростью минус 15o на каждые 500 метров полета. Среднее положение переключателя не влияет на траекторию.

Если пилоту удастся с первой же попытки достичь аэродрома назначения и правильно приземлиться, то счет по программе автоматически остановится, и на индикаторе появится угол между горизонталью аэродрома и посадочной траекторией самолета.

Величина угла в пределах от нуля до тридцати градусов означает, что посадка была успешной. Угол, превышающий тридцать градусов,- признак неудачи. Самолет почти наверняка получил повреждение. Ну, а угол от 70o и более означает верную аварию.

После того, как самолет поднялся в воздух, примерно через двадцать секунд на индикаторе появляются параметры полета. Сначала высота h, затем угол ф и пройденное расстояние S - эти три величины поочередно мерцают на индикаторе. Если числа видны плохо, советуем ослабить внешнее освещение, например, прикрепить на окошечко индикатора шторку так. чтобы тень от нее легла на индикатор.

После того, как все три параметра поочередно промелькнули на индикаторе, в распоряжении пилота остается пять секунд, чтобы отреагировать должным образом. Если и через пять секунд штурвал будет оставаться неподвижным, самолет уже не станет слушаться запоздалой команды, а продолжит полет по прежней траектории. Признаком того, что двигать штурвал уже поздно, является длительная, примерно в три секунды, пауза в мерцаниях индикатора, связанная с вычислением функции cos(x).

Матчасть диванного танкиста - Страница 3 87051410

Весь рельеф в виде пар чисел Li, Hi хранится в регистрах Р1- РА. Расстояния Li от точки взлета до каждого препятствия вводятся в РА, Р8, Р6, Р4, Р2, то есть в регистры с четными номерами. Высоты препятствий Hi - в регистры с нечетными номерами: Р9, Р7, Р5, РЗ, Р1. Высота "туч", то есть препятствий, под которыми нужно пролететь, вводится со знаком минус. Для учебной трассы, что изображена на рисунке, координаты будут выглядеть так: Р8=6000, Р7=-1500, Р6=8000, Р5=-1500.

Регистры РВ, PC, РД отведены для хранения текущих данных: угол наклона траектории ф, пройденное по горизонтали расстояние S, высота полета h соответственно.

Освоить управление самолетом не так сложно, как это может показаться с первого взгляда. Однако, на первых порах самолет наверняка будет врезаться и в гору, и в тучу, и в землю или просто пролетать мимо аэродрома. Во всех этих случаях на индикаторе высветится сигнал ошибки ЕГГОГ.

ПРОГРАММА: 00. ИПВ 01. ИПВ 02. 1 03. 5 04. + 05. ИПВ 06. FBx 07. - 08. ПВ 09. 5 10. 7 11. / 12. 9 13. 0 14. Fcos 15. Fx>=0 16. 20 17. Fx>=0 18. 24. 19. F() 20. F() 21. F() 22. ПВ 23. x-y 24. x-y 25. Fsin 26. FBx 27. Fcos 28. 5 29. 0 30. 0 31. x-y 32. FBx 33. * 34. ИПС 35. + 36. ПП 37. 85 38. ПС 39. F() 40. * 41. ИПД 42. + 43. ПП 44. 85 45. ПД 46. Fx>=0 47. 77 48. ПП 49. 91 50. ИПВ 51. ПП 52. 91 53. ИПС 54. ПП 55. 91 56. КИП0 57. - 58. Fx<0 59. 66 60. ИП0 61. 1 62. + 63. П0 64. БП 65. 00 66. КИПО 67. ^ 68. ^ 69. Fx2 70. Fsqr 71. / 72. ИПД 73. * 74. - 75. Fx>=0 76. 78 77. K- 78. ИП0 79. 1 80. - 81. Fx=0 82. 00 83. ИПВ 84. С/П 85. 7 86. F10X 87. + 88. FBx 89. - 90. B/0 91. ^ 92. ^ 93. ^ 94. ^ 95. ^ 96. ^ 97. B/0.
С.Чуприн, г.Новосибирск.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пн Янв 30, 2023 12:06 am

6/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Мы обращаемся за помощью к вам, профессиональные программисты.
Пропал компьютер. Пропал из ваших писем к нам. Вы с увлечением рассказываете про интересные задачи, которые решаете дома на микрокалькуляторах, и лишь вскользь замечаете, что на работе пишете солидные программы на Бейсике, Паскале, других языках высокого уровня.
Разве вы не могли бы извлечь из вашей профессиональной деятельности сюжеты небольших поучительных задач, которые стали бы упражнениями для тех читателей журнала, кто изучает программирование для персональных компьютеров по материалам нашего раздела? Кому, как не вам, быть их учителями?
Мы понимаем, что наши публикации для вас - как тексты в букваре для писателя. Но ведь тексты для букварей пишут писатели!
Мы понимаем, как вы загружены на своей работе - САПР, АСУ, прикладные задачи... Если уж вы и пишете, то в свои, "серьезные" журналы. Но ведь ваши дети не читают этих журналов!
Мы понимаем, что сами вы учили программирование не по популярным журналам. Да они раньше и не писали об этом. Но вспомните - не помогла ли вам при подготовке к экзаменам в институт наша рубрика "Практикум абитуриента"?
Так помогите же сегодняшним "абитуриентам", готовящимся поступать в институт под названием "XXI век"! Только в отличие от обычного вуза там они - н все мы - будут не только учиться, но и жить. Вам ли не известно, как важно начать эту учебу-жизнь с солидным багажом компьютерных знаний? Так разбудите же в себе (если оно дремлет в вас) мастерство рассказчика, популяризатора, методиста, наставника. Постарайтесь передать идущим вслед за вами свой опыт, свои знания!

ЧТО НАМ СТОИТ ДОМ ПОСТРОИТЬ?
- Вам с вашей формальной логикой не в проектной организации работать, а...

Последние слова я не расслышал, поскольку дверь в кабинет начальника отдела, откуда я только что вылетел, уже захлопнулась.

Я мчался вниз по лестнице, чертыхаясь про себя:
- По радио, в печати только и слышим: перестройка, мыслить по-новому, компьютеризация, а тут...

Ну где как не в строительстве в полной мере использовать вычислительную технику? Можно ли без математических методов, без быстродействующих машин учесть всю массу неформальных требований, выдвигаемых к конструкции жилого дома, к планировке жилого квартала?

Взять, к примеру, такую задачу: требуется построить торговый центр в новом микрорайоне, причем разместить его надо так, чтобы доставить максимум удобств жителям микрорайона.

Первое, что приходит в голову,- расположить торговый центр в такой точке (X,Y), где достигается минимум суммарного расстояния до каждой точки расселения людей (xк, yк). Самое простое - перебрать в качестве (X,Y) все пары (xi,yi). Речь идет, как легко догадаться, о торговом центре, расположенном на первом этаже одного из больших жилых домов.

Целевая функция для решения этой задачи такая:

Матчасть диванного танкиста - Страница 3 87060110

Написав целевую функцию, я формализовал задачу, то есть перевел ее на язык математики. Теперь я должен сделать задачу понятной для ЭВМ, написать программу на понятном ей языке - например, на Бейсике.

В моем распоряжении - карманный компьютер "РС-4". В силу его возможностей программа написана для случая N=7.

Сразу после запуска программы на экране высвечивается "N=?".

Вводим количество точек расселения. После нажатия клавиши "EXE" на экране N раз высветится "X(I)=?" и "Y(I)=?". Вводим запрошенные координаты. После очередного нажатия клавиши "EXE" через определенное время на экране появляются искомые величины X и Y.

Итак, я нашел место для торгового центра там, где достигается минимум суммарного расстояния от одной точки расселения до всех остальных.

Конечно, столь простое решение вряд ли будет встречено жителями микрорайона с большим энтузиазмом. Я ведь не учел даже их количества tK в точках расселения. Для этой задачи целевая функция:

Матчасть диванного танкиста - Страница 3 87060210

Или, если учесть интересы граждан, которые оказались в худшем положении:

Матчасть диванного танкиста - Страница 3 87060310

Теперь представьте себе, что точек расселения не семь, а 20, 100 и строить нужно не один, а три или более торговых центров. Нет, без ЭВМ, без формальной логики такие задачи не решить, это я вам со всей ответственностью заявляю!

... Мои хождения по кабинетам руководства закончились совсем неожиданно. Новый директор института, к которому я вчера был вызван, вцепился в мои графики и расчеты мертвой хваткой: включил мою тему в план работы отдела, сказал, что он в меня верит, и на прощание добавил: "Ты уж не подведи, к концу квартала представь законченную работу! Время не ждет!".
А.ЛЕБЕДЕВ (г.Ленинград)

Рассказ А.Лебедева мы заканчиваем двумя программами на Бейсике и Паскале, по которым можно определить координаты встроенного торгового центра.
Жан-Франсуа Шампольон открыл тайну египетских иероглифов с помощью двуязычного камня, где один и тот же текст был высечен на древнегреческом и древнеегипетском языках.
Надеемся, что публикация двуязычной программы поможет читателям, знающим один язык, начать осваивать новый.

Матчасть диванного танкиста - Страница 3 87060410

ЭВМ НА ТЕННИСНОМ МАТЧЕ
Глядя на игру теннисистов высокого класса, зрители восхищаются их сильными ударами и остроумными комбинациями. Но, кроме зрителей и болельщиков, за матчем, как правило, наблюдают и профессионально заинтересованные люди. Это будущие соперники игроков, тренеры, журналисты... Их интересуют особенности игры спортсменов, виды завершающих ударов и основные ошибки, другие влияющие на игру факторы.

До сих пор эти показатели определялись лишь качественно. Попытки количественной оценки теннисного матча путем стенографической записи упираются в огромную трудоемкость ее ручной обработки, даже при ограниченном числе анализируемых параметров. Между тем автоматизация обработки вполне посильна для компьютера, который за последние годы "освоил" десятки профессий, в том числе и спортивных.

Конечно, компьютер не может сам проанализировать теннисный матч. Для того чтобы он заработал, в него должна быть заложена соответствующая программа, а также предусмотрен способ общения с ним - формы ввода и вывода информации. Мы разработали достаточно простой способ регистрации существенных для анализа игровых действий теннисистов с помощью набора символов стандартной клавиатуры ЭВМ с латинским шрифтом, записываемых в определенной последовательности. Это символы типа удара (например, З - удар справа, L - удар слева), символы направления удара (/-удар по диагонали площадки, T - удар по центру площадки), символы ошибок (] - удар в сетку, [ - удар в аут), символы позиции игроков на площадке (Z - игрок на задней линии, S - игрок у сетки). Буквами А и В обозначаются участники матча.

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

Матчасть диванного танкиста - Страница 3 87060510

Приведенная строка означает, что игрок А при первой попытке подачи ошибся (попал в сетку). Вторую подачу он подал по диагонали, а игрок В отразил ее ударом справа. В конце розыгрыша очка игрок А после подготовительного удара слева вышел к сетке и выиграл очко ударом справа по диагонали площадки, который был пятым по счету, начиная с удара при приеме подачи.

С помощью таймера, включающегося при фиксации приема подачи и отключающегося при фиксации завершающего удара, регистрируется продолжительность розыгрыша очков.

Используя указанную информацию, компьютер в соответствии с заложенной в него программой может определять средний темп игры (число ударов в минуту), среднее количество ударов при розыгрыше очков, наиболее и наименее уверенные удары соперников, степень их психологической устойчивости и т.д. Время анализа одного матча - от ввода информации до окончания печати - составляет 5-10 минут.

Результаты компьютерного анализа заносятся в память ЭВМ и образуют банк данных об индивидуальных особенностях игры теннисистов. Обращаясь к нему, можно более целенаправленно проводить подготовку игроков к будущим соревнованиям.

Описанная компьютерная система анализа теннисных матчей применялась иа теннисных турнирах по программам "Игр Доброй Воли" и Спартакиады народов СССР.
Б.КАНТОР, Е.ГАВРИКОВ (г.Жуковский).

КОМПЬЮТЕР-КОРРЕКТОР
Один из авторов этой заметки на работе столкнулся с такой проблемой. На магнитные диски персонального компьютера, входящего в состав информационно-поисковой системы юридической службы предприятия, записаны тексты различных правовых документов, инструкций, приказов. Юрисконсульт может по ключевым словам (2/86) быстро вызвать на дисплей нужную справку. Но беда в том, что при вводе этих текстов в память ЭВМ было сделано много ошибок - в основном опечаток. Чтению документов это особенно не мешает, но нередко приводит к осечке при поиске по ключевому слову.

Выявить основную долю опечаток помогла программа на Бейсике, демонстрационный вариант которой помещен ниже. Программа составляет частотный словарь введенного с клавиатуры текста.

Матчасть диванного танкиста - Страница 3 87060610

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

Программа вписана в структурную диаграмму. "Гвоздь" программы - строка 2, где выявляются знаки препинания и пробелы, разделяющие слова текста. Код этих символов меньше кода прописной латинской буквы А (65). Найденное слово заносится в литерную переменную W (см. строку 4), сравнивается с ранее выделенными словами текста, хранящимися в одноименном литерном массиве (см. строку 5). Альтернативный блок, реализованный операторами строк 6 и 7, определяет, встречалось или нет новое слово в просмотренном тексте. Частотный словарь текста выводится на дисплей операторами последнего блока программы.
В.ЗАХАРОВ, В.ПТИЦЫН (г.Москва)

Предлагаем читателям доработать программу "Частотный словарь", исключив принятые в ней допущения:
1. Перенос части слова на следующую строку разбивает его на два самостоятельных слова.
2. То же происходит при использовании дефиса (например, в слове "кое-как").
3. Одно и то же слово, записанное дважды прописными и строчными буквами, машиной воспринимается за два разных.
4. Разные падежи одного и того же слова машиной принимаются за два разных слова.
Кроме того, желателен вывод частотного словаря либо в алфавитном порядке, либо в порядке убывания частоты употребления слов в тексте.

ИНТЕГРИРОВАНИЕ НА МИКРОКАЛЬКУЛЯТОРЕ
Вычисление определенного интеграла - эта проблема то и дело возникает при решении математических задач прикладного характера. Что делать, если интеграл настолько сложен, что его не выразишь явной формулой, но в то же время настолько прост, что занимать его вычислением большую ЭВМ явно нецелесообразно? В таком случае лучше воспользоваться программируемым микрокалькулятором. В 4/86 год наши читатели обсуждали прогрвммы для вычисления определенных интегралов от функций одной переменной. Нынешнее продолжение дискуссии посвящено интегралам от функций двух переменных, несобственным интегралам и другим специальным случаям. В беседе участвуют В.Л.Леонтьев (Винница), С.Н.Логинов (Иваново), А.В.Мержеевский (Житомир), Л.М.Финк (Ленинград). Ведет дискуссию Б.Н.Ходов (Москва).

Б.Н.ХОДОВ: Если один или оба предела интегрирования заданы бесконечностью (положительной или отрицательной), интегралы называются несобственными. Для их расчета требуются особые приемы.

Л.М.ФИНК: Несобственный интеграл с
бесконечным верхним пределом можно вычислить по программе:

00. 2 01. ПД 02. П4 03. 4 04. П2 05. ИПА 06. П8 07. ПП 08. 32 09. ПС 10. ИП8 11. ИП7 12. + 13. П8 14. ПП 15. 32 16. КИПД 17. ПД 18. * 19. ИПС 20. + 21. ПС 22. FBx 23. - 24. Fx=0 25. 10 26. ИПС 27. ИП7 28. * 29. 3 30. / 31. С/П.

После ее ввода с 32 адреса вводится подпрограмма вычисления подынтегральной функции (ее аргумент и значение - в РХ). Затем следует перейти в режим вычислений, набрать на клавиатуре Сх ПС, а (нижний предел) ПА h (шаг интегрирования) П7 В/0 С/П. Результат - на индикаторе.

Несобственный интеграл с обоими бесконечными пределами вычисляется в основном по той же программе, но с иным окончанием:

32. ПП 33. 40 34. ПВ 35. ПП 36. 40 37. ИПВ 38. + 39. В/0 40. ИП8 41. /-/ 42. П8.

После ввода программы с 43 адреса ввести подпрограмму вычисления подынтегральной функции (ее аргумент и значение - в РХ). Перейти в режим вычислений, набрать на клавиатуре Сх ПС ПА h П7 В/0 С/П. Результат - на индикаторе.

В основе программы - метод Симпсона; продвижение к верхнему пределу завершается при достижении интегральной суммой нулевого приращения (адреса 19-25).

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

Б.Н.ХОДОВ: Контролировать точность интегрирования можно, как и в случае определенного интеграла, по методу Эйткина. На практике приходится иметь дело с функциями, заданными таблицей.

С.Н.ЛОГИНОВ: Если интегрируемая функция задана таблицей с переменным шагом, можно использовать интерполяцию сплайном. В его качестве я использую полином 3-й степени, коэффициенты которого на каждом шагу вычисляются из условий совпадения его значений в узлах, а также производных слева и справа от каждого узла со значениями функции и ее производных; вторые производные полинома на граничных узлах полагаются равными нулю.

00. П5 01. x-y 02. П1 03. ПП 04. 60 05. ПВ 06. ПП 07. 60 08. ПА 09. ИП3 10. П4 11. ИП7 12. П8 13. ПП 14. 60 15. П9 16. ИПВ 17. ИПА 18. ПВ 19. - 20. ИПА 21. ИП9 22. ПА 23. - 24. ИП3 25. * 26. ИП7 27. / 28. - 29. ИП4 30. /-/ 31. ИПС 32. * 33. x-y 34. ПС 35. + 36. ИП8 37. / 38. ИП4 39. ИП4 40. Fx2 41. * 42. * 43. /-/ 44. ПП 45. 91 46. С/П 47. БП 48. 09 49. ИПВ 50. ИПА 51. - 52. ИП3 53. ИПС 54. * 55. - 56. ИП7 57. / 58. БП 59. 38 60. ИП2 61. П3 62. ИП1 63. ПД 64. ИП5 65. П6 66. С/П 67. П5 68. x-y 69. П1 70. ИПД 71. ИП1 72. - 73. П2 74. ИП3 75. + 76. П7 77. ИП6 78. ИП5 79. - 80. ИП2 81. / 82. ИП6 83. ИП5 84. + 85. ИП2 86. * 87. ПП 88. 91 89. x-y 90. В/0 91. 2 92. / 93. ИП0 94. + 95. П0 96. В/0.

После ввода программы перейти в режим вычислений и набирать Сх П0 ПС В/0, а затем в порядке убывания аргумента вводить значения xn ^ f(xn) С/П х[n-1] ^ f(x[n-i]) С/П, ... x1 ^ f(x1). Затем ШГ вправо С/П. Результат - на индикаторе.

Матчасть диванного танкиста - Страница 3 87060910

В.Л.ЛЕОНТЬЕВ: Для вычисления двойного интеграла (см. рисунок) можно применить метод ячеек. По существу, это метод прямоугольников, только теперь интеграл приближается суммой объемов параллелепипедов, восстановленных из прямоугольников-ячеек. Высота каждого параллелепипеда определяется значением интегрируемой функции в центре ячейки. При этом постоянным остается только шаг по оси x, шаг по оси y переменен и зависит от текущего значения xi:

00. ИП3 01. ИП2 02. - 03. ИП1 04. / 05. П9 06. 2 07. / 08. ИП2 09. + 10. П6 11. ИП0 12. ПА 13. ПП 14. А1 15. П7 16. ПП 17. А2 18. ^ 19. ИП7 20. - 21. ИП0 22. / 23. П8 24. 2 25. / 26. ИП7 27. + 28. П7 29. ПП 30. 60 31. ИП4 32. + 33. П4 34. ИП7 35. ИП8 36. + 37. П7 38. FL() 39. 29 40. ИП4 41. ИП8 42. * 43. ИП9 44. * 45. ИП5 46. + 47. П5 48. 0 49. П4 50. ИПА 51. П0 52. ИП6 53. ИП9 54. + 55. П6 56. FL1 57. 13 58. ИП5 59. С/П.

А1 и А2-это начальные адреса подпрограмм вычисления ф(x) и ш(х). После ввода программы ввести с 60 адреса подпрограмму расчета f(x,y), с адреса А1 - подпрограмму расчета ф(x), с адреса А2 - подпрограмму расчета - ш(x) (значение x - в Р6, y - в Р7, результат поместить в РХ). После ввода программ перейти в режим вычислений и набрать на клавиатуре М П0 N П1 a П2 b П3 Сх П4 П5 В/0 СП.

А.В.МЕРЖЕЕВСКИЙ: Для расчета длины дуги кривой целесообразно применять упрощенную формулу: L=sum(sqr(Dx2++Dy2))

00. Сх 01. П6 02. ИПА 03. П9 04. ПП 05. 46 06. П7 07. ИП9 08. ПП 09. А1 10. П8 11. ИПВ 12. ИПА 13. - 14. ИП0 15. / 16. ПС 17. ИП9 18. ИПС 19. + 20. П9 21. ПП 22. 46 23. ИП7 24. x-y 25. П7 26. - 27. Fx2 28. ПД 29. ИП9 30. ПП 31. A1 32. ИП8 33. x-y 34. П8 35. - 36. Fx2 37. ИПД 38. + 39. Fsqr 40. ИП6 41. + 42. П6 43. FL0 44. 17 45. С/П.

При вводе программы нужно учитывать, что А1 - адрес подпрограммы расчета x=f1(t). После ввода основной программы ввести с 46 адреса подпрограмму расчета y=f2(t), а с адреса A1 - подпрограмму расчета f1(t) (аргумент t и значение функции - в РХ). После ввода программ перейти в режим вычислений и набрать на клавиатуре a (начальное значение t) ПА b (конечное значение t) ПВ N П0 В/О С/П. Результат - на индикаторе и в Р6.

Б.Н.ХОДОВ: Контроль точности расчета также можно провести, используя метод Эйткина. В заключение приводим таблицу испытаний программ.

Матчасть диванного танкиста - Страница 3 87061010

СПИСОК ПО АЛФАВИТУ
В 12/86 была помещена программа В.Орлова, сортирующая список русских слов по первой букве в алфавитном порядке. Читателям было предложено доработать программу, чтобы она сортировала слова также и по следующим буквам.

Следует отметить, что новый стандарт иа отечественные персональные ЭВМ, принятый в конце 1986 года, кардинально решает проблему - в нем коды русских букв возрастают в строгом соответствии с алфавитом, и ранжировка литерных переменных ничем не отличается от аналогичной процедуры над числовыми переменными. Но компьютеров с нормальным русским алфавитом пока очень мало.

В редакцию поступило 25 программ сортировки литерных массивов на компьютерах с англизированным русским алфавитом. Все эти программы можно разделить на три группы.

В первую попали программы, присланные из Курска Э.Мереновым и А.Аникеевым, простые и короткие вследствие использования специфических операторов XTRAN (трансформирование кодов) и MAT SORT (сортировка массива) версии Бейсика, принятой на "Искре-226".

Ко второй группе, относятся программы, реализующие разнообразные алгоритмы сортировки, основанные на сравнении и перестановке соседних слов массива. Объективно оценить качество этих программ чрезвычайно трудно, но можно выделить, как лучшие, программы москвичей Д.Коломийца, В.Захарова и В.Мищенко, И.Тазетдинова (Ташкент), В.Флоринского (Белгород), А.Виниченко (Днепропетровск), Ю.Вуникяна (Гродно), М.Клыкова (Ровно), В.Масликова (Хабаровск). Некоторые программы этой группы позволяют сортировать литерный массив, вводимый ие только с клавиатуры, но и считываемый из файлов магнитного диска.

Программы третьей группы - это доработки программы В.Орлова, основанные на формировании числового массива, хранящего ранги литерных переменных. Этот прием использовали читатели В.Токарев (Новокузнецк), Б.Гутнер (Москва), Н.Русков (Минск).

Матчасть диванного танкиста - Страница 3 87060710

Приведенная здесь программа сортирует слова по первым пяти буквам. Глубиной сортировки, как отметили многие читатели, увлекаться не стоит. Сортировку это очень замедляет, а эффект бывает незначительный. Кроме того, в приведенной программе глубина сортировки лимитируется длиной мантиссы вещественной переменной. Сорокоричная система счисления (см. строку 6) обеспечивает учет знаков препинания, если их поместить в список данных (см. строку 2) с одновременным изменением предельного значения параметра цикла на строке 5.

ДЛЯ ТЕХ, КТО ВЯЖЕТ
При ручной вязке можно время от времени примерять любую деталь одежды и оценивать, сколько петель прибавить или сбросить. При работе иа вязальной машине сделать это затруднительно. Деталь нужно снять, разгладить и только после этого примерять. Поэтому обычно поступают так. Вяжут образец прямоугольной формы, разглаживают его, измеряют, затем вычисляют размеры петли - длину и ширину и по вычерченной выкройке детали рассчитывают, сколько петель на каком ряду прибавлять или сбрасывать. Расчеты эти довольно сложны и утомительны.

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

Матчасть диванного танкиста - Страница 3 87060810

На чертеже детали оси координат располагают так, чтобы начало находилось в левом нижнем ее углу (см. рисунок). Ось Y проводится вдоль линии вязки, а ось X перпендикулярно ей. На чертеж наносятся координаты точек излома. Учтите, что программа рассматривает отрезки дуг как прямые линии, поэтому на сильно искривленной дуге желательно ставить несколько точек. Затем измеряют размеры петли, как было описано выше, и на этом подготовительная работа заканчивается. Можно вводить программу в память калькулятора и приступать к расчетам. После набора программы и перехода в режим вычислений нужно ввести в РЗ длину петли, в Р2 - ширину, нажать клавиши В/0, С/П, и на индикаторе появится 0. Теперь остается вводить координаты x ^ y С/П и считывать с индикатора числа.

Расшифровываются они так: последние четыре цифры - количество петель, а первые - номер ряда, на котором их надо либо набрать, либо сбросить в зависимости от структуры детали. Затем нужно нажать С/П, считать новую информацию; после появления нуля иа индикаторе ввести координаты следующей точки. Учтите, что вводить их нужно обязательно "снизу вверх", то есть чтобы координата у каждой следующей точки была не меньше предыдущей. Из-за этого левую и правую сторону детали приходится рассчитывать по отдельности.

В качестве контрольного примера можно использовать расчет детали, приведенной на рисунке. Пусть предварительно связанный образец из 40 рядов по 40 петель имеет 13.5см в ширину н 9см в длину. После перехода в режим вычислений вводим размеры петли 13.5 ^ 40 / П2 9 ^ 40 / П3 В/0 С/П 0. Для расчета левой стороны набираем 0 ^ 55 С/П "2450001" С/П "0" 6 ^ 57 С/П "2460003" С/П "2470005" С/П "2480007" и т.д. В кавычках - цифры, появляющиеся на экране. Расшифровываются они так: иа 245 ряду снять 1 петлю, на 246 ряду количество снятых петель довести до 3, на 247 ряду - до 5 и т.д.

После обработки всех данных в вашем распоряжении - таблица, которую можно рассматривать как программу для вязальной машины.

Вязанием за редким исключением почему-то занимаются женщины. Чтобы занять простаивающего супруга, можно поручить ему провести требуемые расчеты и по возможности усовершенствовать приведенную программу - сделать ее хотя бы немного быстрее и короче. Таким образом, вопрос распределения труда в семейной жизни будет хотя бы частично решен.

ПРОГРАММА: 00. 0 01. С/П 02. ПП 03. 61 04. ИП1 05. П9 06. П5 07. ИП0 08. П8 09. П4 10. ПП 11. 69 12. 0 13. С/П 14. ПП 15. 61 16. ИП0 17. ИП4 18. - 19. Fx!=0 20. 04 21. ИП1 22. ИП5 23. - 24. Fx!=0 25. 04 26. / 27. ПА 28. F1/x 29. Fx<0 30. 32 31. /-/ 32. П7 33. 1 34. - 35. Fx<0 36. 41 37. 1 38. П7 39. БП 40. 45 41. ИПА 42. ИП7 43. * 44. ПА 45. ИП9 46. ИП7 47. + 48. П9 49. ИП1 50. - 51. Fx<0 52. 04 53. ИПА 54. ИП8 55. + 56. П8 57. ПП 58. 69 59. БП 60. 45 61. ИП3 62. / 63. П1 64. x-y 65. ИП2 66. / 67. П0 68. В/0 69. ИП9 70. П6 71. КИП6 72. ИП6 73. 4 74. F10X 75. * 76. ИП8 77. + 78. П6 79. КИП6 80. ИП6 81. С/П 82. В/0

В.ЕРОФЕЕВ (г.Воронеж)

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
Для чтения новой книги И.Данилова "Секреты программируемого микрокалькуляторе" (М.: Наука, 1986) не требуется никаких специальных знаний ни о программировании, ни об ЭВМ. Нужен только программируемый микрокалькулятор "Электроника Б3-34" и три свободных вечера - пожалуй, столько времени понадобится на его освоение.

В книге собраны многие материалы, публиковавшиеся в журналах "Наука и жизнь" и "Техника - молодежи". Книга построена так, чтобы читатель постепенно углублял свои знания: сначала описываются приемы работы с микрокалькулятором в ручном режиме, затем даются краткие сведения о его структуре и логике работы. Какие задачи и как их решать на микрокалькуляторе, как быстрее и лучше написать программу - ответы на эти и ряд других вопросов нейдет читатель этой книги ]

[ УЗЕЛКИ НА ПАМЯТЬ
Кроме команд, содержащих стрелку, есть еще одно отличие, из-за которого некоторые программы для микрокалькулятора "Б3-34" не подходят к "МК-61". Я имею в виду команды косвенной адресации, например КИПМ. Если число, образованное двумя младшими разрядами целой части содержимого регистра РМ, больше или равно 10, то, чтобы определить регистр, к которому произойдет обращение загляните в таблицу. Она подходит и для "МК-52".

Цифра в младшем разряде целой части модуля числа/Регистр, к которому обращаемся: 0/A 1/B 2/C 3/D 4/E 5/0 6/0 7/1 8/2 9/3.

А.ХОТЫНЕЦ (г.Междуреченский Кемеровской области) ]

[ МИКРОЗАДАЧНИК
На простейшем калькуляторе нажимаем последовательно пять клавиш, условно названных А, В, С, Д, В. На индикаторе высвечивается число 82. Затем нажимаем еще три клавиши Е, Д, Г. На индикаторе - число 328. Каким цифрам и арифметическим функциям соответствуют обозначения нажатых клавиш, если известно, что не нажимались подряд две клавиши с обозначением арифметических функции и более двух цифровых клавиш?
А.ЧИСТОВСКИИ (г.Йошкар-Ола) ]

[ МАЛЕНЬКИЕ ХИТРОСТИ
На индикаторе вспыхнуло ЕГГОГ. Как узнать число, которое скрыто под маской сообщения об ошибке? В подобных случаях я нажимаю клавиши П0 ИП0. В правом углу индикатора тотчас же появляется порядок, например, ЕГГОГ 216. Осталось нажать клавишу ^, и порядок уступит место мантиссе числа. Следует учитывать, что позиция запятой не имеет значения: запятая должна стоять после первой цифры.
О.СТЕПАНОВ (г.Пушкино Московской области) ]

[ Ответ на головоломку: обозначениям А, В, С, Д, В, Е, Д, Г соответствуют клавиши 32 * 82 / 8 = ]

Матчасть диванного танкиста - Страница 3 87061110
Рис. Н.Рачнова (г.Тюмень)

ЭЛЕКТРОННЫЙ ДЕТЕКТИВ
Калькуляторы "МК-61" и "МК-52" по сравнению с прежними моделями обладают новыми возможностями. Среди них - команды логических операций. "Как их использовать?" - такой вопрос все чаще можно встретить в почте рубрики. Предлагаем откликнуться на наше конкурсное задание: придумайте задачу, в программе для решения которой эффективно использовались бы логические команды.
Первое упражнение подобного рода предлагает нашим читателям Ярослав Карпович Трохименко. известный своими книгами о микрокалькуляторах, написанными в соавторстве с Ф.Д.Любичем.

В гостинице - восемь комнат. Комнаты 1, 3, 5 занимают женщины, в комнатах 1, 4 и 6 разместились пенсионеры, в комнатах 2 и 8 остановились брюнеты. Необходимо отыскать комнату учительницы, которая недавно вышла на пенсию, н комнату рыжебородого учителя.

Закодируем условие задачи. В цепочке из восьми (по числу комнат) двоичных цифр единицами пометим те комнаты, где проживают интересующие нас люди, нулями - остальные. Тогда информация о расселении женщин выразится двоичным числом Ж=10101000. Аналогично получаем для пенсионеров П=10010100. для брюнетов Б=01000001.

С двоичными числами работать неудобно, их лучше перевести в восьмеричную систему счисления. Будем разбивать каждое двоичное число справа налево по три разряда, подставляя 0 вместо 000, 1 вместо 001, 2 вместо 010 и так до 7 вместо 111.

Специфика выполнения логических операций на калькуляторе предписывает взять полученную цепочку восьмеричных цифр в качестве дробной части кода, а целую часть кода положим равной восьми. В результате имеем Ж=8.250, П=8.224, Б=8.101.

Решим задачу в символьном виде. Поскольку учитель не женщина н не пенсионер н не брюнет, то его можно найти в комнате, кодируемой выражением

Ж'^Б'^П'

Что далее? Чтобы уменьшить число логических операций, используемых для вычисления этого выражения, запишем его по-другому: не (женщина или пенсионер или брюнет), то есть

'(ЖvПvБ)

Можно начинать вычисления:

8.250 B^ 8.224 KV 8.101 KV

Осталось произвести операцию отрицания (или инверсии) К ИНВ. В силу все той же специфики выполнения логических операций иа калькуляторе прежде, чем подвергнуть инверсии восьмеричный код, его надо сложить по модулю 2 (есть у новых калькуляторов и такая операция) с числом 8.88..., где количество восьмерок после запятой равно количеству цифр в коде. В нашем случае

8.888 К(+) К ИНВ

Получили 8.402. Расшифровывается число так же, как и раньше: 4=100, 0=000, 2 = 010, что дает 100 000 010. Комнат всего восемь, поэтому крайний левый разряд отбрасываем. По положению оставшейся единицы определяем, что учитель поселился в седьмой комнате.

Учительницу отыскать еще проще, выполнив операцию Ж^П. Набираем 8.250 B^ 8.224 К^ "8.200". Получаем 010 000 000. Крайний левый разряд числа отбрасываем. Оставшаяся единица указывает, что учительница - в первой комнате.

Таблицы истинности для логических функций от логических переменных А (верхняя строка) и В (левый столбец таблиц). Функция "не" заменяет единичное значение своего аргумента на нулевое, а нулевое - на единичное.

Матчасть диванного танкиста - Страница 3 87061210
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Янв 31, 2023 12:20 am

7/87

Матчасть диванного танкиста - Страница 3 87070110

Микрокомпьютер "Микроша" - еще один простейший компьютер, предназначенный для широкой продажи. Все его элементы и узлы - клавиатура, интегральные схемы, разъемы - размещены на одной двусторонней печатной плате.

Матчасть диванного танкиста - Страница 3 87070210

ПОЗНАКОМЬТЕСЬ С "МИКРОШЕЙ"
Так случилось, что из нескольких уже сформировавшихся классов персональных ЭВМ у нас выпускаются для широкой продажи населению лишь простейшие машины. Да и то в течение долгого времени в магазинах продавалась одна такая ЭВМ - бытовой компьютер БК-0010 (8,10,12/86, 4/87); о совершенствовании этого компьютера и его новых модификациях будет рассказано в одном из ближайших номеров журнала и лишь сейчас на прилавках начала появляться еще одна машина примерно такого же класса - "Микроша".

В основе своей этот компьютер был создан в период всплеска самодеятельного конструирования персональных ЭВМ на основе распространенной серии отечественных интегральных схем - так называемого микропроцессорного комплекта К580. Почти одновременно несколько групп энтузиастов разработали микрокомпьютеры в какой-то мере близкие, похожие, поскольку все они использовали именно этот наиболее доступный микропроцессорный комплект. И в то же время это были компьютеры разные как по принятым техническим решениям, так и по характеристикам, важным для пользователя. Наиболее известные творения того времени - это микрокомпьютеры "Ириша" (создан на химическом факультете МГУ), лучшая, пожалуй, машина этого класса "Вектор-06 Ц" кишиневских радиолюбителей Д.Темиразова и А.Соколова, "Океан-240.1" (Институт океанологии Академии наук), детально описанные в нескольких номерах журнала "Радио" микрокомпьютеры "Микро-80" и "Радио-86 РК" (Московский институт электронного машиностроения). Последней разработке повезло больше других, она получила самую высокую для создателя любой машины награду - стала основой для серийного, рассчитанного на массовый выпуск компьютера, который и появился на свет под именем "Микроша". Кстати, за производство "Микроши" взялся московский Лианозовский электромеханический завод, тот самый, который несколько лет назад решился на выпуск первой в стране персональной ЭВМ "Агат" (см. 10/84). Эта инициатива, как и положено, была отмечена немалым числом неприятностей, но они, к счастью, не пошли впрок, и благодаря этому "Микроша" уже сходит с конвейера, и тысячи пользователей смогут перейти от разговорного жанра к реальному взаимодействию с компьютером. Может быть, он и не самый лучший, не такой, как хотелось бы иметь, но все же это настоящий, живой компьютер, открывающий немало интересных возможностей и в основном соответствующий сформировавшемуся на мировом рынке классу простейших ЭВМ.

Возможности "Микроши" в основном определились, с одной стороны, выбором доступного комплекта микросхем серии К580, с другой - использованием обычного, как принято говорить, бытового магнитофона в качестве устройства внешней памяти и обычного черно-белого телевизора в качестве дисплея, для вывода информации на экран.

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

Но сам по себе этот информационный сигнал не может "нарисовать" все это на экране - телевизор умеет принимать со своего антенного входа и обрабатывать лишь модулированный высокочастотный ТВ-сигнал. Поэтому в приставке имеется несложная схема (тоже на одном транзисторе), которая по официальной терминологии и есть модулятор. Он нагружает "передатчик", модулирует его высокочастотный ток, и на вход телевизора поступает полноценный компьютерный заменитель ТВ-сигнала - модулированный полезной информацией высокочастотный сигнал. Для самого телевизора он по своей структуре неотличим от того, что приходит с телецентра. В модулирующий сигнал подмешиваются еще и так называемые синхронизирующие импульсы, они обеспечивают точную согласованность перемещений электронного луча по экрану с появлением из машины информационных сигналов, "зажигающих" ту или иную точку экрана. Высокостабильный тактовый генератор машины с помощью делителя частоты позволяет получить синхроимпульсы, следующие друг за другом с интервалом, который соответствует телевизионному стандарту.

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

Всего "Микроша" может разместить на экране телевизора 24 строки из букв или цифр, по 64 символа в строке. В свою очередь, каждый символ формируется на точечном растре из 8*8=64 точек; один вертикальный ряд точек (из восьми) уходит на пробел между символами. Небольшие растровые элементы используются и в так называемой псевдографике - рисовании на экране. Рисовать можно полностью закрашенным растровым "пятном" - символом размером 4*4 точки - или 15 другими значками: вертикальными или горизонтальными штрихами, Г-образными и другими символами. В режиме псевдографики изображение на экране может состоять из 128*50=6400 элементов - это примерно в 5 раз больше, чем число клеточек иа одной странице арифметической тетради. В то же время у компьютеров, имеющих не "псевдо", а настоящую графику, картинка может состоять из нескольких десятков тысяч или даже сотен тысяч элементов.

Раз уж в нашем коротком рассказе о "Микроше" появились цифры, приведем еще несколько. Компьютер выполняет простейшую операцию сложения за 3 микросекунды, его среднее быстродействие - 200-300 тысяч операций в секунду. Это в несколько раз меньше, чем у рекордсменов из мира персональных ЭВМ, и во много раз больше, чем имели уникальные вычислительные гиганты, открывавшие эру компьютерной революции.

Матчасть диванного танкиста - Страница 3 87070310

Блок-схема "Микроши" напоминает, что в пределах того или иного класса небольших компьютеров их структура в общих чертах одинакова, особенно при использовании одних и тех же типов микросхем. Но каждый конструктор вносит, конечно, что-то свое в эту типичную блок-схему, что-то выигрывает в сравнении с аналогичными компьютерами, что-то теряет, а чем-то сознательно поступается в стремлении снизить стоимость машины, улучшить эту важнейшую для массового компьютера характеристику.

Микропроцессор КР580ИК80А, используемый в "Микроше", восьмиразрядный, он обрабатывает информацию порциями по 8 бит (8 двоичных разрядов, например,
10011011 или 01111011), и она циркулирует в машине по восьмипроводной линии связи - шине данных. Для "серьезных" персональных ЭВМ восьмиразрядный процессор - это, конечно, пройденный этап, в них уже работают более сложные и значительно более совершенные, в частности более производительные 16-разрядные микропроцессоры, а в последние годы все чаще появляются персональные компьютеры с 32-разрядиыми микропроцессорами. В то же время на мировом рынке еще остается немало дешевых восьмиразрядных машин.

Адресная шина "Микроши" - 16-проводная, по ней идут 16-разрядные адреса (например, 1011011011101011 или 0001011111011011) каждый указывает, куда нужно направить то или иное восьмиразрядное число. Всего разных адресов, разных, неповторимых комбинаций из 16 единиц и нулей, может быть 2*16=65536. Все это количество "почтовых ящиков" распределено в машине между основными потребителями и хранителями информации. А поскольку к каждому адресу прикреплен 1 байт информации (8-разрядная порция данных), между всеми потребителями распределены хранилища общей вместимостью 64 Кбайт (64 килобайта). Из них для оперативного запоминающего устройства ОЗУ выделено 32 Кбайта, для постоянного запоминающего устройства ПЗУ - 2 Кбайта, по столько же собственной памяти имеют таймер (блок, который, в частности, с помощью громкоговорителя позволяет исполнять простейшие мелодии), контроллеры (схемы управления) клавиатуры, дисплея, прямого доступа к памяти и внешний интерфейс,- система связи с внешним миром, например, с печатающим устройством или компьютерными сетями. Кроме того, предусмотрен немалый резерв - так называемое свободное адресное пространство в 24 Кбайт. Оно, в частности, позволит в скором времени через разъем внутреннего интерфейса подключать к компьютеру блоки, увеличивающие емкость его ОЗУ или ПЗУ.

Первую порцию того, что принято называть программным обеспечением, пользователь "Микроши" получает вместе с машиной на магнитофонной кассете МК-60. На этой кассете записаны программы, которые нужны, чтобы начать работу с компьютером. Прежде всего это программа-иитерпретатор языка Бейсик.

Если вы собираетесь вводить в машину программы, написанные на Бейсике, или самостоятельно составлять программы на этом языке, то вам придется начинать каждый сеанс работы с компьютером со считывания в машину (в ее ОЗУ) интерпретатора этого языка. Именно интерпретатор (в переводе на русский - переводчик) превращает в машинные коды указания, представленные на языке программирования. Необходимость всякий раз начинать с введения Бейсика есть плата за отсутствие в "Микроше" постоянного запоминающего устройства достаточно большой емкости, где, в частности, мог бы храниться интерпретатор одного из языков. Это существенно отличает "Микрошу" от большинства других компьютеров, где основной язык программирования еще на заводе записан в ПЗУ. Тогда при включении компьютера содержимое ПЗУ копируется в область ОЗУ. отведенную для языка, и через одну-две секунды после включения компьютер уже может разговаривать на Бейсике, Паскале или фокале. Подобным образом, например, устроены "Электроника МК-85", "Коммодор 64" и многие другие микроЭВМ.

Впрочем, "Микроша" не единственный компьютер, который имеет ПЗУ очень малой емкости, в качестве примера назовем одну из популярных моделей фирмы "Шарп". Создатели этих компьютеров утверждают, что такая конструкция позволяет полнее использовать оперативную память, когда не требуется язык программирования высокого уровня.

Итак, магнитофон подключен к "Микроше", отдана команда считать или, как говорят программисты, загрузить Бейсик, и текст программы, хранящейся в закодированном виде на магнитной ленте, примерно за полторы минуты записывается а ОЗУ. Первое, что можно сделать, загрузив Бейсик, это приступать к изучению самого Бейсика - небольшой курс из семи уроков этого языка записан на той же магнитофонной кассете. Кстати, на обычной магнитофонной кассете помещается почти мегабайт информации, если сравнить это с объемом оперативной памяти компьютера, то получится, что на кассете может храниться около тридцати программ, полностью загружающих ОЗУ. Уроки Бейсика загружаются в ОЗУ поочередно (их общий объем - около 80 Кбайт), и это позволяет в диалоге с машиной осваивать сперва основы, а затем и тонкости Бейсика.

Компьютер не только рассказывает о языке, но и контролирует, насколько хорошо вы освоили те или иные его особенности: каждый урок заканчивается небольшим экзаменом, не выдержав его, нельзя переходить к новому материалу. За неверный ответ машина не просто ставит "двойку", но тут же предлагает вступить с ней в диалог и избавиться от ошибок.

Что же дальше? Дальше можно считать с ленты игровые программы, например, "Угадай число" или "Отелло" и, поиграв, попробовать разобраться в их структуре, а то и написать свой вариант уроков Бейсика.

Пусть программное обеспечение "Микроши" пока невелико, однако по мере того, как будет расти парк машин, коллективное творчество пользователей наверняка создаст хорошую библиотеку программ. Причем, возможно, не только на Бейсике, но и на других языках высокого уровня, а также наверняка в машинных кодах - программы, состоящие непосредственно из конкретных указаний по выполнению операций и из конкретных адресов. Уже на первой кассете есть программы, которые не нуждаются в интерпретаторе с Бейсика-программы, составленные в кодах. Одна из них - музыкальный редактор. Считав ее, можно сочинить и сыграть на компьютере, на время превратившемся в простейший одноголосый электронный орган, несложную мелодию. Если она понравится, ее можно сохранить, записав, разумеется, в закодированном виде на магнитофонную кассету. В любой момент мелодию можно изменить, поменять темп исполнения. Для того, чтобы научиться самому составлять программы в машинных кодах, нужно освоить ассемблер - еще один язык программирования для микроЭВМ. Эта задача потруднее, чем изучение Бейсика, ведь ассемблер - язык не высокого, а низкого уровня, а значит, он гораздо дальше от человеческого языка и ближе к машине. Но зато велика и награда - программы, составленные в кодах, выполняются машиной примерно в 500 раз быстрее.

Попробуем пояснить, почему это происходит. Бейсик, который предназначен именно для перевода указаний человека на язык машинных кодов, делает это довольно неэффективно. Во-первых, он не учитывает некоторых тонкостей устройства машины, и это сделано для того, чтобы программы на Бейсике подходили для машин различных конструкций. Во-вторых, и это самое главное, Бейсик-интерпретатор переводит программу строка за строкой, тут же забывая все переведенное выше. Эта забывчивость в циклических программах оборачивается тем, что одну и ту же строку интерпретатор переводит сотни и тысячи раз подряд. Здесь Бейсик немного похож на переводчика-синхрониста, который переводит речь, записанную на пластинке, тогда как пластинку "заело".

Программа, составленная в кодах,- это как бы ие требующий перевода авторский текст на родном языке машины. ЭВМ выполняет все, что написано на родном языке, очень быстро, практически не теряя времени на перевод, вне зависимости от того, идет ли речь о цикле, то есть о повторяющемся фрагменте программы, или о любом другом ее фрагменте.

Программ на кассете, которая входит в комплект машины, совсем немного, но заметим еще раз, как показывает практика, владельцы компьютеров очень быстро наращивают программное обеспечение, составляя необходимые программы и обмениваясь ими между собой.

Да и на заводе-изготовителе думают о последующей продаже дополнительных кассет с программным обеспечением для "Микроши".

Впрочем, это касается так называемых системных программ, таких, как графический редактор, музыкальный редактор, Бейсик, ассемблер, программ-драйверов для сопряжения с печатающим устройством и игровых программ, создавать которые гораздо дольше, чем играть с ними. Самые нужные для работы программы пользователь обычно создает сам. В умелых руках "Микроша" станет хорошим помощником в работе и неплохим партнером в проведении досуга.

Матчасть диванного танкиста - Страница 3 87070410

А.БОЙКО, Р.ЧИКОРУДИ
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Фев 01, 2023 12:24 am

Не принимайте близко к сердцу, все что тут понаписано. Авторы больны тяжелой болезнью программистского оптимизма 80-х. Мол, если программировать разумно, то можно запрограммировать что угодно. И разница между Бейсиком и Паскалем именно в различном отношении к "разумно" и "что угодно". Программирование, как я понимаю "разумно", сводится к математическому решению задачи, записи этого решения на языке программирования и запуске его на конкретной машине. Бейсику глубоко наплевать, как вы решаете задачу, он предоставляет крайне простые средства для записи решения, но предлагает практически исчерпывающие средства для запуска последнего на машине. В нем есть простые инструменты не только для обращения к файлам, но и для рисования, проигрывания мелодий, обращения к прочей аппаратуре, отладки программы. И, на крайний случай,- для вставки в программу сырого машинного кода. Паскаль же начисто лишен средств запуска. Считается, что они зависят от реализации и должны изучаться отдельно от языка. Средства записи решения в Паскале гораздо богаче Бейсиковых, как говорят, "структурнее" - позволяют красиво записывать деление большой программы на маленькие понятные фрагменты. Самое же главное, Паскаль вторгается и в математику решения задачи - имея в своем распоряжении средства "разумной" (опять, "структурной") организации данных. С точки же зрения "что угодно", простота Бейсика позволила написать гораздо больше программ, чем правильность Паскаля.

7/87
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ЧЕТЫРНАДЦАТОЕ, начальное в цикле, посвященном следующему в программе "Школы" алгоритмическому языку - Паскалю.
Созданный полтора десятилетия назад признанным классиком программирования Н.Виртом, Паскаль за последнее время приобрел большую популярность у программистов - как профессиональных, так и непрофессиональных, в частности, у владельцев персональных компьютеров. Некоторые из существенных черт этого языка, принесших ему признание, описываются на начальном занятии цикла. Его ведут инженер М.И.ВАХТЕРОВ и кандидат физико-математических наук Г.В.СЕНИН (г.Москва). Особую убедительность их рассказу придает то, что основные положения Паскаля излагаются в сравнении с Бейсиком. Такой подход делает предмет разговора более понятным для тех, кто прошел предыдущие занятия нашей "Школы".
Более углубленное знакомство с Паскалем - тема следующего занятия. Здесь разговор не будет опираться на аналогии с другими языками, но от читателя ожидается знание элементарных понятий программирования (присваивание, цикл и т.п.). Третье, завершающее занятие цикла целиком уделяется замечательной способности Паскаля структурировать данные.

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

Поднять ремесло программирования до уровня если не науки, то сложной инженерной деятельности - вот что входило в замысел создателя Паскаля. Язык должен определенным образом формировать мышление программистов, помогать им почувствовать законы программирования, его красоту. Не случайно было выбрано и название нового языка: в честь выдающегося французского математика Блеза Паскаля (1623-1662).

В те годы уже сложились представления о том, что хорошо и что плохо в программировании. Паскаль был задуман как язык образцовый.

Успех Паскаля, когда он появился, был больше, чем ожидалось. Выйдя за чисто учебные рамки, он стал полноправным и очень популярным - особенно среди студентов и научных работников - алгоритмическим языком.

Что касается Бейсика, то этот язык классики программирования (Н.Вирт, Э.Дейкстра, Ч.Хоар) и их единомышленники ставили очень низко, позволяя себе в его адрес довольно язвительные высказывания.

Пусть не принимают это близко к сердцу те, кто успел полюбить Бейсик. К точке зрения классиков можно сделать много оговорок. И все же основания для подобных высказываний у них есть. Нам будет полезно понять, какие.

Очень кратко разницу между Бейсиком и Паскалем можно выразить так. Бейсик позволяет выпускать работоспособные программы очень быстро и без особой отделки. Работа на Паскале связана с большими затратами времени и мыслительных усилий, но это вознаграждается отточенностью и надежностью получаемого программного изделия.

Бейсик сохраняет особую прелесть кустарного труда (и это роднит его с микрокалькулятором). Буквально из-под рук выходит готовый продукт, сразу годный в употребление. Принципы языка прозрачны, лежат на поверхности, программисту не нужно читать длинных инструкций, усваивать новые термины и т.д. Это обеспечивает Бейсику высокую популярность у работающих на персональных компьютерах, среди которых не так уж много профессиональных программистов.

Если вы начинали программировать с микрокалькулятора, это, вероятно, наиболее близкий вам по духу язык. Однако, может быть, легкость Бейсика кажется вам легковесностью, а простота - примитивностью?

Тогда не исключено, что
вам по душе придется Паскаль. Особенно в том случае, если вы привыкли делать все пусть неторопливо, но ясно и четко, если вам приятно, когда все вещи на своих местах, "все по полочкам", если вам по душе, когда стройный замысел объединяет детали.

Пусть не создастся впечатление, будто само наличие разных языков программирования должно разделить все человечество на непримиримые кланы. И Бейсик, и Паскаль - всего лишь орудия (таких орудий десятки и помимо их). Каждым из них можно пользоваться н с предельной аккуратностью, и очень неряшливо.

Суть, однако, в том, что Бейсик прощает неточности и, пожалуй, даже поощряет этакую небрежность в программировании. Паскаль, напротив, стимулирует продуманные решения, полученные напряженной, сосредоточенной работой.

Освоив Паскаль, относительно легко можно перейти к изучению любого другого языка: Модулы, Ады, Си или того же Бейсика. Он дает многое в понимании существа программирования. Что же касается Бейсика, то существует опасение, что раннее и неумеренное пристрастие к нему притупляет стремление к строгости и последовательности в программировании.

А теперь несколько слов в защиту Бейсика. Наш старый, милый Бейсик! Вышесказанное относится прежде всего к ортодоксальному, самому "неотесанному" варианту языка. Есть много попыток, привить Бейсику хорошие манеры, и некоторые его диалекты обладают полезными чертами и свойствами других языков, в том числе Паскаля (пусть злые языки и утверждают, что варварское происхождение Бейсика проглядывает и за современным костюмом).

Добавим к этому, что если ваши программы сравнительно просты, то вполне вероятно, что вы сможете программировать на Бейсике, прекрасно решая свои задачи и не чувствуя никаких неудобств. Паскаль дает средства для разработки больших и сложных программ с известной гарантией их надежности и безошибочности. Здесь его преимущества неоспоримы. Для небольших программ средства Паскаля окажутся излишними, избыточными. Чтобы постирать носовой платок, нет нужды заряжать стиральную машину.

Сегодня еще далеко не все пользователи персональных ЭВМ имеют возможность программировать на Паскале. Бейсик, по всей видимости, получит реального конкурента только с массовым производством персональных ЭВМ типа ЕС, "Искра", ДВК. Тогда большинство программистов-любителей будет стоить перед проблемой выбора второго алгоритмического языка. Мы будем рады, если нам хоть в какой-то степени удастся сгладить тот психологический барьер, который может возникнуть при освоении нового языка. Вместе с читателями мы попробуем проложить первую тропинку от Бейсика к Паскалю.

Ниже мы предлагаем читателям простую игровую программу в двух вариантах - на том и на другом языке. По ходу изложения текст на Бейсике постепенно трансформируется в текст на Паскале. (На практике пользоваться этим методом мы не советуем: подстрочник никогда не отличается изяществом. Паскаль имеет свои собственные средства выражения, и писать программы следует, сообразуясь с ними, а не делая кальки с языка, чуждого ему по природе).

Игра состоит в том, чтобы найти сокровище. Заполучить его можно лишь подойдя к нему на установленное расстояние. Игроку неизвестны ни точные координаты сокровища, ни его собственные координаты, однако он постоянно получает информацию о расстоянии до сокровища (что-то вроде детской игры "холодно-горячо"). Каждым ходом игрок меняет свои координаты, указывая приращение или уменьшение каждой из них. Сокровище между тем тоже перемещается, дрейфуя небольшими случайными скачками: от 0.5 до -0.5 по каждой координате. По получаемой информации игрок должен уловить, в каком направлении от него находится объект поисков, и достичь его. [Пример сознательно упрощен ради основной цели: сравнения двух языков. Для самых Пытливых читателей, которых не удовлетворяют суррогаты, в конце статьи приведен вполне серьезный вариант программы].

Матчасть диванного танкиста - Страница 3 87070510
Программа игры, составленная на Бейсике.

Строки 10-70: прелюдия. Выполняются предварительные операции: присваивание начальных значений координатам игрока и сокровища. Здесь и ниже для выбора очередного случайного вещественного числа в диапазоне от 0 до 1 используется функция RND. Координаты игрока имеют начальные значения между 1 и 2.

Строки 80-200: основной цикл.

Строки 210-220: на экран выводится поздравление в связи с успешным завершением поисков и указывается затраченное число ходов. Конец программы.

Как аналогичная программа будет выглядеть на Паскале?

Начнем с простого. Большинство операторов и функций обоих языков находятся в прямом соответствии, разница лишь в названиях:

Матчасть диванного танкиста - Страница 3 87070610

В Паскале аргументы операторов и функций всегда заключаются в скобки и разделяются между собой запятыми (в Бейсике это правило действует для функций, но не для операторов).

Тексты, которые выводятся на экран, заключаются не в двойные кавычки, а в апострофы. Оператор присваивания записывается не в виде равенства, а двумя символами: "двоеточие" и "равно". Для отделения операторов друг от друга, когда они расположены в одной строке, в Бейсике употребляется двоеточие (строки 40, 60, 80, ПО). В Паскале же вместо этого используется точка с запятой. Нотация арифметических выражений для нашего примера одинакова там и тут.

Матчасть диванного танкиста - Страница 3 87070710

Как видим, результат первого этапа преобразований не слишком отличается от исходного варианта. Другим стало лишь внешнее оформление операторов.

Переходим ко второму этапу. По его завершении различия в языках станут более заметны.

В исходной программе на Бейсике имеется цикл, который отвечает за повторение процесса поиска. Он построен типичным для Бейсика способом: с помощью условного оператора IF...THEN и оператора перехода GOTO.

Приготовьтесь к небольшому умственному усилию. Дисциплина программирования, за которую ратует Паскаль, рассматривает оператор GOTO как "вредный". Что это значит? То, что нужно стараться обходиться без него. "Да разве это возможно?!" - воскликнет программист, воспитанный на Бейсике. На это один из авторов статьи может со всей ответственностью заявить, что он успешно (н совершенно сознательно!) избегал в своей программистской практике на Паскале пресловутого оператора перехода. Другой соавтор, правда, считает, что применение GOTO иногда допустимо. Однако оба сходятся во мнении, что ситуации, где его употребление оправданно, хорошо известны и очень немногочисленны. (Это случаи так называемого структурного GOTO - например, переход изнутри оператора цикла на следующий за ним оператор).

Собственно говори, поклонники Бейсика легко обнаружат, что при организации циклов им порой тоже удается обойтись без GOTO. Речь идет об операторе FOR...TO...NEXT, позволяющем организовать цикл без оператора перехода. Им можно не пользоваться, но нельзя отрицать, что с ним программирование повторяющегося процесса и быстрее, и проще, и надежнее.

В нашей задаче, однако, оператор FOR...TO...NEXT неприменим, поскольку число повторений цикла заранее неизвестно. В программе на Бейсике нам поневоле пришлось употребить оператор перехода. В Паскале же, кроме FOR...TO, есть и другие способы организации циклов без GOTO, рассчитанные на самые разные случаи.

Предположим, у вас возникла необходимость многократно выполнить какой-то участок программы. Задумайтесь: при каком условии группа операторов должна выполняться? (Дейкстра говорит: "Определите инвариант цикла"). Найдя условие повторения (или, что равносильно, условие выхода), мы будем готовы грамотно записать цикл на Паскале.

Условие повторения в нашем примере сформулировано в строке 190 : D > = 1. Условие выхода из цикла будет противоположным: D<1. Повторяться должны операторы в строках от 80 до 180. Можно следующим образом выразить смысл этого участка программы:

ПОВТОРЯТЬ
...
... операторы
...
ПОКА НЕ выполнено условие выхода

Замените выделенные слова их английскими эквивалентами (REPEAT - UNTIL) и вы получите конструкцию повторения, которую предлагает Паскаль:

70 REM Основной цикл
75 REPEAT
80 ...
... ...
180 ...
190 UNTIL D<1

Введенная дополнительно строка 75 и парная ей строка 190 охватывают повторяющуюся группу операторов - "тело цикла", благодаря чему адрес перехода в строке 190 не нужен (а значит, не нужен и оператор GOTO). Для наглядности запишем тело цикла уступом, сдвинув каждую из составляющих его строк несколько вправо. Вся повторяющаяся группа операторов теперь стала четко выделенной и заметна даже беглому взгляду.

Матчасть диванного танкиста - Страница 3 87070810

Теперь мы начинаем догадываться, что номер строки нужен Бейсику не столько для обозначения порядка операторов, сколько для того, чтобы при желании можно было на любой из них передать управление с помощью GOTO.

Объявив GOTO "вредным", мы закономерно приходим к заключительному шагу. Нужно освободиться, словно от скорлупы, от номеров строк, и на наших глазах рождается птенец, в котором уже угадывается облик настоящей Паскаль-программы! Поистине волнующий момент...

По своему замыслу и строению конструкции REPEAT...UNTIL Паскаля и FOR...TO...NEXT Бейсика довольно сходны. Обе они обходятся без GOTO. Однако Бейсик не идет до логического конца. Оператор FOR...TO...NEXT. состоящий из нескольких пронумерованных строк, сохраняет лишь видимую цельность. Всегда ведь есть возможность (и искушение) попасть прямо внутрь цикла, минуя его заголовок (посредством GOTO!). Логика оператора нарушается, он на глазах рассыпается на отдельные строки, и общая правильность программы с этого момента под серьезным вопросом. С точки зрения Паскаля, конструкция повторения есть единый оператор, в который "упакованы" другие, и исполнить их можно только одним, только законным способом.

Чтобы наша программа оформилась окончательно, нужно добавить ей немного "оперения". Итак, переходим к третьему, завершающему этапу преобразований.

По-иному запишутся комментарии. В Бейсике они вводятся служебным словом REM. В Паскале же заключаются в фигурные скобки или ограничиваются парами символов (* н *).

Будучи лишены номеров, операторы всегда должны отделяться друг от друга точкой с запятой независимо от того, располагаются они в одной строке текста программы или же в разных.

Небольшое изменение коснется строки 80. Вместо оператора WRITELN удобнее употребить оператор WRITE, действие которого соответствует действию оператора PRINT в Бейсике, если тот завершается точкой с запятой (строка 80 в исходном варианте): в этом случае дальнейший ввод и вывод продолжается на той же строке экрана, а не переходит на следующую.

Все операторы программы необходимо заключить в "скобки" BEGIN (перед первым оператором) и END (за последним оператором). Самый последний символ программы - точка. Самая первая строка - заголовок программы, содержащий ее имя.

PROGRAM СОКРОВИЩЕ;
...
BEGIN
(* тело программы *)
...
END.

На этом дисциплинирующие требования Паскаля не кончаются. Каждую переменную, которую программист ввел в программу, он должен "объявить" следующим образом. Имени переменной предшествует слово VAR, после имени следуют двоеточие и указание ее типа. Описания нескольких переменных можно объединять через точку с запятой, а однотипные - перечислять через запятую:

VAR AX, AY, ВХ, BY, DAX, DAY, D: REAL;
N: INTEGER;

У нас семь вещественных переменных (тип REAL) и одна целочисленная (тип INTEGER). Тип задает возможные значения переменной, так что, скажем, величине N нельзя присвоить нецелое значение. Эта характерная особенность Паскаля, называемая контролем типов, призывает программиста к аккуратному и однозначному употреблению переменных и предохраняет от возможных ошибок, связанных с путаницей в их значениях.

Если вы напишете очень большую программу и попытаетесь через месяц в ней разобраться или если вы возьметесь за чтение чужой программы, вы будете благодарить каждую строку комментария и описания данных. Недаром ведь и те, кто программирует на Бейсике, стараются описывать переменные (хотя этот язык позволяет вводить по ходу выполнения программы новые переменные, а введенные в начале истолковывать по-новому, что затрудняет их описание). Для тех, кто программирует на Паскале, это уже не полезная привычка, а строгий закон. Компилятор Паскаля помогает соблюдать его автоматически и при нарушениях фиксирует ошибки.

В Паскале не требуется присваивать каждой переменной начальное значение. Но иногда это просто необходимо во избежание ошибок. По умолчанию никакого значения (например, нулевого) переменной не присваивается (в отличие от Бейсика, который и в этом дает программисту поблажку). Поэтому в нашем примере тело программы должно начинаться с оператора

N:=0;

Все эти "строгости" делают процесс программирования более кропотливым, однако в них есть глубокий смысл: обеспечить высокую надежность работы программы, после того как ее разработка будет завершена.

Описания переменных (а также констант, функций, процедур и некоторых других элементов) следуют между заголовком и телом программы.

Матчасть диванного танкиста - Страница 3 87070910

Теперь вид нашей программы полностью соответствует нормам Паскаля.

(Сами проанализируйте внесенные нами напоследок мелкие различия в текстах вопросов и сообщений. Когда эта программа будет выполняться, учтите еще одно небольшое различие: при задании очередного шага в ответ на вопрос "Куда пойдете?" нужно вводить числа не через запятую, как в Бейсике, а через пробел).

Оглянемся на проделанный путь. Первый этап перехода от Бейсика к Паскалю состоял в замене некоторых обозначений н названий операторов и не представлялся принципиальным, значительным. На третьем этапе облик программы изменился более кардинально. Самое существенное из внесенных здесь дополнений - описание переменных.

Решающий момент в трансформации программы наступил на втором этапе, при введении оператора REPEAT...UNTIL. Он является одной из так называемых управляющих конструкций, которые позволяют обходиться без GOTO. To, что GOTO в языке программирования не обязателен, доказано теоретически. Применение управляющих конструкций чрезвычайно полезно и с практической точки зрения.

Во-первых, оно исключает программы-"спагетти", для которых характерны беспорядочные передачи управления, например, извне цикла на какой-либо оператор внутри его тела. Такие программы, часто возникающие в результате непродуманного программирования на Бейсике, чрезвычайно трудно отлаживать и вносить в них согласованные изменения.

Во-вторых, существенно повышается удобочитаемость, ясность программы. Циклы, записанные с помощью управляющих конструкций, на Паскале принято писать "уступами", со сдвигом тела цикла в глубину строки. Текст программы сразу предстает взгляду расчлененным на структурные элементы и воспринимается не только на уровне мелких, малосущественных деталей (что типично для Бейсика), но и на уровне общей, так сказать, архитектуры. В круговороте однообразных IF...THEN...GOTO Бейсика бывает нелегко ориентироваться, трудно бывает угадать, где границы содержательных фрагментов. В Паскале все управляющие конструкции легко различимы уже при беглом чтении. Назначение каждой конструкции понятно по обрамляющим ее служебным словам: REPEAT...UNTIL - цикл "до", WHILE... DO - цикл "пока", FOR...ТО...STEP - цикл с параметром, IF...THEN - условный оператор, IF...THEN...ELSE - альтернатива, CASE OF - выбор. (Подробнее они будут пояснены на следующем занятии).

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

И Бейсик, и Паскаль - языки высокого уровня. Это значит, что они универсальны, не связаны с конкретной вычислительной машиной. Чтобы программа, написанная на таком языке, могла быть исполнена на реальной ЭВМ, необходима особая программа-транслятор, выполняющая роль переводчика на машинный язык. Благодаря наличию транслятора программист приобретает существенное удобство: ему нет нужды знать специфику конкретной машины. Написанная на языке высокого уровня, его программа становится, как говорят, переносимой с одной ЭВМ на другую.

Есть два основных типа трансляторов: интерпретаторы и компиляторы. Для Бейсика типичны первые, для Паскаля - вторые. В этом снова проявляется резкое несходство между двумя языками.

Интерпретатор работает как синхронный переводчик: он пытается понять каждое очередное предложение (оператор) программы, то есть выразить его "смысл" в виде цепочки команд ЭВМ и тут же выполнить нх. По-другому действует компилятор. Если продолжить аналогию, он работает, как создатель добротного литературного перевода; он переводит программу, как некий связный рассказ, учитывая взаимоотношения ее частей и выявляя не только ошибки в отдельных элементах, но и несогласованности между ними. Требования к "правильности" программы у компилятора намного выше (вспомните, к примеру, описание переменных в Паскале).

Компиляция часто производится за несколько просмотров программы. Программа при этом не исполняется: перевод готов, но пока не "звучит". Одна из причин этого состоит в том, что компилируется программа обычно по частям, особенно если она большая и сложная. Особая программа-компоновщик собирает отдельные модули, полученные после трансляции, в единое целое: окончательный, готовый к исполнению машинный код.

Уже из этих кратких характеристик понятно, что интерпретатор намного проще в обращении. Вследствие этого Бейсик позволяет непосредственно ощутить процесс программирования. Программа может быть составлена (даже не полностью) и тут же исполнена "на пробу". Программист может вмешиваться в процесс исполнения и сразу вносить необходимые коррективы в работу программы, пока она еще не свободна от ошибок, а затем быстро исправлять ее текст с учетом пробного запуска и тут же повторять все эти действия снова. Для начинающего программиста, который часто ошибается, эти свойства языка, конечно, чрезвычайно привлекательны, поскольку ошибка обнаруживается легко и быстро.

В Паскале обнаружение ошибки в программе и ее исправление сопряжено со значительно большими затратами труда и времени. Во-первых, нужно еще дождаться, пока можно будет попробовать программу в деле. Компиляция каждого модуля может длиться несколько минут, а ведь затем надо еще собрать их воедино. Во-вторых, даже при безошибочной компиляции отдельных частей отнюдь не гарантирована правильная работа программы в целом: части могут быть плохо пригнаны друг к другу. Предположим теперь, что ошибка обнаружена. Мы не можем исправить одно лишь ошибочное место программы так. как мы делаем это на Бейсике. Придется перекомпилировать весь модуль, иногда из-за одной строки - несколько сот.

Чем же тогда хорош Паскаль? И чем плох Бейсик?

Нетрудно осознать, что упомянутые минусы Паскаля являются платой за несомненные плюсы.

Да, программу нельзя тут же исполнить. Однако потом оттранслированная и скомпонованная программа будет работать намного быстрее, чем подобная программа на Бейсике. Ведь интерпретатор Бейсика переводит каждый оператор перед каждым его выполнением, а значит - каждый раз тратит время на перевод. Как синхронный переводчик, он, сказав, тут же забывает сказанное, и в следующий раз должен будет повторить всю проделанную работу по переводу. Создатель литературного перевода держит в уме весь текст целиком; он знает, что его перевод, сделанный однажды, будут потом читать тысячи читателей в течение многих лет, и работает над ним тщательнейшим образом. Компилятор с Паскаля выполняет свою работу, так же тщательно выверяя окончательный результат. После компиляции н сборки отлаженную Паскаль-программу можно запускать многократно, и затраты труда на ее разработку так же, как и затраты времени на трансляцию, окупятся с лихвой.

Да, добавляется "лишний" этап сборки программы. Но появляется возможность разбивать сложную программу на небольшие куски и отлаживать их независимо, постепенно, как бы выстраивая здание из сравнительно самостоятельных блоков, легче поддающихся проектированию. Отдельные части могут разрабатываться независимо разными программистами и в разных программах можно многократно использовать ранее созданные модули.

Вопрос о том, какой язык выбрать для изучения - Бейсик или Паскаль,- во многом зависит от ваших целей.

Если вы смотрите на программирование только как на средство для решения своих профессиональных задач, то можно ограничиться Бейсиком.

Если же вы в какой-то мере стремитесь к изучению основ программирования как самостоятельной дисциплины, то гораздо более подходящим для вас будет Паскаль. Этот язык полезен еще и тем, что дает возможность вернуться к Бейсику на новом, так сказать, качественном уровне и проводить в его рамках систематический, "паскалеподобный" стиль программирования: более надежный, менее чреватый ошибками, пригодный для разработки больших и сложных программ.

С некоторых пор каждое занятие "Школы" завершается игровой программой для микрокалькулятора. Тема нынешнего занятия - игра. Для его традиционного завершения предлагаем запрограммировать эту игру для микрокалькулятора.

Матчасть диванного танкиста - Страница 3 87071010
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Фев 02, 2023 12:18 am

8/87
ЭЛЕКТРОНИКА БК-0010 ДОМА И В ШКОЛЕ
Как бы ни увеличивался выпуск и ни расширился в дальнейшем ассортимент отечественных персональных ЭВМ, компьютер Электроника БК-0010 наверняка останется в нашей памяти - это первая вычислительная машина, поступившая в магазины для широкой продажи. Говорят, что среди производственников, обсуждавших целесообразность серийного выпуска БК, высказывались сомнения: будут ли покупать этот компьютер "за наличные"? Стоит он немало - 600 рублей, то есть во много раз дороже среднего микрокалькулятора, а вкус к работе с персональными компьютерами у нас пока еще не привился. К тому же возможности БК довольно скромны в сравнении с тем, что предлагают пользователю хорошие зарубежные и отечественные микроЭВМ. Это, кстати, подчеркнуто и в самом названии, вместо устоявшегося уже "ПК" - "персональный компьютер" мы видим аббревиатуру "БК" - "бытовой компьютер", то есть ЭВМ для дома, для игр, развлечений, создания личного архива, картотеки, справочника, решения сравнительно простых задач. Правда, за рубежом ЭВМ такого же класса спокойно именуют "персональными компьютерами", хотя некоторые из них по ряду важных показателей уступают нашему БК.

В середине 1984 года первые БК-0010 появились на прилавках фирменных магазинов "Электроника" в Москве и Ленинграде, и все сомнения относительно спроса были сразу же развеяны - желающих иметь дома компьютер оказалось так много, что покупателю приходилось по нескольку месяцев ждать своей очереди. Эта невеселая ситуация сохраняется и сейчас, когда выпуск БК-0010 заметно увеличился. Чтобы удовлетворить спрос на личный компьютер, нужно, видимо, от продажи нескольких тысяч БК в год перейти к десяткам или даже сотням тысяч.

Первое, что должен узнать потенциальный пользователь БК-0010 о своем будущем приобретении, так это то, что компьютер работает в комплекте, который уже можно считать классическим: вместо дисплея к нему подключается телевизор, а устройством внешней долговременной памяти служит кассетный магнитофон. Продается БК-0010 в комплекте только с блоком питания, предполагается, что у пользователя уже есть телевизор и магнитофон. К сожалению, в комплект не входит модулятор для подключения компьютера к антенному входу телевизора (см. 7/87). Предполагается, что компьютер будет подключаться непосредственно ко входу видеоусилителя телевизора. Разъем для подключения к этому видеовходу имеется далеко не у всех телевизоров, и пользователю нередко приходится самому устанавливать этот разъем либо прибегать к помощи радиомастеров. Сейчас для модулятора узаконен один из каналов дециметрового ТВ-диапазона, и, видимо, вскоре модулятор будет включен в комплект БК.

О некоторых особенностях и возможностях микрокомпьютера БК-0010 журнал уже писал (8,10,12/86 и 4/87), а в нашем коротком рассказе для будущего пользователя представлены некоторые общие сведения о компьютере и программах для него.

Главная, пожалуй, особенность компьютера БК-0010 - это использование 16-разрядного микропроцессора в отличие от 8-разрядных процессоров в большинстве машин подобного класса. Иными словами, БК-0010 обрабатывает информацию вдвое более крупными порциями, чем его восьмиразрядные коллеги, что, в частности, решающим образом влияет на реальное быстродействие машины.

Адреса в компьютере БК-0010 тоже 16-разрядные, то есть в каждом адресе 16 двоичных знаков (единиц и нулей), 16 бит, или, иначе, 2 байта. Шестнадцатиразрядные адреса, кстати, мы встречаем и у многих 8-разрядных машин: когда говорят о разрядности ЭВМ или процессора, то подразумевают разрядность операндов, то есть длину тех "слов", с которыми работает машина, а разрядность адреса - это совсем другая характеристика. При 16-разрядной адресации, если не прибегать к ухищрениям, можно иметь примерно 64 тысячи разных адресов, разных, непохожих комбинаций единиц н нулей. В компьютере БК-0010 в каждую ячейку памяти с самостоятельным адресом укладывают половину 16-разрядного слова, то есть один байт, и общая емкость памяти составляет 64 килобайта - 64К. Вся память распределена следующим образом: по 32К отдано постоянному н оперативному запоминающим устройствам - ПЗУ и ОЗУ; две части ПЗУ по 8К называют сменными, они включаются в машину через многоконтактные разъемы в прикрытом крышкой небольшом углублении на лицевой панели. Одна из микросхем ПЗУ пользователя емкостью ВК входит в комплект машины и еще на заводе установлена в свой разъем - в ней записан язык программирования Фокал, с которым работает БК-0010. Второй разъем пока свободен, то есть реальная емкость ПЗУ пока составляет 32-8=24К. Пользователь может применить имеющийся резерв для того, чтобы ориентировать машину на решение каких-либо специальных задач с помощью самостоятельно изготовленного блока ПЗУ на 8К.

Из общей емкости ОЗУ, равной 32К, отдано в распоряжение пользователя 16К, а остальные 16К используются для хранения информации, отображаемой на экране. Вывод рисунков возможен в нескольких режимах, в частности, изображение может формироваться из 512*256=135072 точек или из 256*256=67536 точек. Во втором режиме точка имеет уже не две градации яркости "светлая, темная", а как бы четыре и в этом случае о каждой точке в ОЗУ нужно хранить не один бит ("темная" - "светлая") информации, а два бита. Компьютер дает возможность использовать этот дополнительный бит для получения не кажущихся (светятся одна или две соседние точки, образующие элемент картинки), а истинных градаций яркости, а также для формирования цветных картинок. В последнем случае нужно подать три сигнала из компьютера на так называемый RGB-вход цветного телевизора, то есть на усилители, управляющие отдельно "красным", "зеленым" и "синим" лучами кинескопа. Для этого пока, к сожалению, нужно произвести некоторые изменения в схеме компьютера и телевизора, хотя и несложные, но требующие определенной квалификации.

Вывод текстовой информации осуществляется также в двух режимах - 25 строк (одна из них служебная) по 64 символа в каждой (символ появляется в растре из 8*8=64 точки) или по 32 более широких символа (16*8=128 точек). Предусмотрен режим, при котором пользователь для решения сложных, громоздких задач получает 28К из общих 32К оперативной памяти, а для экрана остается 4К. Этого вполне достаточно, если нужно вывести на экран сравнительно небольшой объем информации, скажем, несколько строк окончательного ответа.

Подключаясь к единой многопроводной внутренней магистрали компьютера, можно сравнительно легко встраивать его в различные системы управления, демонстрируя немалые производственные возможности бытового компьютера. Из многих аппаратных особенностей БК-0010 отметим еще одну - в компьютере есть простейший аналогово-цифровой преобразователь (АЦП), с его помощью, например, речевой сигнал, поступающий с микрофона, превращается в наборы двоичных чисел, запоминаемых в ОЗУ (см. 10/86). В нужный момент эти числа извлекаются из памяти и проходят обратное преобразование в цифро-аналоговом преобразователе (ЦАП), то есть вновь превращаются в речевой сигнал, который воспроизводится встроенным звукоизлучателем. Таким способом компьютер может "голосом" комментировать свои действия в играх или обучающих программах.

Конструкция БК-0010 достаточно проста - она состоит из двух печатных плат, установленных в плоском пластмассовом корпусе размерами 370*180*70мм. На одной из плат все микросхемы, основная часть всей электроники БК, на другой плате - клавиатура; при нажатии на клавишу ее металлическая мембрана касается токо-проводящих дорожек на печатной плате и осуществляет нужное соединение. Сами клавиши не снабжены пластмассовыми толкателями, а лишь закрыты общей прозрачной пленкой - шильдом. Под пленкой лежит бумажная вкладка с обозначениями всех клавиш, и цветом выделены рабочие зоны - буквы, цифры, управляющие клавиши. Такая клавиатура проста, позволяет оперативно менять обозначение клавиш, но имеет ряд недостатков. В частности, на ней трудно работать слепым методом - пальцы лишены каких-либо "точек опоры", оператор быстро теряет ориентацию и переходит на соседние поля. В свое время разработчики самого дешевого в мире компьютера "Синклер ZX-B0" вынуждены были отказаться от подобной простой клавиатуры, новую клавиатуру начинают применять и в БК-0010. Уже сейчас его школьный вариант БК-0010Ш имеет клавиатуру с отдельными пластмассовыми кнопками. Кстати, многие пользователи, купившие первые модели компьютера, сами наклеили на клавиатуру пластмассовые кубики, имитирующие кнопки.

Семейство компьютеров БК можно условно разделить на три ряда: два уже существуют и развиваются, третий - проектируется. При этом конструкторы с благодарностью рассматривают все предложения (их можно направлять в адрес редакции журнала), связанные с выбором параметров будущего бытового компьютера.

Матчасть диванного танкиста - Страница 3 87080110

В ряд БК-0010 входит одна из его последних модификаций - БК-0010.01. Ее важные отличительные особенности - новая клавиатура, полное использование всех адресов, выделенных для ПЗУ, и размещение в ПЗУ упрощенного аналога популярной сейчас в Японии версии Бейсик-MSX. Одно из его достоинств - встроенный редактор текстов, он, в частности, помогает быстро вносить изменения в программу. Важно отметить, что транслятор, то есть "переводчик" Бейсик-MSX,- это не интерпретатор (поочередно переводит команды в машинные коды и тут же их исполняет) и не компилятор (переводит программу в машинные коды, записывает их в память, а затем быстро исполняет одним "залпом"), что имеет свои достоинства и недостатки - интерпретатор, в частности, позволяет легче отлаживать программы, компилятор - быстрее их исполнять. В компьютере БК-0010.01 используется, если можно так сказать, компилятор с элементами интерпретатора, что позволяет в какой-то мере получить достоинства и того, и другого. В частности, такой необычный "гибрид" языка по столь важному параметру, как быстродействие, ставит БК-0010.01 в ряд популярных зарубежных домашних компьютеров. В то же время машине требуются большие, чем для "чистого" интерпретатора, объемы памяти, а этим ресурсом БК, мягко говоря, не слишком богат.

У языка Фокал, который долгое время был единственным для БК-0010, немало поклонников и противников. Впрочем, все они сходятся в одном: два основных недостатка Фокала - это слишком медленное исполнение программ и отсутствие стандартных средств, которые позволяли бы использовать вместе с программой на Фокале ее фрагменты, написанные в кодах.

Программное обеспечение, которое прилагается к компьютеру, пока вполне умещается на одной кассете. Но, во-первых, уже значительно расширился набор программ, разработанных по заказу завода-изготовителя (хотя, к сожалению, еще не ясно, как эти программы будут продаваться), и, во-вторых, более 400 программ создали сами пользователи. В числе заказных программ есть Форт и Ассемблер - языки программирования, которые можно загрузить в ОЗУ с кассетного магнитофона, есть полезные для студента и исследователя программы управления лабораторным оборудованием, позволяющие к тому же вести статистическую обработку полученных результатов.

Матчасть диванного танкиста - Страница 3 87080210

Чтобы облегчить составление программ, были созданы специальные вспомогательные программы, которые принято называть системными. "Отладчик", например, помогает писать программы в машинных кодах, "Ассемблер" - основной язык программистов, которые хотят максимально использовать потенциальные возможности БК; "Дисассемблер" превращает кусочки программы, записанной в машинных кодах, в запись, принятую в ассемблерах; "Фокод" - программа, исправляющая один из недостатков Фокала, с ее помощью можно встраивать в программу на Фокале фрагменты, записанные в машинных кодах.

Кроме системных, пользователи создали множество деловых программ: словари, записные книжки, телефонные справочники, которые способны сами набрать нужный номер. Несмотря на то, что создание интересной игровой программы - сложная задача даже для квалифицированного программиста, именно эти программы уже появились в довольно большом количестве. Среди них так называемые динамические игры - "Форт" и "Тетрис", где требуется быстрота реакции и четкое логическое мышление. Есть и традиционные игры - "Шахматы", "Реверси", "Крестики-нолики". Музыкальные возможности БК-0010 представляет программа "Меломан", с помощью которой можно подбирать достаточно сложные мелодии, редактировать их, изменяя темп и громкость звука. Результат можно сохранить в виде набора данных, записанного на магнитофон. Лучшая программа из тех, что позволяют компьютеру "разговаривать",- это "Голос 2". Программа, неплохо демонстрирующая графические возможности БК,- "Компьютерный мир", она выводит на экран изображение домика, дерева, облака и другие элементы "пейзажа", и дети, не зная языков программирования, за несколько минут разбираются, как манипулировать фрагментами изображения, создавая свой собственный вариант картинки.

Основой второй ветви семейства БК станет БК-0011, он ожидается в продаже в начале будущего года и будет стоить в полтора-два раза больше предыдущей модели. Это связано с существенными отличиями новой машины. Емкость ее ОЗУ, в частности, увеличена до 128К, емкость ПЗУ - до 40К с возможностью подключения внешнего блока еще на 32К. В компьютере много интересных для пользователя особенностей, например, два отдела (две страницы) экранной памяти ОЗУ: один из них формирует текст или картинку на экране, при этом во втором одновременно готовится следующая картинка, что, конечно, делает общение с машиной более динамичным. К компьютеру через внешний разъем можно подключать небольшие дополнитепьные блоки, в них могут быть микросхемы, расширяющие ПЗУ, устройства для быстрой проверки компьютера, для включения его в локальную (местную) сеть ЭВМ, для сопряжения с накопителем на магнитных дисках.

Компьютеры БК-0010 и БК-0011 имеют модификации с индексом "ш" - "школьные". Их появление связано с тем, что с прошпого года в школьные программы без долгих дискуссий введен курс информатики. Промышленность не была готова к этому событию (хотя сама допжна была его готовить или по крайней мере предвидеть), и пришлось создавать учебные классы для курса информатики на основе бытового компьютера. В разных городах существует примерно 1.5 тысячи классов, где на рабочем месте ученика (РМУ) используются БК-0010Ш, а на рабочем месте преподавателя (РМП) известный диалогово-вычислительный комплекс ДВК-2М, в состав которого входят накопитель на гибких магнитных дисках и печатающее устройство. Преподаватель со своей машины может общаться сразу со всеми компьютерами класса или только с одним, может вводить в эти компьютеры информацию или, наоборот, получать информацию от них. Пока созданы типовые компьютерные классы (их официальное название - КУВТ, комплект учебной вычислительной техники) на 12 РМУ, но уже готовятся большие комплексы, где в единой учебной сети смогут работать более 60 машин. Придут в класс и новые машины, разработанные специально для школы, в частности КУВТ "Корвет". Многое делают для совершенствования учебных классов и сами пользователи. Ими созданы такие, например, системы, как разработанная под руководством Ю.Я.Кузьмина "Рига", позволяющая в классе, сформированном только из компьютеров БК-0010, проводить занятия по основам устного счета, арифметики, правописания, химии, вычислительной техники, музыкальной грамоты, географии.

Матчасть диванного танкиста - Страница 3 87080310

Опыт использования компьютеров БК-0010 в школе позволяет сделать ряд важных выводов (приятных и не очень приятных) как о самой технике, так и о взаимодействии школьника с компьютером. Пытаясь составить собственное мнение о существе дела, мы посетили несколько школ, беседовали с учениками и с учителями. Открывшуюся картину лучше всего, пожалуй, отображает факт, на который обратила наше внимание Галина Семеновна Ганюшевская, директор московской 72-й специальной средней школы: ученики пятых-восьмых классов, у которых нет пока уроков информатики, как великое благо выпрашивают разрешение произвести уборку в компьютерном классе, с тем чтобы попутно хоть немного поработать с вычислительной машиной.
А.БОЙКО, Р.ЧИКОРУДИ
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Фев 03, 2023 12:34 am

8/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Давным-давно прошли новогодние праздники, а тревожные письма, вызванные нашим новогодним выпуском (12/86), все еще идут и идут. В том выпуске все публикации были посвящены персональным компьютерам, и наши старые читатели забеспокоились: неужели отныне микрокалькуляторам нет больше места на страницах раздела!
Такие опасения безосновательны. Микрокалькуляторы остаются столь же полноправными объектами нашего внимания, как и персональные компьютеры. Но в то же время очевидно: писать о микрокалькуляторах в той же манере, как и в первые годы нашего раздела, уже нельзя. Шире стал круг наших читателей, неоднороднее их состав: есть тут и виртуозы программирования, и новички, есть "чистые" любители, и те, кто использует карманные ЭВМ в сугубо практических целях.
Как в таких условиях наилучшим образом удовлетворять запросы наших читателей? Ждем от них совета и помощи.

КАЛЬКУЛЯТОР-ВОЛЬТМЕТР
Аналого-цифровой преобразователь, встроенный в "Электронику МК-64" или подключаемый к "Электронике МК-46". позволяет измерять с помощью этих микрокалькуляторов напряжение в цепи электротока в диапазоне от 0 до +9.99В с погрешностью не более +/-0.03В.

Матчасть диванного танкиста - Страница 3 87081110

Калькулятор включается в цепь, как показано на схеме, в его память вводится приведенная там же программа, а в 9-й регистр - код эксперимента 11000000, то есть число, характеризующее количество измеряемых физических величин, преобразованных в электрическое напряжение, и режим работы МК. После этого достаточно нажать клавишу "Пуск", и на индикаторе, в последних его разрядах, высветится значение напряжения. Для повторного измерения надо вновь нажать клавишу "Пуск". Напряжение, выходящее за границы указанного диапазона, нужно предварительно уменьшить в необходимое число раз с помощью резистивного делителя. В программе следует предусмотреть умножение измеренного значения на коэффициент понижения к. Следует также учесть, что во столько же раз увеличивается и погрешность измерения.

Матчасть диванного танкиста - Страница 3 87081210

Для измерения сопротивления можно воспользоваться второй схемой с включенным в нее известным сопротивлением Rэт. Его значение должно быть предварительно занесено в четвертый регистр, а код эксперимента, равный 21000000,- в девятый. В программную память вводится приводимая на схеме программа. Значения напряжений U13 (между точками 1 и 3) и U23 (между точками 2 н 3) при выполнении программы автоматически помещаются во второй и третий регистры.

После нажатия клавиши "Пуск" на индикаторе высветится значение измеренного сопротивления в тех же единицах, что и Rэт.

Матчасть диванного танкиста - Страница 3 87081310

Значение тока I можно определить, измерив сопротивление R и напряжение U согласно формуле U = IR. Можно поступить и иначе, воспользовавшись третьей схемой, в которую включается известное сопротивление Rэт. На его величину по введенной в калькулятор программе делится измеряемое на этом резисторе напряжение. Такой способ проще, так как предусматривает лишь однократное измерение напряжения, однако он менее точен, поскольку включение Rэт вносит погрешность в определение тока. Вместе с тем, если Rэт много меньше R, эта погрешность будет незначительной.
Е.КУЗНЕЦОВ, В.ОКСМАН (г.Зеленоград)

ПРОВЕРЬТЕ СВОЙ ВЕС
По данным статистики, более половины людей, населяющих Землю, имеет избыточный вес. Но что считать нормальным, а что ненормальным?

В медицине существует понятие оптимального веса человека, который определяется из учета целого ряда факторов: пола, роста, возраста, телосложения, особенностей работы желез внутренней секреции и других. Так, например, считается, что наибольший вес у человека бывает в возрасте 40 лет; до этого он увеличивается на 0.25 процента в год, а после таким же образом убывает. Конечно, это выполняется весьма приблизительно, а для детского и юношеского возраста такое представление и совсем не годится. Определение оптимального веса приходится вести с помощью разнообразных формул, номограмм и таблиц. Ниже предлагается программа приближенного расчета оптимального веса, основанная на использовании формулы Брока, с учетом возраста и типа телосложения, задаваемого размером носимой одежды (предвижу возражения по поводу того, что этот размер зависит от полноты):

00. ПА 01. F() 02. ПВ 03. F() 04. ПС 05. x-y 06. Fx>=0 07. 19 08. 4 09. 8 10. П9 11. x-y 12. 6 13. * 14. 3 15. 9 16. 2 17. БП 18. 29 19. 5 20. 0 21. П9 22. x-y 23. /-/ 24. 8 25. * 26. 6 27. 9 28. 6 29. - 30. ПД 31. ИП9 32. 2 33. - 34. ИПВ 35. x-y 36. - 37. Fx>=0 38. 46 39. ИП9 40. ИПВ 41. - 42. Fx>=0 43. 51 44. БП 45. 59 46. 2 47. 5 48. /-/ 49. БП 50. 53 51. 2 52. 5 53. F1/x 54. 1 55. + 56. ИПД 57. * 58. ПД 59. ИПА 60. 4 61. 0 62. - 63. Fx>=0 64. 66 65. /-/ 66. 4 67. 0 68. 0 69. F1/x 70. * 71. 1 72. + 73. ИПД 74. * 75. ПП 76. 86 77. ИПС 78. x-y 79. - 80. С/П 81. FBx 82. / 83. 3 84. F10X 85. * 86. 7 87. F10X 88. + 89. FBx 90. - 91. 1 92. 0 93. / 94. С/П 95. В/0.

Матчасть диванного танкиста - Страница 3 87081410

Для расчета оптимального веса с помощью программы нужно задать рост человека в сантиметрах (для мужчин показатель роста должен быть со знаком "минус"), затем его реальный вес в килограммах, размер одежды и возраст: рост ^ вес ^ размер ^ возраст В/0 С/П. По истечении 18-20 секунд на индикаторе высветится оптимальный вес в килограммах. Вновь нажав С/П, узнаем разность между реальным и оптимальным весом. Снова С/П, и на индикаторе - процент разности с соответствующим знаком. По этому показателю в основном и судят об отклонениях в весе: отклонение в пределах 8-10 процентов - вес в норме; вес увеличен на 10-30 процентов - ожирение первой степени; 30-50 процентов - второй степени; 50-100 процентов - третьей степени; свыше 100 процентов - четвертой степени. Программа подходит только для людей старше 20 лет.
Г.МАРИНСКИЙ (г.Каунас)

[ УЗЕЛКИ НА ПАМЯТЬ
Если исходный аргумент вводится с клавиатуры или по программе в показательной форме, то команда /-/ после одноместной операции приведет к неверному результату вычислений по программе. В то же время ответ будет верным в режиме пошаговых вычислений ПП. Так, если ввести программу 00. 1 01. ВП 02. 2 03. Fx2 04. /-/, то вместо -10000 получится 0.01. Результат расчета не изменится, если по адресу 03 записать Fsqr или F1/x.
В.РУБЧИНСКИЙ (г.Москва) ]

Бывает, что сразу несколько наших читателей обращаются к программированию одной и той же задачи. Когда они сообщают нам о своих планах, мы помогаем им наладить взаимное сотрудничество. Успешный результат совместной работы представляют ниже Е.Журавлев из Москвы и А.Мержеевский из Житомира, задумавшие воспользоваться микрокалькулятором при фотосъемке.

С ФОТОАППАРАТОМ И МИКРОКАЛЬКУЛЯТОРОМ
Вы хотите получить снимок с некоторого изображения или небольшого предмета, имеющего размеры А*В, с глубиной резко изображаемого пространства d (см. рисунок). Для этого нужно установить аппарат на определенном расстоянии от плоскости изображения и выполнить точную наводку объектива на резкость.

Матчасть диванного танкиста - Страница 3 87081510

Если у вас нет возможности контролировать резкость визуально, вам поможет предлагаемая программа. Занесите в адресуемые регистры исходные данные, как указано в верхней половине таблицы, нажмите клавиши В/0, С/П, и через некоторое время на индикаторе появится число, задающее расстояние С от плоскости съемки до задней крышки фотоаппарата. Остальные искомые величины можно вызвать на индикатор согласно нижней половине таблицы и использовать в приемлемом виде (например, из значений диафрагмы, указанных на фотоаппарате, следует выбрать ближайшее к расчетному; если же расчетное значение равно - 8, это значит, что глубина резкости снимка будет меньше заданного d).

При работе с удлинительными кольцами методику вычислений лучше построить так: задать исходные данные, принимая значения l и D равными нулю, и пустить программу на счет. В результате будет определено необходимое удлинение объектива l' как длина удлинительного кольца при установке объектива на бесконечность. Поскольку реальные кольца вряд ли будут точно совпадать по длине с полученной величиной, то выберем кольцо с ближайшей меньшей длиной и зададим ее программе (остальные вводимые данные менять не нужно, они сохраняются от счета к счету). Запустив программу на счет, вы можете узнать, на сколько миллиметров нужно выдвинуть объектив, используя его собственный ход, при установке кольца с длиной l. Если под рукой нет штангенциркуля, то можно использовать показание шкалы метража объектива, хранящееся в регистре 8. Если на индикаторе загорится ЕГГОГ, то это значит, что длина удлинительного кольца выбрана слишком большой и не обеспечивает съемку в нужном масштабе.

Меняя l или А, вы с помощью программы добьетесь приемлемого варианта установки фотоаппарата. Те, кто имеет раздвижной тубус, могут сразу производить установку, ориентируясь на значение l'.

Программа избавит от многих хлопот также владельцев зеркальных камер, позволяя "проиграть" всю ситуацию на карманной ЭВМ без многократных проб по установке камеры при выборе масштаба съемки.

00. ИПА 01. 3 02. 6 03. / 04. П9 05. 3 06. F10X 07. ^ 08. ИП2 09. / 10. ИП5 11. + 12. / 13. П0 14. x-y 15. / 16. П6 17. ИП4 18. - 19. П7 20. Fx!=0 21. 36 22. Fx<0 23. 26 24. ВП 25. , 26. ^ 27. ИП0 28. + 29. FBx 30. * 31. x-y 32. / 33. 3 34. F10X 35. / 36. П8 37. ИП0 38. ИП9 39. F1/x 40. FBx 41. + 42. 2 43. + 44. * 45. ИП3 46. + 47. 3 48. + 49. ПС 50. ИП1 51. 1 52. 5 53. * 54. ИП9 55. ИП9 56. 1 57. + 58. * 59. / 60. ПД 61. 9 62. - 63. Fx>=0 64. 68 65. 8 66. /-/ 67. ПД 68. ИП9 69. F1/x 70. 1 71. + 72. Fx2 73. ПВ 74. ИПС 75. С/П.

Матчасть диванного танкиста - Страница 3 87081610

Е.ЖУРАВЕВ (г.Москва), А.МЕРЖЕЕВСКИЙ (г. Житомир)

САМ СЕБЕ МАСТЕР
Усовершенствования микрокалькулятора, выполненные своими руками,- нужно ли рассказывать о них на страницах рубрики? И.Вязовский в статье "Останавливать ли мгновение" решительно высказывается против, опасаясь за "здоровье" машинки, сравнивая рационализатора с громилой, вооруженным кувалдой. Я не буду спорить с этими утверждениями, но кратко расскажу о себе. Я радиоинженер. Микрокалькуляторы помогают мне с 1980 года. Вначале "Б3-21", затем "Б3-34" и, наконец, долгожданный "МК-52". Все эти машинки я не раз совершенствовал, часто пользовался при этом материалами раздела "Человек с микрокалькулятором". Теперь у моих карманных ЭВМ есть и "голос" ("Наука и жизнь" 12/84), и "пауза" (10/85), и внешняя клавиатура. В два раза удалось повысить быстродействие. Очень помогает в работе "всего один диод" (4/85). Первым двум решениям обязан журналу, остальные разработал самостоятельно.

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

Знакомые советуют мне сообщить о моих усовершенствованиях конструкторам микрокалькуляторов. Но есть ли смысл затевать переписку с ними? Пока бумажное колесо совершит оборот, на прилавках сменится не одна модель. Хочу верить, что разработчики микрокалькуляторов внимательно читают раздел "Человек и компьютер" и не оставляют без внимания лучшие предложения рационализаторов из разных уголков страны.
А.ОСТРОВСКИЙ (г.Москва)

МУКИ ТВОРЧЕСТВА
Поручу стихи машине!
Сядем рядом, тет-а-тет.
Ничего, что в ней души нет -
Есть зато авторитет.
Я составила программу,
Без сомнений поместив
Все слова, что знала, прямо
В динамический массив.
В четком ритме алгоритма
По команде GO TO
Та в строку вольется рифма,
Что найти невмоготу.
Труд простого программиста
Далеко не так уж прост!
Раз не менее, чем триста.
Выдавался мне АВОСТ.
Стих готов. Увы, без сна я.
Настроение - кошмар:
Кто же автор?! Ох, не знаю,
Получу ли гонорар...
Л.КОНДРАТЬЕВА (г.Ленинград)

ПРОГРАММЫ ПЕРВОЙ НЕОБХОДИМОСТИ
Спектр читателей нашего раздела, интересующихся персональными компьютерами, обширен. Среди них много новичков, осваивающих программирование по публикуемым у нас материалам. Но в то же время среди них немало профессионалов. Они с полным правом претендуют на то, чтобы раздел предоставлял возможность общения также и им. В частности, они предлагают публиковать прикладные программы для решения наиболее часто встречающихся задач - программы первой необходимости, как называет их москвич С.Полещук.

Помещаемая ниже программа москвича К.Лапина для "Искры-226" позволяет решить градиентным методом систему линейных алгебраических уравнений с разреженной матрицей, насчитывающих сто и более неизвестных. Машине достаточно сообщить только ненулевые коэффициенты с указанием номеров уравнения и неизвестного (строки 90-120).

Матчасть диванного танкиста - Страница 3 87081710

Просим читателей написать нам, какие прикладные программы хотелось бы им увидеть на наших страницах. Программы, собравшие наибольшее число заявок, будут публиковаться раньше прочих.

"Хочу предложить,- пишет киевлянин В.Куций,- чтобы в разделе "Человек и компьютер" публиковались находки в программировании на разных типах ЭВМ, всевозможные "маленькие хитрости", которые узнаешь не за один месяц работы на машине".

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

"Жаль, что ни одна мало-мальски серьезная программа не уместится на журнальной странице,- сетует В.Тужилкин из г.Долгопрудного Московской области.- Но эта трудность в какой-то мере преодолима. В журнале можно публиковать упрощенный, так сказать, журнальный (демонстрационный) вариант программы. Знаток разовьет ее основную идею для вполне серьезного применения".

Пример такой программы, присланный В.Тужилкиным. помещаем ниже с комментариями автора.

1024 СОВЕТА
1. Оградить себя от ошибок ввода с клавиатуры можно приемом двойного ввода информации: одно и то же число машиной запрашивается дважды, полученные данные присваиваются двум разным переменным: при их несовпадении условный оператор повторяет запрос.

2. Если при отладке программы на Бейсике нужно узнать, что произойдет, если из нее изъять какой-то оператор, то его необязательно вымарывать. Достаточно перед ним поставить слово REM. Затем, если это слово убрать, программа восстановится.

3. Перед вводом списка в ЭВМ нелишне пересчитать его элементы и сообщить полученную цифру машине. Это позволит по завершении ввода быть уверенным, что ни одна строка не пропущена и ни одна не введена дважды.

4. Если в цикле необходимо выводить на дисплей промежуточные результаты и задерживать расчет для их просмотра и анализа, то соответствующую команду задержки лучше помещать до, а не после операторов печати. Этим можно существенно ускорить расчет, так как человек и машина будут работать параллельно, а не последовательно.

5. Чтобы получить контрастный листинг, не прибегая к жирной лейте, которая быстро эабивает головку принтера, нужно текст программы отпечатать дважды по одному и тому же месту. При матричной печати почти неизбежный сдвиг бумаги не страшен и даже желателен: точки, образующие символы, при этом сольются в линии.

6. Досрочно выйти из цикла с параметром можно и без перехода к метке, поставленной вне тела цикла (что нарушило бы структурированность программы). Для этого достаточно параметр цикла сделать больше (в иных случаях меньше) его конечного значения и передать управление программой в конец цикла.

7. Досрочно прервать выполнение программы, не нарушая ее структурированность, можно, запрограммировав на одном плече альтернативного блока аварийную ситуацию - деление на нуль, например.

8. В программах на Бейсике подпрограммы лучше размещать, руководствуясь правилом: подпрограммы, несущие вспомогательные Функции (например, обслуживающие периферию), помещать в конец, а те, которые составляют суть расчета,- в начало основной программы, так они быстрее будут разысканы оператором перехода на подпрограмму.

ГДЕ НАЧАЛО ТОГО КОНЦА...
При решении некоторых задач, в частности из курса электротехники, часто требуется найти значение каких-то параметров, которые зависят от других параметров, те - от третьих и т.д., причем формул для непосредственного вычисления выходных параметров по входным вывести не удается. И поэтому не сразу понимаешь, в какой последовательности нужно вычислять промежуточные параметры.

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

В соответствии с этой идеен и создана предлагаемая программа. Вводимые параметры задаются в той же форме, в какой пишется оператор присваивания. Например:

А = В + С
Е = В - С
В = 124
С = 15

Ради упрощения и сокращения текста программы в ней приняты ограничения: имена параметров могут состоять только из одной латинской буквы; из арифметических знаков в правой части формул могут употребляться лишь плюс и минус; числовые константы могут быть только целыми числами без знака.

Матчасть диванного танкиста - Страница 3 87081810

Смысл некоторых переменных: R*(26) - массив правых частей формул; V(26) - массив значений переменных; F(26) - массив признаков, указывающих, вычислено значение параметра или нет.

Структура алгоритма - строки 10-20: начальная загрузка переменных программы; строка 40: ввод строки; если строка пустая, то выход из программы; строки 50-90: проверка введенной формулы на правильность; строка 100: занесение правой части введенной формулы в массив правых частей; строки 110-400: вычисление и печать значений всех тех параметров, для которых правая часть формул может быть вычислена; последний оператор строки 390: переход на строку 40.
В.ТУЖИЛКИН (г.Долгопрудный)

НЕ БОГИ ПРОГРАММЫ СОСТАВЛЯЮТ
Тем, кому даже простая программа на Бейсике кажется неразрешимой загадкой, а сам этот язык - тайной за семью печатями, полезно будет ознакомиться с письмом И.Еременко. Не имея доступа к ЭВМ, изучая Бейсик лишь в "Школе начинающего программиста" [9,11/86 и 1,3,5/87), он сумел шаг за шагом освоить этот язык. Его письмо, проникнутое деловитым оптимизмом, мы помещаем почти без сокращений.

Хорошо, доступно рассказал о Бейсике И.Данилов в "Школе начинающего программиста". Мне было понятно все. Но понять - еще не значит усвоить. С целью закрепления полученных знаний я решил для каждой задачи, встречающейся у И.Данилова, самостоятельно составлять программу на Бейсике.

Проверить, работают ли мои программы, я не мог - не имею доступа к ЭВМ. Я выбрал другой критерий правильности: сравнивал свои программы с теми, что приводились в журнале.

Думаю, когда в нашей организации появится своя ЭВМ (а при нынешних темпах компьютеризации ждать этого недолго, уверен), я освою ее значительно быстрее, чем те, кто пренебрегал возможностями заочного, "безмашинного" обучения в "Школе начинающего программиста".

По ходу занятий в ней я пришел вот к какому выводу. Трудно, решая задачу, выработать алгоритм ее решения. Но когда алгоритм составлен и нарисована его блок-схема, ее перевод в программу протекает почти автоматически, если усвоены основные правила такого перевода.

Хочу подтвердить свое мнение рассказом о том, как я составлял программу "вечного календаря" по той блок-схеме, которая помещена в 5/87.

Матчасть диванного танкиста - Страница 3 87081910

Честно скажу: когда я взглянул на схему, меня взяла оторопь от обилия ромбов и ветвлений. И все-таки я принялся за работу.

Не раз я перечеркивал написанное, пока не убедился: блок-схему надо перерисовать в предельно ясном виде, где ветви, выходящие из одного ромба, обязательно смыкались бы и не накладывались на ветви, отходящие от других ромбов. При этом каждая ветвь может содержать еще одно ветвление, и оно должно быть оформлено таким же образом. Собственно, это значит, что блок-схема должна состоять только из основных конструкций программирования, которые приводились на втором занятии по Бейсику (11/86).

Матчасть диванного танкиста - Страница 3 87082010

Смыкания ветвей я отметил жирными, хорошо заметными точками. Теперь в блок-схеме уже дважды повторялись прямоугольники, содержащие присваивания N=1 и N=2. Я предвидел, что в моей программе возникнут повторы, но не боялся этого: главное, чтобы программа была работоспособной.

После этого перевод блок-схемы в программу происходил поистине автоматически, подчиняясь одному триединому правилу: напиши через слово IF условие в ромбе - и поставь далее переход на некий символический адрес (Al, A2, и т.п.); запрограммируй ветвь "нет"- и поставь переход иа другой символический адрес, а адресом следующей строки замени предыдущий символический адрес; запрограммируй ветвь "да" - и замени адресом следующей строки второй символический адрес.

Составляя программу "вечного календаря", я без особых затруднений дошел до строки 180, где начиналось программирование ветвлений. Три ромба следовали на схеме один за другим, соединенные ветвями "нет". Зная, что каждый ромб порождает в программе оператор IF...GOTO, я написал:

180 IF M>2 GOTO A1
190 IF J2=0 GOTO A2
200 IF mod(J2,4)=0 GOTO A3

Приступил к программированию ветвей, отходящих от последнего ромба с равенством mod(J2,4)=0 в нем. Сначала запрограммировал ветвь "нет", состоящую лишь из одного присваивания N=2, в конце написал GOTO A4 - и тут увидел, что после выполнения этой ветви прямой путь ведет к самой последней точке смыкания ветвей. Именно ее, решил я, и стоит подразумевать под адресом А4. Отметил это на блок-схеме. С учетом этого упрощающего обстоятельства стал писать программу дальше. Запрограммировал ветвь "да", отметил, что A3=230, н дополнил этим равенством строку 200.

180 IF М>2 GOTO A1
190 IF J2=0 GOTO A2
200 IF mod(J2,4)=0 GOTO A3=230
210 N=2
220 GOTO A4
230 N=1

На этом закончилось программирование ветви "нет", отходящей от ромба с равенством J2=0. Автоматически, твердо помня триединое правило (... запрограммировал ветвь "нет" - поставь переход на символический адрес...), написал GOTO... Какой же адрес писать теперь? Ну, конечно же, все тот же А4, поскольку к этой точке блок-схемы и отсюда ведет прямой путь.

Аналогично я запрограммировал ветви "да", отходящие от ромба с равенством J2=0 и от ромба с неравенством M>2.

Теперь для завершения фрагмента с ветвлениями оставалось отметить, что A4=310, а затем убрать все символические адреса, оставив на их месте уже известные конкретные.

180 IF М>2 GOTO A1=300
190 IF J2=0 GOTO A2=250
200 IF mod(J2,4)=0 GOTO A3=230
210 N=2
220 GOTO A4
230 N=1
240 GOTO A4
250 IF mod(J1,4)=0 GOTO A5=280
260 N=2
270 GOTO A4
280 N=1
290 GOTO А4
300 N=0

Но не слишком ли длинным окажется этот фрагмент? Вот пара команд

230 N=1
240 GOTO A4

а ниже - совершенно такая же:

280 N=1
290 GOTO A4

На первую пару управление передается в строке 200. Почему бы не передавать его там на вторую пару? Тогда первая станет излишней. Аналогично две команды

210 N=2
220 GOTO А4

можно заменить одной

210 GOTO 260

В строке 260 и произойдет нужное присваивание.

Все эти исправления я учел в окончательном варианте фрагмента. Заменил также обозначение mod на FNM.

180 IF М>2 GOTO 300
190 IF J2=0 GOTO 250
200 IF FNM(J2,4)=0 GOTO 280
210 GOTO 260
250 IF FNM(J1,4)=0 GOTO 280
260 N=2
270 GOTO 310
280 N=1
290 GOTO 310
300 N=0

После этого я раскрыл журнал на странице, где помещена программа И.Данилова. У него этот фрагмент содержит столько же строк, что и у меня. Успех!- отметил я про себя. Правда, у меня в строке 200 написано равенство IF FNM(J2,4)=0, у И.Данилова же - неравенство IF FNM (J2,4)<>0. Но структура фрагмента, по существу, та же. Я внимательно просмотрел его еще раз - он точно соответствует блок-схеме. Может быть, И.Данилов прибегнул к неравенству из каких-то тонких соображений, известных ему в силу большого опыта, а мне неведомых. Но я ведь и не ставил своей целью создать первоклассную программу. Хватит с меня того, что она получилась правильной. К тому же И.Данилов, как признается он сам, в спешке пропустил две строки. А я программировал методично, придерживаясь строгих правил, и не забыл ничего.
И.ЕРЕМЕНКО (г.Никополь)

[ БЮРО СПРАВОК
Читатель Ю.И.Лаэаренко сообщает, что им разработана программа для управления цветной и черно-белой фотопечатью. С учетом параметров фотоувеличителя, фильтров, фотобумаги программа позволяет определять время выдержки для получения высококачественных снимков нужных размеров (227028, Кишинев, ул.Гросула, 9/1, кв.36. Лазаренко Юрий Иванович).

Студентам и инженерам может помочь программа, с помощью которюй выполняется построение эпюр поперечных сил, изгибающих моментов, поворота сечений и упругой линии статистически определимых балок. В основу программы положен метод начальных параметров, и предусматривается возможность задания до 9 типов нагрузок. Программа составлена для микрокалькулятора МК-61 (394026, Воронеж, пр.Московский, 6, кв.52, Ющенко Борис Иванович).

На кафедре технологии строительного производства Московского инженерно-строительного института им.В.В.Куйбышева разработано учебное пособие "Решение задач технологии строительного производства с применением микроЭВМ типа программируемых микрокалькуляторов", авторы С.В.Комиссаров, В.И.Теличенко. В пособии освещены темы: определение объемов грунта в земляных сооружениях, показателя средней дальности возки грунта, расчеты при обработке нарядов и определении заработной платы строительных рабочих и т.д. Для студенческих научно-исследовательских работ в пособие включены также программы для решения задач регрессионного анализа, систем линейных уравнений, численного интегрирования и поиска максимума-минимума функций одной переменной (129337, Москва, Ярославское шоссе, 26, МИСИ, кафедра технологии строительного производства).

Специалистам по контрольно-измерительным приборам и преподавателям технических училищ могут оказаться полезными программы, составленные читателем Н.И.Вагиным: вычисление градуировочной таблицы для расходомеров переменного перепада, вычисление ЭДС нормального элемента для семи значений температуры, вычисления сопротивления медной катушки потенциометра. (618426, Пермская обл., г.Березники, ул.Пятилетки, 99, кв.103, Николай Алексеевич Вагин) ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Фев 04, 2023 12:09 am

9/87
Еще одна ошибка тех времен: "Данные решают все". Помните, мы говорили о машинах РАМ Матчасть диванного танкиста - Страница 3 Leaf10ТЕМА #109, АБЗАЦ #1659Матчасть диванного танкиста - Страница 3 Leaf10 и РАСП? Там мы обсуждали "механические детали", позволяющие программе работать со сложными структурами данных. И в Бейсике мы видим пример простейшего механизма - наследника РАМ - массив данных, к элементам которого можно обращаться "косвенно" - по номеру. Паскаль довел этот механизм косвенности почти до совершенства, реализовав все пришедшие в голову разновидности упаковки данных, их имен и номеров. И даже "разреженные упаковки", к элементам которых можно обращаться по ссылке (номеру структурного фрагмента данных во всей памяти компьютера).

ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ПЯТНАДЦАТОЕ, где рассказывается о типах данных, используемых при программировании на Паскале. Их обилие позволяет лишь описать их; примеры их использования будут даны впоследствии.
Ведут занятие инженер Л.Ю.ИОФФЕ (Москва), кандидат технических наук И.М.КОНТОРОВИЧ (Витебск), кандидат физико-математических нацк Ю.В.ПОБОЖИЙ (Москва)

На прошлом занятии мы начали разговор о Паскале в плане его сравнения с Бейсиком. Уже тогда было отмечено, что приемы программирования в этих двух языках сильно различаются. Сравнивать Паскаль с Бейсиком путем простого сопоставления текстов программ можно только на очень простых примерах, которые, конечно, не способны передать дух Паскаля.

Чтобы представить этот язык сообразно с его характером, лучше всего обратиться к задачам, где вычислительная сторона второстепенна, а на передний план выступают вопросы хранения данных, доступа к этой информации и ее обработки.

Часто существо программирования связывается с умением конструировать операции, при помощи которых обрабатываются исходные данные решаемой задачи. Однако не менее важно умение организовывать сами данные, придавать нм такую структуру, которая уже сама по себе отражает природу задачи и с самого начала направляет мысль программиста по верному пути.

Электронные вычислительные машины изначально имели дело с числами. Впоследствии их обучили оперировать с наборами символов - словами, строками. На два этих типа данных в основном и ориентируются многие языки программирования - скажем, тот же Бейсик.

Важнейшая особенность Паскаля заключается в том, что он позволяет программисту самому конструировать новые типы данных, притом несколькими разными способами. Этому, собственно, и посвящено нынешнее занятие. Но прежде чем его начать, стоит вспомнить некоторые основные понятия.

С каждым элементом данных в Паскале связывается его имя, или идентификатор (если употребить программистский термин), по которому в программе производится обращение к этому элементу. Идентификатор должен начинаться с буквы и может быть составлен из букв и цифр, но без пробелов, так что приходится писать, скажем, не ДЕНЬ НЕДЕЛИ, а ДЕНЬНЕДЕЛИ. В некоторых диалектах в подобных случаях допустимо употреблять знак подчеркивания: ДЕНЬ_НЕДЕЛИ.

Есть диалекты, где имена различаются лишь по первым восьми символам, поэтому идентификаторы ВЫХОДНОЙДЕНЬ и ВЫХОДНОЙКОСТЮМ воспринимаются транслятором как одинаковые.

У многих трансляторов есть еще одна особенность: русские буквы интерпретируются как их латинские эквиваленты, помещенные на клавишах под соответствующими русскими. Из-за этого нельзя, например, употреблять идентификатор ЧИСЛО: вместо буквы Ч транслятор воспринимает помещенный на той же клавише знак, недопустимый в имени, и выдает сообщение об ошибке.

Попутно отметим, что алфавит Паскаля состоит из букв латинского и русского алфавитов, цифр от 0 до 9 и ряда специальных символов.

Матчасть диванного танкиста - Страница 3 87090110

Писать тексты программ можно лишь с использованием названных и показанных знаков.

Но вернемся к данным. Как в спорте действует жесткое правило: к соревнованиям допускаются только спортсмены, чьи фамилии перечислены в заявке, так и в программе, составленной на Паскале, можно оперировать лишь с данными, объявленными в разделе описании, то есть в самом начале программы.

Напомним, как выглядит эта вступительная часть.

Всякая программа начинается с заголовка. Например:

PROGRAM ПОИСКОПТИМУМА;

Здесь слово PROGRAM - служебное слово, извещающее транслятор о том, что весь текст, начиная с этого слова и кончая точкой, является программой, которую следует перевести на машинный язык. Заканчивается заголовок точкой с запятой.

Затем следуют описания. Это как бы словарь, который программист составляет для транслятора. Здесь перечисляются все идентификаторы, встречающиеся в программе, и для каждого указывается, что он собой представляет.

Описания располагаются в строго определенном порядке (впрочем, в некоторых диалектах прощаются его нарушения). Каждый раздел начинается с заголовка. Самым первым идет раздел описания меток, озаглавленный словом LABEL. Он может и отсутствовать. Наличествует он, если программист собирается использовать оператор GOTO. На прошлом занятии уже было высказано совершенно определенное отношение к этому оператору, так что повторяться нет смысла.

Затем под заголовком CONST описываются употребляемые в программе константы.

CONST ДЛИНА = 1000;
ПИ = 3.14159;
НАЗВАНИЕ = 'НАУКА И ЖИЗНЬ';

Обратите внимание: разделителем целой и дробной части числа служит десятичная точка, значения символьных констант заключаются в апострофы, и тогда в них возможны пробелы.

Этот раздел в программе тоже может отсутствовать. Впрочем, гораздо удобнее один раз написать ПИ = 3.14159 и потом писать ПИ, чем каждый раз выписывать цепочку цифр. Можно вводить константы через введенные ранее, например:

ДВАПИ=ПИ+ПИ

Следующий раздел описаний открывается заголовком TYPE. Он также может отсутствовать и появляется лишь тогда, когда программист желает использовать нестандартные типы данных. Об этом речь пойдет ниже.
Далее под заголовком VAR помещается описание переменных. Тут для каждой переменной указывается ее тип. Если в программе используется несколько переменных одного типа, их имена разделяются запятыми, после имени последней переменной ставится двоеточие и записывается их тип.

Если программист не ввел никаких нестандартных типов данных, то он вправе оперировать стандартными, понятными транслятору без пояснений:
INTEGER (целый) - это все целые числа, представимые в данной ЭВМ:
REAL (вещественный) - это все числа, которые могут иметь дробную часть и представимы в данной ЭВМ;
CHAR (символьный) - к значениям этого типа относятся символы, имеющиеся на клавиатуре дисплея;
BOOLEAN (логический) - тут всего два значения: TRUE (истина) и FALSE (ложь).

В таком случае раздел описания переменных краток, например:

VAR A, B12, ИНДЕКС: INTEGER;
СУММА, RESULT: REAL;
ПРИЗНАК: CHAR;
ВЕРНО: BOOLEAN;

Транслятор все время строго следит, чтобы переменным присваивались значения только их типа и чтобы определенные операции применялись только к данным определенных типов. Например, арифметические действия применимы к целым и вещественным числам, операции деления нацело DIV и взятия остатка MOD - только к целым. Логические операции относятся только к логическим значениям, а к символам нельзя применять ни тех, ни других операций.

Значения переменных, принадлежащих к каждому из этих четырех типов, можно сравнивать между собой операциями "больше", "меньше", "не больше", "не меньше", "не равно", "равно". Для числовых значений это очевидно, для логических обычно TRUE<FALSE (хотя в некоторых диалектах дело обстоит наоборот; впрочем, это соотношение почти не используется). Буквы обычно выстраиваются так: сначала прописные латинские в алфавитном порядке, потом в том же порядке строчные латинские, прописные русские, строчные русские.

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

Тот, кто впервые слышит о такой возможности, быть может, сочтет, что она служит удовлетворению каких-то изысканных прихотей программистов. Но тот, кто хорошо освоил Паскаль н задумывался над его характерными чертами, вероятно, согласится: разнообразие типов данных, допускаемых Паскалем, позволяет лучше выразить понятия, стоящие за решаемой задачей, а стало быть, эффективнее эту задачу решить, дает возможность транслятору более тщательно выявлять ошибки в программе.

ПЕРЕЧИСЛИМЫЕ ТИПЫ. Как мы поступаем, когда хотим кому-либо объяснить какое-то новое понятие? В простейшем случае перечисляем реальные объекты, охватываемые этим понятием. Как, например, мы поясняем, что такое время года? Это, говорим мы, весна, лето, осень, зима.

Так можно выразиться и на Паскале:

TYPE ВРЕМЯГОДА=(ВЕСНА, ЛЕТО, ОСЕНЬ, ЗИМА);

И если далее в разделе описания переменных встречается строка

VAR А: ВРЕМЯГОДА;

то в тексте программы переменная А может принять лишь одно из четырех значений: ВЕСНА или ОСЕНЬ, ЛЕТО или ЗИМА.

В программе с этим значением нужно оперировать, как с константой. Добавим, что такие значения нельзя складывать, вычитать, применять к ним прочие арифметические операции. Зато их можно сравнивать в отношении "больше - меньше". Они считаются упорядоченными в порядке их перечисления. И если написано

TYPE ПРЕДМЕТ=(РУССКИЙЯЗЫК,
ЧТЕНИЕ, ЛИТЕРАТУРА,
МАТЕМАТИКА, ИСТОРИЯ,
ПРИРОДОВЕДЕНИЕ,
БИОЛОГИЯ, ГЕОГРАФИЯ,
ФИЗИКА, ХИМИЯ, РИСОВАНИЕ.
ФИЗКУЛЬТУРА);

то автоматически БИОЛОГИЯ<РИСОВАНИЕ.

Разумеется, каждый волен перечислять предметы школьной программы в своем порядке, но в программе для ЭВМ этот порядок, раз выбранный, становится законом.

Для всех подобных значений, кроме самого последнего, можно указать следующее по порядку. Оно задается функцией SUCC. Например, SUCC(БИОЛОГИЯ)=ГЕОГРАФИЯ. Функция PRED определяет предшествующее значение того же типа: PRED(РИСОВАНИЕ)=ХИМИЯ. Оно существует для всех значений, кроме первого.

Обе эти функции определены и для целых чисел, и для символов, и для булевых переменных: SUCC('X')='Y', PRED('B')='A', SUCC(3)=4, PRED(7)=6.

В Паскале тип данных называется упорядоченным, если для каждого принадлежащего ему элемента (кроме первого) известен предыдущий элемент и вместе с тем для каждого (кроме последнего) известен последующий. Упорядоченные типы - это INTEGER, CHAR, BOOLEAN и все перечислимые.

ОГРАНИЧЕННЫЕ (ИНТЕРВАЛЬНЫЕ) ТИПЫ. В ряду данных упорядоченного типа можно выделять более узкий диапазон. Вначале указывается наименьший из принадлежащих ему элементов, затем ставятся две точки и указывается наибольший:

TYPE ОЦЕНКА=2..5;
TYPE DAY=1..31;
TYPE БУКВА='A'..'Z';

Эти описания опираются на стандартные типы данных, понятные транслятору без пояснений. Но возможности подобного приема шире. Предположим, что в описании типов была строка:

TYPE МЕСЯЦ=(ЯНВАРЬ, ФЕВРАЛЬ, МАРТ, АПРЕЛЬ, МАЙ, ИЮНЬ, ИЮЛЬ, АВГУСТ, СЕНТЯБРЬ, ОКТЯБРЬ, НОЯБРЬ, ДЕКАБРЬ);

После этого уместны такие описания:

TYPE ЛЕТНИЙ= ИЮНЬ..АВГУСТ;
TYPE ТЕПЛЫЙ=МАЙ..СЕНТЯБРЬ;

Как видим, одно и то же значение может относиться к нескольким ограниченным типам: МАЙ входит н в тип ЛЕТНИЙ, и в тип ТЕПЛЫЙ. Для перечислимых типов такое недопустимо: один и тот же идентификатор не может входить в разные перечислимые типы, описываемые в одной программе.

Переменные ограниченного типа принимают значения только в заданном диапазоне. Пусть, например, в программе описаны две переменные:

VAR М: МЕСЯЦ;
МЛЕТ: ЛЕТНИЙ;

Если программист напишет присваивание МЛЕТ:=СЕНТЯБРЬ, то транслятор сразу же определит, что это ошибка, и выполнение программы прекратится. Но правильность или неправильность присваивания МЛЕТ:=М неочевидна, покуда неизвестно значение М. В таких случаях проверка производится по ходу выполнения программы.

Переменные упорядоченных типов допускается использовать так, как в других языках программирования употребляются лишь целые числа: в качестве параметра цикла, индекса массива, признака в операторе выбора. В программе на Паскале можно встретить такие заголовки циклов:

FOR С:='А' ТО 'Z' DO...
FOR Д:=ПЯТНИЦА DOWNTO ПОНЕДЕЛЬНИК DO...

(Заметьте: при слове ТО параметр цикла нарастает, при слове DOWNTO - убывает).

МНОЖЕСТВА. Когда порядок элементов не важен, их можно задать с помощью такого типа данных, как множество.

Элементы множества должны принадлежать к какому-либо перечислимому типу или к нескольким таким типам. Таким образом, множество - это производный тип от некоторого перечислимого типа, который по отношению к данному множеству называется базовым.

Определение множества в программе производится в два этапа. Сначала определяется базовый для него тип, а затем с помощью оборота SET OF - само множество. Например:

TYPE КУПЮРА=(1, 3, 5, 10, 25, 50, 100);
TYPE СИМВОЛ=('0'..'9', 'А'..'Z');
TYPE БАНКНОТЫ=SET OF КУПЮРА;
TYPE БУКВЫ SET OF СИМВОЛ;

Есть в Паскале стандартный тип множества SET OF CHAR. В него могут входить символы, имеющиеся на клавиатуре дисплея. Определяя такое множество, базовый тип (CHAR) объявлять не нужно.

Для этого специфического типа в Паскале предусмотрены свои операции. Самая важная из них - проверка, входит ли какое-либо значение в то или иное множество.

Например, если переменная ХОББИ типа SET OF ВИДСПОРТА выражает множество видов спорта, которыми вы занимаетесь, то на вопрос "Занимаетесь ли вы плаванием?" отвечает проверка:

IF ПЛАВАНИЕ IN ХОББИ...

Пусть ХОББИ1 - множество видов спорта, которыми занимается один из супругов, ХОББИ2 - которыми занимается другой. Ответ на вопрос "Какими видами спорта занимаются у вас в семье?" представится объединением множеств ХОББИ1+ХОББИ2. Входит ли в них плавание, проверяется так:

IF ПЛАВАНИЕ IN ХОББИ1+ХОББИ2...

Надо иметь в виду, что число элементов в объединении не обязательно равно сумме количеств элементов в объединяемых множествах. Ведь они могут содержать общие элементы. Например: [ПЛАВАНИЕ, ЛЫЖИ, ТЕННИС]+[ЛЫЖИ, ШАХМАТЫ]=[ПЛАВАНИЕ, ЛЫЖИ, ТЕННИС, ШАХМАТЫ].

Пересечение множеств, обозначаемое знаком умножения *, может дать ответ на вопрос "Какими видами спорта занимаются оба супруга?". В пересечение входят общие элементы двух множеств: [ПЛАВАНИЕ, ЛЫЖИ, ТЕННИС]*[ЛЫЖИ, ШАХМАТЫ]=[ЛЫЖИ].

Известно понятие разности двух множеств. В ней содержатся элементы, которые входят в первое множество (так сказать, множество-уменьшаемое), но не входят во второе (вычитаемое):
[ПЛАВАНИЕ, ЛЫЖИ, ТЕННИС]-[ЛЫЖИ, ШАХМАТЫ]=[ПЛАВАНИЕ, ТЕННИС].

МАССИВЫ. Можно говорить о множестве предметов, которые изучаются в данном классе. Но если нужно знать расписание уроков в этом классе, множество уже ие подходит. Ведь в расписании существен порядок предметов, а элементы множества никакому порядку не подчинены. Кроме того, в расписании один и тот же предмет может повторяться несколько раз, а в множестве такого быть не может.

Расписание представляет собой сетку, которая так или иначе заполняется значениями определенного типа. Это пример структуры данных. Структуры бывают однородные: в них, как в расписании, все клетки одинаковы и заполняются однотипными значениями. Таковы массив и файл. Другой вид структуры, запись - комбинированный: клетки в нем разные и заполняются значениями разных типов.

Массив, запись, файл... Самое простое из этих понятий массив: совокупность однотипных значений, обозначаемых одним именем. Например, ДЕЛИТЕЛЬСОТНИ - это и 1, и 2, и 4, и 5, и 10, и 20, и 25, и 50, и 100. Конкретного представителя этой совокупности указывают индексом в квадратных скобках, обычно целым числом (хотя в таком качестве допустима переменная любого из упорядоченных типов, даже нестандартного, если он описан предварительно). Нумеруя названные делители, получаем: ДЕЛИТЕЛЬСОТНИ[1] это 1, ДЕЛИТЕЛЬСОТНИ[3] это 4 и т.д.

Для определения массива указывают сначала общее имя его компонент, потом через знак равенства и служебное слово ARRAY (строй, войско) пишут в квадратных скобках начальное и конечное значения индексов, разделяя их двумя точками, затем через служебное слово OF - тип, к которому относятся элементы массива. Если этот тип нестандартный, его надо описать заранее.

Ради примера укажем, как в разделе описаний и в теле программы могли бы фигурировать делители числа 100. Введем сначала тип ДЕЛИТЕЛЬ и с помощью оператора присваивания придадим значения компонентам массива ДЕЛИТЕЛЬСОТНИ:

TYPE ДЕЛИТЕЛЬ = ARRAY [1..9] OF INTEGER;
VAR ДЕЛИТЕЛЬСОТНИ: ДЕЛИТЕЛЬ;
ДЕЛИТЕЛЬСОТНИ[1]:=1;
...
ДЕЛИТЕЛЬСОТНИ[9]:=100;

Пример массива, индексы которого имеют нечисловую природу, нам позволит привести вводившиеся выше типы ПРЕДМЕТ и ОЦЕНКА. Изобразим в виде массива табель ученика. Вот как он выглядит в реальности:

Матчасть диванного танкиста - Страница 3 87090210

А вот как можно представить эту информацию в виде массива в программе на Паскале:

TYPE ТАБЕЛЬ=ARRAY[РУССКИЙЯЗЫК..ФИЗКУЛЬТУРА] OF ОЦЕНКА;

И если успеваемость ученика выражается переменной
УСПЕВАЕМОСТЬ (что в разделе описания переменных показывается строкой VAR УСПЕВАЕМОСТЬ: ТАБЕЛЬ), то, скажем, оценка по биологии будет обозначена так: УСПЕВАЕМОСТЬ[БИОЛОГИЯ].

В таком массиве собраны оценки ученика только за одну какую-то четверть. А как хранить оценки за все четыре четверти?

Массив может иметь много индексов, принадлежащих к разным типам. Описание таких многомерных массивов отличается тем, что в квадратных скобках через запятую приводятся граничные значения индексов по каждому измерению. И тогда сводный табель за все четверти можно построить так:

TYPE ТАБЕЛЬ=ARRAY[1..4, РУССКИЙЯЗЫК..ФИЗКУЛЬТУРА] OF ОЦЕНКА;

Желая извлечь нужную компоненту из многомерного массива, указывают в квадратных скобках значения индексов через запятую. Скажем, чтобы узиать успеваемость ученика по биологии за третью четверть, надо вывести на дисплей илн на печать значение УСПЕВАЕМОСТЬ[3, БИОЛОГИЯ].

Несколько массивов могут составить другой массив, разумеется, уже с большим числом измерений. Сведения об оценках всех учеников некоторого класса можно хранить в одномерном массиве двумерных массивов-табелей, что в совокупности дает трехмерный массив ARRAY[1..40] OF ТАБЕЛЬ, а для оценок всех учеников школы понадобится пятимерный массив ARRAY[1..10, 'А'..'Д', 1..40] OF ТАБЕЛЬ.

Тут первые два индекса означают класс (1А, 3В и т.д.), третий - номер ученика по списку.

Использование массивов в одних задачах сулит удобства, в других влечет определенные затруднения.

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

Размер массива в Паскале не меняется во время выполнения программы (в отличие от динамических массивов Алгола). Транслятор отводит для него раз и навсегда определенное место в запоминающем устройстве, размещая компоненты рядом друг с другом. Это может оказаться неудобным, так как порою приводит к излишней трате памяти.

И еще одна характерная особенность. Строка символов в Паскале трактуется как массив элементов символьного типа. Вся строка целиком может стать значением переменной того же типа. Например, строка 'НАУКА И ЖИЗНЬ' вводилась бы и использовалась таким, скажем, образом:

TYPE СТРОКА=ARRAY[1..13] OF CHAR;
VAR НАЗВАНИЕ: СТРОКА:
...
НАЗВАНИЕ:='НАУКА И ЖИЗНЬ';

Проницательный читатель уже предвидит здесь, вероятно, проявление того неудобства, о котором только что было сказано: более короткое название другого журнала пришлось бы указывать с хвостом из пробелов, поскольку длина переменной этого типа была назначена в количестве ровно тринадцати символов:

НАЗВАНИЕ: = 'ЭНЕРГИЯ______';

Упрек в нерациональном расходовании памяти уместен не только по поводу массивов, но и в дальнейшем ходе нашей беседы о Паскале, где речь пойдет о записях. В ответ следует сказать, что Паскаль имеет возможности для уплотненной упаковки информации в памяти машины. (Например, строки символов хранятся там именно как упакованные массивы). Однако рассказ об этом потребовал бы вдаваться в детали устройства конкретных ЭВМ и потому остается за рамками занятия.

Надо отметить, что при работе с упакованными массивами машине приходится тратить определенное время на распаковку. Экономия памяти приводит к потере в скорости выполнения программы. Программист сам должен решить, какую экономию он предпочитает: памяти или времени.

К сожалению, в большинстве версий Паскаля не предусмотрено специальных операций со строками. С ними приходится обращаться как с обычными массивами. Например, если надо объединить две строки, их элементы последовательно переписывают в строку суммарной длины.

Хотя строки рассматриваются как массивы, они находятся, так сказать, в привилегированном положении по сравнению со всеми прочими массивами. Допустим, в программе оператор вывода применяется к переменной НАЗВАНИЕ, имеющей к этому моменту значение 'НАУКА И ЖИЗНЬ'. На экране дисплея появится вся эта строка (правда, без апострофов), все элементы этого символьного массива. Но если в операторе вывода указать имя другого, не символьного массива, без индекса в квадратных скобках, на экране отнюдь не появятся значения всех его элементов. На экране в таком случае вообще ничего не появится. Оператор вывода выдает лишь элементарные компоненты совокупностей - и массивов, и описанных ранее множеств, и записей, о которых речь впереди. Единственное исключение здесь - именно символьные массивы.

Предоставляемая им привилегия вполне объяснима, поскольку строки, тексты - объекты весьма употребительные, и отсутствие удобных, быстрых средств для их вывода на экран дисплея и на печать сильно затруднило бы процесс программирования.

ЗАПИСИ. При использовании массивов бывает ощутимо еще одно неудобство: все элементы массива должны относиться к одному типу. Сложность многих реальных ситуаций требует для своего отражения более гибких средств. Паскаль отвечает на это требование типом, называемым записью. Как всегда, попробуем осмыслить новое понятие на примерах.

Что представляет собой, например, дата? Ясно, что она состоит из трех компонент. Значение первой - число месяца, значение второй - месяц, а третьей - год. С некоторой натяжкой можно считать, что это массив целых чисел, состоящий из трех компонент. Но даже если месяц представлять целым числом от 1 до 12, как часто делают, все равно остается ощущение, что компоненты такого массива не совсем однотипны. Поэтому для описания дат лучше применить тип записи, описание которого начинается служебным словом RECORD (запись).

TYPE ДАТА = RECORD
ЧИСЛО: 1..31;
МЕС: МЕСЯЦ;
ГОД : INTEGER
END;

Как видим, компоненты записи могут принадлежать разным типам. В нашем примере компонента ЧИСЛО принадлежит к ограниченному типу, ГОД - к целому, МЕС - к перечислимому типу МЕСЯЦ (он уже встречался нам ранее).

Компоненты записи называются полями. Для каждого поля задается имя и указывается тип. Чтобы обратиться к полю записи, нужно после имени записи через точку указать имя поля. Например, если в программе описана переменная СЕГОДНЯ типа ДАТА, то узнать, какое сегодня число, можно, выведя на дисплей или на печать значение СЕГОДНЯ.ЧИСЛО.

Образцом более сложной записи могла бы послужить анкета.

Ради примера попытаемся сначала представить, как могла бы выглядеть карточка, хранящая анкетные сведения о школьнике.

Матчасть диванного танкиста - Страница 3 87090310

Попробуем перевести это типичное произведение канцелярского жанра на Паскаль. Примем, что имена и фамилии учеников выражаются строками не более чем из 16 букв:

TYPE СТРОКА = ARRAY[1..16] OF CHAR;

Теперь можно предложить такой тип записи:

TYPE АНКЕТА=RECORD
ИМЯ, ФАМИЛИЯ: СТРОКА; ДАТАРОЖДЕНИЯ: ДАТА;
ПОЛ: (МУЖСКОЙ, ЖЕНСКИЙ);
УСПЕВАЕМОСТЬ: ТАБЕЛЬ;
ЗАНИМАЕТСЯ: SET OF ВИДСПОРТА
END;

Здесь есть и поля-массивы: ИМЯ, ФАМИЛИЯ, УСПЕВАЕМОСТЬ, и поле-запись: ДАТАРОЖДЕНИЯ, и поле-множество: ЗАНИМАЕТСЯ. Поле ПОЛ относится к перечислимому типу, который не был описан заранее; но, как видно, это можно делать при описании всей записи.

В свою очередь, подобная запись может быть компонентой другой, еще более сложной структуры. Так, сведения обо всех учениках школы могут храниться в многомерном массиве, описываемом, скажем, так:

TYPE КАРТОТЕКА=ARRAY[1..10, 'А'..'Д', 1..40] OF АНКЕТА;
...
VAR ШКОЛА123: КАРТОТЕКА;

Мы видим, что структуры данных могут без конца усложняться: одни структуры способны служить блоками, из которых строятся другие. Элементарными же "кирпичиками" служат данные основных, стандартных типов.

Чем сложнее структура данных, тем сложнее обратиться к ее простой компоненте. Например, чтобы узнать, какую оценку по географии имеет в 3-й четверти 2-й по списку ученик 5-го класса "А", нужно прочитать значение такой компоненты:

ШКОЛА123[5, 'А', 2].УСПЕВАЕМОСТЬ [3, ГЕОГРАФИЯ]

А чтобы узнать, в каком месяце родился этот ученик,- к компоненте

ШКОЛА123[5, 'А', 2].ДАТАР0ЖДЕНИЯ.МЕС.

Аналогичные сложности нужно иметь в виду при построении подобных структур. Например, чтобы заполнить школьную картотеку требуется выполнить длинную цепочку присваиваний вида:

ШКОЛА123[5, 'А', 2].УСПЕВАЕМОСТЬ [3,ГЕОГРАФИЯ]:=4;
ШКОЛА123[5, 'А', 2].ДАТАРОЖДЕНИЯ.МЕС:=ЯНВАРЬ;

и так далее. Все эти трудности, однако, окупаются тем, что в дальнейшем позволяют машине выполнять утомительную рутинную работу, которой иначе занимались бы люди.

Задачи такого типа возникают настолько часто, что для их решения придуманы особые программные средства - так называемые системы управления базами данных. Как пример базы данных вполне можно рассматривать нашу школьную картотеку.

ЗАПИСИ С ВАРИАНТАМИ. В школьной картотеке должны храниться сведения не только об учениках, но и об учителях. Формы анкет для учителей и учеников в чем-то будут совпадать, а в чем-то нет. Для учителя бессмысленно заводить графу "успеваемость". Зато для него надо указать, какие предметы он преподает.

Для таких анкет - частично сходных, а частично несходных - не обязательно предусматривать два различных типа. Можно совместить их в типе записи с вариантами. Но для этого требуется вводить дополнительный тип данных. Например:

TYPE СТАТУС=(УЧИТЕЛЬ, УЧЕНИК);

При этом в описании анкеты появится дополнительное поле - обозначим его символом СТ и присвоим ему тип СТАТУС.

АНКЕТА=RECORD
ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ: СТРОКА;
ДАТАРОЖДЕНИЯ: ДАТА;
ПОЛ: (МУЖСКОЙ, ЖЕНСКИЙ); ЗАНИМАЕТСЯ: SET OF ВИДСПОРТА;
CASE СТ:СТАТУС OF
УЧИТЕЛЬ: (ПРЕПОДАЕТ: SET OF ПРЕДМЕТ;
СЕМПОЛОЖЕНИЕ: (ХОЛОСТ, ЖЕНАТ, РАЗВЕДЕН, ВДОВ);
ЧИСЛОДЕТЕЙ: INTEGER);
УЧЕНИК: (УСПЕВАЕМОСТЬ: ТАБЕЛЬ)
END;

Такая анкета пригодна и для учителей, и для учеников.

ССЫЛОЧНЫЕ ТИПЫ. Пример, подходящий этому случаю, довольно непростому, заслуживает пространного рассказа.

... Жил да был один начальник отдела кадров, и была у него канцелярия, и была в той канцелярии картотека, где на обычных картонных карточках хранились анкеты сотрудников. И указывались, как водится, в тех анкетах имя-фамилия, год рождения, национальность, должность и много всего прочего, а среди этого прочего семейное положение и число детей. И вот как-то решил начальник, что внимательнее нужно отнестись к семейным нуждам подведомственных ему сотрудников, для чего и велел секретарше записать в каждой анкете не только число детей, но и подробнее: когда родился, да как зовут каждого, да кто он: мальчик или девочка. Чтобы знать, кого в детский сад или в ясли устраивать, кому в пионерлагерь путевку предоставлять и кому какой подарок на Новый год готовить.

Но взмолилась секретарша: в анкетах мало места да и детей у всех по-разному: у кого много, а у кого и вовсе нет. Отведешь мало места в анкетах - некуда будет записывать, если у кого детей много, а много отведешь - много места будет пропадать, ведь не у всех есть чем заполнить.

И придумал тогда начальник хранить сведения о детях на отдельных карточках в специальном ящике, и для каждого ребенка отвести свою карточку, и перенумеровать эти карточки, а в анкете родителя записать номер карточки старшего ребенка. А если кто из сотрудников не имеет детей, записать в этом месте анкеты слово NIL (латинское "нуль"). И стало удобно, притом по многим причинам. Например, многие сотрудники составляли семейные пары, и дети у них были общие. А при такой системе не пришлось одних и тех же детей по два раза записывать в анкету мамы и в анкету папы, а просто в ту и другую анкету ставили одинаковый номер - номер карточки их старшего ребенка.

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

Думал-думал начальник, и пришла ему в голову хорошая мысль. Велел он в карточке каждого ребенка ставить номер карточки его младшего брата или сестры - кто вслед за ним родился, а у самых младших - ставить то же слово NIL. И стало тогда возможно помещать карточки братьев и сестер не обязательно подряд, а в каком угодно порядке. И если кто еще рождался, его карточку смело ставили в самый конец, а ее номер ставили вместо слова NIL либо у того из детей, кто до того был самым младшим в семье, либо у родителя, если раньше у него детей не было и NIL было в его анкете.

Так и шло время, и прошло много лет, и многие дети выросли, и даже сами стали родителями. И решил тогда начальник отдела кадров, что пора убрать из картотеки карточки тех, кто уже вырос и достиг совершеннолетия, так как уже ни пионерлагеря им не нужно, ни подарков на Новый год, а место карточки занимают, ящик же скоро совсем переполнится. Секретарша опять испугалась, что потребуются большие переделки в картотеке, однако начальник ее успокоил, сказав, что все делается очень просто: в анкете родителя заменяем ссылку на старшего из детей ссылкой на следующего, которая берется из карточки этого старшего, и так делаем, пока не встретится ребенок моложе 18 лет или вместо ссылки слово NIL. Удаленные же карточки старших детей заменим на чистые с теми же номерами, чтобы заполнять их впоследствии теми, кто еще будет рождаться.

А потом наступила у них в отделе кадров компьютеризация, н купили они компьютер, и был на нем транслятор с Паскаля. Увидел тогда начальник, что угадал он бывшее в том языке важное средство, называемое ссылками.

С помощью ссылок строятся так называемые динамические структуры данных. Число компонент в таких структурах заранее неизвестно и меняется во время выполнения программы: одни компоненты создаются и вставляются в структуру, другие уничтожаются. При вставках и удалениях легко сохраняется какой-либо принятый порядок расположения компонент.

Компоненты динамических структур, как правило, представляют собой записи. Например, структуру, придуманную начальником отдела кадров, на Паскале можно реализовать так:

TYPE ССЫЛКА=^РЕБЕНОК;
РЕБЕНОК = RECORD
ИМЯ: СТРОКА;
ДАТАРОЖДЕНИЯ: ДАТА;
ПОЛ: (МУЖСКОЙ, ЖЕНСКИЙ);
СЛЕДУЮЩИЙ: ССЫЛКА
END;

После СЛЕДУЮЩИЙ позволяет связать данные в цепочку. В анкеты взрослых нужно добавить поле ДЕТИ типа ССЫЛКА, которое будет ссылаться на старшего ребенка. Подобные структуры называются списками.

ФАЙЛЫ. Этот важный тип данных целесообразно представить на фоне разработки конкретной программы. Поэтому рассказ о нем тоже переносится на следующее занятие, где речь пойдет о некоторых общих концепциях программирования на Паскале.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Фев 05, 2023 12:38 am

10/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Вновь на наших страницах встретились владельцы бытового компьютера "Электроника БК-0010". Они живут в разных городах, но благодаря журналу имеют возможность общаться друг с другом. Многие из них в своих письмах в редакцию говорят, сколь ценно для них такое общение. Сегодня речь идет о том, как сделать его более эффективным.
В нынешнем выпуске раздела ставшее уже традиционным "Бюро справок" сообщает о достижениях и запросах наших читателей. Всем работающим с "БК-0010" предлагается организоваться в заочный клуб с компьютекой для регулярного обмена идеями, алгоритмами, готовыми программами.
Просим наших читателей обдумать и предложить новые, лучшие на их взгляд формы дружеского общения и делового сотрудничества. Просим не оставлять без внимания основную из этих форм - подборки материалов о "БК-0010" на страницах раздела "Человек и компьютер": какие темы представляются наиболее желательными для ближайших подборок!

МУЛЬТФИЛЬМ НА ЭКРАНЕ
Всем известен основной принцип мультипликации. Эффект плавного движения получается, если выводить иа экран последовательные фазы движения предмета.

На "БК-0010" отдельные фазы движения логично программировать при помощи функции FT, управляющей появлением и гашением точки на экране. Из отдельных точек нетрудно получить любое нужное изображение. К сожалению, функция FT работает настолько медленно, что эффекта движения предмета на экране не создается.

Тем не менее получить несложную мультипликацию на "БК" все-таки можно. Для этой цели я использую оператор TYPE и режим графического дисплея.

Матчасть диванного танкиста - Страница 3 87100210

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

Особенность этого режима состоит в том, что после нажатия клавиши "ГРАФ" курсор превращается из прямоугольника в крестик. Этот крестик можно перемещать по экрану клавишами управления курсором, стоит только включить режим РЕД. Чтобы выйти из режима графического дисплея, достаточно еще раз нажать клавишу "ГРАФ".

Если нажать еще и клавишу "ЗАП", то курсор, передвигаясь по экрану, будет оставлять след, подобно карандашу. Клавиша "СТИР", напротив, превращает курсор в резинку для стирания ненужных линий.

Повторное нажатие каждой из этих клавиш возвращает компьютер в режим ГРАФ.

Итак, любую картинку можно нарисовать, перемещая курсор и манипулируя клавишами "ЗАП", "СТИР" и "ГРАФ". Однако это полдела, ведь картинку нужно еще и оживить, а для этого ввести ее в программу. Здесь-то и нужны операторы TYPE или функция FCHR. В качестве аргумента функции FCHR придется записывать через запятую коды соответствующих клавиш. Для TYPE коды клавиш знать не обязательно, они автоматически помещаются в память в режиме РЕД.

Матчасть диванного танкиста - Страница 3 87100110

Последовательность нажатых клавиш будет отображаться на экране, если после того, как будут открыты кавычки, включить режимы БЛР (клавиша "БЛОК РЕД") и РЕД. Когда нажаты все клавиши, определяющие данный рисунок, выключаем режимы БЛР и РЕД, нажав те же клавиши, закрываем кавычки. На рисунке показана программа, набранная описанным способом. Буква Г получается при нажатии клавиши "ГРАФ", буква 3 - клавиши "ЗАП". Буква Т - это сокращенное обозначение команды TYPE (ключевые слова Фокала распознаются компьютером по одной первой букве). Команды 20.10-20 выводят на экран изображение вертолета, а команда 30.10 стирает его, чтобы вновь нарисовать чуть правее. Так создается эффект движения
И.СТЕКОЛИН (г.Москва)

Матчасть диванного танкиста - Страница 3 87100310
Рис. Е.Снежко (г.Ярославль)

Матчасть диванного танкиста - Страница 3 87100410

КАК ЗАСЕЯТЬ ДВУХМЕРНОЕ ПОЛЕ
В статье "Случайны ли случайные числа" (10/86) М.Максимов рассказал, что встроенный генератор псевдослучайных чисел FRAN() имеет ряд недостатков. Особенно ярко неслучайный характер последовательности проявляется, если при построении двухмерной гистограммы в качестве значений координат каждой следующей точки выбирать абсолютную величину очередного случайного числа - рисунок слева. Есть, однако, простой способ, позволяющий значительно улучшить двухмерное распределение FRAN(). Между двумя последовательными выборками чисел нужно сделать одну или две "холостые" выборки, обращаясь к генератору, например, с помощью команды X FRAN(). Время выполнения программной строки возрастает при этом всего на 0.02с, а картина заметно улучшается,- рисунок справа. Нельзя, однако, забывать, что такой способ имеет и оборотную сторону. Это уменьшение длины псевдослучайной последовательности до первого повторения. Теперь максимальная длина последовательности всего около 11 тысяч чисел. И еще об одной возможности. Генератор FRAN() использует для своей работы ячейку памяти с десятичным адресом 956, расположенную в системной области ОЗУ. Считывая после каждого обращения к генератору содержимое этой ячейки, например, командой FX(1,1674), можно получить распределение псевдослучайных целых чисел в диапазоне от -32768 до 32768, по своим свойствам ничем ие отличающееся от распределения FRAN().
Ю.ЗАЛЬЦМАН ("МП-клуб", г.Алма-Ата)

КЛУБ "КОНТАКТ"
С каждым днем растет число пользователей "БК-0010". Все больше программ добавляется к тем, что уже созданы. Чтобы облегчить обмен программным обеспечением, москвичи - владельцы "БК-0010" предлагают создать заочный клуб "Контакт" при редакции журнала "Наука и жизнь".

Деятельность клуба на первых порах будет заключаться в следующем: каждый пользователь бытового компьютера сможет прислать в клуб почтовую открытку, указав на ней свой стаж работы с "БК-0010", языки программирования, которыми он активно пользуется, и число корреспондентов, с которыми он хотел бы поддерживать переписку. В четвертой клетке можно указать область преимущественного интереса - системные или деловые программы, игровые программы, компьютерная графика, музыкальные синтезаторы и тому подобное. Активисты клуба помогут наладить переписку, подобрав корреспондентов. Адрес для переписки: 111877, Москва-Центр, ГСП, ул.Кирова, 24, редакция журнала "Наука и жизнь", клуб "Контакт".

Одновременно будет создана компьютека с программами для "БК-0010". Каждый, кто захочет воспользоваться ее услугами, должен прислать по тому же адресу чистую кассету МК-60, указав, какие две программы он хотел бы получить. Новые программы будут приниматься в компьютеку только с согласия их авторов. Просим их присылать свои программы в редакцию. Чтобы упростить обработку информации, просим записывать не более одной программы на каждую сторону кассеты. После программы должен быть записан набор данных "ТЕКСТ", хотя бы кратко комментирующий программу и правила обращения с ней.

На обложке кассеты просим сделать метки: К - для программ, составленных в кодах, Ф - на Фокале, Б - на Бейсике-MSX, Б9К - на Бейсике-Вильнюс, F - на Форте, Т - на Т-языке.

Наиболее популярные программы с согласия авторов редакция передаст на предприятие, которое будет заниматься выпуском кассет с программным обеспечением для "БК-0010".

ПРОГРАММА "ТЕЛЕФОН"
Возможности "Электроники БК-0010" не ограничиваются вычислениями, рисованием на экране, воспроизведением музыки и речи. МикроЭВМ можно на время превратить в электронный телефон с кнопочным набором номера, однако для этого прежде всего нужно собрать схему, изображенную на рисунке, и подключить ее к разъему порта ввода-вывода. Транзисторы Т1, Т2-КТ608, КТ801.

Матчасть диванного танкиста - Страница 3 87100510

Загрузив программу в оперативную память компьютера и запустив ее, можно снять трубку. Для этого предназначена команда ";". Затем следует цифровыми клавишами набрать нужный номер. Для импровизированного электронного телефона достаточно одной телефонной трубки, но можно подключить и обычный телефонный аппарат. Для того, чтобы положить трубку, предусмотрена команда "S", но когда после одного разговора требуется набрать следующий номер, то без этой команды можно обойтись, вновь набрав ";" и номер.

Матчасть диванного танкиста - Страница 3 87100610

Кратко поясню назначение отдельных строк программы:

2.1 устанавливает порт ввода-вывода в исходное состояние, необходимое для работы программы. 2.4-2.75 опрашивают клавиатуру и выбирают заданный режим работы или определяют набранную цифру. 2.8-2.9, 3.1-3.2 набирают заданную цифру, подобно тому, как это делалось с помощью диска номеронабирателя. 5.1-5.3 переводят микроЭ8М в режим набора цифр, что соответствует режиму поднятой трубки. 6.1-6.3, 8.1-8.2 организуют режим повторного набора номера. БК извлекает из памяти ранее набранный номер и повторяет цикл набора. 10.1 переводит микроЭВМ в режим положенной трубки, а программа переходит в режим ожидания.

Безусловно, программа - не предел совершенства, на ее основе нетрудно создать телефон с памятью на 200, а то и более номеров, можно предусмотреть автоматический поиск по фамилии или имени абонента. Все, кто уже научился использовать речевые возможности БК, смогут сделать автоответчик, который будет, например, переадресовывать звонки на более удобное время, или попросит подождать минутку, пока хозяин возьмет трубку.
В.ЯРОШЕНКО (г.Москва)

[ МАЛЕНЬКИЕ ХИТРОСТИ
Эта подборка, подготовленная по письмам наших читателей, посвящена возможностям "БК-0010", известным не всем его пользователям.

Ф.СУХАНОВ (г.Омск). Номер строки программы, составленной на Фокале, занимает в оперативной памяти компьютера 6 байт, независимо от того, идет ли речь о номере 1.1 или 111.2. Память распределена так - пять байт отведены на номер, а еще один байт нужен для хранения пробела, отделяющего номер от текста оператора. Начинающие программисты пишут программы упрощенно, по одному-два оператора в строке. Хотя такие программы наглядны, однако они занимают больше места в памяти машины, да и выполняются дольше. Опытный программист старается "уплотнять" строки, включая в них как можно больше операторов. Здесь, однако, важно следить за тем, чтобы не нарушалась логика программы, особое внимание обращая на те строки, где есть операторы цикла.

А. КОНСТАНТИНОВ (г.Свердловск). "Руководство пользователя" рекомендует дублировать кассеты лишь через ЭВМ, то есть нужно считать текст с одной кассеты в оперативную память машины, а затем загрузить его на другую кассету. Если же программа не считывается, ее все же можно "вытянуть" с кассеты, воспользовавшись двумя магнитофонами. С кассетного магнитофона я перезаписываю программу на катушечный, выбирая скорость ленты 19см/с, а считываю программу в память компьютера уже на скорости 4см/с. Восстановленную таким образом программу можно, как обычно, переслать из памяти компьютера на кассету ]

ПОМОЖЕТ КОМПЬЮТЕР
Подавляющее большинство недорогих отечественных и зарубежных ЭВМ подключается к домашнему телевизору - он используется как дисплей. Между тем компьютер может нарисовать на экране отладочную таблицу, которая позволит проверить важные характеристики изображения (линейность строк и кадров, сведение лучей) и выявить геометрические искажения.

Я делал такую проверку с компьютером БК-0010, но ясно, что его может заменить любой компьютер с достаточно развитой графикой. Для настройки телевизора, я ввожу программу.

Матчасть диванного танкиста - Страница 3 87100710

Перед тем как запустить ее командой GОТО в командной строке, я очищаю экран и убираю курсор клавишами СБР и КУРСОР. После нажатия клавиши ВВОД на экране появляется запрос машины о числе линий "М=". М - любое положительное число, не превышающее размера сетчатого поля К=300. Обычно я использую сетку из 15 линий. Достаточно набрать М, нажать клавишу ВВОД, и машина примется рисовать таблицу. Дальнейшая настройка телевизора ничем не отличается от традиционной.
К.ЦЕГЕЛЬСКИЙ. (г.Львов)


[ БЮРО СПРАВОК
А.Кузнецов из Кировской области сконструировал устройство, которое позволяет вводить в "БК-0010" графическую информацию. Процесс ввода напоминает обычное рисование или запись ручкой. Изображение одновременно появляется на экране, может быть записано в ОЗУ, на магнитофон. Масштаб изображения можно плавно регулировать. Устройство собрано на десяти микросхемах серии К155. (613400, Кировская обл., п.Кумень, ул. Гагарина, 39а, кв.13).

В "МП-клубе" при районном комитете ДОСААФ в Алма-Ате разработано несколько игровых программ для "ВК-0010", одна нз них использует псевдографику и рассчитана на использование специального устройства, напоминающего пульт для игры, описанный Н.Сомовым. Хотелось бы получить Вильнюсскую версию Бейсика. (400091, Алма-Ата, ул.Джамбула, 55/57, кв.8, Зальцман Ю.А.).

Предлагаю обмен литературой по программированию. Интересуюсь также машинной графикой, компьютерными играми, моделированием и всеми направлениями, связанными с компьютеризацией сельского хозяйства. (309103, Белгород, п.Майский, ул.Вавилова, 30, кв.1, Логачев В.В.).

Умею программировать ключи микроэвм "ВК-0010", знаю, как переделать "ВК-0010" для работы с цветным телевизором. Меня интересует Вильнюсская версия Бейсика, редактор текстов, программа "Шахматы", схемы АЦП и ЦАП, вариант подключения "мыши", программы цифровой обработки изображений, динамические игровые программы. (644050, Омск, пр.Мира, 18, кв.80, Суханов О.Б.).

Краковский клуб микроинформатики предлагает обмениваться опытом и программным обеспечением аналогичным клубам и отдельным пользователям персональных ЭВМ, таких, как АТАРИ, СПЕКТРУМ, Коммодор, ИБМ PC и компьютеров системы MX. (Письма направлять в редакцию) ]

[ УГОЛОК СПЕЦИАЛИСТА
Здесь мы помещаем программу В.Птицына (г.Москва), предлагаемую им для поиска локального максимума многомерной функции. Программа составлена на Бейсике (слева) и Паскале (справа). Аргументы функции - элементы одномерного вещественного массива X. В программе используются все три вида циклов: цикл "пока" (строки 6-18), цикл "до" (строки 7-16) и цикл с параметром (строки 8-14). На строках 10 и 12 записаны альтернативы.

Матчасть диванного танкиста - Страница 3 87100810

Исходные данные для расчета - вид функции (строка 2), число аргументов (строка 3), начальный шаг и точность поиска (конец строки 5). Результат выводится операторами строки 19.

РАССЧИТЫВАЕМ ОБМЕН КВАРТИР
С большим интересом я прочитал заметку Г.Славина "По порядку номеров становись!", опубликованную в 8/86.

Будучи тренером по художественной гимнастике в одной из школ г.Ленинграда, я использую этот метод для ранжирования своих учеников по таким совершенно уж нечисловым показателям, как грациозность жеста, отточенность движений, чистота прыжка, и другим. Группа, к которой я применяю ранжирование, насчитывает 10 учеников, поэтому оказалось возможным прибегнуть к помощи "Электроники БЗ-34".

Должен сказать, что я полностью доверяю результатам расчета, даже если они частично идут вразрез с тем, что мне подсказывает интуиция (впрочем, такое разногласие встречается нечасто). Почему доверяю? Во-первых, необходимо чему-нибудь отдать предпочтение, не уподобляясь Буриданову ослу; во-вторых, предлагаемый Г.Славиным метод весьма объективен.

Я попробовал развить его для более общего случая. Предположим, что перед нами результаты шкалирования не по одному только, а по нескольким свойствам. Эти отдельные свойства, в свою очередь, можно также прошкалировать по степени важности каждого из них с точки зрения генерального свойства "мастерство гимнаста". Тогда для каждого ученика можно вычислить его общий ранг по этому генеральному свойству. Пусть Vij - вес i-ro ученика по j-му свойству, fj - вес j-ro свойства. Тогда общий ранг i-го ученика вычисляется по формуле:

Матчасть диванного танкиста - Страница 3 87100910

В заключение хотел бы рассказать еще об одной, несколько неожиданной области применения того же метода. Собираясь менять квартиру, я получил несколько предложений. В каждом варианте имеются сведения о метраже, удобствах; судя по адресам, я оценил расстояние до моей работы от каждого из предложенных мест, выяснил степень озелененности этих районов, оснащенность их близлежащими магазинами и проч. Затем я проранжировал варианты по всем этим свойствам: "метраж", "удобства", "удаленность от места работы" и т.п. Затем я проранжировал сами эти свойства с точки зрения генерального свойства "мне это важно": например, "удаленность от места работы" для меня важнее, чем "оснащенность магазинами". Не показывая получившихся результатов, я попросил жену провести такой же расчет. Наши результаты оказались весьма близкими, хотя и различными в мелочах. Главное же в том, что наивысший ранг у нас получил одни и тот же вариант! Метод оправдал себя очень неплохо!
В.ВИЛЯНСКИЙ (г.Ленинград)

ЗА РАМКАМИ ИНДИКАТОРА
Многие читатели усмотрят в публикуемом ниже письме идею конкурса. Но мы не станем формулировать конкурсное задание: результаты, достигнутые А.Тулайковым, можно превзойти во многих направлениях. Тем, кто возьмется за это, советуем не упускать из виду вопрос: в каких практических задачах могли бы найти применение операции с многоразрядными числами?
Разумеется, стремление оперировать с числами все более высокой разрядности может иметь и чисто спортивный характер...

Можно ли с помощью микрокалькулятора производить арифметические действия над числами, содержащими больше разрядов, чем умещается на индикаторе? Предлагаю владельцам "Электроники МК-61" алгоритмы и программы для двух случаев.

Перемножение 22-разрядных чисел, при котором верен 21 разряд произведения.

00. П4 01. С/П 02. КП4 03. В/0 04. П4 05. С/П 06. КИП4 07. ИПС 08. * 09. КИП4 10. ИПД 11. * 12. + 13. КИП4 14. ИПЕ 15. * 16. + 17. КИП4 18. ИП0 19.* 20. + 21. КИП4 22. ИП1 23. * 24. + 25. КИП4 26. ИП2 27. * 28. + 29. КИП4 30. ИП3 31. * 32. + 33. С/П 34. БП 35. 04.

Матчасть диванного танкиста - Страница 3 87101010

Оба множителя разбиваем на семь частей слева направо. Первая часть содержит четыре значащие цифры, остальные по три. Введя программу, нажимаем клавиши В/О 4 С/П. После останова набираем части обоих сомножителей одну за другой с учетом порядка в последовательности, указанной на рисунке стрелкой, начиная с последней части первого сомножителя. Набор каждой части завершаем нажатием клавиши . С/П. Числа расположатся по регистрам, как указывают знаки над и под стрелкой, так что в нашем примере в Р5 окажется 7.25e-20, в Р6 - 3.1e-18 и т.д. (В порядке рассылки, выполняемом фрагментом программы с первого по третий адрес, можно разобраться, воспользовавшись заметкой А.Хотынца - 6/87). Затем набираем 4 БП 04 С/П, после останова списываем с индикатора результат, далее нажимаем клавиши:

0 П3 5 С/П
0 П2 6 С/П
0 П1 7 С/П
0 П0 8 С/П
0 ПЕ 9 С/П
0 ПД 10 С/П

По выполнении команд каждой строки списываем с индикатора очередной результат. Все семь полученных таким образом чисел суммируем с меньшего по большее.

Точный подсчет результата требует перемножить друг на друга все части, на которые разбиты сомножители. Всего таких попарных произведений 49. Некоторые из них исключаются из подсчета при внесении нулей в указанные выше регистры. Это обусловливает оговоренную вначале точность.

Ответ контрольного примера: 0.1664812103307434482950.

Деление многоразрядных чисел на числа, содержащие не более четырех разрядов.

00. П2 01. x-y 02. П1 О3. / 04. П3 05. С/П 06. П4 07. ИП3 08. * 09. К[] 10. ИП4 11. / 12. ИП1 13. * 14. П5 15. ИП2 16. x-y 17. - 18. С/П 19. П2 20. ИП1 21. БП 22. 03.

Алгоритм аналогичен обычному делению чисел "уголком" - с той разницей, что на каждом шагу определяется не одна цифра частного, а несколько. Поясним это на примере (рис. внизу). Отчеркиваем в делимом слева восемь значащих разрядов. Полученное число делим на делитель и частное ограничиваем справа до стольких разрядов, чтобы его произведение на делитель выражалось восьмиразрядным числом. Полученная после такого ограничения цепочка цифр есть начальный фрагмент окончательного результата. Этот фрагмент умножаем на делитель и произведение вычитаем из числа, получившегося при первом отчеркивании цифр делимого. Приписываем к разности столько следующих разрядов делимого, чтобы их общее количество равнялось восьми. С этим числом производим те же действия, что и с отчеркнутым вначале. Вычисленное на этот раз частное ограничиваем так же, как и ранее; получившаяся цепочка, цифр дает следующий фрагмент окончательного результата. Описанные действия повторяем вновь и вновь.

Матчасть диванного танкиста - Страница 3 87101110

На рисунке видны маленькие цифры, указывающие порядки соответствующих разрядов. Эти величины используются при выполнении описанных действий с помощью микрокалькулятора. Вводим программу, нажимаем В/0. Вводим делитель В и первые восемь разрядов делимого А в стек: В ^ А, нажимаем С/П.

После останова ограничиваем частное, как объяснялось выше, выписываем сохраненные цифры, набираем на клавиатуре 1 ВП и взятый с обратным знаком порядок последнего из сохраняемых разрядов частного (в нашем примере 7). Нажимаем С/П. После останова списываем с индикатора порядок результата. Затем списываем мантиссу и приписываем к ней столько следующих разрядов делимого, чтобы их общее количество равнялось восьми. Набираем это число, нажимаем ВП, набираем выписанную ранее величину порядка. Нажимаем С/П и повторяем все действия, описанные в этом абзаце. Сохраняемые цифры частного на каждом шагу приписываем к выписанным ранее, наращивая длину окончательного результата.
А.ТУЛАЙКОВ (г.Долгопрудный)

ЧЕРЕЗ ДВЕ СЕКУНДЫ
Даже опытный фотолюбитель тратит много времени на изготовление пробных отпечатков. Между тем программируемый микрокалькулятор поможет сэкономить время и фотобумагу. Кроме калькулятора, понадобится экспонометр.

Уединившись в ванной комнате, я выбираю первоначальную пробную экспозицию t'. Экспонометр я приставляю к объективу фотоувеличителя. Тогда выдержка, считанная со шкалы экспонометра, определит условную величину K'. Когда качество пробного отпечатка меня удовлетворит, я ввожу в калькулятор: t' ^ ^ K' ^ l' (длина одной нз сторон увеличенного кадра) В/0 С/П. На этом все подготовительные действия завершаются.

Печатать все остальные снимки становится очень просто. Я приставляю экспонометр к объективу, получаю K, измеряю выбранную сторону кадра - l, ввожу данные в машинку: K ^ l С/П и через две секунды узнаю необходимое значение экспозиции t.

Теперь родные не жалуются, что я слишком долго занимаю ванную комнату, фотография стала экономичной, а знакомые хвалят качество снимков.

ПРОГРАММА: 00. П1 01. F() 02. / 03. П2 04. F() 05. С/П 06. ИП1 07. / 08. Fx2 09. ИП2 10. * 11. * 12. С/П 13. БП 14. 06.

В.ЖУК (г. Москва)

АЛГОРИТМИЧЕСКАЯ ИГРА
Здесь алгоритм - не средство, а объект игры.

Правила. Два участника игры (А и В) должны написать программу на Бейсике (можно и на другом языке) из N пронумерованных строк, причем N - четное.

В распоряжении играющих по одной булевой переменной А и В; обе в начале игры равны логическому нулю (FALSE).

Играющие поочередно каждым своим ходом должны заполнить любую свободную строку одним из двух возможных операторов -
для играющего А:
А=not(А) или if A goto К,
для играющего В:
В=not(В) или if В goto К.

Здесь К номер строки в пределах от 1 до N.

На других версиях Бейсика булевы переменные можно заменить на числовые:

if А=0 then A=1 else А=0
if A=1 goto К

Если в результате прогонки написанной программы А будет равно В, то выигрывает участник А, если А!=В, то участник В. Поэтому в целях судейства программу следует замкнуть оператором:

N+1 print "Выиграл "; : if A=В then print "A" else print "В"

Предлагаемая игра способна не только скрашивать досуг. Дело в том, что программы, где много операторов перехода, таят в себе риск зацикливания. Мастерство программиста заключается, в частности, в том, что он вовремя замечает "предрасположение" составляемой им программы к зацикливанию и изменяет ее, чтобы избежать этого недостатка. Такую зоркость и помогает воспитывать предлагаемая игра. В воспитательных целях в число ее правил введены такие. Если после очередного хода соперника второй игрок заявит о "зацикленности" написанной к этому моменту программы и это подтвердится, то заявивший выигрывает. Если это не подтвердится (при большой программе и неповоротливой машине время такой проверки можно ограничить), то заявившему засчитывается поражение. После своих ответных ходов игроки теряют право на заявку о зацикливании. Но если в конце игры программа все-таки зациклится, то выигрывает тот, кто делал первый ход.

Вот пример партии для программы в 4 строки, где выиграл В.

Матчасть диванного танкиста - Страница 3 87101210

Игра не требует компьютера, хотя он может существенно упростить судейство.

Предлагаем читателям оценить предложенную игру, написать программу, превращающую ЭВМ в партнера. Следует помнить, что число вариантов протекания партии для фиксированного числа строк N равно N**N*N!
А.ЕРМАКОВ (г.Москва)


[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
Книга Т.Б.Романовского "Микрокомпьютер в школе" (Рига, "Звайгэне", 1986, есть латышское и русское издания) охватывает широкий спектр микропроцессорных устройств: от простейшего микрокалькулятора до компьютера "БК-0010". При этом книга не рассыпается на отдельные рассказы о каждой из машин - они рассматриваются систематически и комплексно. Среди "узлов", которыми они связаны, хочется отметить то, что еще редко встречается в нашей методической литературе по информатике: каждая программа в книге Т.Б.Романовского возникает как перевод внятно изложенного алгоритма на язык конкретной вычислительной машины. С таким подстрочником программа не выглядит тарабарской грамотой.

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

Разнообразны и тщательно продуманы иллюстрации к книге. Программы поясняются текстами алгоритмов на алгоритмическом языке, блок-схемами, а для микрокалькуляторов - еще и таблицами, где показана последовательность клавиш, нажимаемых при вводе и выполнении программы. Интересны своеобразные комиксы, персонажи которых - учительница и четыре ученика: Петерис, Анна, Янис, Марис. Каждый из этой четверки дает свой ответ на задание учительницы - так получается наглядное, живое, интересное обсуждение абстрактных истин и правил.

При острой нехватке литературы по программируемым микрокалькуляторам не беда, что в новых книгах о них излагаются сведения, уже упоминавшиеся когда-то в других изданиях. Правы Л.Ю.Астанин, Ю.Д.Дорский и А.А.Костылев, рассказывая в первой части своей книги "Применение программируемых калькуляторов для инженерных и научных расчетов" (Л., Энергоатомиздат, 1986) об устройстве и системе команд калькуляторов "Б3-21" и "Б3-34", об основных понятиях и приемах программирования, о методах организации вычислительных работ.

Среди программ, составляющих вторую часть книги, хочется отметить те, что посвящены вопросам статистического анализа - оценке параметров распределений, статистической проверке гипотез, исследованию временных рядов ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пн Фев 06, 2023 12:23 am

11/87

Матчасть диванного танкиста - Страница 3 87110110
Фото В.Иванова

Положение великой индустриальной державы но многому обязывает - мировой фронт научно-технического прогресса быстро продвигается вперед, и если отстанешь на каком-то участке, то догнать, может случиться, будет трудно. В сфере создания и применения ЭВМ успехи нашей науки и промышленности бесспорны: в стране выпускаются машины всех классов, для них создается эффективное математическое обеспечение, нередко на самом высоком мировом уровне. Но, нам говорится, из песни слова не выкинешь - уже несколько лет нависает над нами угроза серьезного отставания в ряде областей компьютеризации, в частности в широком применении микрокомпьютеров, прежде всего персональных. Любые меры, направленные на то, чтобы сократить разрыв, бесспорно, должны встречать всеобщее понимание и сочувствие. Потому что компьютеризация не просто развивается сама по себе, она резко, качественно повышает эффективность очень многих сфер человеческого труда, часто позволяет одному работать за десятерых, работать быстро, точно, надежно.

ПРОФЕССОР И.А.ВОЛОШИН: "НЕОБХОДИМО ПРИВИВАТЬ ВКУС К КОМПЬЮТЕРНОЙ ИНФОРМАТИКЕ"
Когда кто-либо из наших ученых возвращается из-за рубежа после долгой стажировки или даже после не очень продолжительного делового визита, то, рассказывая о своих впечатлениях, почти всегда вспоминает про банки данных: "Огромное удобство - включаешь персональный компьютер, набираешь определенный код и тут же соединяешься с нужным банком, с нужным хранилищем информации...", "Набираешь код, и через какие-то секунды ты уже в информационном банке на другом континенте...", "Не вставая из-за письменного стола, можно очень быстро в огромном информационном массиве найти то, что в библиотеке искал бы много дней...", "Совершенно новая потрясающая технология, с ней чувствуешь себя совсем другим человеком - не теряешь годы, чтобы войти в курс дела...", "Какие там справочники, какие библиотеки - все, что нужно, тут же появляется на экране дисплея, только назови тему или автора, чьи работы нужно просмотреть, или название журнала, в подшивках которого хочешь покопаться...", "Нашел то, что нужно, нажал кнопку, и тут же принтер выдал тебе твердую копию - отпечатал найденный текст на листке бумаги...".

Банки данных - сравнительно новая информационная технология, она стала работающей реальностью лет десять назад. Основа такого банка - большая ЭВМ с большим числом накопителей информации, пока чаще всего на магнитных дисках. Машина, получив запрос, подключается к нужному диску, считывает нужный фрагмент записи и посылает его на экран пользователя, связанного с банком обычной телефонной линией. Главное здесь то, что машина по только ей известным правилам и меткам автоматически и очень быстро ведет поиск информации по самым разным признакам. Ей, в частности, можно задать ключевые слова, например, "лазер" и "хирургия", и она тут же выберет для вас все, что касается лазерной хирургии. Так что банк данных - это сочетание компактных хранилищ информации (на одном магнитном диске - несколько годовых комплектов толстого журнала, на видеодиске - несколько тысяч) с умением компьютера чрезвычайно быстро и по разным признакам вести поиск и сортировку.

Сегодня в мире около 3 тысяч общедоступных банков данных, у них сотни тысяч абонентов, ежедневно им выдаются миллионы справок, одним словом, банковская служба информационного изобилия, как говорится, признана широко и повсеместно. Последнее слово, правда, у многих наших специалистов вызовет возражение - нередко приходится слышать, что в этой области мы безнадежно отстали и никаких информационных банков у нас пока вообще нет. Подобные высказывания, однако, есть следствие неполной информации о нашей службе информации - компьютерные банки данных в стране существуют уже несколько лет, у них есть свои пользователи, и дело это продолжает развиваться. О том, что сделано, что намечено и хотелось бы сделать в этой сфере, корреспонденту журнала рассказывает доктор технических наук И.А.ВОЛОШИН.

- Обрисуйте, пожалуйста, Игорь Александрович, нынешнее положение дел: сколько в стране компьютерных информационных Центров, где они находятся, какую конкретно информацию в них можно найти?
- Исчерпывающе ответить на эти вопросы непросто. Сейчас многие организации, имеющие ЭВМ,- институты, заводы, конструкторские бюро,- создают свои базы данных, в основном для внутреннего пользования. Иногда такой банк приобретает широкую популярность, как, например, база данных ИВТАНа - Института высоких температур Академии наук, где собрана богатая информация о теплофизических свойствах веществ при высоких температурах. Но если отвлечься от местных баз данных, то крупных электронных хранилищ информации в стране сейчас немногим более десяти. Все они входят в ГАСНТИ - Государственную автоматизированную систему научно-технической информации, и образуют, как принято говорить, распределенный банк данных. Сегодня в его составе уже действуют 10 центральных банков, находящихся в Москве, в разных информационных центрах, и региональные байки данных в Ленинграде, Киеве, Минске, Перми, Алма-Ате.

Матчасть диванного танкиста - Страница 3 87110210
Рис. М.Аверьянова.

- Назовите их, пожалуйста. И, если можно, хотя бы с минимальной характеристикой самих блоков.
- Первым, видимо, нужно назвать головную организацию всей системы ГАСНТИ - это Всесоюзный институт научной и технической информации (ВИНИТИ), его общий фонд - 6 миллионов записей иа магнитных дисках. В основном это библиографические данные и рефераты статей почти по всем отраслям знаний. Весь фонд разделен примерно на 40 баз данных, это упрощает систему обращения и поиска.
В банке данных Всесоюзного научно-технического информационного центра (ВНТИ-центр) 3 базы данных, в них рефераты диссертаций и научных отчетов о работах, выполненных в исследовательских институтах, конструкторских и технологических бюро, а также сведения об имеющихся в Центре алгоритмах и программах для ЭВМ.
Банк данных Института научной информации по общественным наукам (ИНИОН) имеет примерно 300 тысяч записей - это рефераты статей по экономике, философии, языкознанию, международным отношениям, истории, искусствоведению, праву.
Информационный банк научно-производственного объединения "Поиск" содержит несколько миллионов кратких записей о патентах и авторских свидетельствах. Причем "Поиск" поддерживает связь с крупными международными организациями этого профиля, и в его базах данных отражено практически все, что патентуется в мире.
Всесоюзный научно-исследовательский институт технической информации, классификации и кодирования (ВНИИКИ) создал банк данных, примерно на 300 тысяч записей по государственным стандартам, техническим условиям и иным нормативным документам; данные здесь обновляются и корректируются, в частности, при изменении стандарта.
Банк данных Государственной публичной научно-технической библиотеки (ГПНТБ СССР) объемом примерно 250 тысяч записей содержит сведения о зарубежных периодических изданиях и книгах, а также об Опубликованных алгоритмах и программах.
Появились сравнительно небольшие (30-100 тысяч записей) банки данных и в нескольких отраслевых институтах. В их числе: Всесоюзный институт информации и экономики Министерства приборостроения, средств автоматизации и систем управления (Информприбор), Центральный научно-исследовательский институт информации и технико-экономических исследований в электротехнике (Информэлектро), Центр научно-технической информации по энергетике и электрификации (Ииформ-эиерго), Всесоюэиый научно-исследовательский институт информации и технико-экономических исследований агропромышленного комплекса (ВНИИИТЭИагропром).
В стадии становления отраслевые банки данных в области строительства, медицины и здравоохранения, идет работа по созданию информационных банков для систем материально-технического снабжения, машиностроения и робототехники, для химической промышленности, связи, метеорологии, геофизики, географии и ряда других отраслей. К этому нужно добавить систему банков Государственной службы стандартных справочных данных (ГСССД), создаваемую под эгидой Госстандарта СССР. В них будет собрана вся необходимая специалисту справочная информация по материалам и веществам - от свойств металлов и сплавов до пищевых продуктов. Вообще же в отраслевых банках должна быть собрана информация о продукции предприятий данной отрасли, о самих этих предприятиях, экономических характеристиках производства и изделий, их зарубежных аналогах. Отраслевые базы данных обязательно должны охватывать все министерства, все отрасли народного хозяйства. В этом случае специалист сможет быстро получить нужные ему для работы сведения, например, о конкретном электронном приборе, типовой таре, параметрах телевизора, сорте кукурузы, об определенном типе красителя, артикуле ткани или марке полиэтилена. Не секрет, что сегодня на получение подобной информации нередко затрачивается уйма времени и сил, люди отвлекаются от основного дела, затягивается разработка нового или, что еще хуже, из-за отсутствия информации принимаются неудачные решения, не учитывающие мировой опыт. За всем этим стоят миллионные, если не миллиардные, потери средств, низкое качество изделий, отставание, неконкурентоспособность. Я уже не говорю о перерасходе столь дефицитного ресурса, как трудовые затраты. Создание информационных массивов по всей номенклатуре продукции отраслей народного хозяйства - одна из самых насущных задач развития ГАСНТИ.

- А чем будут располагать местные, региональные банки данных?
- Они в значительной мере нужны для того, чтобы упростить получение информации, чтобы из Хабаровска или из Ташкента не нужно было во всех случаях запрашивать Москву, расходуя немалые средства и перегружая каналы связи. В региональном банке будет дублироваться та часть информации центральных банков, которая, так сказать, пользуется массовым спросом. Не исключено, что местные банки будут иметь более детальную информацию, связанную со своим регионом, и что за такой информацией в них будут обращаться из других регионов. Особое место отводится региональному банку в Волгограде - в нем будет сосредоточена информация о ценных рационализаторских предложениях и производственном опыте. В этот банк будет ежегодно вноситься более 200 тысяч записей. Сегодня в стране работают четыре региональных банка данных, к концу пятилетки их будет 16, причем некоторые, в частности в Риге, вступят в строй в самое ближайшее время.

- Вы упоминали о перегрузке каналов связи. Не может ли случиться так, что этот фактор сведет на нет совершенство компьютерных информационных систем? Ведь сегодня, бывает, мы довольно долго ждем даже обычного междугородного разговора...
- Конечно, информационные банки должны иметь достаточное число каналов электросвязи для доступа абонентов. Поэтому могут использоваться все доступные средства: и телефонные каналы связи, и телеграфные, и специализированная телеграфная сеть ПД-200, о которой у нас знают меньше. Телефонная сеть обеспечивает возможность подключения многих типов абонентского оборудования и широкий диапазон скоростей передачи данных от 300 до 2400 бит в секунду; в первом случае страница машинописного текста передается примерно за минуту, во втором - за несколько секунд. Сеть ПД-200 обеспечивает передачу с относительно небольшой скоростью - 200 бит в секунду, но обладает повышенной надежностью и гораздо менее загружена, а это немаловажный фактор для ряда регионов.
Здесь уместно заметить, что при общении с банком данных в диалоговом режиме передача или прием информации протекают неэкономично: очень много времени вы занимаете канал связи, но по нему ничего не передается - пока прочтешь то, что тебе сообщили, пока подумаешь, что спросить... Это одна из причин, вызвавших к жизни системы передачи данных в режиме пакетной коммутации. В самом общем виде работают они так: данные, идущие ко многим разным пользователям или от них, передаются по одной линии связи, но поочередно, следуют друг за другом в виде очень плотных пакетов информации. Система электронных переключателей (коммутаторов) в особых узлах связи организует все дело так, чтобы передача велась без задержки по свободной линии связи, пусть даже по обходному пути, и чтобы каждый банк и каждый пользователь получал только свою информацию. В мировой практике системы пакетной коммутации уже находят применение, у нас они создаются и успешно вводятся в практику специалистами Всесоюзного научно-исследовательского института прикладных автоматизированных систем (ВНИИПАС) и других организаций.

- Хотелось бы несколько подробнее узнать о процедуре взаимодействия с банком данных. И о том, как обращаться к нему за информацией...
- Прежде всего для этого нужно стать пользователем данного банка, его абонентом. Обратившись в организацию, где функционирует банк, вы получите свой пароль, которым будете пользоваться, подключаясь к данному банку. Далее следует типичная процедура: вы называете ключевые слова или иные реквизиты своего запроса и прежде всего видите на экране цифру - количество имеющихся в банке записей, которые могут быть вам представлены. Если их слишком много (нельзя же сразу просмотреть несколько тысяч рефератов), то вам следует ввести дополнительное ограничение. Например, попросить рефераты не всех статей, а только за последние два года. Или, кроме ключевых слов "автомобили легковые", ввести еще "японские". И вновь на экране появится цифра, уже, конечно, значительно меньшая. Уточнив свои требования и удовлетворившись предложенным количеством записей, вы даете определенную команду, и тексты рефератов появляются на экране дисплея. Имея принтер, можно тут же получить распечатку нужного текста.

- Можно ли, ознакомившись с рефератом, получить текст всей статьи?
- Можно, но, как правило, это уже совсем другая процедура: сделав запрос, вы получите копию текста по почте. В частности, при обращении в ВИНИТИ на это может уйти 10-15 дней. В банке ВНИИТИЦентра вы можете заказать копию статьи прямо со своего терминала.

- А нельзя ли сразу увидеть всю эту статью на дисплее?
- В мире лишь небольшое число банков хранит на магнитных дисках полные тексты и передает их по каналам связи. Но с использованием видеодисков ситуация может измениться.

- Много ли нужно платить за пользование нашими банками данных?
- Не очень. Если вы находитесь в другом городе, то, как и при междугородном телефонном разговоре, платите за время, в течение которого занимаете канал связи. Плата за пользование самим банком обычно 20-60 копеек в минуту. Это близко к мировым ценам.

- Какая аппаратура нужна пользователю для работы с банком?
- Во-первых, вам нужен дисплей и клавиатура, это может быть практически любой серийный терминал, например, из венгерской серии ДТ-52100 или наши 15 ИЭ 00013 из комплекса ДВК и ВТА-2000 из комплекса машины СМ-4. Можно пользоваться и персональным компьютером, например, таким, как Искра-226, Роботрон-1715, ЕС-1840, в общем, практически любым. Во-вторых, необходим еще какой-либо типовой модем - модулятор-демодулятор, он превращает сигналы, посылаемые вами с терминала, в те, что можно передавать по линии связи с учетом выбранного способа и скорости передачи. Модем также производит обратное преобразование, когда информация поступает из банка.

- Для многих, видимо, будет приятной новостью то, что у нас работают компьютерные банки данных и что несложно стать их пользователем. И все же масштабы дела, судя по тому, что наблюдается в мире, должны быть совсем иными. Может ли и у нас в стране произойти скачок, с тем чтобы для каждого желающего обращение в электронный банк данных стало рядовым явлением, таким же, скажем, как посещение библиотеки?
- Этот тоннель нужно рыть с двух сторон. Во-первых, необходимо прививать вкус к компьютерной информатике, разъяснять возможности автоматизированных информационных банков, расширять круг пользователей. А во-вторых, нужно укреплять сами банки данных, обеспечивать их высокопроизводительной техникой, обогащать фонды, совершенствовать сервис, системы доступа и обработки информации. В этой части чувство оптимизма вселяет то, что мы с самого начала не впали в зависимость от чужих достижений, не занимаемся бездумным подражанием. У нас есть прекрасные коллективы специалистов, глубоко понимающие, что и как нужно делать, и уже немало сделавшие реально.
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Фев 07, 2023 12:25 am

11/87
Одна из важнейших задач, стоящих сейчас перед нашей страной,- широкое внедрение вычислительной техники в народное хозяйство и научные исследования. Эффективное освоение ЭВМ во всех сферах производства и науки предполагает всеобщую компьютерную грамотность. Этой цели посвящена открывшаяся в нашем журнале в 1985 году "Школа начинающего программиста". Первые ее занятия проводились с владельцами программируемых микрокалькуляторов, затем в "Школе" изучался алгоритмический язык Бейсик, а в этом номере завершается изучение языка Паскаль.
Ближайшие занятия планируется отвести языкам Рапира, Си, Лого. Напоминаем, что лектором в нашей "Школе" может стать всякий, кто сумеет описать какой-либо из этих языков в статье объемом 25 машинописных страниц - дать представление о специфике языка, о методах составления программ на нем.

ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ШЕСТНАДЦАТОЕ, где рассматриваются приемы написания программ на Паскале. Особенно подробно в этой связи разбирается понятие процедуры.
Ведут занятие кандидат технических наук И.М.КОНТОРОВИЧ (Витебск), кандидат физико-математических наук Ю.В.ПОБОЖИЙ, кандидат физико-математических наук Г.В.СЕНИН (Москва).

С ЧЕГО НАЧИНАЕТСЯ СОСТАВЛЕНИЕ ПРОГРАММЫ, предназначенной для решения какой-либо задачи? С надежного уяснения задачи. На это не надо жалеть времени. Браться за написание программы, не разобравшись до конца, для чего она составляется,- пустая трата сил: все обязательно придется переделывать.

Когда задача понята, можно приступать к разработке плана ее решения - алгоритма. Начать проще всего с того, чтобы на обычном языке, на котором мы думаем и разговариваем, шаг за шагом описать, что требуется сделать для достижения результата.

Поскольку наше мышление устроено так, что в каждый момент времени мы можем держать в поле зрения лишь небольшое число данных, то при разработке алгоритма целесообразно использовать принцип проектирования "сверху вниз". Вот в чем он заключается. В самом начале описываем алгоритм так, чтобы он состоял из немногочисленных и крупных (но не в ущерб ясности!) шагов. Каждый шаг излагаем в виде четкой и краткой (но не в ущерб пониманию!) инструкции. Такая инструкция указывает, ЧТО нужно сделать, но не разъясняет, КАК это должно быть сделано. Прочитав эту запись алгоритма, убеждаемся, что последовательное выполнение всех шагов приведет к правильному решению поставленной задачи. Затем расписываем каждый шаг в виде последовательности более мелких шагов, показывающих более подробно, как должен быть выполнен расписываемый шаг. Снова читаем написанное в поисках возможных ошибок и исправляем их, если они обнаружились. Размельчение каждого шага производится до тех пор, когда получившуюся запись можно изложить на выбранном для составления программы алгоритмическом языке с помощью трех основных конструкций программирования: следование, альтернатива (от самой простой ее разновидности, условного оператора, до наиболее общей, выбора), цикл (разновидности которого - цикл "до", цикл "пока", цикл с параметром).

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

КОНСТРУКЦИИ ПРОГРАММИРОВАНИЯ. Мы предполагаем, что читатель знаком с ними по одному из недавних занятий "Школы начинающего программиста" - десятому (см. 11/86).

Итак, условный оператор. Пример - фрагмент программы, подсчитывающий число отрицательных элементов массива. Если элемент A[I] меньше нуля, то счетный индекс K увеличивается на единицу.

Матчасть диванного танкиста - Страница 3 87110310

Запись этой конструкции на Паскале понятна, если знать, что IF значит ЕСЛИ, а THEN - ТОГДА:

IF A[I]<0 THEN K:=K+1;

Напомним, что слова, употребляемые для записи операторов, называются служебными.

Альтернатива. Допустим, если некая величина X меньше нуля, то Y=X**2, в противном случае Y=X.

Матчасть диванного танкиста - Страница 3 87110410

Здесь для записи на Паскале нам понадобится еще одно служебное слово, ELSE - ИНАЧЕ.

IF X<0 THEN Y:=X*X ELSE Y:=X;

В обоих этих примерах, намеренно простых, вслед за словами THEN и ELSE стоит по одному оператору. Но если бы их было несколько, то всю их цепочку (ее называют составным оператором) следовало бы заключить в "скобки" BEGIN и END. Заметим, что в Паскале составные операторы оформляются таким образом во всех конструкциях программирования.

Выбор. Он производится в зависимости от значения некоторого выражения (в приведенном примере состоящего из одной переменной ДЕНЬНЕДЕЛИ). Возможные его значения перечисляются после служебного слова OF. В этом перечне отыскивается то значение, которое в данный момент имеет выражение, и выполняется записанный правее, через двоеточие оператор. Если же такого значения в перечне нет, выполняется оператор, записанный после слова ELSE. Этот последний оператор и вводящее его слово ELSE могут отсутствовать в операторе выбора. Но тогда, если искомого значения в перечне не нашлось, выдается сообщение об ошибке и выполнение программы прекращается.

CASE ДЕНЬНЕДЕЛИ OF
СУББОТА:НАЦЕНКА:=ПЛАТА*0.1;
ВОСКРЕСЕНЬЕ:НАЦЕНКА:=ПЛАТА*0.2;
ELSE НАЦЕНКА:=0
END;

Если какой-нибудь оператор должен быть выполнен при разных значениях выражения, они записываются слева от этого оператора через запятую. В только что разобранном фрагменте предпоследнюю строчку можно заменить такой:

ПОНЕДЕЛЬНИК, ВТОРНИК, СРЕДА,
ЧЕТВЕРГ, ПЯТНИЦА: НАЦЕНКА:=0;

Цикл "до". Пусть требуется подсчитать S1 - сумму N элементов массива A[I], a также S2 - сумму их квадратов.

Матчасть диванного танкиста - Страница 3 87110510

S1:=0;S2:=0;I:=1;
REPEAT
S1:=S1+A[I];
S2:=S2+A[I]*A[I];
I:=I+1;
UNTIL I>N;

Судя по схеме, суммирование продолжается до тех пор, как I превысит N. Рядом показано, как соответствующий этой схеме фрагмент запишется на Паскале (UNTIL - ДО ТЕХ ПОР).

Цикл "пока". Изменим условия цикла:

Матчасть диванного танкиста - Страница 3 87110610

S1:=0;S2:=0;I:=1;
WHILE I<=N DO
BEGIN
S1:=S1+A[I];
S2:=S2+A[I]*A[I];
I:=I+1;
END;

S1:=0;S2:=0;
FOR I:=1 TO N DO
BEGIN
S1:=S1+A[I];
S2:=S2+A[I]*A[I];
END;

Можно сказать, что теперь суммирование длится, пока I не превышает N. Здесь же, соответствующий фрагмент на Паскале (WHILE - ПОКА). Ниже то же самое выражено в виде цикла с параметром - его роль играет переменная I.

Рассмотренные нами конструкции программирования известны во многих языках, так что в их записи на Паскале нет ничего характерного, кроме вида служебных слов. Специфика Паскаля проявляется в некоторых деталях при решении тех задач, для которых этот язык особенно эффективен. Это, например, обработка всевозможных таблиц, картотек, операции с такими структурами, как запись, файл. Скажем, когда в цикле ведется поиск нужного элемента таблицы, то из цикла можно выйти досрочно с помощью оператора EXIT (ВЫХОД; в стандартной версии его, впрочем, нет), как только искомый элемент найден. Другой пример: обработка полей записи. В цепочке операторов, ведущих обработку, можно указывать лишь имя поля, если перед этим написать служебное слово WITH (предлог С), потом имя записи, потом слово DO (ВЫПОЛНЯТЬ).

Такие детали лучше всего усваиваются в ходе практической работы, так что в нашей ознакомительной беседе мы не останавливаемся на них и лишь советуем читателю получше освоить эти "маленькие хитрости", когда дело дойдет до конкретного программирования. Ток и язык будет освоен во всем его богатстве, и программы станут получаться более удачными.

ФУНКЦИИ. В рассмотренных примерах нам несколько раз требовалось вычислить квадрат некоторой величины - X или А[I]. Всякий раз мы получали результат умножением величины на себя. Можно было для той же цели применить одну из стандартных функций Паскаля - возведение в квадрат.

Вот несколько стандартных функций этого языка (их называют встроенными).

Матчасть диванного танкиста - Страница 3 87110710

При составлении программы этот список можно пополнять новыми функциями, нестандартными, которые упростят вычисления. В нем, например, отсутствуют гиперболические функции sh(x)=(exp(x)-exp(-x))/2 и ch(x)=(exp(x)+exp(-x)). Чтобы пользоваться ими, не выполняя каждый раз подсчеты по приведенным формулам, надо определить обе функции в разделе описаний, непосредственно перед телом программы. В манере, принятой в Паскале, обозначим первую из них, скажем, так: SHYP(X), а вторую CHYP(X).

При описании функции следует указывать, к какому типу принадлежит ее аргумент (это пишется в скобках) и ее значение (пишется дальше, за скобками; для наших гиперболических функций обе эти величины - действительные, то есть типа REAL). Начинается описание со слова FUNCTION (ФУНКЦИЯ):

FUNCTION SHYP(X:REAL):REAL;
BEGIN
SHYP:=(EXP(X)-EXP(-X))/2;
END;
FUNCTION CHYP(X:REAL):REAL;
BEGIN
CHYP:=(EXP(X)+EXP(-X))/2;
END;

Когда при трансляции программы в ней встретится, скажем, символ SHYP(A), то транслятор перейдет к определению этой функции в разделе описаний и прежде всего проверит, принадлежит ли А к типу REAL, который указан в описании для аргумента функции. (Если не принадлежит, на экране дисплея появится сообщение об ошибке, и программа выполняться далее не будет). Над указанным в программе аргументом А будут совершены те же действия, которые в определении функции, в строках между словами BEGIN и END предписано выполнить с фигурирующим там аргументом X. Затем транслятор вернется к тому месту программы, откуда произошел переход, и вычисленное значение присвоит выражению SHYP(A).

Отметим, что аргументом любой функции - как стандартной, так и нестандартной - могут служить не только переменные или константы, но и составленные из них выражения.

ПРОЦЕДУРЫ. Нестандартные функции - не единственная возможность, которую Паскаль предоставляет пользователю для разработки новых операций над данными, наиболее подходящих для решения той или иной задачи. Но чтобы продолжить разговор об этом, вернемся к самому началу занятия, к рассказу о порядке составления программ.

Мы говорили, что алгоритм сначала целесообразно записать на естественном языке в виде короткой последовательности крупных шагов. Затем каждый шаг будет дробиться на более мелкие шаги и их описания будут все более приближаться к окончательной записи на алгоритмическом языке. Тем самым текст алгоритма будет становиться все более длинным и все менее понятным.

Казалось бы, такая утрата компактности и ясности неизбежна. И тем не менее в Паскале есть что противопоставить ей. Он позволяет отразить в программе первоначальную структуру алгоритма, неизмельченную и потому наглядную. Оказывается, переводу на Паскаль поддается уже она. Надо лишь каждому из ее блоков дать свое имя, а потом скомпоновать эти имена с помощью необходимых логических связок.

Чтобы программа "знала", в чем заключается выполнение каждого блока, соответствующая информация помещается в разделе описаний, непосредственно перед телом программы. Здесь после служебного слова PROCEDURE пишется имя блока, затем в скобках, через запятую перечисляются переменные, необходимые для описания его работы, а выполняющие эту работу операторы располагаются далее между словами BEGIN и END.

Такие блоки называются процедурами.

Поясним это на примере квадратного уравнения ax2+bx+c=0. Как описывается его решение в самом общем виде? Вычислить дискриминант d; если он неотрицателен, вычислить действительные корни x1 и x2 по одним формулам, если отрицателен, вычислить комплексные корни x1 и x2 no другим формулам. Обозначим процедуру вычисления дискриминанта именем ДИСКРИМИНАНТ, процедуру вычисления действительных корней - КОРНИ_Д, комплексных - КОРНИ_К. Конечно, прежде чем решать уравнение, надо сообщить машине его коэффициенты, а перед тем, как вводить их с помощью оператора READLN, хорошо бы вывести на экран дисплея с помощью оператора WRITE запрашивающую эти данные фразу. С учетом всего сказанного программа запишется коротко и ясно:

BEGIN
WPITELN('ВВЕДИТЕ КОЭФФ.УРАВНЕНИЯ А,В,С'); READLN(A,B,C);
ДИСКРИМИНАНТ(А,В,С,D);
IF D>0 THEN КОРНИ_Д(А,В,С,D)
ELSE КОРНИ_K(A,B,C,D);
WRITELN('X1=',X1,' X2=',X2)
END.

Расшифровки процедур надо поместить, как уже говорилось, перед самим телом программы. Например, вычисление дискриминанта будет описываться так:

PROCEDURE ДИСКРИМИНАНТ(P,Q,R:REAL;VAR S:REAL);
BEGIN
S:=Q*Q-4*P*R;
END;

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

О характере и способе записи этой информации поговорим подробнее.

В нашем примере прежде всего бросается в глаза, что и в заголовке и в описании процедуры переменные обозначены не так, как в основной программе. Такой прием традиционен - благодаря ему к одной и той же процедуре можно обращаться из разных мест основной программы для обработки разных переменных.

Проследим внимательнее, как это происходит. Когда в программе встречается обращение к процедуре - в нашем примере ДИСКРИМИНАНТ(А,В,С,D) - компьютер отыскивает во вводном разделе программы описание процедуры с таким именем-в нашем примере PROCEDURE ДИСКРИМИНАНТ(Р,Q,R,S). Далее компьютер проверяет, совпадают лн количество и типы переменных, указанных в обращении к процедуре и в заголовке ее описания. (Если полного совпадения нет, выдается сообщение об ошибке и выполнение программы прекращается). Затем первой из переменных, перечисленных в заголовке процедуры, присваивается значение, которое в данный момент имеет первая из переменных, указанных в обращении к процедуре. По порядку идет присваивание значений и следующим переменным, то есть Р:=А, Q:=B, R:=C, S:=D. С переменными, перечисленными в заголовке процедуры, совершаются все действия, указанные в ее описании между словами BEGIN и END.

Характер взаимодействия между основной программой и процедурами подчеркивается терминологией. Переменные, поименованные в заголовке той или иной процедуры, называются формальными параметрами - ведь онн принимают значения лишь при обращении к процедуре. А те, что указываются в обращении, называются фактическими параметрами, поскольку именно их значения передаются параметрам формальным.

В свою очередь, формальные параметры делятся на входные и выходные. Первые играют роль исходных данных при выполнении процедур, вторые - роль результатов. В нашем примере входные параметры - это Р, Q, R. Выходной - S.

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

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

Сказанное позволяет понять те выгоды, которые сулит использование процедур. Если выражаться предельно кратко, процедуры дают возможность разделять ЧТО и КАК.

Когда мы пытаемся вникнуть в суть большой программы, содержащей процедуры, нам важно понять, ЧТО они делают, не заботясь о том, КАК они это делают. Когда же мы подробно анализируем работу программы, нам важно разобраться, КАК выполняются процедуры, оставляя в стороне вопрос, ради ЧЕГО происходят обращения к ним.

Конечно, эти аспекты неразделимы и в принципе дополняют друг друга. Имя процедуры останется пустым звуком, если не объяснить, как она выполняется. С другой стороны, сами по себе процедуры - это деревья из поговорки, за которыми не видно леса.

В то же время оба аспекта в высокой степени независимы. Не играет большой роли, как реализованы процедуры, если вся программа в целом работает так, как было задумано. Возможно, она работает не очень быстро, но правильно. Если же хочется улучшить ее работу, можно заняться совершенствованием процедур, ничего не менял в самой программе.

...
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Фев 07, 2023 12:32 am

...

Приверженец Бейсика может заметить, что подпрограммы этого языка мало чем отличаются от процедур Паскаля: обе, мол, предназначены для того, чтобы сократить запись программы. В подобном заявлении есть доля истины, но не вся истина. Такой взгляд на процедуры очень узок. Дело рассматривается так, как если бы программа была сначала составлена из стандартных операторов, а затем мы взялись ее сокращать путем выявления повторяющихся участков и вынесения их в подпрограммы (если речь идет о Бейсике) или процедуры (если речь идет о Паскале). При таком подходе обобщение подсказывается уже созданным текстом программы. А создается он в Бейсике и Паскале неодинаковыми путями. Для Бейсика характерен путь "снизу вверх", от стандартных элементарных операторов - сразу к полному тексту программы. Когда составляешь программу на Бейсике, он словно все время хватает тебя за руку: "Нет, ты мне сразу скажи, как ты будешь это делать". Программист вынужден разрываться между абстрактным и конкретным уровнями мышления. Его идеи, существо задачи - только в голове; в тексте программы - неявное отражение этих идей, с трудом просматриваемое сквозь рябь нумерованных строчек из операторов. Для Паскаля же, подчеркнем еще раз, характерен путь "сверху вниз", когда программист, исходя из существа решаемой задачи, вводит в программу необходимые для ее решения новые действия. Паскаль предлагает здравый компромисс между тем, что легко реализовать (набор конкретных "машинных" операторов), и тем, что удобно использовать (перечень понятных для человека процедур). Как правило, удобные понятия неоднозначны или сложны для реализации, "машинные" же плохо отвечают реальным задачам, "не дотягивают" до них. По аналогии здесь можно вспомнить о двух методах строительства: из кирпичей и из крупных блоков. Строить из блоков быстрее, но возникает опасность стандартизации. Уникальное сооружение из них не построишь, тут неизбежно придется опускаться до уровня кирпичей. Придерживаясь архитектурно-строительных образов, можно сказать, что Паскаль позволяет программисту сначала самому сконструировать блоки, а затем возводить из них задуманное здание.

ПРИМЕРЫ ПРОЦЕДУР. Вспомним описанную на прошлом занятии школьную картотеку. Предположим, в некоторой программе требуется подсчитывать число мальчиков и девочек в определенном классе. Запишем в программе обращение к соответствующей процедуре - озаглавим ее МАЛЬЧИКИ_ДЕВОЧКИ [Внимательный читатель отметит, что в заголовке процедуры употреблена "запрещенная" (см. предыдущее занятие) буква Ч. Это сделано лишь ради выразительности]. Перед обращением поставим строчки, запрашивающие название класса:

WRITELN('ВВЕДИТЕ НАЗВАНИЕ КЛАССА - ЦИФРА, БУКВА');
READLN(I,С);

Введенную процедуру опишем так:

PROCEDURE МАЛЬЧИКИ_ДЕВОЧКИ
(VAR S:КАРТОТЕКА;VAR M,F:INTEGER);
(*М,F-ЧИСЛ0 МАЛЬЧИКОВ И ДЕВОЧЕК В ШКОЛЕ S*)
VAR J:INTEGER;
BEGIN
M:=0;F:=0;
FOR J:=1 TO 40 DO
(*ПРОСМОТРЕТЬ ВСЕ АНКЕТЫ В КЛАССЕ*)
WITH S[I,C,J] DO
IF СТ=УЧЕНИК THEN
IF ПОЛ=ЖЕНСКИЙ THEN F:=F*1 ELSE M:=M*1;
END;

Перед началом подсчета обоим счетчикам, F и М, присваиваются нулевые значения. В Паскале не действует принцип умолчания, столь характерный для Бейсика, по которому каждая переменная перед первым использованием приравнивается к нулю.

Оборот WITH... DO позволил немного сократить текст процедуры - не упоминать имя записи при указании ее поля. Без такого оборота пришлось бы написать:

IF S[I,C,J].CT=УЧЕНИК THEN
IF S[I,C,J].ПОЛ=ЖЕНСКИЙ THEN F:=F+1 ELSE M:=M+1;

Переменная S обозначена в заголовке как выходная, хотя по смыслу она является входной. Но если бы мы обозначили ее как входную, она целиком дублировалась бы при вызове процедуры, а это было бы неоправданно, если учесть огромный размер картотеки,- ведь нам нужны лишь немногие данные из нее. Конечно, обозначая переменную как выходную, мы позволяем изменять ее при выполнении процедуры. Но здесь опасаться изменений не приходится: в нашей процедуре элементы картотеки используются лишь в операциях сравнения.

Среди переменных, использованных при записи процедуры, особое положение занимает J. Одна лишь она описывается вслед за заголовком процедуры. Другие переменные - S, F, М - очевидно, в таком описании не нуждаются: они используются в основной программе и, стало быть, описываются во вводной ее части.

Это замечание подсказывает нам, что все данные, встречающиеся в программах на Паскале (как переменные, так и константы), можно разбить на две группы.

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

Другие данные используются лишь в той или иной конкретной процедуре или функции. Они описываются в ней, и только на время ее выполнения для них отводится место в памяти ЭВМ. Ни основной программе, ни другим процедурам н функциям эти данные не доступны. Они называются локальными. Это, например, счетчик J в нашем примере.

После выполнения процедуры компьютер "забывает" значения ее локальных переменных. Поэтому их можно обозначать теми же именами, что локальные переменные других процедур и функций. Могут быть у них "тезки" и в основной программе.

Применение локальных данных способствует достижению той цели, которую преследует использование процедур: экономится память ЭВМ, программа становится более понятной, так как из нее в процедуры выносятся мелкие детали.

"ПРОГРАММЫ = АЛГОРИТМЫ + СТРУКТУРЫ ДАННЫХ". Обратимся еще раз к школьной картотеке. Ясно, что полезна она будет лишь тогда, когда удастся манипулировать ею, то есть производить различные операции с содержащимися в ней данными - например, анализировать успеваемость учеников по различным предметам или подсчитывать средний возраст учителей.

Посмотрим, насколько отвечает своему назначению наша картотека. Можно ли, например, с ее помощью описать поступление нового ученика в какой-то класс? Нет - хотя бы потому, что в нашей картотеке не отражено количество учеников в каждом классе.

Исправить этот недостаток можно, введя дополнительную запись - обозначим ее КЛАСС, а количество учеников выразим в ней переменной КОЛВО. В разделе описания нашей программы вслед за описанием типа АНКЕТА (см. 9/87) напишем:

КЛАСС=RECORD
КОЛВО=INTEGER:
COCTAB:ARRAY[1..40] OF AHKETA;
END;
КАРТОТЕКА=RECORD
УЧЕНИКИ:ARRAY[1..10,'А'..'Д'] OF КЛАСС;
ПЕДАГОГИ:КЛАСС
END;
VAR ШКОЛА123:КАРТОТЕКА;

После этого нетрудно запрограммировать процедуру приема новичка в класс:

PROCEDURE НОВИЧОК(VAR K:КЛАСС;VAR А:АНКЕТА);
BEGIN
WITH K DO
IF К0ЛВ0>=40 THEN
(*ЗДЕСЬ СЛЕДУЮТ ОПЕРАТОРЫ ОБРАБОТКИ ОШИБКИ -
ПРЕВЫШЕНО ДОПУСТИМОЕ ЧИСЛО УЧЕНИКОВ В КЛАССЕ*)
ELSE BEGIN
К0ЛВО:=К0ЛВ0+1;
СОСТАВ[КОЛВО]:=A;
END (*IF*);
END (*НОВИЧОК");

Разобранный пример говорит о том, что процедуры и типы данных, используемые и программе, следует разрабатывать и описывать и тесной взаимосвязи. Иначе программисту грозит тупиковая ситуация: плохо продуманная структура данных будет требовать переделки с появлением новых процедур; это, в свою очередь, повлечет необходимость переписывать ранее созданные процедуры, затем снова пересматривать структуру данных, к тому же возникающие переделки надо будет согласовывать друг с другом... Все это неизбежно порождает трудно исправимые ошибки.

Параллельную разработку, взаимное согласование процедур и типов данных в Паскале удается осуществлять последовательно и систематически, создавая программы "сверху вниз", постепенно переходя от общей постановки задачи к рассмотрению подзадач. Такая стратегия охватывает как алгоритм, лежащий в основе разрабатываемой программы, так и структуру используемых в ней данных, то есть обе важнейшие стороны программирования.

Вспомним емкую формулу Н.Вирта, создателя языка Паскаль: "Программы = алгоритмы + структуры данных". Эта концепция лежит в основе Паскаля.

ВВОД И ВЫВОД ДАННЫХ. До сих пор мы подробно говорили о процедурах, которые разрабатывает и описывает программист. Из-за этого их иногда называют нестандартными. Есть в Паскале и стандартные процедуры. Наиболее употребительные из них уже знакомы нам. Процедуры WRITE и WRITELN выводят данные на экран дисплея. Процедуры READ и READLN используются для ввода данных в оперативную память ЭВМ с пульта дисплея. Их, конечно, можно называть и операторами, как мы уже делали. Но, говоря строго, они представляют собою процедуры. Об этом можно догадаться по тому, что вслед за их именами в программе ставятся скобки.

Различие между процедурами WRITE и WRITELN невелико. Если вывод на экран производится с помощью первой, то курсор остается в той же строке, что и последний из выведенных символов, справа от него. После использования процедуры WRITELN курсор перемешается в крайнюю левую позицию следующей строки. В скобках может стоять либо текст, ограниченный апострофами (на экран он выводится без них), либо выражение (выводится его значение), либо логическое соотношение между переменными (если оно верно, на экране появляется сообщение TRUE, то есть ИСТИНА, если неверно - FALSE, ЛОЖЬ). Можно записать в скобках несколько данных, разделяя их запятыми.

Например, в программе вычислено значение суммы 13 слагаемых, равное 127.85, и на экран надо вывести сообщение о количестве слагаемых (выражающую его целочисленную переменную обозначим уже употреблявшейся однажды аббревиатурой КОЛВО) н величине суммы (так ее и обозначим: СУММА). Соответствующий фрагмент программы может выглядеть так:

WRITELN ('КОЛИЧЕСТВО СЛАГАЕМЫХ=',КОЛВО);
WRITELN ('СУММА=',СУММА);

После его выполнения на экране возникнут две строки:

КОЛИЧЕСТВО СЛАГАЕМЫХ=13
СУММА=0.12785Е+03

Второе число выведено в экспоненциальной форме: слева от буквы Е - мантисса, справа - порядок; в привычную форму это переводится так: 0.12785*10**3=127.85.

Чтобы выводимая информация выглядела более выразительно, в скобках можно приписывать к ней через двоеточие дополнительные указания. Например: WRITELN('КОЛИЧЕСТВО СЛАГАЕМЫХ =', КОЛ-ВО:3). Значение целочисленной переменной КОЛВО при этом будет размещено на поле из трех позиций и сдвинуто к nравому краю этого поля. Если указанного места не хватит, то под изображение переменной будет отведено наименьшее достаточное число позиций.

Если же написано WRITELN('СУММА =',СУММА:18:3), то под переменную СУММА, включая десятичную точку, будет отведено 18 позиций, а под дробную его часть - три. На экране появится:

КОЛИЧЕСТВО СЛАГАЕМЫХ = _13
СУММА = _____________127.850

Теперь о вводе информации. Он требует осмотрительности.

Если вводимый элемент данных принадлежит к типу INTEGER, то сначала можно ввести несколько пробелов, а затем набирать цифры. Машина будет воспринимать их до тех пор, пока не будет нажата какая-нибудь нецифровая клавиша. Образованное набранными цифрами значение и присваивается переменной. Если первый из вводимых символов - не пробел и не цифра, то машина выдаст сообщение об ошибке.

Элемент данных типа REAL (то есть действительное число) можно вводить либо в наиболее привычной форме, где дробная часть отделена от целой точкой, либо в экспоненциальной форме, например: 0.12785E+03.

Если элемент данных относится к типу CHAR, то первый же из введенных символов станет значением этого элемента. Когда желательно ввести строку символов и сделать ее значением какой-то переменной, следует еще в разделе описания причислить эту переменную к типу ARRAY OF CHAR (массив символов).

После использования процедуры READLN курсор переводится на новую строку, а если используется процедура READ - не переводится.

В программах, которые мы рассматривали в качестве примеров, строке READLN всегда предшествовала строчка WRITE или WRITELN: перед вводом информации на экране дисплея появлялся соответствующий запрос. Этого полезного правила мы советуем придерживаться всегда в целях удобства работы с программой.

Пусть, например, необходимо ввести значение переменной ИНТЕРВАЛ, равное 0.2. Ввод оформляем в программе так:

WRITE('ВВЕДИТЕ ДЛИНУ ИНТЕРВАЛА. ИНТЕРВАЛ =');
READLN(ИНТЕРВАЛ);

На экране возникнет строка:

ВВЕДИТЕ ДЛИНУ ИНТЕРВАЛА. ИНТЕРВАЛ = 0.2

Здесь число введено с пульта. После ввода нужно нажать клавишу ВК-и тогда набранное значение будет присвоено переменной ИНТЕРВАЛ.

Нажатием той же клавиши заканчивается ввод каждого элемента данных - стоят ли они в скобках поодиночке или разделяются запятой.

Если в программе предполагается ввод данных, то после ее имени в скобках, согласно классической версии Паскаля, надо написать слово INPUT, если предполагается вывод - OUTPUT, если то и другое - оба слова через запятую. Забегая вперед, скажем, что если в программе будут использоваться какие-то файлы, то их имена тоже указываются в скобках через запятую.

Другие стандартные процедуры относятся к работе с файлами, к рассказу о которых мы переходим.

ФАЙЛЫ. Любая программа предназначена для обработки исходных данных. Эти данные можно ввести в оперативную память ЭВМ, например с клавиатуры. Так оно и происходило во всех разбиравшихся нами до сих пор примерах. Однако часто бывает необходимо подготовить исходные данные заранее и записать их во внешнюю память с тем, чтобы вводить в оперативную память при решении задачи. Нередко их требуется хранить подолгу и использовать время от времени, причем в различных программах, или порциями, поскольку общее их количество может превышать объем оперативной памяти.

Подобным потребностям отвечает понятие файла (от слова FILE - КАРТОТЕКА). Под этим термином понимается упорядоченный набор данных, а также способ его организации, хранения и доступа к нему.

Элементом любого файла в Паскале является переменная файлового типа - минимальный логически завершенный набор данных определенной и одинаковой структуры (от файла к файлу она, разумеется, может меняться). Элементы файла могут принадлежать к одному из четырех стандартных типов (INTEGER, REAL, CHAR, BOOLEAN), к любому созданному на их основе перечислимому типу, могут быть записями.

Прежде чем создавать файл, надо решить, к какому типу будут относиться его элементы, и, если надо, описать этот тип. Например: TYPE ЭЛЕМЕНТ=(1..114). Прежде чем использовать файл, его нужно объявить в программе. Скажем, так:

VAR ДАННЫЕ: FILE OF ЭЛЕМЕНТ;

Описывать число компонент, которые могут содержаться в файле, не требуется. И в этом состоит одно из достоинств нового понятия. Все встречавшиеся нам ранее структуры данных были конечными, число их компонент и размер компонент заранее известны. Все это, конечно, облегчало работу с ними. На практике, однако, часто бывает удобно оперировать с потенциально бесконечными структурами. Наиболее простой из структур подобного вида является последовательность. На идее последовательности и основывается понятие файла. Поясняя его, будем обозначать всю последовательность компонент файла символом F, его отдельную компоненту - K, тип, к которой она относится,- T.

Для работы с файлами, как уже отмечалось, в Паскале существует несколько стандартных процедур.

Построение пустой последовательности: REWRITE(F). Текущее содержимое F пропадает. В ней теперь нет ни одного элемента и она состоит только из особого знака - признака конца. С этого начинается создание новой последовательности.

Удлинение последовательности: WRITE(F,K). Элемент K типа T добавляется к последовательности F, становится последней ее компонентой.

Начало просмотра: RESET(F). Переход в начало последовательности, на первый ее элемент.

Просмотр очередного элемента: READ(F,K). Переменной K типа T присваивается то значение, которое имеет просматриваемый элемент последовательности F, и вслед за этим "в поле зрения" программы оказывается следующий по порядку элемент последовательности.

Как видим, в любой момент времени программе доступна лишь одна компонента файла. Ее значение, например, можно присвоить какой-то переменной. Так содержимое внешней памяти вовлекается в выполнение программы.

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

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

Рамки журнальной публикации узки. За ними остались вопросы, связанные с конкретной работой по конкретным программам. Надеемся, что они будут затронуты в дальнейшем, когда вслед за теоретическим курсом языка в "Школе начинающего программиста" настанет пора практических упражнений - их роль должны сыграть заметки в разделе "Человек и компьютер".
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Фев 08, 2023 12:20 am

12/87

Матчасть диванного танкиста - Страница 3 87120110
Компьютер "Корвет", входящий в состав нового комплекта учебной вычислительной техники
Фото В.Иванова

ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР: ЧТО, ГДЕ, КОГДА?
Хотелось бы узнать о перспективах производства отечественных персональных ЭВМ. Разрабатывается ли что-нибудь новое, не уступающее западным образцам? Что делают у нас в стране для резкого улучшения качества компьютеров?
В.ТИХОМИРОВ, г.Москва.

Наша школа до сих пор не получила комплект учебной вычислительной техники. В то же время неплохо было бы иметь возможность выбора того или иного комплекта. Существуют ли другие комплекты учебной вычислительной техники, кроме КУВТ-86?
В.ЛАДА, г.Ленинград.

Не так давно появился новый ГОСТ на компьютеры? Что это за ГОСТ? Какие параметры компьютеров он включает?
А.ШАПРАН, г.Ярославль.

Везде идут разговоры о компьютеризации, а персональных компьютеров, как не было, так и нет. "Наука и жизнь" то и дело рассказывает о слабеньких микроэвм, обходя молчанием профессиональные компьютеры.
А.ЦАРЕВ, г.Владивосток.

Три года назад наш журнал рассказал читателям о новом классе вычислительных машин - персональных ЭВМ (см. статью "Нужен пи персонально вам персональный компьютер!", 10/84). Появившись в конце семидесятых годов в западных странах, они быстро стали популярными, большой спрос на персональные компьютеры привел в движение механизмы производства, и примерно через пять лет после появления первых персональных машин фирмы "Эппл" в мире уже было выпущено около 10 миллионов компьютеров такого же примерно назначения. Сегодня их, видимо, уже раз в пять-десять больше, сформировалось несколько основных классов персональных компьютеров, определились области, где их применение особенно эффективно (см. 3,9/86).

Наша промышленность, разрабатывая и выпуская в больших количествах современную вычислительную технику самых разных классов, обратила свое внимание на персональные ЭВМ, к сожалению, с заметным опозданием. Первые отечественные персональные ЭВМ "Агат" начали выпускаться три года назад, хотя, правда, еще и до этого выпускались близкие к персональному компьютеру по некоторым своим характеристикам и возможностям диалоговые вычислительные комплексы ДВК-1 и ДВК-2.

Интерес, который вызвали наши первые персональные компьютеры у самых разных групп их потенциальных пользователей, и особенно богатый зарубежный опыт еще несколько лет назад заставили сделать вывод - в стране в предельно короткие сроки должен быть организован крупносерийный выпуск персональных ЭВМ. Во многих случаях их широкое применение позволит заметно, а иногда и радикально повысить эффективность труда, в частности в научных исследованиях, проектных и конструкторских работах, в образовании, в сфере управления, учета, обслуживания. Помимо большого прямого эффекта, массовая компьютеризация на основе персональных ЭВМ может дать еще и нечто более значительное - общение с компьютером дисциплинирует людей, делает их более собранными, рациональными, четкими, компьютер становится (или, точнее, может стать) серьезным, а часто и непреодолимым препятствием для дезинформации, бессмысленных потерь, хаоса, некомпетентности.

Итак, прошло несколько лет с тех пор, как в адрес персонального компьютера было сказано решительное "да". В то время, скажем прямо, мы практически стояли на нулевой отметке в части выпуска и применения этой техники. Что же изменилось, что произошло за эти годы? Каковы сегодня возможности или по крайней мере перспективы производственника, учителя, врача, руководителя, ученого получить в пользование персональный компьютер?

С просьбой рассказать об этом мы обратились к председателю Государственного комитета по вычислительной технике и информатике Н.В.ГОРШКОВУ.

- В ряде западных стран персональные ЭВМ уже несколько лет как стали рядовым явлением - их можно купить в магазине, они широко применяются в конторах, в конструкторских бюро, на производстве. У нас же широкое использование электронной вычислительной техники, так сказать, индивидуального пользования, по сути, только начинается. Чем, Николай Васильевич, объясняется такое отставание?
- В значительной мере тем, что наши специалисты, прежде всего те, кто занимался малыми ЭВМ, в какой-то момент недооценили или, скажу более жестко, просмотрели этот класс вычислительных машин. В стране интенсивно развивалась промышленность больших и средних ЭВМ, столь необходимых народному хозяйству, а появившиеся за рубежом первые персональные компьютеры поначалу, видимо, казались - да они, собственно говоря, так и рекламировались - лишь средством развлечения или в лучшем случае индивидуальной деловой деятельности. Когда возможности и перспективы персонального компьютера были признаны у нас в полной мере, промышленность многих стран уже вовсю развернула их массовый выпуск. А когда дело касается крупносерийного производства сложных изделий, то наверстать упущенное время не так-то просто - пока, к сожалению, уходят годы на то, чтобы раскрутить маховик промышленности.

- Особенно если у него велики потери на трение, если никак не наказывается медлительность, инертность и, наоборот, если, как уже принято говорить, никакая инициатива не остается безнаказанной...
- Это, к сожалению, общая наша болезнь. Ею страдают и те, кто производит компьютеры, и те, кто делает комбайны, фотоаппараты, обувь. К счастью для страны, политика перестройки, которую целеустремленно и настойчиво проводит наша партия, назвала одной из главных своих задач избавление от хозяйственной инертности, безынициативности, медлительности. Попутно хочу заметить, что когда дело касается крупномасштабного производства, то не менее чем инертность опасна и другая крайность - принятие опрометчивых решений.

- Но ведь нам персональные ЭВМ нужны сегодня. И нужны миллионы таких машин...
- Для страны потребность в персональных ЭВМ действительно измеряется миллионами. Из этого и исходят планы организации производства - к концу пятилетки промышленность должна выйти на миллионный рубеж, выпустить около миллиона персональных компьютеров. Возвращаясь к первому вашему вопросу, хочу заметить, что отставание наше крайне неприятное, но никак не безнадежное. Нечто похожее наблюдалось и в развитии бытового телевидения - широкое производство телевизоров в нашей стране по ряду объективных причин (в основном из-за трудностей первых послевоенных лет) началось заметно позже, чем в других странах. Но довольно быстро разрыв сократился, и сегодня наш рынок вполне насыщен телевизорами. Придет время, будет у нас и изобилие персональных ЭВМ. Другое дело, что сейчас нужно - и для этого есть реальные возможности - ускорить приход этого изобилия.

- Какое ведомство, какое министерство будет у нас выпускать персональные ЭВМ?
- Их выпуск уже начали или начинают предприятия нескольких отраслей промышленности - электронной, приборостроения и средств автоматизации, средств связи, радиопромышленности. Особая нагрузка, конечно, ложится на электронную промышленность, пока единственного нашего поставщика, так называемой элементной базы - микросхем, которые, как известно, являются основой всей современной радиоэлектронной аппаратуры, в том числе и электронных вычислительных машин. Всего к производству персональных компьютеров должно быть причастно несколько десятков разных ведомств.

- Кто же будет дирижировать этим могучим оркестром?
- Задачи координации и, что особо важно, формирования единой технической политики возложены на Государственный комитет по вычислительной технике. Кроме того, создан МНТК "Персональные ЭВМ" - межотраслевой научно-технический комплекс, призванный содействовать быстрейшему решению проблемы. В него входят предприятия ряда отраслей промышленности и академической науки.

- Единая техническая политика начинается, видимо, с каких-то единых требований к изделиям. Сформулированы ли такие требования для персональных ЭВМ?
- Сформулированы и, более того, узаконены: с 1 июля этого года введен Государственный стандарт ГОСТ 27201-87 "Машины вычислительные электронные персональные". В нем обозначены требования к персональным компьютерам пяти типов, пяти разных уровней - от самых простых и дешевых, как их принято называть, бытовых ЭВМ, а согласно этому ГОСТу, машин типа ПМ1, до самых совершенных профессиональных компьютеров типа ПМ5. Думаю, что читателям журнала интересно узнать основные параметры, принятые для этих пяти классов ЭВМ, лучше всего представить их в виде таблицы.

Матчасть диванного танкиста - Страница 3 87120210
Основная рекомендуемая область применения: тип ПМ1 - индивидуальное применение в бытовых условиях; тип ПМ2 - массовое обучение (рабочие места учеников); тип ПМ3 - профессиональное обучение и массовое обучение (рабочие маета преподавателей), профессиональная деятельность (обработка текстов, планирование, экономические и инженерные расчеты); типы ПМ4, ПМ5 - профессиональная деятельность (образование, здравоохранение, научная, инженерная, административно-управленческая, финансовая, экономическая и др.). Автоматизация проектирования научных исследований, технологических процессов.
Примечания.
1. В числителе указаны действующие параметры, в знаменателе - перспективные.
2. По требованию заказчика (потребителя), при наличии конструктивных возможностей, допускается поставка ПЭВМ с емкостью запоминающих устройств меньше установленной для данного типа ПЭВМ, но не ниже значений, установленных в скобках в таблице.
3. Для ПЭВМ типов ПМ1 и ПМ2 по согласованию с заказчиком (потребителем) допускается замена накопителей на гибких магнитных дисках на накопители на кассетной магнитной ленте или магнитофоны.

- К этой таблицей я хотел бы сделать два общих примечания.
Во-первых, принятый ГОСТ можно назвать опережающим, он не фиксирует, как чаще всего бывает, достигнутый уровень, а ориентирует разработчиков и производственников на то, что должно быть сделано с учетом мирового уровня. Это необходимо для того, чтобы в разработки не закладывались достижения вчерашнего дня, к сожалению, такое бывает еще нередко. И не только в вычислительной технике. Во-вторых, стандарт определил персональный компьютер прежде всего с позиций пользователя.

- А в чем это выражается?
- В частности, в том, что предъявлены требования не только к самой машине, но и к периферийным устройствам, которые обязательно должны ей придаваться. Кроме того, в стандарте назван обязательный минимум программного обеспечения, который можно получить от завода-изготовителя вместе с машиной. Сейчас, как правило, завод продает "железо", продает сами машины и мало интересуется тем, кто обеспечит их программами. Для многих пользователей персональной ЭВМ такая система крайне неудобна. Стандарт требует, чтобы вместе с машиной можно было получить пакеты прикладных программ, в частности, для деловой графики, обработки текстов и табличной информации, для работы в локальной (местной) сети ЭВМ, управления базами данных, трансляции с языков программирования Бейсик, Фортран, Паскаль, Си.

- Поскольку вы заговорили о периферийном оборудовании, хотелось бы узнать, как вообще с ним обстоит дело. Сам персональный компьютер так или иначе - изделие привычное для производителей радиоэлектронной аппаратуры, его основа - печатная плата, на которой смонтированы микросхемы. В этом отношении персональный компьютер, мне кажется, принципиально не отличается от телевизора или приемника. А вот, скажем, накопитель информации на магнитных дисках или принтер - изделия нетрадиционные для радиозаводов. Это ведь сложнейшая электромеханика, для нее, видимо, нужно организовывать совершенно новое производство...
- Периферийное оборудование - действительно серьезная проблема, пожалуй, сегодня самая серьезная во всей задаче массового выпуска персональных ЭВМ. Современная периферия - это не просто электромеханика, это электромеханика прецизионная. Вот характерная цифра: в одном из устройств внешней памяти - так называемом винчестерском диске - перемещаемая отдельным электродвигателем магнитная головка при выборке информации из памяти должна с точностью до микрона попадать в нужную область заданной магнитной дорожки. Заметьте, что подобную прецизионную аппаратуру тоже нужно выпускать миллионами экземпляров. И делать ее нужно очень надежной.
Решению проблемы периферийных устройств будет способствовать международная кооперация в рамках СЭВ. Думаю, что полезно представить читателю некоторые периферийные устройства, выпускаемые или планируемые к выпуску в ближайшее время (см. далее).

- Теперь нам не хватает только таблицы с самими персональными компьютерами.
- Ее тоже можно привести, заметив, что в таблице названы лишь отечественные машины, большинство социалистических стран будет выпускать близкие по параметрам свои собственные персональные компьютеры.

Матчасть диванного танкиста - Страница 3 87120310

- Почему в таблице нет более простых ЭВМ? Даже тех, которые уже выпускаются промышленностью...
- Они входят в состав представленных в следующей таблице так называемых КУВТов - комплексов учебной вычислительной техники. Каждый из комплексов - "Корвет" и УКНЦ (учебный комплекс научного центра в Зеленограде) - предназначен для оборудования одного учебного класса, в каждый из них входит 12 компьютеров для рабочих мест учеников (РМУ) и один более совершенный компьютер для рабочего места преподавателя (РМП). Кстати, комплексы УКНЦ и "Корвет" должны сменить выпускаемые сейчас комплексы КУВТ-86, где в качестве машины ученика используется компьютер БК-0010 (см. 8/87), поступающий также для продажи в магазины.

Матчасть диванного танкиста - Страница 3 87120410

- В какой стадии находятся названные в таблицах компьютеры? Они еще только разрабатываются? Или уже готовятся к производству?
- Выпуск всех этих персональных ЭВМ начался, к концу года будут сделаны первые тысячи, в худшем случае сотни экземпляров. В дальнейшем темпы производства должны нарастать. Многое зависит от того, как развернется производство периферии.

- Пойдут ли приведенные в таблице персональные компьютеры в широкую продажу, в магазины?
- Пока нет. Все они стоят довольно дорого, пока в них испытывает острую необходимость народное хозяйство - научные институты, автоматизированное производство, медицинские учреждения, торговля, складское хозяйство, транспорт - все сферы потребления даже трудно назвать. Госкомитету по вычислительной технике передаются функции распределения выпускаемых машин, мы сделаем все возможное, чтобы в первую очередь они попадали не тем, кто энергичней просит, а туда, где эти машины дадут наибольший эффект. Машины такого класса, как ЕС-1841, могут стать основой для создания автоматизированных рабочих мест конструкторов, исследователей, работников сферы управления, здесь от этих машин можно получить не только экономию средств и времени, но и существенные качественные сдвиги. Еще раз подчеркну - машины прежде всего должны идти туда, где они будут с полной нагрузкой работать.

- Уже продается простейшая ЭВМ "Микроша". Разработано много других бытовых компьютеров на основе сравнительно дешевого и доступного микропроцессорного комплекта серии К580 (говорят, что давно освоенные в производстве микросхемы этой серии промышленность готова отпускать килограммами). В качестве периферии в простейших машинах используют обычный кассетный магнитофон и обычный телевизор, так что и в этой части нет серьезных препятствий для массового выпуска таких компьютеров. Наши коллеги из журнала "Радио" рассказали, что описанные на его страницах любительские ЭВМ несколько предприятий готовится выпускать в виде наборов-конструкторов для самостоятельной сборки...
- Мы умышленно не включили такие машины, как "Микроша", в свою таблицу - сейчас при страшном голоде на бытовые и персональные ЭВМ трудно возражать против того, что какое-то предприятие начало выпускать какой-то самодеятельно разработанный компьютер. Любители-конструкторы действительно создали много машин "хороших и разных", и многим предприятиям действительно по силам наладить их выпуск. Но правильно ли будет пойти по этому пути? Он приведет нас к неоправданному разнообразию машин, находящихся у пользователей. Хочу привлечь внимание к проблеме, которую мы уже с вами слегка затронули. В наше время, когда электроника поступает в виде больших законченных блоков - интегральных микросхем,- разработать персональный компьютер и даже начать его выпуск не столь уж и сложно. Но задача состоит в том, чтобы не просто делать эту машину, а чтобы делать ее достаточно дешевой и, главное, надежной - иначе мы просто завязнем в проблеме обслуживания и ремонта. А снижение себестоимости и высокую надежность может дать только крупносерийное производство с его высокопроизводительным оборудованием, многоступенчатой системой контроля и испытаний. Думаю, что производить массовые компьютеры в небольших производственных подразделениях - это все равно что в каком-нибудь гараже выпускать массовые автомобили. Персональный компьютер сегодня требует индустрии вазовских масштабов.

- Что же будут делать люди, купившие нынешние "малосерийные" бытовые компьютеры? Кто позаботится о них? Не выбрасывают ли они попросту деньги?
- Думаю, что трагедии здесь нет, все мы, случается, идем на какие-то издержки, желая получить что-либо сегодня, а не завтра. Со временем появятся своего рода клубы пользователей разных типов машин, как уже возникло некое заочное объединение пользователей компьютера БК-0010. Опыт показывает, что в рамках такого объединения силами самих пользователей довольно быстро создается неплохая библиотека программ. И все же было бы намного лучше объявить конкурс, отобрать на нем одну наиболее удачную модель бытовой ЭВМ и именно ее предлагать производственникам для крупносерийного выпуска. Очереди за бытовыми компьютерами в магазинах "Электроника" говорят о том, что и в условиях такой унификации все предприятия, выпускающие бытовые ЭВМ, еще долго будут обеспечены сбытом.

- Так в чем же дело? Почему унифицированная модель бытового компьютера до сих пор не создана?
- Сейчас за организацию конкурса на лучшую бытовую ЭВМ взялся академический Институт проблем информатики; судя по всему, этот конкурс будет скоро объявлен.

- Вы говорили о важности унификации, а вместе с тем ЕС-1841, Нейрон И9.66, Искра 1030 и Электроника-85, то есть все основные наши персональные ЭВМ,- это машины во многом близкие и в то же время разные. Оправдано ли это?
- Сегодня оправдано. Производство всех названных машин уже развернуто, предприятиям удобно делать эти компьютеры такими, какие они есть,- такова реальность. Различия этих компьютеров для пользователя не очень существенны, во всяком случае, все машины по важнейшим показателям унифицированы, они легко стыкуются друг с другом. Первые три машины совместимы абсолютно, у них одинаковые операционные системы, могут использоваться одни и те же программы.
И все же было бы лучше, если бы в стране делался единый полностью унифицированный компьютер в каждом из пяти классов, узаконенных ГОСТом. Хочу еще раз сослаться на опыт телевизионной промышленности - сегодня заводы в основном выпускают лишь 3-4 типа унифицированных телевизоров, хотя и в разных ящиках. В телевизорах используются одинаковые, унифицированные узлы и детали, это заметно облегчает производство и эксплуатацию. Сейчас разрабатывается унифицированная ЭВМ, близкая по параметрам и полностью совместимая с ЕС-1841. Это будет по всем показателям более прогрессивная машина, в ней, например, резко уменьшится число микросхем за счет большей степени интеграции, то есть большего числа элементов в микросхеме. В итоге уменьшится число печатных плат, а значит, трудоемкость и вместе с ней стоимость компьютера. Если говорить о ближайшем будущем, то нельзя не вспомнить о разработке персональных ЭВМ с 32-разрядным микропроцессором, они, в частности, откроют новые возможности для конструкторов и дизайнеров, позволят создавать самые современные системы автоматизированного проектирования.
В ходе разработки и освоения массового производства персональных ЭВМ мы не должны упускать главной задачи - создание условий их эффективного применения. Важно накапливать и постоянно анализировать опыт применения ЭВМ у нас и за рубежом, разрабатывать и налаживать серийное производство не только компьютеров, но и типовых систем на их основе. Сегодня представителем подобных систем является комплект учебной вычислительной техники КУВТ, кроме того, нужны системы типа "электронный офис" (для автоматизации служебной деятельности), "электронное КБ" (для автоматизации проектно-конструкторской работы), "электронная лаборатория" (для автоматизации научно-исследовательской работы и т.п.

- Мы говорим лишь об ЭВМ, но не менее важными являются вопросы, связанные с программным обеспечением.
- Безусловно. Эффективность применения компьютера в значительной мере определяется объемом и качеством специализированного программного обеспечения. Вместе с типовыми программами, которые должны поставляться в соответствии с ГОСТом, оно обеспечит эффективное взаимодействие с машиной непосредственно на рабочем месте. Для этого программы должны быть доступными и понятными пользователю. Важно разработать системы взаимодействия разработчиков программ с промышленностью и потребителем, систему тиражирования программ. Сейчас этим интенсивно занимается управление, специально созданное в ГКВТ.
Как видите, есть задачи, которые неизбежно придется решать, чтобы следовать за быстрым прогрессом вычислительной техники, не отрываться от мирового уровня разработки и применения персональных компьютеров. Причем для нас это будет, как говорится, битва в пути - одновременно с разработкой нового должны быть мобилизованы и задействованы резервы, чтобы в серийном производстве уже существующих персональных компьютеров выйти к миллионному рубежу, который запланирован на конец пятилетки.
Беседу вел Р.Сворень, специальный корреспондент журнала "Наука и жизнь"

Матчасть диванного танкиста - Страница 3 87120510
Зал профессиональных компьютеров в одном из московских центров информатики. Здесь можно поработать на ЕС-1810 и "Электронике-85". Скоро появится и ЕС-1841.

КОММЕНТАРИЙ К ТАБЛИЦЕ ПАРАМЕТРОВ ПЕРСОНАЛЬНОЙ ЭВМ
Когда в популярном издании приводятся основные характеристики автомобиля, магнитофона или телевизора, то пояснять их, как правило, не нужно: сегодня практически каждый понимает, что значит "мощность двигателя 35л.с. (26кВт)", или "полоса воспроизводимых частот 20-20000Гц", или "размер экрана 51см, сенсорное переключение каналов". Что же касается основных характеристик персонального компьютера, то их полезно хотя бы коротко пояснить, во всяком случае, для тех читателей, которые уже хотят и планируют, но еще не начали взаимодействовать с электронной вычислительной техникой.

Рассказывая о персональных компьютерах, как правило, прежде всего называют его основное "действующее лицо" - микропроцессор или как минимум приводят разрядность микропроцессора. Эта характеристика указывает количество двоичных разрядов, с которыми одновременно может работать микропроцессор, то есть количество разрядов обрабатываемого процессором числа. Сегодня в персональных ЭВМ в основном используются 8-разрядные и 16-разрядные микропроцессоры, а в некоторых наиболее совершенных моделях - даже 32-разрядные. Вот пример восьмиразрядного числа-10110001, а вот шестнадцатиразрядного - 1101110010101101. Еще раз подчеркнем: со всеми этими разрядами процессор работает параллельно, одновременно общаясь с другими узлами компьютера с помощью восьми- или шестнадцатипроводных соединительных линий. По таким многопроводным линиям связи микропроцессор получает и выдает "залпы" - или, скажем иначе,- "аккорды" из 8 (16) импульсов-пауз и одновременно производит обработку всего такого "аккорда".

Каждый шаг в обработке этих 8- или 16-разрядных чисел-аккордов - один такт работы процессора и всего компьютера в целом, он такт за тактом, шаг за шагом продвигается к решению задачи. Кстати, само слово "процессор" (от того же корня, что и "процесс", то есть последовательность событий, действий) с латыни можно перевести как "продвигатель". Совершенно очевидно, что чем выше разрядность процессора, чем больше "аккорд", который обрабатывается за одни такт, тем производительнее процессор, тем быстрее он работает с информацией. Ясно также, что чем быстрее следуют друг за другом такты обработки сигналов, тем выше быстродействие компьютера. И поэтому о быстродействии судят не только по самой этой характеристике - по числу операций в секунду,- но и косвенно по тактовой частоте: чем выше тактовая частота производительности, тем быстрее работает машина (тактовый генератор - это своего рода метроном, отбивающий ритм работы компьютера). Так, скажем, при тактовой частоте 500кГц (килогерц) машина выполняет 500 тысяч тактов в секунду, при тактовой частоте 5МГц (мегагерц) - 5 миллионов тактов в секунду. Обычно одну арифметическую операцию вычислительная машина выполняет за несколько тактов, скажем, сложение за 5 тактов, деление за 10. извлечение корня за 20 и т.д. И по тактовой частоте можно количественно оценить производительность компьютера - при тактовой частоте 500кГц он выполняет 100 тысяч операций сложения в секунду, при частоте 5 Мгц - миллион операций. Производительность машины характеризуют временем, которое она расходует на ту или иную операцию, и из этой характеристики легко получить более привычное число операций в секунду. Так, например, если операция сложения выполняется за 10мкс=0.00001с. то производительность машины 100 тысяч таких операций в секунду. Нужно сказать, что простую, казалось бы, характеристику компьютера - его быстродействие, производительность - ввести не так-то просто. На разные операции в разных задачах требуется различное количество тактов и значений и разное время. Поэтому производительность указывают с оговорками типа "для таких-то операций... в таких-то условиях" или приводят ее для простейшего случая коротких операций (например, просто для передачи данных из одного регистра памяти в другой), который, разумеется, не характеризует всех возможностей машины. Не нужно думать, что можно поднять быстродействие компьютера, просто увеличив тактовую частоту - ее, как правило, и так выбирают максимально возможной, а ограничением чаще всего оказывается быстродействие самих электронных приборов, прежде всего транзисторов, которые входят в структуру интегральных схем. Транзисторы в зависимости от их типа, от используемых в них физических процессов имеют разную скорость "срабатывания" (подобно затвору фотоаппарата при разных режимах экспозиции), и именно это в итоге определяет быстродействие компьютера.

Наконец, еще одна характеристика компьютера из числа особо важных - емкость памяти. Это фактически две характеристики - одна из них относится к внутренней памяти компьютера, к емкости его ОЗУ и ПЗУ - оперативного и постоянного запоминающих устройств. Кроме того, обычно приводится и характеристика работающего в комплекте с компьютером внешнего накопителя информации, например, на магнитных дисках или на магнитной ленте. Но это скорее характеристика самих этих устройств, а не компьютера, так как он в принципе может работать с разными накопителями.

Из всех характеристик памяти ЭВМ для пользователя особый интерес представляет емкость ОЗУ - это, в частности, "резервуар", которым можно пользоваться, загружая в ЭВМ программу или накапливая данные для вывода их на экран. Стоит обратить особое внимание на слово "оперативная" - только тем, что находится в ОЗУ, компьютер может свободно и быстро распоряжаться, меняя, например, по вашему указанию порядок слов в предложении. Или самостоятельно меняя по определенному правилу данные в разных столбиках большой таблицы при изменении какой-либо влияющей на них исходной величины. Чтобы активно работать с информацией, в частности, редактировать тексты или играть с машиной в шахматы, следует все необходимое прежде всего поместить в ОЗУ. например, переписав с магнитного диска. Емкость ОЗУ в значительной мере определяет возможности ЭВМ в решении сложных задач, в зрелищных динамичных играх, в работе с графикой.

Количество ячеек памяти ОЗУ не может быть беспредельным, оно, в частности, ограничено числом разных адресов, которые можно сформировать в данной машине. А оно определяется длиной адреса, его разрядностью - числом единиц и нулей в одном адресе, комбинируя которые, можно получать разные адреса. В большинстве машин с 8-разрядным процессором (напоминаем - это разрядность данных) адреса 16-разрядные, их всего может быть 2**16=65536. Если по каждому адресу хранить 1 байт информации (8-разрядное число), то общая емкость внутренней адресуемой памяти составит 64 Кбайт (1 Кбайт = 1024 байта), большую часть этой емкости конструкторы обычно выделяют для ОЗУ. При 18-разрядном адресе общее количество адресов увеличится до 2**18=262144, и если привязать к каждому из них 1 байт, то общая емкость памяти составит уже 256 Кбайт. Уже давно используются и некоторые ухищрения (например, так называемая страничная организация памяти), позволяющие, разумеется не без некоторых жертв, при сравнительно небольшой разрядности адресов доводить общую емкость памяти до очень больших величин.

Чтобы хотя бы отдаленно почувствовать реальные значения емкости ОЗУ. заметим, что страница машинописного текста занимает в нем примерно к 2 Кбайт, трехцветная картинка на экране дисплея - порядка 5-10 Кбайт, средняя программа для игры в шахматы - 4-6 Кбайт. То есть даже простейшие, бытовые компьютеры с емкостью ОЗУ 20-30 Кбайт позволяют держать в оперативной памяти 10-15 страниц текста, играть в шахматы и рисовать на экране дисплея.

[ СПРАВОЧНОЕ БЮРО
ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА ЭВМ
Из периферийных устройств, предназначенных специально для персональных компьютеров, назовем отечественные мониторы - монохромный МС-6105 с размером экрана (по диагонали) 31см и его польский аналог "Польколор" с размером экрана 42см, а также цветной монитор МС-6106; у него есть аналог из ЧССР. Болгарский накопитель информации на гибких магнитных дисках диаметром 133 миллиметра имеет скорость обмена информацией 60 Кбайт в секунду и емкость 1 Мбайт (на одном диске). У аналогичного чехословацкого накопителя "Сброевка" близкие параметры. Отечественный накопитель на жестком диске (типа "Винчестер"), ЕС 5051 с емкостью 12, 76 Мбайт и скоростью обмена 625 Кбайт в секунду имеет болгарский аналог СМ 5508.

Готовятся к выпуску принтеры с различным числом символов в строке (80-132) и разной скоростью печати (40-150 знаков в секунду), с возможностью синтеза графических растровых изображений, с монохромной и многоцветной печатью и т.д. Несколько аналогичных устройств создали объединения социалистических стран.

Из числа отечественных периферийных устройств, которые готовятся к производству, отметим устройство для непосредственного ввода графической информации, например, чертежей, в вычислительную машину, его рабочее поле может иметь размеры 210*297мм или 297*420мм, разрешающая способность - 0.1мм. ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Фев 09, 2023 12:21 am

12/87
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Этот выпуск нашего раздела - диалог читателя с журналом. Тема беседы - новые пути дальнейшего развития раздела. За прошедший год в нем появилось немало новых рубрик: "1024 совета" и "Бюро справок", "Уголок специалиста" и "Микрозадачник"... Мы надеемся, что они будут успешно развиваться в предстоящем году. Мы особенно рассчитываем на помощь тех читателей, которые, выбрав наиболее полюбившиеся рубрики раздела, станут регулярно пополнять их своими выступлениями. В конце года почетными дипломами будут отмечены наиболее активные участники каждой рубрики.
Стоит поговорить и о дальнейшем развитии "Школы начинающего программиста". По всей вероятности, в #7 рассказом о языке Лого закончится цикл занятий по языкам программирования. Следующий цикл из шести занятий намечено посвятить приемам конкретной работы на ЭВМ. Сейчас самое время разработать программу этого цикла. Быть может, на каком-то из его занятий стоит рассказать о работе с дисплеями наиболее распространенных типов, на другом - разъяснить, что такое операционные системы; возможно, на отдельных занятиях следует побеседовать о приемах работы в той или иной из важнейших сфер применения компьютеров - например, для создания баз данных.
Просим читателей присылать свои проекты программы этого цикла. В одном занятии допустимо объединять несколько тем, если каждую можно изложить кратко.

ГЛАВНЫЙ АДРЕСАТ
Компьютерные рубрики в научно-популярных журналах множатся, как грибы после дождя (с той странной разницей, что никакого дождя-то и не было). При этом общая особенность почти всех публикаций - отсутствие авторской позиции. Невозможно понять, кому адресован тот или иной материал, неясно, чего и зачем добивается автор от адресата.

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

ПРОГРАММИСТЫ-ЛЮБИТЕЛИ. Их интерес к программированию весьма серьезен. Вот ряд типичных вопросов, которые у них возникают. Почему одна и та же ЭВМ понимает разные алгоритмические языки? Как быстрее всего проверить, является ли данное число простым? как убедиться, что цикл не зациклился? Переменная и ячейка памяти - это одно н то же? Чем вообще занимаются программисты-профессионалы?

Эти люди по уровню знаний и по интересам близки читателям "Математических головоломок и развлечений" М.Гарднера, так что популярные журналы в принципе способны их чему-то обучить, не отпугнув заумью.

ПОТЕНЦИАЛЬНЫЕ ПОЛЬЗОВАТЕЛИ ЭВМ. Эти люди - специалисты в своем деле, и само по себе программирование их не интересует. Однако они где-то прочли, что компьютер может как-то облегчить их труд. При этом их так же мало волнует, что у компьютера внутри, как футбольного фаната - что внутри у телевизора. Для них, быть может, полезно описать компьютер, работающий по введенной в него программе, как обычно в научно-популярных журналах описываются новые приборы - осциллограф, пишущая машинка, чертежная доска и т.д.

ОТДЫХАЮЩИЕ. Этим людям требуется в качестве отдыха игра с каким-то предметом - пусть даже с чертежной доской, пишущей машинкой или осциллографом, все равно. Ясно, что микрокалькулятор, а уж тем более персональный компьютер для этого очень подходит: у него масса кнопок, на экране появляются буквы и картинки, сложность игры может быть очень различной - от простого нажимания кнопок в компьютерной игре "Перестрелка" до самостоятельного написания программы этой игры на Бейсике или Паскале. 99 процентов виденных мною публикаций в компьютерных рубриках адресованы этой категории, если вообще кому-либо адресованы.

ЧИТАЮЩИЕ ВСЕ ПОДРЯД. Этих людей интересует, например, история н современное состояние вычислительной техники в нашей стране и за рубежом. Я не видел серьезных литературных работ на эту тему. Между тем мне она не менее интересна, чем история, скажем, генетики. Как страна дошла до нынешнего слепого копирования западных образцов? Как и кто раздавил проект серии БЭСМ, опередивший в свое время мировой уровень минимум иа пятилетие? Кто играет главные роли в нынешней комедии со школьным компьютером?

Итак, четыре разряда читателей. Список можно уточнить, пополнять. Главное же в том, чтобы понять, читателю какого рода принесут наибольшую пользу компьютерные рубрики, и вести их в соответствии с таким пониманием. К.АНДРЕЕВ (г.Свердловск)

[ Кто же он, наш главный адресат? Мы согласны с К.Андреевым в том, что от ответа на этот вопрос зависит выбор наиболее важных тем и наиболее эффективных форм работы нашего раздела. Просим всех читателей, о чем бы они ни писали нам, высказывать свои соображения о заметке К.Андреева ]

ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР И ЛИЧНАЯ ИНИЦИАТИВА
По моему мнению, в процессе всеобщей компьютеризации нашей страны ие придается должного значения одному важному фактору - появлению у профессиональных программистов персональных компьютеров, купленных на свои собственные средства. Обладая такими компьютерами, программисты получают возможность работать не только над теми задачами, которыми они занимаются по долгу службы, но и решать проблемы, которые им самим представляются наиболее интересными и перспективными. В результате появляются новые компьютерные игры, средства автоматизации домашнего быта и досуга, системные инструментальные программы для разработки новых прикладных программ и др.

Представим себе, что у программиста находится персональный компьютер той же модели, какими оснащено или предполагает оснаститься некоторое предприятие, желающее компьютеризировать важные для него процессы и не имеющее возможности взять в штат сотрудников для выполнения работы.

Предположим, что наш программист может выполнить эту работу. Но каким образом предприятие может ему зту работу оплатить? Как обеспечить авторское право на новый программный продукт? Как обеспечить сопровождение программ? Может ли программист создавать такие программы не "в свободное от основной работы время", по букве Закона об индивидуальной трудовой деятельности, а сделать выполнение такого рода работ своим основным занятием?

И вообще: как поступать с программным обеспечением, разработанным по личной инициативе без привлечения государственных средств и техники, но имеющим важное практическое и народнохозяйственное значение?

От ответов на эти вопросы зависят эффективность труда наших программистов, новизна и качество отечественного программного обеспечения и, следовательно, общий прогресс народного хозяйства.

Приобретая персональный компьютер, программист становится владельцем своеобразной "фабрики", которая не требует капитальных вложений, потребляет электроэнергии не больше средней электрической лампочки и при этом может производить продукт, не уступающий пресловутым "лучшим мировым образцам" (в случае изготовления программ на компьютерах, совместимых с широко распространенными зарубежными моделями, этот продукт может быть предложен для продажи на мировом рынке).
Весь мировой опыт создания программного обеспечения показывает, что труд программиста в гораздо большей степени индивидуален, чем в каких-либо других областях промышленности. Все хорошие программные системы создавались или одним человеком, или очень небольшим коллективом разработчиков. (Здесь количество имеет тенденцию к переходу в новое качество, зачастую более низкое).

По моему мнению, настала пора со всей серьезностью отнестись к поставленным вопросам, рассмотреть вопросы авторского права на программный продукт индивидуального автора и коллектива авторов (в том числе и его международные аспекты), правовые аспекты индивидуальной трудовой деятельности программистов и оплаты их труда, задуматься над возможностью создания соответствующего творческого союза. В противном случае мы рискуем усугубить и без того удручающе большое отставание нашей страны в этой области.
А.РОДИОНОВ (г.Москва)

ПЕНТАМИНО
Почти во всех пособиях по вычислительному делу программы или алгоритмы приводятся в "готовом к употреблению" виде. Авторы, очевидно, считают ниже своего достоинства сообщать, как они до всего этого додумались. Читающие же чувствуют себя в роли гостей хитрой хозяйки, потчующей, но хранящей в секрете рецепт кушанья. И вот следствие такого положения: начинающие часто теряются в нестандартных задачах, боятся оригинальных алгоритмов, неправильно разделяют работу между собой и компьютером.

А между тем как поучительно и интересно бывает проследить за рождением алгоритма - особенно если вначале задача казались неразрешимой. Расскажу про то, как я научил компьютер играть в пентамино.

Матчасть диванного танкиста - Страница 3 87120610

Напомню, что игра заключается в складывании какой-нибудь фигуры из двенадцати пятиклеточных элементов. В том, что ЭВМ с такой задачей справится, вряд ли кто усомнится. Но на вопрос "как?" следуют подчас самые невероятные ответы. Первый шаг очевиден - поскольку у компьютера с интуицией пока туговато, надо придумать переборный алгоритм. Но дальше этого дело обычно не идет.

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

Стоп! Не кажется ли вам, что алгоритм вчерне уже готов? Вот он:
1. Пока есть свободные клетки, установить еще не использованный элемент, совмещая один из его квадратиков с этой клеткой. Если не удалось (устанавливаемый элемент накладывается на одни из уже установленных или выходит за рамки фигуры), перейти на
пункт 2, иначе - повторить 1.
2. Снять последний из установленных элементов и повернуть (перевернуть) его. Если он в последнем из возможных положений - на пункт 2, иначе - на пункт 1.

Алгоритм заканчивается в пункте 1, если ие осталось свободных полей (задача решена), или в пункте 2, если все элементы сняты (задача неразрешима).

Проект алгоритма содержит слова "установить", "снять", "повернуть". Для описания таких действий в программе надо как-то представить в памяти ЭВМ элементы пентамино и складываемую фигуру.

Представить нарисованный контур? Не много ли чести для каких-то клеток?! Именно "клеток" - ведь только они имеют отношение к задаче, все остальное - материальное или геометрическое воплощение абстрактного объекта наших построений. Вырезать из разграфленного на квадраты поля нужный элемент можно, отметив единицами нужные квадраты, а нулями ненужные.

Матчасть диванного танкиста - Страница 3 87120710

Нет никакой гарантии, что выбрано самое удачное представление, но все-таки теперь уже можно сделать следующий шаг - приступить к детализации алгоритма. Чтобы читатель мог проследить стадии этой работы, я привожу без скобок первоначальный текст, в одиночных скобках - добавленное при следующем просмотре, в двойных - при окончательной редакции.

Элементы пентамино нумеруем с помощью индекса j от 1 до 12. Квадраты каждого элемента - от 1 до 5 с помощью индекса k. Каждый элемент может находиться не более чем в 8 положениях, получаемых после поворотов и переворачиваний. Используя индекс l, нумеруем их от 1 до 8. Каждой клетке складываемой фигуры ставим в соответствии эти три номера j, k, l в зависимости от элемента, покрывающего клетку. Все клетки также занумерованы с помощью индекса А.

0. Все клетки пусты, все элементы не выставлены.
1. Находим первую пустую клетку фигуры.
(Если не нашли - задача решена)
((Устанавливаем значение j=0))
2. Начиная с j=j+1 до j=12 ищем невыставленный элемент j.
(Если не нашли - идем на 6)
((Устанавливаем значение k=0))
3. Рассматриваем k=k+1 квадрат j-ro элемента.
(Если k> 5, то идем на 2) ((Устанавливаем значение l=0))
4. Рассматриваем l=l+1 положение j-ro элемента.
(Если l>8, то идем на 3)
5. Рассматриваем j-й элемент в l-ом положении с k-ым квадратом на клетке А. Если все четыре оставшихся квадрата находятся на свободных полях, устанавливаем j-й элемент и идем на 1 (иначе на 4).
6. Рассматриваем A, j, k, l, соответствующие последнему из установленных элементов.
Снимаем j-й элемент, идем на 4. Если установленных элементов нет - задача не решается.

Если вы чувствуете уверенность в своих силах, попытайтесь написать программу по этому алгоритму. Будет интересно посмотреть, с какими трудностями вы столкнетесь и как их преодолеете. Только учтите - программа может оказаться очень медленной!

Если так, применительно к нашему алгоритму можно предложить следующее.

1. Элементы не поворачивать (или переворачивать) каждый раз, а заранее подготовить и хранить в памяти каждое из возможных положений каждого элемента.

Их удобно задавать, указывая относительные координаты квадратов элемента относительно некоторого квадрата к, которому естественно приписать координаты (0,0). На это хватает одного восьмиразрядного числа. Такого, например: 54647473. Вычтем 5 из числа в каждом разряде и сгруппируем полученные восемь чисел попарно. Это и будут относительные координаты квадратов.

Матчасть диванного танкиста - Страница 3 87120910

Здесь нетрудно угадать одно из положений элемента Z. Перечень всех возможных положений всех элементов составит таблицу из 63 таких чисел.

2. Воспользоваться тем, что в момент установки, очередного элемента в клетку А все клетки с меньшими номерами уже заняты. Если нумеровать их по столбцам сверху вниз, а столбцы перебирать слева направо, то занятые клетки образуют компактную область в левом верхнем углу фигуры. Значит, для каждого положения каждого элемента можно выбрать лишь одно (!) место для "установочного" квадрата k. Выбор другого места неизбежно ведет к тому, что элемент частично окажется на занятых ранее клетках фигуры или вне ее.

Матчасть диванного танкиста - Страница 3 87121110

После этих усовершенствований мне удалось составить и отладить программу раньше, чем меня выгнали из машинного зала. Записанная на Бейсике, она заняла 67 строк. Фигура, изображенная в заголовке, на "СМ-4" была составлена за 20 минут и выведена на дисплей в виде таблицы из букв, соответствующих элементам пентамино.
А.РАЙНИН (г.Москва)

Иному читателю статья А.Райнина покажется незавершенной: алгоритм не разъяснен до конца, не приведена программа... Но чтобы судить о достоинствах и недостатках любой из статей раздела, необходимо принять во внимание, ради чего публикуются эти статьи.

Цель, конечно, не в том, чтобы познакомить десятки тысяч читателей с той или иной частной программой: сама по себе она вряд ли будет интересна многим. Статьи раздела "Человек и компьютер", по нашему мнению, должны раздвигать перед начинающим программистом горизонты программистского искусства и вооружать его средствами для продвижения к этим горизонтам, так чтобы на примерах опубликованных частных программ многие и многие читатели поняли, какие проблемы в своей области они могут решать с использованием аналогичных подходов.

Верно ли такое мнение! Тот, кто согласен с ним, пусть исходит из него, собираясь выступить в нашем разделе, и сам решает, какие положения будущей публикации надо изложить подробно, а какие сжато, что поставить во главу угла, в чем пожертвовать. Впрочем, независимо от того, будет или не будет опубликована программа, она должна быть приведена.

[ Идея "перекрестного опыления" между различными рубриками журнала носится в воздухе. Опытом каких еще разделов следовало бы, по мнению читателей, воспользоваться при ведении раздела "Человек и компьютер"? ]

КОМПЬЮТЕРНЫЙ ФОКУС
Фокусник, сидящий за пультом компьютера, просит зрителей задумать и назвать любое целое число. Компьютер, хотя и не слышит этого числа, отгадывает его за минимум попыток.

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

Названное слово фокусник на глазах у зрителей вводит в компьютер, чьи новые догадки находятся все ближе к задуманному числу, пока не совпадут с ним.

СЕКРЕТ ФОКУСА. Набирая на клавиатуре названное зрителями слово, фокусник попутно вводит в компьютер информацию о том, справа или слева от очередной догадки находится задуманное число. Это можно сделать, например, меняя интервалы времени между вводом первых двух букв и между вводом последней буквы и нажатием клавиши ВК. Если первый интервал длиннее второго, то задуманное число находится левее последней догадки, если меньше - правее. Располагая такой информацией и руководствуясь принципом двоичного поиска (см. 12/86), компьютер быстро находит отгадку.

Фокусник обращается с компьютером примерно так, как дрессировщик с собачкой, "знающей" арифметику.

Надеюсь, что читатели пришлют в редакцию программы, реализующие фокус, а также описания новых компьютерных фокусов.
В.ПИНАЕВ (г.Андропов)

[ Очень многие читатели просят нас почаще публиковать конкурсные задания. "При этом,- считает И.Еременко из Никополя,- совсем не обязательно выявлять победителя, не всегда нужен сравнительный разбор присланных решений; главное для нас, читателей раздела, регулярно иметь повод для испытания своих навыков в программировании".

ЧТОБЫ ИМЕТЬ ЗАПАС ХОРОШИХ ЗАДАНИЙ, ОБЪЯВЛЯЕМ КОНКУРС НА ЛУЧШУЮ КОНКУРСНУЮ ЗАДАЧУ.

Конкурс не единственная возможность для массового творчества. Еще одну интересную возможность намечают А.К.Поляков и В.К.Раков в пособии для студентов МЭИ "Программное обеспечение микропроцессорных систем". В составленной ими таблице авторы пособия оценивают в пятибалльной системе пригодность различных языков для программирования встроенных микропроцессорных систем.

Матчасть диванного танкиста - Страница 3 87120810

Предлагаем читателям разработать по образцу этой таблицы вопросник для экспертной оценки того или иного аспекта вычислительного дела в нашей стране - качество наиболее распространенных машин, пакетов прикладных программ; эффективность деятельности различных журналов и издательств по ликвидации компьютерной неграмотности и т.д. ]

ПРОВЕРЬ СЕБЯ!
Программы на Бейсике н Паскале, а также комментарии к ннм, публикуемые в разделе "Человек и компьютера можно рассматривать как своеобразные семинарские занятия по теоретическому курсу этих языков, читаемому в "Школе начинающего программистам

Мне кажется, что это сочетание необходимо дополнить, чтобы получилась классическая триада: лекция-семинар-экзамен.

Было бы хорошо, если бы читатели присылали в раздел тесты для самоконтроля. Вот два примера на Бейсике.

1. Организуя поиск в таблице, обычно поступают так. Пусть X и F - массивы значений аргумента и функции соответственно, причем X(1)<Х(2)<...<X(N). Чтобы найти значение функции от произвольного аргумента X0, надо иайти такой номер I, что X(I)<=Х0<=Х(I+1) и воспользоваться интерполяцией - например, линейной. С этой целью многие не задумываясь пишут:

100 FOR I=1 ТО N
110 IF X(I)>=X0 THEN 130
120 NEXT I
130 REM НАЙДЕНО I, ТАКОЕ, ЧТО X(I)<=X0<X(I+1)

Верно ли это?

2. Исправьте ошибку во фрагменте программы, предназначенном для того, чтобы вставить Х0 в упорядоченный по возрастанию массив X с числом элементов N. С этой целью элементы массива, превосходящие X0, сдвигаются на одну позицию, и величина N увеличивается на 1.

500 FOR I=1 ТО N : IF X(I)>X0 ТНЕN 610 : NEXT I
510 FOR K=I TO N : X(K+1)=X(K) : NEXT К
628 X(I)=X0: N=N+1

Ответы далее.
А.РАННИЙ (пос.Переделкино Московской обл.)

[ Почему расположение цифровых клавиш у телефонов с кнопочным набором (рис. слева) не такое же как у микрокалькуляторов и компьютеров (рис. справа)?

Матчасть диванного танкиста - Страница 3 87121010

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

[ УЗЕЛКИ НА ПАМЯТЬ
Получив ЕГГОГ, нажмите клавишу x-y. Если операция была двухместная, на индикаторе появится первый операнд, вновь x-y - второй. Если вычислялась функция, то после первого нажатия этой клавиши сначала высветится число, хранящееся в регистре Y, а после второго - аргумент.
Н.МЕРКИН (г.Ленинград) ]

Редакция журнала получила более десятка откликов на заметку В.Щеглова "Животные", где описывалась игра с ЭВМ (12/86). Читатели нашлн программу игры несовершенной. Во-первых, оиа страдает излишней торопливостью: еще не все до конца выяснено о задуманном животном, а машина уже начинает выдавать свои догадки: "Это кит?", "Это кот?", "Это русалка?" и т.д. Как устранить такой изъян, подсказали Игорь н Павел Мордковнч из Москвы.

Матчасть диванного танкиста - Страница 3 87121210

Их программа составлена для "Искры-226". Работая по ней, ЭВМ выдаст свою догадку только один раз (см. строку 50), когда исчерпаны все вопросы. Левое плечо альтернативного блока (см. строки 70-110) "наращивает" бинарное дерево. Заблудиться в его ветвях не позволит двумерный массив Р.

Второй, более существенный недостаток программы В.Щеглова состоит в том, что сведения об окружающем мире хранятся не в постоянном, а в оперативном запоминающем устройстве ЭВМ. При этом информация, естественно, теряется при отключении электропитания или при переходе на другую программу. Играя вновь, приходится снова выращивать бинарное дерево. А.Гречкин из подмосковного города Троицка предложил хранить массивы вопросов и ответов на магнитном диске виртуальными файлами. Но массивы, как отметили многие читатели, не совсем удобная форма хранения информации для игры "Животные". Массивы занимают почти всю память машины, оставаясь при этом почти пустыми, "дырявыми", как выражаются программисты. Кроме того, число ярусов бинарного дерева при этом получается небольшим. В программе В.Щеглова, например, их всего 11 (2**11-1=2047), а это максимальный номер элемента массивов). Бинарное дерево лучше хранить не в массивах, а в виде данных более сложного типа - на Паскале, к примеру, в виде связанных списков. Об этом нам написали А.Рыжов и А.Берлага (оба из Москвы).

Кардинально проблема хранения информации и ее плотной упаковки решается с помощью дисковода. Ветви бинарного дерева можно хранить на диске файлами, имя каждого из которых совпадает с номером соответствующей ветви. Эту идею реализует программа, написанная москвичом В.Птицыиым для "Искры-226". Алгоритм, заложенный в нее, почти не отличается от предложенного В.Щегловым, но машину при этом заставляет сдаваться и спрашивать о задуманном животном не наличие пустого элемента в массиве, а отсутствие файла на диске.

Матчасть диванного танкиста - Страница 3 87121310

Последний оператор строки 1 обнаруживает такую ситуацию и передает управление на строку 10, где наращивается новая ветка дерева,- так на диске появляется новый файл (см. конец строки 13).

[ Спасибо за рассказ о Паскале в "Школе начинающего программиста". Какие книги об этом языке изданы у нас?
И.БРАГИН (г.Ленинград).

Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. М., Наука, 1987.
Грогоно П. Программирование на языке Паскаль. М., Мир, 1982.
Вирт Н. Алгоритмы + структуры данных = программы. М., Мир. 1985.
Грэхэм Р. Практический курс языка Паскаль для микроэвм. М., Радио и связь, 1986.
Перминов О.Н. Язык программирования Паскаль. М., Наука, 1983.
Прайс Д. Программирование на языке Паскаль. Практическое руководство. М., Мир, 1987.
Форсайт Р. Паскаль для всех. М., Машиностроение. 1986. ]

[ ПРОВЕРЬ СЕБЯ! (ответы)
1. Здесь как минимум две ошибки. Во-первых, если X0<=X(1), то X(I-1) и F(I-1) не определены. Во-вторых, если X0>X(N), то на строку 130 программа попадет с неопределенным I. (Почти всегда получается I=N+1 или I=N, но можно н ошибиться!) Таким образом, надо ввести еще две строки:

125 I =N
135 IF I<2 THEN I=2

2. Строка 520 присваивает всем элементам с номером, большим I, одно и то же значение I-го элемента. Вариант поправки:

510 FOR K=I+l TO N : X(N+K-1)=X(N+К-I-1) : NEXT K

]

В ПОМОЩЬ ДЕТЕКТИВУ
В 6/87 мы предложили читателям придумать задачи, в программах для решения которых эффективно использовались бы логические команды, выполнимые на калькуляторах "МК-61" и "МК-52". Обзор откликов на это предложение появится в одном из ближайших выпусков раздела.

Прочитал я заметку "Электронный детектив> (6/87) и очень огорчился, что обладатели микрокалькуляторов "Б3-34> не могут решать логические задачи на своих машинках.

Но все же должен быть какой-нибудь выход, подумал я. И не ошибся. В книге Я.К.Трохименко "Программирование микрокалькуляторов "Электроника МК-52" и "Электроника МК-61"" ("Технiка", Киев, 1987г.) на стр.107 есть программа с логическими операциями над восьмибитовыми операндами, заданными в двоичной системе. Я решил составить аналогичную программу, которая годилась бы и для "Электроники Б3-34".

00. ПД 01. КБПД 02. F() 03. ПП 04. 33 05. 2 06. / 07. - 08. С/П 09. БП 10. 00 11. F() 12. ПП 13. 33 14. 2 15. / 16. С/П 17. БП 18. 00 19. F() 20. ИПС 21. x-y 22. - 23. С/П 24. БП 25. 00 26. F() 27. ПП 28. 33 29. - 30. С/П 31. БП 32. 00 33. + 34. П9 35. 8 36. П3 37. Сх 38. П8 39. ИП9 40. ИПА 41. / 42. П7 43. ПП 44. 72 45. 2 46. - 47. Fx=0 48. 52 49. 2 50. БП 51. 53 52. Сх 53. ИП8 54. 1 55. 0 56. * 57. + 58. П8 59. ИП7 60. ^ 61. ПП 62. 72 63. - 64. 1 65. 0 66. * 67. FL3 68. 42 69. ИП9 70. ИП8 71. В/0 72. ИПВ 73. - 74. ИПА 75. + 76. FBx 77. - 78. В/0.

Перед началом работы с программой надо набрать на клавиатуре 2 ПО 26 П1 11 П2 19 П4 1 ВП 7 ПА 5 ^ 9 / ПВ 11111111
ПС В/0. Логическое сложение величин m и n (mVn): m ^ n ИП+ С/П. Логическое умножение (m^n): m ^ n ИП* С/П. Инверсия: m ИПx-y С/П. Сложение по модулю 2: m ^ n ИП- С/П. Ответ на индикаторе. Время выполнения инверсии - около 2, прочих логических операции - около 80 секунд. Действия можно производить "цепочкой". Для этого достаточно каждый раз набирать следующий операнд, затем нажимать клавиши с буквами ИП, соответствующим символом и С/П.
А.МЕРЖЕЕВСКИЙ (г.Житомир)

Мы высоко ценим и нередко публикуем письма читателей, совершенствующих программы и алгоритмы, помещавшиеся в прошлых выпусках, нашего раздела. Однако еще более высокой оценки заслуживают выступления читателей на темы, никем ие затрагивавшиеся ранее. У первооткрывателей наиболее высоки шансы на публикацию в разделе. При поиске новых тем просим обратить внимание на то, что мы до сих пор еще очень редко касались задач гуманитарного характера.

[ МАЛЕНЬКИЕ ХИТРОСТИ
Читатели И.Жабенко из Симферополя н С.Сердцев из Киева одновременно и независимо друг от друга обнаружили, что в программу для микрокалькулятора "Б3-34" можно вводить не описанную в инструкции команду перестановки чисел в стеке по схеме: Т->Т; Z->Z: Y->Y->X; X->X1. Код такой команды 3Е. Чтобы ввести ее в программу, надо нажать клавиши 3 и ^, а перед этим клавишу БП. Формально происходит так, как если бы набиралась команда перехода на несуществующий адрес: БП 3Е. Затем команда БП в тексте заменяется на нужную команду программы ]

[ БЮРО СПРАВОК
Читатель 3.Джендубаев предлагает комплект программ для расчета рабочих и пусковых характеристик асинхронного двигателя на микрокалькуляторе "Электроника Б3-34". При составлении программ за основу была принята методика, широко применяемая при проектировании электрических машин. Программы ориентированы для использования студентами специальности "Электроснабжение промышленных предприятий". (357100, г.Черкесск, пл.Кирова 13, кв.20, Джендубаев 3.Р.).

В институте "Сибпромтранспроект" разработаны рекомендации по применению микрокалькуляторов для решения проектно-изыскательских задач на железнодорожном и автомобильном транспорте. Автор рекомендаций заинтересован в обмене программами по указанной теме. (654034, г.Новокузнецк, ул.Ленина 62, Коган И.Б.).

Специалистам, работающим на транспортных предприятиях, могут оказаться полезными программы для "Электроники Б3-34", с помощью которых ведется обработка путевых листов, начисление зарплаты водителям, транспортной работы, нормативного расхода горючего, командировочных и оплаты за сопровождение грузов. (127474,
г.Москва, Бескудниковский бульвар 26, кв.51, Бурович Яков Генрихович).

На кафедре телевизионных устройств Томского института АСУ и радиоэлектроники разработан пакет программ для расчетов усилительных устройств на "Электронике МК-52". Программы пакета обеспечивают расчеты стабилизации режимов транзисторов, оптимизацию параметров каскада и секций, расчеты устойчивости усилителей и т.д. (всего 110 программ). Программы предполагается записать в модули ПЗУ. Для предварительной оценки потребности в таких модулях просьба направлять запросы по адресу: 634050, г.Томск, пр.Ленина 40, ОНТИ ТИАСУР (необходимо указать организацию, ее адрес и нужное количество модулей).

О возможности решать с помощью микрокалькуляторов марок "Б3-34", "МК-61", "МК-52" комплекс задач, возникающих при обработке наблюдений полярных сияний, говорится в препринте Сибирского института земного магнетизма, ионосферы и распространения радиоволн СО АН СССР; автор Ю.Надубович. Приводимые программы представляют интерес для любителей астрономии, так как позволяют вычислять горизонтальные координаты светил, моменты их восхода и захода, фазы Луны и т.п. (663317 г.Норильск, а/я 706, Норильская комплексная магнитно-ионосферная станция, Надубович Ю.А.) ]
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 3 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Фев 10, 2023 12:36 am

1/88
"Я учитель математики и изучаю курс информатики, пользуясь материалами вашего журнала,- пишет Б.П.Эрдниев из Элисты.- Во время знакомства с Бейсиком у меня возник вопрос, который также задают и мои ученики: "Почему команды необходимо записывать на английском языке?" Ведь для устройства ЭВМ безразлично, на каком языке отдаются команды, а мы мыслим все-таки по-русски... К тому же я не русский и третий язык становится уже лишним для обычного человека с обычной памятью".

Очень резонное мнение. Но, с другой стороны, представьте себе, что русские пользовались бы для записи программ алгоритмическим языком на русской лексической основе, литовцы - на литовской, туркмены - на туркменской... Естественно, нелепо было бы отказывать в подобном праве и немцам, и французам, и финнам... Но как бы в таком случае проходил обмен программами? Как развивалась бы тогда информатика, которая, как и всякая наука, принадлежит всему человечеству? Этот аргумент, на наш взгляд, достаточно весом.

Мы надеемся, что читатели выскажут свою точку зрения на проблему выбора лексической основы для языков программирования. Чтобы уравнять в правах сторонников различных точек зрения, вслед за рассказом о языках на основе английской лексики (Бейсик, Паскаль) мы посвящаем очередные два занятия языку Рапира, служебные слова которого взяты из русского языка.

Заменив эти слова их аналогами из другого языка, можно получить вариант Рапиры на другой лексической основе. Уже существуют эстонский и английский варианты, готовится молдавский.

Этот алгоритмический язык создан в Вычислительном центре СО АН СССР под руководством Геннадия Анатольевича Звенигородского, талантливого программиста и педагога, безвременно скончавшегося в 1983 году. Костяк группы Г.Звенигородского составили тогдашние школьники В.Цикоза, Е.Налимов, П.Земцов и Н.Глаголева.

ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ СЕМНАДЦАТОЕ, первое в цикле, посвященном Рапире, начинает кандидат физико-математических наук Л.Ф.ШТЕРНБЕРГ (г.Куйбышев). Он описывает версию языка, реализованную на ЭВМ "Агат". Некоторые из высказанных им положений могут показаться читателю спорными и необоснованно резкими. В известной мере они будут уточнены теми, кто продолжит занятие.

В школьном учебнике по информатике для 10-го класса представлены два алгоритмических языка - Бейсик и Рапира. Про одни из них учителя должны рассказать своим ученикам. Выбор языка - на усмотрение педагогов.

Что же выбрать? С этим вопросом учителя обращаются к профессиональным программистам и чаще всего слышат в ответ: "Конечно, рассказывайте про Бейсик! А Рапира... Что это за язык? Я такого не знаю". Насколько верно подобное суждение, пусть решает читатель. Мы предложим ему быть свидетелем воображаемого разговора двух программистов, сидящих за пультами персональных ЭВМ. Зовут собеседников Бейсик и Рапира. По их именам сразу можно понять, кто за какой язык ратует.

БЕЙСИК. Простейшие расчеты на Бейсике можно вести, вообще почти ничего не зная. Например, вам надо посчитать, сколько будет 2*2. Набираете на клавиатуре

?2*2

и тут же получаете ответ: 4. Все естественно, только звездочка вместо знака умножения [Различные версии Бейсика, существующие сегодня, отличаются друг от друга, в частности видом отдельных операторов. В версии, используемой здесь, оператор вывода выражается вопросительным знаком, а не традиционным для этой цели служебным словом PRINT].

РАПИРА (молча пожимает плечами и набирает почти то же самое).

?2*2;

Отлично, как видите, лишь в том, что в конце добавляется точка с запятой. Результат, конечно, тот же самый.

БЕЙСИК (несколько удивлен, но продолжает наступление). А можно ли в Рапире присваивать переменным конкретные значения, а затем использовать эти переменные? Например:

А=4
В=5
?2+A*B

Так это делается на Бейсике. Я нажимаю клавишу "возврат каретки", и тотчас на дисплее высвечивается результат: 22.

РАПИРА (молча набирает).

4->А; 5->В; ?2+А*В;

То, на что вам понадобилось три строки, у меня уложилось в одной. Результат, естественно, тот же.

Б. Стрелочки, как я понимаю,- это знак присваивания. Ну и ну! Ни в одном языке не встречал, чтобы присваиваемое выражение стояло слева от знака присваивания, а переменная - справа.

Р. Ой ли? Так уж и ни в одном? Не буду упоминать мало распространенные языки, вспомним про микрокалькуляторы: там мы сначала производим вычисления, а затем ставим команду присваивания, то есть команду засылки в адресуемый регистр. Кстати, любой преподаватель программирования, встречающийся с новичками, расскажет вам, сколько ошибок они делают из-за того, что считают, будто запись "А=В" - это пересылка значения из А в В. Для новичка гораздо естественнее сначала сообразить, что надо вычислить, а лишь затем - куда поместить результат. И вообще в записи "А+В->С" сохранен естественный порядок действий: сначала сложение, потом присваивание. Мышление профессионалов-программистов уже "испорчено" долгим опытом программирования, а новичок мыслит именно так, и учиться ему так легче. Впрочем, вопрос о том, как записывать присваивание, не самый принципиальный. Скажите, а так на Бейсике можно?

ЕСЛИ А>В ТО ?А ИНАЧЕ ?В ВСЕ;

Смысл этой записи ясен и ребенку: выдать на дисплее большее из значений А и В.

Б. Конструкция, называемая ветвлением, понимаю... (набирает на клавиатуре):

10 IF A>B THEN 20
15 ?В : GOTO 30
20 ?А
30 ...

Р. Что это за абракадабра? Что означают этн слова: "иф", "тхен", "гото"?

Б. Во-первых, не "гото" и "тхен", а "гоу ту" и "зен", точнее даже не "зен", а... ну, в общем, нет такого звука в русском языке. А означают они "перейти к" и "то". Это английские слова.

Р. Здорово! Но я, к сожалению, владею лишь немецким, испанским и польским языками. Откуда же мне знать, как я должен произносить английские слова? Я уж не говорю о том, что на Рапире все это пишется в одну строчку.

Б. Ну, вообще-то последние версии Бейсика позволяют записывать ветвление в такой же форме, какую употребили вы. На компьютере "Ямаха", например:

IF A>B THEN ?A ELSE ?B

Р. А так на "Ямахе" можно?

ЕСЛИ А>В ТО А->МАХ; В->МИН
ИНАЧЕ А->МИН; В->МАХ ВСЕ;

Б. Так нельзя: в Бейсике вся конструкция IF... THEN... ELSE должна уместиться в одну строку.

Р. Тогда что эта конструкция дает? Часто вам приходится встречаться с ветвлением, умещающимся в одну строку?

Б. (уклоняясь от ответа). Давайте перейдем к циклам. В Бейсике есть конструкция:

FOR переменная = начальное значение ТО конечное значение STEP, значение шага
тело цикла
NEXT переменная

А в Рапире такая есть?

Р. Вот, пожалуйста:

ДЛЯ переменная: = начальное значение ШАГ значение шага ДО конечное значение ::
тело цикла
ВСЕ

В Рапире есть еще и так называемый цикл "пока":

ПОКА условие :: тело цикла ВСЕ

Б. Неплохо. Подобную конструкцию на Бейсике приходится строить с помощью оператора GOTO:

10 IF обратное условие THEN 100
тело цикла
90 GOTO 10
100 ...

Правда, говорят, что в самых последних версиях Бейсика появилась возможность записывать этот цикл так:

WHILE (условие)
тело цикла
WEND

Но на каких ЭВМ есть такая версия, никто не знает.

Р. Картниа с управляющими конструкциями ясна. Давайте поговорим о структурах данных.

Б. Скажите, а с текстами на Рапире работать можно?

Р. Пожалуйста. Например, присвоим переменным А и В строки

"123456"->А; "АВСДЕ"->В;

Можем теперь сцепить эти строки вместе:

А+В->С; ?С;

Смотрите: на дисплее высвечивается "123456АВСДЕ". Можем извлечь из строки любую подстроку. Например, запись С [6:8] означает часть строки с 6-го символа по 8-й, то есть "6АВ". Можно выяснить длину строки, написав : #С. Хотите выбросить 3-й символ из строки? Пожалуйста:

С[1:2]+С[4:#С]->С

Получаем строку "12456АВСДЕ". Хотите вставить точку после К-го символа? Тоже нет проблем:

С[1:К]+"."+С[К+:#С]->С

Б. А массивы в Рапире есть?

Р. Вот чего нет, того нет. Но они и не нужны: вместо них есть КОРТЕЖИ - это гораздо более мощная и удобная конструкция.

Б. Кортеж? Это что-то новое!

Р. Не такое уж новое, хотя в самых распространенных языках кортежей действительно нет. Кортеж - это последовательность элементов, заключенных в угловые скобки, и нумеруемых, начиная с единицы. Чтобы быть понятнее, я попрошу вас напомнить мне, как можно было бы на Бейсике записать в массив из 10 элементов значения: 5, 17, 6, 9, 6, 0, 1, 4, 5, 16.

Б. Ну так, например:

А(1)=5:А(2)=17:А(3)=6...

или так:
DATA 5, 17, 6 9, 6, 0, 1 4, 5, 16
READ A

Р. На Рапире это, как обычно, пишется в одну строку:

<5, 17, 6, 9, 6, 0, 1, 4, 5, 16> -> А

И все. Теперь с кортежем, если хотите, можете работать, как с массивом. Например, просуммируем элементы кортежа:

0->СУММА;
ДЛЯ К:=1 ДО #А ::
СУММА + А[К] - >СУММА
ВСЕ

А[К] - это k-й элемент кортежа А, #А - число элементов в этом кортеже... Теперь еще одна просьба: вставьте в свой массив после шестого элемента новый элемент, значение которого хранится в переменной С, а следующие элементы массива сдвиньте на одну позицию. Как это выглядит на Бейсике?

Б. Вот так:

FOR 1=10 ТО 7 STEP-1: А(I+1)=А(I): NEXT I
А(7) = С

Р. А на Рапире - в одну строчку:

А[1:6] + <С> + А[7:#А] ->А;

Из кортежа можно делать вырезки так же, как из строки. Вот мы только что вырезали из кортежа А первые шесть элементов, добавили кортеж из одного элемента, равного значению С, и дописали остаток кортежа А. Результат записываем на прежнее место - в переменную А.

Б. Как это - на прежнее место? В вашем кортеже было 10 элементов, а стало 11. Где вы найдете пустое место, куда можно сдвинуть "хвост" массива? И, кстати, где у вас описание длины массива, то есть кортежа?

Р. Никаких таких описаний в Рапире нет. И проблем нет: любой переменной можно присвоить любое значение, лишь бы общей памяти ЭВМ хватило. Кортеж - это динамичная конструкция, в него можно добавлять элементы, убирать их, при этом длина кортежа автоматически будет меняться.

Б. Неплохо, неплохо... Но, кстати, массивы бывают и двумерные - с двумя индексами, как прямоугольные таблицы. А как с кортежами?

Р. Нет проблем: элементом кортежа может быть кортеж. Так что, например, двумерную таблицу.

Матчасть диванного танкиста - Страница 3 88010110

можно записать в виде

<<1, 4, 5>, <8, 4, 7>>

Если такой кортеж присвоить переменной А, то запись А[1] означает первый элемент кортежа А, то есть кортеж <1, 4, 5> - первую строку таблицы, а запись А[1][2] или А[1,2] - второй элемент первой строки. Например, всю вторую строку можно скопировать одним присваиванием

А[2] -> В;

В результате переменная В получит значение <8, 4, 7>. Но и это еще не все. Во-первых, можно записать матрицу со строками разной длины, например: <<1, 2, 3>, <7, 8, 5, 6>>. На Бейсике этого вообще не сделаешь. Во-вторых, компонентами кортежа могут быть разнородные элементы, то есть в кортеж можно записать то, что в программировании называется структурой. Например, ведомость на зарплату:

<<"КУРОЧКИН", 180>, <"ПЕТУШКОВ", 160>, .., <"ЯХОНТОВ", 215>>.

Б. До сих пор все набранные вами команды немедленно исполнялись. А можно ли записать программу на Рапире?

Р. Можно (набирает).

ПРОЦ ПРИМЕР;
Смотрите: дисплей очищается, текст "ПРОЦ ПРИМЕР;" высвечивается в верхней строке. Текстовый редактор готов к приему текста - теперь набранные команды не исполняются, а запоминаются. Закончив набор, нажимаем специальную клавишу и снова выходим в режим исполнения. Теперь, если набрать ПРИМЕР; то программа ПРИМЕР будет нсполнена.

Б. А как исправлять ошибки? В Бейсике это просто. Запустил программу на счет, и, когда очередь дойдет до строки с ошибкой, выполнение программы прекратится и высветится номер ошибочной строки. После этого достаточно набрать исправленную строку с тем же номером - и все готово.

Р. Посмотрите, как это делается в Рапире. Вот я набираю текст с несколькими ошибками, нажимаю клавишу выхода из режима набора текста - раздается короткий писк, фрагмент программы, содержащий ошибку, подсвечивается, а в нижней строке появляется сообщение о том, каков характер ошибки - сообщение на чистом русском языке, понятное без всякой расшифровки. Исправляем ошибку, еще раз нажимаем клавишу выхода из режима набора текста - опять раздается писк, и подсвечивается фрагмент со следующей ошибкой. И так до тех пор, пока в тексте есть синтаксические ошибки.

Б. Кстати, а зачем нужно набирать строку "ПРОЦ" перед вводом программы? Бейсик и без заголовка понимает, что это программа, а не что-нибудь другое.

Р. Дело в том, что при работе с Бейсиком в памяти ЭВМ всегда находится лишь одна программа. Когда же работаешь на Рапире, в память компьютера может быть записано сразу несколько процедур. Мы можем потребовать выполнения любой из них; это может повлечь выполнение какой-то другой процедуры: одна процедура может использовать другую как подпрограмму. А в Бейсике подпрограмм нет.

Б. Как это нет?! А операторы GOSUB и RETURN?

Р. Операторы есть, а подпрограмм в современном понимании этого термина нет. GOSUB - это не более. чем переход с запоминанием возврата. А понятие подпрограммы намного шире. Например, я пишу подпрограмму решения квадратного уравнения (если корни у него заведомо есть):

ПРОЦ КВАДРУР (=>А, =>В, =>С, X1=>, Х2=>);
ИМЕНА: Д,А2;
КВКОР(B*B-4*А*С)->Д;
2*А->А2;
(-В+Д)/А2->Х1;
(-В-Д)/А2->Х2;
КНЦ

Стрелочки показывают, какие параметры ВХОДНЫЕ, то есть задающие исходную информацию: здесь это А, В, С; а какие - ВЫХОДНЫЕ, то есть содержащие результаты: здесь это X1 и Х2. Строчка ИМЕНА нужна для того, чтобы не испортить переменные с такими же именами в других подпрограммах, если таковые там есть. А теперь, когда подпрограмма написана, можно в любом месте написать, например, так:

КВАДРУР(А,5,С-4,Y,Y2);
КВАДРУР(Y,16,5.5,Р,РР);

это означает: решить квадратное уравнение, взяв первым коэффициентом значение А, вторым - 5, третьим - С-4, а корни поместить в переменные Y и Y2; затем решить другое уравнение с коэффициентами Y, 16 и 5.5 (где Y - корень первого уравнения), а результаты поместить в переменные Р и PP. Как это сделать на Бейсике?

Б. Ну, например, так:
10 А=А1: В=5: С=С1-4: GOSUB 200: Y=X1: Y2=Х2
20 А=Y: В=16: С=5.5: GOSUB 200: Р=X1: РР=Х2

200 D=SQRT (В*В-4*A*C): А2=А*2
210 X1=(-B+D)/А2: Х2=(-В-D)/A2 220 RETURN

Р. Ну да, выкрутились за счет копирования переменных. Вам-то самому очевидно, что это неудобно?

Б. Очевидно. Но все же сделать-то можно.

Р. Можно? А что вы будете делать, когда в подобных вычислениях участвуют массивы? Например:

ПРОЦ СУММА(=>А, С=>);
ИМЕНА: К;
0->С;
ДЛЯ K ОТ 1 ДО #А :: С+А[K]->С
ВСЕ;
КНЦ

В Рапире с помощью такой процедуры можно просуммировать любой кортеж; например, можно написать

СУММА(А2,С2);
СУММА (<5,6.7,8,12>,Р);

А в Бейсике что делать? Копировать массивы? Кстати, в Рапире есть еще и подпрограммы-функции. В Бейсике никаких аналогов им нет.

Б. Сдаюсь. Но все же для начального обучения Бейсик гораздо проще.

Р. Чем же?

Б. Посмотрите, сколько в Рапире понятий: есть несколько циклов, есть подпрограммы, параметры, функции - это же все выучить надо!

Р. Глубочайшее заблуждение, будто более простую вещь и выучить проще. Давайте сравним. Представим себе, что мы оба - преподаватели и учим людей: я - языку Рапира, а вы - Бейсику. Итак, урок #1 - мы оба объясняем оператор присваивания, например. А затем, скажем, на уроке #3, я рассказываю про цикл "пока". Что же делаете вы на этом уроке? Вы рассказываете, КАК ОБОЙТИСЬ БЕЗ ЦИКЛА "ПОКА", точнее, как его построить с помощью оператора GOTO. Ведь оттого, что в языке нет нужного понятия, необходимость в применении циклов "пока" не исчезает. И любой преподаватель программирования вам скажет, что легче изучить новую конструкцию, чем трюк, позволяющий обойтись без нее. Не надо путать две разные вещи: изучение языка и изучение программирования на нем. Да, собственно Бейсик можно изучить за час: в нем почти ничего нет, а затем нужно долго-долго учить приемы, как из этого "ничего" сконструировать алгоритм, который вам нужен. Кстати, устройство сабли можно описать за пять минут, а на устройство современного стрелкового автомата уйдет не менее часа, но кое-как освоить стрельбу из автомата можно за час, а на освоение боевого фехтования на саблях нужно гораздо больше времени. Так что в бой вы, наверное, предпочтете все же идти не с саблей, если у вас есть автомат.

Б. Но ведь и в Бейсик можно добавить конструкции циклов, условных операторов и т.д. В чем тогда преимущество Рапиры?

Р. Если добавить в Бейсик все, о чем вы говорите, и перевести служебные слова на русский язык, и экранный редактор сделать, и добавить файловую систему, то получится... Рапира. Изменений будет столько, что это уже будет новый язык. Или если сказать, что Рапира - это Нью-Бейсик, то вы сразу признаете ее преимущества?

Б. Тогда последний вопрос: если Рапира так хороша, то почему она не распространена столь широко, как Бейсик?

Р. На этот вопрос ответить проще всего: потому же, почему не получают распространения многие наши отличные разработки во многих отраслях промышленности. У многих уже устоялся стереотип, что хорошие языки и системы разрабатывают где угодно, но только не у нас. А это неверно: Рапира - наилучший тому пример. Достаточно немного поработать с системой программирования Рапира, чтобы потерять всякое желание даже смотреть на многие другие языки аналогичного назначения. Достаточно осознать, что этот язык и связанная с ним система - это наилучший из имеющихся сейчас вариантов оснащения персональных ЭВМ для многих применений (в частности для школ), и дать соответствующие задания организациям-разработчикам программного обеспечения, как через год Рапира будет на всех персональных ЭВМ.

Занятие продолжают кандидат технических наук И.Д.ДАНИЛОВ (г. Москва) и кандидат технических наук Ю.А.ПЕРВИН (г.Переславль-Залесский). Излагаемая ими версия Рапиры будет реализована на компьютере "Корвет", который выбран в качестве базовой ЭВМ для оснащения школьных кабинетов информатики.

Эта версия (в дальнейшем мы будем называть ее "Рапира-корвет" или просто "Корвет") мало отличается от "Рапиры-агат": несущественные расхождения есть лишь в нескольких синтаксических конструкциях. С них мы и начнем, чтобы больше к этой проблеме не возвращаться.

В новой версии вместо "левого" присваивания (когда вычисляемое выражение стоит слева от переменной, которой оно присваивается) используется традиционное "правое" присваивание. Сам символ присваивания тоже изменен - он такой же, как в Алголе-60 и Паскале, то есть образован из двоеточия и знака равенства.

Таким образом, вместо принятого для "Рапиры-агат" порядка записи, например,

А+В->С

в новой версии пишут:

С:=А+В

Такая запись привычнее и с точки зрения "старых" наук: математики и физики. Ведь, например, формулу для корня квадратного уравнения пишут в виде:

Матчасть диванного танкиста - Страница 3 88010210

а второй закон Ньютона так:

F = mа,

то есть справа то, что вычисляют, а слева - чему присваивают.

Несколько иначе трактуется в новой версии смысл символа "точка с запятой". Если раньше он служил признаком конца оператора, то в "Рапире-корвет" он отделяет один оператор от другого. Для этой же цели можно использовать и клавишу "возврат каретки". Иными словами, после последнего или единственного оператора в строке точку с запятой можно не ставить.

Другие различия касаются оформления процедур и циклов. В версии "Корвет" в начале процедуры, сразу после заголовка, полагается обязательно писать слово НАЧ, а в конце ее - слово КОН.

Тело цикла, то есть операторы, которые нужно выполнять циклически, заключаются в своеобразные "скобки": НЦ и КЦ. Например, если на "Рапире-агат" мы писали: ДЛЯ К ОТ 1 ДО #А :: С+А[К]->С ВСЕ, то в версии "Корвет" следует писать так: ДЛЯ К ОТ 1 ДО #А НЦ С:=С+А[К] КЦ.

Есть еще несколько небольших различий, однако все они носят чисто редакторский характер и касаются употребления некоторых специальных символов. Для понимания языка они никакой роли не играют.

Часто описание того или иного из языков программирования начинается с дежурного предуведомления: "Для чтения этой книги (статьи, главы) никаких математических знаний не требуется". После этого следует пример на вычисление 2*2, а затем предлагается какая-нибудь совсем "простенькая" программа вроде определения корня монотонной функции методом дихотомии или вычисления дисперсии и коэффициента ковариации заданного распределения.

Так как Рапира ориентируется на школьников, то при ее описании мы не можем позволить себе такую роскошь и потому начнем с подлинно нечислового примера.

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

Один из учеников сел к дисплею и стал набирать на клавиатуре:

ВЫВОД НА ПЕЧАТЬ:
"______ОБЪЯВЛЕНИЕ"
ВЫВОД НА ПЕЧАТЬ: " "
ВЫВОД НА ПЕЧАТЬ:
"___1 ОКТЯБРЯ 1987 ГОДА"
ВЫВОД НА ПЕЧАТЬ:
"__В ШКОЛЕ #6 СОСТОИТСЯ"
ВЫВОД НА ПЕЧАТЬ:
"ВЕЧЕР УЧАЩИХСЯ 9 КЛАССОВ"
ВЫВОД НА ПЕЧАТЬ: " "
ВЫВОД НА ПЕЧАТЬ:
"___НАЧАЛО В 19 ЧАСОВ".

После окончания каждой строки ученик нажимал на клавишу "возврат каретки", включался принтер, и на нем появлялся текст, заключенный в кавычки. Естественно, там, где между кавычками ничего не было, принтер ничего не печатал, выводя пустую строку. Через несколько минут объявление было готово. Но всего один экземпляр. А требовалось их не меньше пяти. Перспектива пятикратного набора такой последовательности операторов выглядела малопривлекательной.

Тогда за пульт сел другой ученик и набрал:

ПРОЦ ИЗВЕЩЕНИЕ НАЧ

Затем он повторил те же строки и заключил набор командой: КОН. Теперь достаточно было набрать всего одну команду.

ИЗВЕЩЕНИЕ()

чтобы вызвать печать объявления.

Это было намного быстрее. Кроме того, текст процедуры оставался на магнитной дискете "навечно", так что для следующего вечера достаточно было тоже набрать всего одну команду. Но... что делать с датой? Ведь для следующего вечера она наверняка будет иной. Преодолимой оказалась и эта беда. Просто вместо процедуры ИЗВЕЩЕНИЕ достаточно было набрать почти такую же процедуру, назовем ее процедура ИЗВЕЩЕНИЕ1:

ПРОЦ ИЗВЕЩЕНИЕ1(ДАТА)
НАЧ
ВЫВОД НА ПЕЧАТЬ:
"______ОБЪЯВЛЕНИЕ"
ВЫВОД НА ПЕЧАТЬ: " "
ВЫВОД НА ПЕЧАТЬ: "___", ДАТА
ВЫВОД НА ПЕЧАТЬ:
"__В ШКОЛЕ #6 СОСТОИТСЯ"
ВЫВОД НА ПЕЧАТЬ:
"ВЕЧЕР УЧАЩИХСЯ 9 КЛАССОВ"
ВЫВОД НА ПЕЧАТЬ: " "
ВЫВОД НА ПЕЧАТЬ:
"___НАЧАЛО В 19 ЧАСОВ".
КОН

Теперь для печати объявления нужно было набрать, например:

ЧИСЛО: = "5 НОЯБРЯ 1987 ГОДА";
ИЗВЕЩЕНИЕ1(ЧИСЛО)

Или еще проще:

ИЗВЕЩЕНИЕ1("5 НОЯБРЯ 1987 ГОДА")

Нетрудно видеть, что таким образом можно создать процедуру изготовления объявлений о вечерах "на все случаи жизни", задавая разные номера школ, даты и т.д. Достигается это благодаря использованию процедуры с параметрами. При описании такой процедуры в скобках записываются формальные параметры, то есть переменные, значения которых не определены в теле процедуры. В нашем примере это ДАТА.

При обращении к процедуре на место формального параметра подставляется фактический: переменная, имеющая определенную величину (у нас ЧИСЛО), или просто константа ("5 ноября 1987 года").

Кстати, читатели, прошедшие предыдущие занятия в "Школе начинающего программиста", наверное, обратили внимание: в примере, только что разобранном нами, не описан тип переменной ДАТА или ЧИСЛО. Дело тут не в оплошности программиста. Если в Бейсике тип переменной определяется по виду ее идентификатора, в Паскале он описывается в явном виде, то в Рапире этого делать не надо. Переменная может менять свой тип в зависимости от типа константы, являющейся ее значением. Поэтому в одной и той же программе допустимо записать такие строки:

ЧИСЛО:=5
ЧИСЛО:="5 ноября"

В первом случае тип переменной ЧИСЛО будет целым. Ее можно будет использовать в арифметических выражениях, написав, скажем,

А:=ЧИСЛО*2

После выполнения второго из двух вышеприведенных присваиваний тип переменной ЧИСЛО становится символьным. Естественно, при этом нельзя будет проводить с ним никаких арифметических операций.

Такая свобода весьма удобна на этапе начального обучения программированию, но может затруднить отладку серьезных программных комплексов. Напомним, что Рапира была задумана и реализована в тот период, когда начала осознаваться необходимость всеобщей компьютерной грамотности. Поэтому перед ее разработчиками стояла двоякая цель: создать язык, который был бы, во-первых, удобным средством обучения, а во-вторых - мощным инструментом, позволяющим создавать широкий спектр различных научных, прикладных и обучающих программ. Так вот: при составлении сложных программ можно описывать типы переменных в явном виде. Тогда транслятор будет проверять соответствие типов переменных их значениям. Впрочем, изложение особенностей использования Рапиры в качестве "производственного" языка выходит за пределы нашей публикации.

Вернемся к проблеме школьного объявления.

Чтобы напечатать его в пяти экземплярах, да к тому же с нужной датой, теперь достаточно набрать:

ИЗВЕЩЕНИЕ1(ЧИСЛО)
ИЗВЕЩЕНИЕ1(ЧИСЛО)

и так далее, всего пять раз. А можно добиться того же результата, набирая текст объявления лишь один раз. Не зря же в Рапире существует несколько операторов цикла.

В нашем примере для этой цели проще всего употребить такую конструкцию:

ПОВТОР 5 РАЗ НЦ
ИЗВЕЩЕНИЕ1(ЧИСЛО) КЦ

Этот оператор понятен и без пространных объяснений. Вместо него можно было бы использовать любой другой цикл из числа имеющихся в Рапире - например, "цикл до". Впрочем, для его пояснения мы обратимся к какой-нибудь другой задаче. Требуется, скажем, подсчитать, сколько букв "Р" содержится во фразе "На горе Арарат растет крупный виноград". Узнаем это, написав программу:

А:="НА ГОРЕ АРАРАТ РАСТЕТ
КРУПНЫЙ ВИНОГРАД"; СУМ:=0;
ДЛЯ I ОТ 1 ДО #А ШАГ 1
НЦ
ЕСЛИ А[I]="Р" ТО
СУМ:=СУМ+1 ВСЕ
КЦ;
ВЫВОД НА ПЕЧАТЬ: СУМ

Если же нас интересует, на каком месте в тексте находится первая буква "Р", то удобнее всего, пожалуй, это сделать с помощью ЦИКЛА ПОКА:

I:=1; МЕСТО:=1;
ПОКА А[I]!="Р"
НЦ
МЕСТО:=МЕСТО+1;
I:=I+1
КЦ

Оба последних примера подобраны так, чтобы и на сей раз избежать сложных математических операций. Но при этом следует отметить: наиболее часто циклические конструкции применяются именно в вычислительных программах. Для работы же с текстами в Рапире есть и другие, еще более удобные средства.

Теперь отвлечемся от сути рассмотренных примеров и обратим внимание на способ их записи.

В самом начале нашего разговора о Рапире отмечалось: многое из того, что записывалось на Бейсике в несколько строк, на Рапире умещается в одной. В наших последних примерах фрагменты программ, наоборот, разбивались на ряд строк. Что это - противоречие? Нет, конечно. Одно из достоинств Рапиры заключается в том, что строка не является структурной единицей программы, как в Бейсике. В Рапире можно один и тот же текст распределять между строками произвольно, а значит, писать тексты программ в виде, наиболее удобном для пользователя. А наиболее удобен скорее всего такой вид, при котором каждая программная конструкция выделяется не только "логически", но и редакционно. Так, в наших примерах циклы записывались таким образом, чтобы отчетливо выделить и заголовок цикла, и его тело. При такой записи легко различать структуру программы, упрощается отладка программ и т.д.

Еще несколько выводов.

Первое. Нам нет необходимости тратить много слов на воспевание достоинств такого приема программирования, как процедуры. О них достаточно говорилось при описании Паскаля. Скажем лишь, что все написанное там можно отнести и к процедурам Рапиры.

Второе. Неоспоримым достоинством Бейсика является возможность работать в "непосредственном режиме", то есть выполнять строки программы сразу после их набора. К достоинствам Паскаля следует отнести удобные средства для структурирования программ и отказ от частых использований оператора перехода GOTO. Рапира объединяет обе эти возможности. Этот факт особенно важен при использовании Рапиры для начального обучения.

Третье. Если в Паскале программист обязан описывать все типы переменных заранее, а в Бейсике следить за соответствующим выбором имен, то в Рапире есть возможность обойтись без этого. Язык позволяет использовать для имен переменных любые идентификаторы, в том числе одни и те же для переменных разных типов. Но можно и описывать типы заранее. В этом случае транслятор будет проверять соответствие типов переменных их значениям.

Впрочем, о типах и структурах данных мы более подробно расскажем на следующем занятии.

ЭЛЕКТРОННЫЙ СОВЕТЧИК БОЛЕЛЬЩИКА
Не так давно появилась новая лотерея "Спортпрогноз", участники которой должны угадать результат 13 спортивных встреч. В помощь участникам некоторые центральные газеты, например, "Комсомольская правда", иногда публикуют прогнозы Всесоюзного совета лотереи. Каждую предстоящую игру характеризуют три числа: А-вероятность победы первой команды, В - возможность ничейного исхода, С - вероятность проигрыша первой команды.

Казалось бы, на основе этих данных без труда можно заполнить карточку спорт-прогноза. Однако если просто брать за ответ максимально вероятный исход-результат окажется невысоким. Кроме того, неясно, что же делать, если вероятности окажутся одинаковыми. Однажды я попробовал поручить составление прогноза калькулятору, и результат превзошел все мои ожидания - удалось предсказать результаты 11 встреч.

Калькулятор работал по программе, помещенной в конце заметки. Научиться пользоваться ею совсем несложно. Введите программу, поставьте в положение Г переключатель Р-Г, наберите стартовое число в форме ЧЧ.ММДД (ЧЧ - количество часов, ММ - минут, ДД - дата, например 13.4507) и нажмите клавиши В/0 С/П. Через 4 секунды на индикаторе появится приглашение к началу работы - "10000". Вводите первую пару чисел A ^ B С/П, и через 10 секунд калькулятор сообщит свое решение об исходе предстоящего матча: "1" - победа первой команды , "2" - победа второй команды, "00" - ничья. Можно вводить данные очередной встречи A ^ B С/П.

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

Структура программы: 00-11: ввод стартового числа, формирование констант и сообщения о готовности к работе. 12-18: ввод чисел А и В и деление единичного отрезка. 19-34: генератор псевдослучайных чисел (Цветков А.Н., Епанечников В.А., Прикладные программы для микроЭВМ "Электроника", М., 1984). 35-40: анализ, к какому из интервалов относится случайное число. 41-47: формирование сообщений.

Контрольный пример. Имеется прогноз трех игр: 70, 10, 20; 30, 20, 50; 50, 40, 10. В качестве стартового числа возьмем 13.4501. Действуя по инструкции, получаем результаты 1, 2, 00. Можно записывать в карточку "спортпрогноза" выигрыш первой команды в первом матче, поражение первой команды во втором матче и ничью в третьем.

ПРОГРАММА: 00. ^ 01. 2 02. F10X 03. П0 04. / 05. ПД 06. 1 07. 1 08. ПС 09. 4 10. F10X 11. С/П 12. ИП0 13. / 14. ПВ 15. ху 16. ИП0 17. / 18. ПА 19. ИПД 20. ИПС 21. * 22. Fпи 23. + 24. ПД 25. КИПД 26. ху 27. ИПД 28. - 29. ПД 30. ИПА 31. ИПВ 32. + 33. ху 34. - 35. Fx>=0 36. 43 37. ИПВ 38. - 39. Fx>=0 40. 45 41. 1 42. КБПС 43. 2 44. КБПС 45. 0 46. Farctg 47. КБПС.

А.ЛЕТИН (г.Москва)
Gudleifr
Gudleifr
Admin

Сообщения : 3402
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Страница 3 из 6 Предыдущий  1, 2, 3, 4, 5, 6  Следующий

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения