Изменить стиль страницы

— Это мама каждые полгода отмечает, на сколько я вырос.

— А ты разве растешь?

— Вы меня удивляете, Казимир, — сказал Петя. — А что, по-вашему, не расту?

— Мой вопрос — из тех, которые называются риторическими. Ответ на них заранее известен. Но должен же я с чего-то начать новую тему?

— А о чем она?

— О переменных, — сказал Казимир, и продолжал: — Вот я произнес это слово. А как ты его понимаешь?

— Как я его понимаю? Как и все. Вот, например, на небе — или есть тучи, или их нету. Тогда говорят: переменная облачность.

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

— Ничего себе — множество! Нас всего-то двадцать пять человек.

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

— Сто тридцать шесть сантиметров.

— А когда-то был сто двадцать шесть. А когда-нибудь будет сто восемьдесят шесть… Одним словом, понятие «переменная» мы будем употреблять вот в этих двух смыслах. А сейчас приведи мне пример переменной, которая была бы элементом какого-нибудь множества.

— Весенние каникулы, — тут же ответил Петя.

— Хм… Поясни.

— Это — элемент множества, состоящего из трех элементов: летние каникулы, зимние каникулы и весенние каникулы.

— Ну, что же, верно. А теперь — пример второго типа переменных.

— Весенние каникулы, — сказал Петя, не моргнув.

— Поясни, — потребовал Казимир.

— А разве непонятно? Недавно я думал: послезавтра НАЧИНАЮТСЯ весенние каникулы. А сейчас думаю: послезавтра КОНЧАЮТСЯ весенние каникулы. Каникулы одни и те же, но когда они начинаются это одно, а кончаются — совсем другое.

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

КОНСТРУКЦИЯ ПРИСВАИВАНИЯ. ОПЕРАТОР ПРИСВАИВАНИЯ

— Всякая программа — это не что иное, как производство каких-то операций над какой-то одной или несколькими переменными, — продолжал Казимир. — Представь себе, запускают космический корабль. За короткое время его скорость возрастает от нуля до семи километров в секунду. Ракета-носитель испытывает много внешних воздействий: ветер, перепады давления, разница температуры в нижних и верхних слоях атмосферы, но при этом скорость ракеты должна поддерживаться в строго определенных пределах. Для этого Исполнитель, то есть бортовой компьютер, постоянно анализирует ситуацию и подает соответствующие команды двигателям. Но чтобы выполнять эту задачу, Исполнитель должен держать в памяти множество данных. А память у него хотя и обширная, но не безграничная. Поэтому ее нужно экономить. И вот для этого программисты придумали очень простую конструкцию. Она называется «присваиванием». Например, в настоящий момент скорость ракеты — два километра в секунду. А через секунду она становится два километра десять метров в секунду. Тут компьютер вызывает из ячейки памяти, где хранится информация о скорости, прежние данные и говорит сам себе: «переменной «скорость» присваивается значение — два километра десять метров в секунду» — и тут же загоняет эту новую информацию в ту же самую ячейку памяти.

— А прежнюю скорость компьютер забывает?

— Начисто. Зачем ему забивать свои мозги сведениями, которые больше не понадобятся?

— Да, но ведь в следующую секунду скорость ракеты снова повысится?

— И тогда компьютер вызовет из памяти старое значение скорости и снова скажет: «переменной «скорость» присваивается такое-то значение». Например, два километра двадцать метров в секунду. И, что интересно, компьютер будет действовать по программе, которую ввел в него программист. А программа, если сильно упрощать дело, будет выглядеть так:

Пять уроков Великого Магистра, или повесть о том, как Петя Бочкин изучал программирование i_010.png

Или так:

Пять уроков Великого Магистра, или повесть о том, как Петя Бочкин изучал программирование i_011.png

— Ну что? — спросил Казимир. — Знакомые конструкции?

— Да, — сказал Петя. — Первая — это разветвление. А вторая — цикл.

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

И Казимир нарисовал шпагой на песке:

Пять уроков Великого Магистра, или повесть о том, как Петя Бочкин изучал программирование i_012.png

— Это все равно, как если соединить вместе два знака — «разделить» и «равняется», — сказал Петя. — Правда, Казимир?

— Да, — ответил Великий Магистр. — Те, кто его придумали, долго себе голову не ломали. Творили, так сказать, из подручного материала. Запомни: этот знак называется «оператор присваивания».

Казимир приблизился к орудию.

— А теперь вернемся к нашему обеду. Можешь ли ты сразу дать спецификацию для Исполнителя?

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

— Как бы ты назвал переменную, которая будет фигурировать в программе?

— Я бы назвал ее «заряд».

— Можно и так, — сказал Казимир. — Пиши программу.

И Петя написал:

ПОДОЙТИ К ОРУДИЮ
ЗАРЯД:= СГУЩЕНКА
ПОВТОРЯТЬ 3 РАЗА
 ЕСЛИ
 ОРУДИЕ НЕ ЗАРЯЖЕНО
  ЗАРЯДИТЬ ОРУДИЕ
  ВЫСТРЕЛИТЬ
 КОНЕЦ ЦИКЛА
КОНЕЦ УСЛОВИЯ
ЗАРЯД:= ТУШЕНКА
ПОВТОРЯТЬ 3 РАЗА
 ЕСЛИ
 ОРУДИЕ НЕ ЗАРЯЖЕНО
  ЗАРЯДИТЬ ОРУДИЕ
  ВЫСТРЕЛИТЬ
 ИНАЧЕ
  ВЫСТРЕЛИТЬ
КОНЕЦ ЦИКЛА
КОНЕЦ УСЛОВИЯ
КОНЕЦ

МЕТКА. ОПЕРАТОР ПЕРЕХОДА

— Правильно? — спросил Петя.

— Правильно.[3]

— Можно вводить?

— Погоди. Не кажется ли тебе, что программа несколько длинновата?

— Ну и что? Зато правильно.

— После операторов присваивания идут совершенно одинаковые блоки, состоящие из конструкций разветвления и цикла…

— Я и сам вижу.

— Я знаю способ, который позволяет сделать программу в два раза короче. Нужно пометить специальной меткой весь блок команд, который следует после первого оператора присваивания, а после второго оператора присваивания — применить оператор перехода. — Подождите, Казимир! Я ничего не понимаю. Как — пометить? Что это за «оператор перехода»? р Меткой обычно служит какая-нибудь буква латинского алфавита, чаще всего «L». Ее ставят перед той командой, к которой нужно вернуться в ходе выполнения граммы. А приказом к возвращению к помеченной команде служит оператор перехода. Обозначается он так: «перейти к…». Или по-английски: «go to». Если в тексте граммы имеется выражение: «перейти к…» (или «go to…»), то Исполнитель прервет последовательный порядок выполнения команд, отыщет в своей памяти команду, помеченную «L», и выполнит именно эту команду.

— Я все понял, — сказал Петя. — Пишу новую программу с меткой и оператором перехода. Получается:

ПОДОЙТИ К ОРУДИЮ
ЗАРЯД: = СГУЩЕНКА
L ПОВТОРЯТЬ 3 РАЗА
 ЕСЛИ
 ОРУДИЕ НЕ ЗАРЯЖЕНО
 ТО
   ЗАРЯДИТЬ ОРУДИЕ
   ВЫСТРЕЛИТЬ
 ИНАЧЕ
  ВЫСТРЕЛИТЬ
 КОНЕЦ УСЛОВИЯ
КОНЕЦ ЦИКЛА
КОНЕЦ МЕТКИ
ЗАРЯД: = ТУШЕНКА
ПЕРЕЙТИ К L
КОНЕЦ МЕТКИ
КОНЕЦ
вернуться

3

На самом деле НЕправильно. При таком алгоритме если орудие уже заряжено сгущёнкой, то оно ни разу не выстрелит, выстрел предусмотрен только, если сгущёнкой не заряжено. В общем, Казимир решил зажилить сгущёнку:) кроме того, если у нас язык допускает конец условия, то конец условия должен находиться раньше конца цикла, так как условие вложено в цикл, а не наоборот.

(Примечание оцифровщика-«книгодела»)