Программирование линейных алгоритмов языком Turbo Pascal 7.0 в операторах присваивания можно записывать имена сменных, которым присвоено значения за предыдущими операторами программы. Значением выражения, что является именем сменной, есть ее значения, присвоенное ей раньше. Например, если в программе сменной z присвоено значения 2, то выражение z+1 задает добавление 2 и 1 и имеет значение 3. При другом значении z выражение z+1 имел бы другое значение. Если это выражение написать, например, в операторе z : =z+l, то оператор задает увеличение значения z на 1, которым бы оно не было (конечно, какое-то значение сменной z надо присвоить перед выполнением этого оператора). Совокупность сменных, имена которых объявлено в программе, называется пам ‘яттю программы а соответствие между именами сменных и их залогами — залогом пам ‘яти программы. Присваивание значения сменной означает изменение залога пам ‘яти программы.
Имя сменной в выражении задает ее значение на момент вычисления выражения. Итак, выражение исчисляется при текущих значениях указанных в нем сменных, т.е. на текущем залоге пам ‘яти.
[smszamok]
Дальше мы рассмотрим другие виды операторов, но все операторы задают изменение залогов пам ‘яти программы. Это изменение и является их семантикой.
Для пересчитываемых типов существует специфическая разновидность оператора присваивания. Он записывается как inc (z) или dec (z), где z — имя сменной пересчитываемого типа. В действительности эти операторы являются вызовами встроенных процедур (о процедурах речь идет в разделе 6). Вызов іпс (z) тождественный оператору z : =succ (z), dec (z) — оператору z: =pred (z).
В первой строке записан заголовок программы; он содержит имя программы и не является обязательным. Тем не менее лучше взять себе за правило всегда его записывать.
Раздел подключения модулей (он тоже не является обязательным) начинается служебным словом uses и содержит перечень имен модулей. Подробнее о модулях речь идет в статье 10, а сейчас дадим сильное краткое объяснение. Программы часто создаются в виде нескольких программных единиц — собственно программы и целого набора модулей, которые в ней используются. Модули сохраняются и транслируются отдельно, а их «машинные» варианты подключаются к программе при компоновании. Чтобы обеспечить подключение нужных модулей, в начале программы указывают их имена.
Объявление имени — это описание того, что обозначает имя в программе. Имя может обозначать некоторое значение или участок памяти, в которой сохраняются значение, атакож другие, более сложные объекты. Конкретные виды объявлений имен будут рассматриваться вместе с уточнением соответствующих понятий (сменных, констант, типов и подпрограмм). Каждое из объявлений заканчивается разделителем «;».
Подпрограмма — это специальным чином оформленная часть программы. Если программа описывает действию из решение некоторой задачи, то подпрограмма описывает действию из решение некоторой части этой задачи.
Каждое имя, которое используется в программе, должны быть объявленным. Некоторые имена объявляются в системе программирования или в других программных единицах.
Описание выполняемых действий вместе с «дужками» begin-end называется телом программы. После тела обязательной есть точка — символ конца программной единицы. Текст программы между ее заголовком и точкой, т.е. объявление и тело, называется блоком. Действия в программе задаются последовательно записанными командами, или операторами. В литературе операторы еще называют указаниями и инструкциями.
Примеры. Кратчайшая программа, которая не задает никаких действий, имеет такой вид:
begin end.
Как видим, операторы присваивания и другие операторы записываются один за одним и отделяются разделителем «;». Операторы, записанные один за одним, образовывают последовательность операторов. Выполнение операторов программы можно проімітувати, указав последовательность операторов и станів памяти программы, после выполнения операторов. Если в процессе выполнения программы сменная еще не получила значения, будем считать его неопределенным и обозначать как «?». Имитацию программы можно провести с помощью ее пошагового выполнения. Вместо неопределенности начальными значениями сменных будут нули. Тем не менее на это свойство системы программирования полагаться не следует.
Языки программирования, как правило, не имеют специальных операторов для вывода значений из оперативной памяти на внешние носители и введение их из носителей к оперативной памяти. Эти операции осуществляются за специальными подпрограммами {процедурами) введени-вывод. Рассмотрим подпрограммы вывода. Вывод, или запись, значение выражения на экран задается в виде вызова процедуры writeln (выражение) ,5 Вызов процедуры, в отличие от вызова функции, записывается не в выражении, а как отдельный оператор. При выполнении подпрограммы writeln исчисляется значение выражения и за ним создается соответствующая константа, т.е. последовательность символов. Константа передается устройства, частью которого является экран, и выводится на него. Типом выражения может быть лишь базовый тип.
На экране почти всегда имеющаяся световая пометка, которая мелькает, — курсор. При выполнении подпрограммы вывода константа печатается, начиная из того места на экране, где находится курсор. После вывода с помощью процедуры writeln курсор переходит к следующей строке экрана.
Внутри дужек writeln можно написать несколько выражений через запятую. Они исчисляются один за одним, и соответствующие им константы печатаются подряд в одном строке; курсор передвигается в следующую строку после вывода последней константы.
Например, в результате выполнения операторов За выражением можно написать двоеточие и целую константу, например, х+в: 10. Константа задает так называемую ширину поля вывода, к которому выводятся символы, которые представляют значение выражения. Напомним: имя writeln является сокращением английского write line— записать строку.
Введение данных из внешних носителей к сменным программы задается процедурами введения, или чтение. Вызов одной из них в простейшем случае имеет вид readln (їм’я-змінної). Имя readln является сокращением английского read line — прочитать строку. При выполнении такого вызова компьютер останавливается и ждет, что на клавиатуре будет набрана константа того же типа, что и тип указанной сменной. В ответ следует набрать какую-то константу на клавиатуре (ее будет показано на экране) и нажать на клавишу Enter. Набранная константа после нажатия на Enter передается процедуре, которая за константой создает соответствующее значение и присваивает указанной сменной. Типом сменной может быть лишь базовый тип. Если нажать Enter, не набрав ничего, кроме пропусков, то компьютер и в дальнейшем будет ждать. Перед числовой константой можно набрать произвольное число пропусков (система их игнорирует).
Если вместо нужной константы набрать другие символы (например, недопустимую константу или вместо числовой константы символьную), то выиздыхание программы на этом будет завершено (аварийно) и на экране появится сообщение о том, что входные символы были неправильными. Пусть, например, имя z обозначает сменную типа integer. Если при выполнении readln (z) набрать 1024, то после нажатия на Enter значением z станет 1024. Если же набрать 50.9 или z=1024, программу будет аварийно завершено, поскольку число 50.9 не подается в типе integer и целая константа не может начинаться символами «z=». Если же набрать целое число, которое выходит за пределы типа, например, 50000000, результат зависит от установленных директив компиляции и может быть целиком неожидаемым.
[/smszamok]
В вызове процедуры чтения можно написать несколько имен сменных, отделив их запятыми. При выполнении этого вызова надо набрать соответствующее количество констант, отделив их пропусками или нажатиями на Enter в произвольном количестве. Пока все константы не будет набрано, выполнение вызова не заканчивается. Пусть, например, х: integer, в: real. При выполнении readln (х, у) ; следует набрать целую константу, прибавить хотя бы один пропуск или нажатия на Enter, а потом набрать любую целую или действительную константу (между целой и дробовой частью набрать десятичную точку) и нажать на Enter.
Практически перед каждым вызовом процедуры чтения из клавиатуры следует записать вызов процедуры вывода с приглашением к введению значений и указанием, сколько и каких типов. Например, указать вывод приглашения writeln(‘Температура (целое число)>’), а потом вызов readln (tCel s) ;. Процедура readln задает чтение не только из клавиатуры, но и из других внешних носителей, например, с диску.