Основные понятия программирования
Монолитные железобетонные перекрытия
Полы
1 – бетонная подготовка; 2 – толь; 3 – осмоленная подкладка; 4 – плинтус; 5 – утеплитель
а – ребристое; б – кессонное; в – безбалочное.
1 – колонные; 2 – главная балка; 3 – второстепенные балки; 4 – плита; 5 – балки; 6 - капитель
.
Введение основных понятий программирования имеет целью сосредоточить внимание на специфике вычислительной машины как исполнителя программ.
Вычислительная машина – устройство, умеющее выполнять некоторый определенный набор действий.
Команда – приказ на выполнение действия из указанного набора, выраженный каким-либо заранее фиксированным способом.
Система команд – совокупность всех допустимых команд.
Давая задание вычислительной машине на выполнение некоторой работы, обычно ей выдается не одна команда, а некоторая последовательность команд, называемая программой.
Всякое действие производится над некоторыми объектами и о результатах действия можно судить по изменению их состояния. Один из видов объектов – переменная, которая является важным понятием программирования. Понятие переменной в программировании имеет несколько другой смысл, чем в математике. Для усвоения этого понятия представлен следующий пример.
Пусть требуется найти произведение z двух натуральных чисел x и y.
Составим задание для вычислительной машины, которая не умеет умножать, а умеет лишь складывать. Решить такую задачу в одно действие нельзя. Ее требуется разложить на ряд последовательных действий, т.е. составить программу.
Так как программа должна «работать» для любой пары натуральных чисел, то сами конкретные числа в ней не участвуют. Вместо чисел употребляются имена, обозначающие изменяемые объекты – переменные. Перед началом вычислений этим переменным должны быть присвоены значения. Присвоение – одно из важнейших действий, выполняемых вычислительной машиной.
Переменную можно представить себе как ящик, на который повешен ярлык с ее именем. Присвоение переменной с именем x значения 5 можно представить себе так: в ящик с ярлыком «x» положить 5 шаров.
Значение одной переменной можно переслать в другую переменную. Но это не меняет значения первой. Например, переслать значение x в переменную u, или присвоить переменной u значение x, означает: задать для u такое же значение, которое имеет переменная x, т.е. скопировать значение x. Если было, допустим, x = 5, то присвоение u значения x (записывается u = x) означает, что нужно посмотреть, сколько шаров лежит в ящике «x» и столько же шаров положить в ящик «u». Теперь будет u = 5, но при этом x сохранило значение (x = 5).
В программировании встречается такая операция присваивания, где слева и справа используется одна и та же переменная. Например, u = u + 1. Здесь перед выполнением собственно присваивания осуществляется операция сложения. Выполнение операции присваивания выполняется по шагам:
1. переслать содержимое ящика «u» в специальное место в процессоре, предназначенное для первого слагаемого;
2. переместить 1 на место второго слагаемого в процессоре;
3. выполнить операцию сложения;
4. переслать результат в ящик «u» (при этой пересылке старое значение u пропадает – «стирается»).
После выполнения этих инструкций u будет иметь значение на 1 больше, чем перед выполнением.
В поставленной выше задаче требуется вычислить , пользуясь операцией сложения:
.
Решение этой задачи можно представить как последовательность выполнения следующих шагов.
Положить . Далее выполнить операцию y раз. При этом после каждого выполнения указанной операции значение z увеличивается на x. В итоге в z получается результат решения задачи.
Чтобы повторить операцию сложения требуемое число раз, нужно считать, сколько раз она уже выполнена. Для этого нужно использовать вспомогательную переменную u, называемую счетчиком. Перед первым прибавлением к z значения x можно принять u = 1 и после очередного изменения z значение счетчика u будет изменяться на 1. Тогда программу можно записать так:
1 z = 0
2 u = 1
3 z = z + x
4 u = u + 1
5 Если u ≤ y идти к 3
Эта программа написана на обычном языке человеческого общения с использованием общепринятой математической символики. Команды 1 и 2 задают начальные значения переменных z и u. Команда 3 каждый раз увеличивает значение z на x. Команда 4 увеличивает значение счетчика на 1 после выполнения очередной операции сложения. Команда 5 проверяет условие u ≤ y: если оно выполняется, т.е. не все y сложений еще выполнены, то происходит возврат к команде 3 и ее повторное выполнение; если условие u ≤ y не выполняется, процесс вычислений заканчивается. Это произойдет, когда будет u > y, т.е. все нужные сложения выполнены.
Приведенная программа задает порядок действий, которые могут быть выполнены, когда x и y получат конкретные значения. Совокупность значений переменных, которые должны быть заданы перед выполнением программы, называется исходными данными. Таким образом, для решения задачи необходимо иметь программу и исходные данные.
Проследим выполнение программы при следующих исходных данных: x = 5, y = 3. Для каждой переменной, используемой в программе, заготовим по одному ящику и повесим на них ярлыки с именами переменных. Чтобы заготовить нужное число ящиков, нужно просмотреть программу сначала, и как только встретится новая переменная, взять новый ящик и повесить на него ярлык с именем. Итак, в программе используется четыре переменных: z, u, x, y (рисунок 1).
Рисунок 1. Представление переменных
Зададимся значениями x = 5, y = 3 и начнем выполнение программы (рисунок 2). То, что в ящике не обозначено его содержимое говорит о том, что значение соответствующей переменной не определено.
Рисунок 2. Исходные значения переменных
Ниже показано содержимое ящиков после выполнения команд 1, 2 (рисунок 3) и после первого выполнения команд 3, 4 (рисунок 4).
Рисунок 3. Состояние после выполнения команд 1 и 2
Рисунок 4. Состояние после первого выполнения команд 3 и 4
Команда 5 проверяет условие u ≤ y. Если оно удовлетворяется для входящих в него переменных, то имеет значение ДА, в противном случае – НЕТ. Условие 2 ≤ 3 имеет значение ДА. Поэтому осуществляется переход к команде 3.
Выполнение программы повторяется, начиная с команды 3. После второго выполнения команд 3 и 4 содержимое ящиков будет следующим (рисунок 5).
Рисунок 5. Состояние после второго выполнения команд 3 и 4
Далее опять выполняется команда 5. Так как условие 3 ≤ 3 имеет значение ДА, происходит возврат к команде 3. После третьего выполнения команд 3 и 4 содержимое ящиков будет следующим (рисунок 6).
Рисунок 6. Конечные значения переменных
Далее выполняется команда 5. Так как условие 4 ≤ 3 имеет значение НЕТ, то переход к команде 3 не происходит. Вычисления закончены.
Чтобы узнать, какое значение имеет результат z после выполнения программы, нужно посмотреть, чему равно содержимое ящика с ярлыком «z».
Процесс выполнения программы можно представить более компактно – в виде трассировочной таблицы, в которой записываются все значения, последовательно принимаемые изменяемыми переменными программы (таблица 1).
Таблица 1. Трассировочная таблица
z | u |
Приведенная выше программа очень простая, но она имеет особенность, характерную для большинства программ, реализуемых для ЭВМ. После выполнения команды 5 (если условие выполняется) осуществляется возврат к команде 3 и повторное выполнение команд 3–5. Многократно повторяющаяся при выполнении часть программы называется циклом. Цикл является типичной структурой, реализуемой в программах для ЭВМ, так как его использование позволяет записать действие (или последовательность действий) один раз, а выполнять многократно.