Квант
Разное

Заочная школа программирования

Звенигородский Г. А.

54

Заочная школа программирования

Урок 3: Работа с памятью. Имена и их значения.

Процедуры

При составлении программы на большихinstве языков программирования, в том числе на Робике, память вычислительной машины или робота удобно представлять себе как набор отдельных блоков (рис. 1), в каждом из которых можно хранить отдельную программу (или ее часть), число, строку текста (вспомните задание 2.4 из предыдущего урока — «Квант», 1979, № 9, с. 57) или что-нибудь еще. Имя блока памяти (для краткости его называют просто имя, при описании некоторых языков в этом же смысле употребляют другие слова: идентификатор) можно описать следующей синтаксической диаграммой:

Расшифруем эту диаграмму:

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

Примеры имен:
A15, КРОКОДИЛ, СКОРОСТЬ, В, LI, Q06П7, АЛЬФА

Несолько примеров типичных ошибок при попытке написать имена: 6А12Б (начинаяся не с буквы). АВ-1 (дефис «-» — это не буква и не цифра).

ИМЯ БЛОКА (это не одно имя, а два) ‘А5’ (апостроф — это не буква).

Если в блоке памяти с именем А размещено, например, число 15, то говорят, что имени А присвоено значение 15.

Читать значение какого-либо имена можно сколько угодно раз, но если мы присвоили этому именю новое значение, то старое теряет безвозвратно. В языке Робик существует несколько предложений, позволяющих присваивать именам значения. Самое простое из них — предписание присваивания. Синтаксическая диаграмма для этого предписания изображена в свойной таблице на с. 56 этого номера журнала. В переменном поле «выражение» может стать либо число, либо текст, либо имя, как указано в той же свойствах таблице.

Рассмотрим несколько примеров присваивания:
ЗНАЧЕНИЕ 5 ПРИСВОИТЬ ИМЕНИ А;

Рис. 1

55

ЗНАЧЕНИЕ СТРОКА ПРИСВОИТЬ
ИМЕНИ А;
ЗНАЧЕНИЕ 9.81 ПРИСВОИТЬ
ИМЕНИ УСКОРЕНИЕ;
8 ПРИСВОИТЬ ИМЕНИ A5;
А ПРИСВОИТЬ A5;
ЗНАЧЕНИЕ А ПРИСВОИТЬ A5;

Проверьте, что все эти примеры охватывают диаграммой!

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

Если в качестве значения переменного поля «выражение» в левой части предписания присваивается, т. е. левее слова ПРИСВОИТЬ, стоит число или текст, то именно это число или этот текст будет присвоены имени; указаному справа. Если же в качестве выражения используется имя, то присваивается будет значение этого имени.

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

| имя | значение |
| :— | :— |
| A | 5 |

Иначе говоря, имя А имеет в этот момент значение 5. После второго присваивания имя А получит новое значение. Старое при этом будет безвозвращано потеряно. В таблице мы изобразим это так:

| имя | значение |
| :— | :— |
| A | ‘СТРОКА’ |

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

После выполнения следующих трех предписаний таблица станет такой:

| имя | значение |
| :— | :— |
| A | ‘СТРОКА’ |
| ускорение | 9.81 |
| A5 | ‘A’ |

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

ЗНАЧЕНИЕ А ПРИСВОИТЬ A5;

В левой части предписания стоит имя, значит, нам нужно использовать его значение.

Это значение будет присвоено имени A5 вместе с старого текста ‘A’. После этого присваивания таблица прибретает такой вид:

| имя | значение |
| :— | :— |
| A | ‘СТРОКА’ |
| ускорение | 9.81 |
| A5 | ‘A’ |

Точно так же «работает» значение поля «выражение» в предписании ОТПЕЧАТАТЬ, синтаксическая диаграмма которого приведена в свойной таблице: если в качестве выражения стоит имя, то будет отпечатано значение этого имени. (Напомним, что имя, в отличие от текста, не может начинаться с апострофа.) Например, выполняя предписание ОТПЕЧАТАТЬ 5, А, А, А, ‘A’, ‘’, ‘A5’, ‘-’, A5, ‘ВСЕ’, на терминале появится строка:

56

5СТРОКАСТРОКАСТРОКАА А5-СТРОКАВСЕ

Обратите внимание, что текст печатается без апострофов!
Задание 3.1. Найдиме, что отнечаемем ЭВМ по программе:
5 ПРИСВОИТЬ А;
‘A’ ПРИСВОИТЬ В;
А ПРИСВОИТЬ С;
ОТПЕЧАТАТЬ ‘B = ‘, B, ‘C = ‘, C;

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

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

Чтобы ЭВМ запомнила проедуру (поместила ее в память), нужно:

  1. Набрать предписание ЗАПОМИНТЬ ПРОЦЕДУРУ и указать имя этой проедуры.

  2. Перечислить все предписания, входящие в состав проедуры, указая переед каждой из них порядковый номер (натуральное число).

  3. Набрать предписание ЗАКОНЧИТЬ ОПИСАНИЕ ПРОЦЕДУРЫ.

Синтаксическая диаграмма «Запоминание проедуры» изображена в свойной таблице (на участок этой диаграммы, выделенный синим цветом, пока не обращайте внимание).

Например, составленную на первом уроке программы для роботедуроного РД-1 можно запомнить под именем ПЕРЕМЕНА при помощи такой последовательности предписаний:

ЗАПОМИНТЬ ПРОЦЕДУРУ ПЕРЕМЕНА;
10 ОТКРОЙ ОКНО;
20 НАМОЧИ ТРЯПКУ;
30 СОТРИ С ДОСКИ;
60 СЯДЬ НА МЕСТО;
40 ЗАКРОЙ ОКНО;
ЗАКОНЧИТЬ ОПИСАНИЕ ПРОЦЕДУРЫ;

Для того чтобы храняющаяся в память проедура начала исполняться, ее нужно вызывать при помощи предписания ВЫЗВАТЬ ПРОЦЕДУРУ, структура которого изображена в свойной таблице.

Присваивание:
ННАЧЕНИЕ ВЫражение ПРИСВОИТЬ ИМЕНИ Имя
ЗАПОМИНТЬ ПРОЦЕДУРУ Имя проедуры
имя параметра натуральное число предписание
ЗАКОНЧИТЬ ОПИСАНИЕ ПРОЦЕДУРЫ

Вызов проедуры:
НЫЗВАТЬ ПРОЦЕДУРУ Имя ВЫражение
Исправление проедуры:
ИСПРАВИТЬ ПРОЦЕДУРУ Имя
натуральное число предписание
ЗАКОНЧИТЬ ВЫражение
Отпечать:
ОТПЕЧАТАТЬ ВЫражение
Имя