Рассмотрим пример программы:
VAR a,b,y : Integer;
BEGIN
a:= 10;
b:= 6;
y:= a+b+1;
WriteLn (y+200)
END.
В программе между BEGIN и END встречаются три переменные, поэтому все они перечислены в описании VAR a,b,y : Integer . Компьютер отведет для них в памяти три двухбайтовые ячейки.
В 4.5 я рассказывал о работе оператора присваивания, используя такие выражения, как "компьютер знает", "компьютер помнит". Но нам необходимо более строгое понимание работы этого оператора, понимание "ближе к железу":
Выполняя оператор присваивания (например, y:=a+b+1), компьютер сначала смотрит на его правую часть (a+b+1). Если в ней встречаются переменные (в нашем случае это a и b ), то компьютер перед вычислением ищет их значения в отведенных под них ячейках памяти (и находит там 10 и 6), подставляет эти значения в правую часть и вычисляет ее. Затем вычисленное значение (17) компьютер записывает в ячейку памяти, отведенную под переменную, поставленную в левой части (y).
Таким образом, когда мы говорим "Компьютер запомнил, что а равно 2", мы подразумеваем "Компьютер записал в ячейку памяти, предназначенную для а, число 2".
А теперь рассмотрим, как будут заполняться информацией ячейки a,b,y в процессе выполнения нашей программы. В самом начале выполнения паскалевской программы в них находится неизвестно что. Первым выполняется оператор a:=10. Согласно только что приведенному определению оператора присваивания в ячейку a будет записано число 10. Затем выполняется оператор b:= 6 и в ячейке b появляется шестерка. Затем выполняется оператор y:= a+b+1. Компьютер смотрит, что находится в ячейках a и b, видит там 10 и 6, подставляет их в выражение a+b+1, получает 17 и записывает в ячейку y. Наконец выполняется оператор WriteLn (y+200). Компьютер заглядывает в ячейку y, видит там 17, вычисляет 17+200 и выводит 217 на экран.
Схематически этот процесс можно изобразить так:
ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ | ЧТО НАХОДИТСЯ В ЯЧЕЙКАХ ПАМЯТИ | ЧТО ВИДИМ НА ЭКРАНЕ | ||
a | b | y | ||
a:= 10 | 10 | ? | ? | |
b:= 6 | 10 | 6 | ? | |
y:= a+b+1 | 10 | 6 | 17 | |
WriteLn (y+200) | 10 | 6 | 17 | 217 |
Теперь мы можем также уточнить работу оператора WriteLn:
Если в скобках оператора WriteLn встречаются выражения с переменными величинами, то Паскаль находит в памяти значения этих величин, подставляет их в выражения, вычисляет выражения и результат выводит на экран.
Задание 7: Поменяйте местами операторы b:= 6 и y:= a+b+1. Что произойдет?
0.7.1. Оператор присваивания меняет значение переменной величины
Пока я не рассматривал программы, в которых переменные меняют свою величину. Теперь настало время такую программу рассмотреть:
VAR k : Integer;
BEGIN
k:=10; WriteLn (k); k:=25; WriteLn (k); k:=4; WriteLn (k)
END.
Запишем схематически процесс изменения информации в ячейке k:
ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ | ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ k | ЧТО ВИДИМ НА ЭКРАНЕ |
k:=10 | 10 | |
WriteLn (k) | 10 | 10 |
k:=25 | 25 | |
WriteLn (k) | 25 | 25 |
k:=4 | 4 | |
WriteLn (k) | 4 | 4 |
Как видите, в процессе работы программы содержимое ячейки k меняется. Так, при выполнении оператора k:=25 там вместо значения 10 появляется 25. А куда же девается десятка? Она стирается, то есть компьютер забывает ее безвозвратно. Здесь действует общий принцип работы всех компьютеров:
Если в какое-нибудь место памяти или диска записывается новая информация, то старая информация, записанная там раньше, автоматически стирается, даже если она кому-то и нужна.
Раз теперь вместо 10 в ячейке k находится 25, то оператор WriteLn (k) печатает уже 25. Следующий оператор k:=4 запишет на место 25 четверку, а WriteLn (k) ее напечатает.
А что напечатает следующая программа?
VAR f : Integer;
BEGIN
f:=30;
f:=f+4;
WriteLn (f)
END.
Оператор f:=30 запишет в ячейку f число 30. А что сделает странный оператор f:=f+4? По определению оператора присваивания он сначала вычислит правую часть f+4 , подставив туда вместо f его значение, взятое из ячейки, и получит 34. Затем число 34 будет записано в ячейку, отведенную под переменную, обозначенную в левой части, то есть опять в ячейку f. При этом старое значение 30 будет стерто.
Таким образом, оператор f:=f+4 просто увеличивает число в ячейке f на четверку или, другими словами, увеличивает f на 4.
Задания 8-10:
Определите без компьютера, что будет напечатано при выполнении следующих фрагментов программ:
8) a:=100; a:=10*a+1; WriteLn (a)
9) a:=100; a:=-a; WriteLn (a)
10) a:=10; b:=25; a:=b-a; b:=a-b; WriteLn (a,' ',b)
Имена переменных
Мы привыкли переменные величины обозначать буквами (a, s, d ... ). Большинство языков программирования, в том числе и Паскаль, позволяет обозначать переменные не только буквами, но и целыми словами. Вот два равносильных фрагмента программы:
a:=3; | Summa:=3; |
b:=4-a; | ROBBY:=4-Summa; |
WriteLn (a,b+50) | WriteLn (Summa,ROBBY+50) |
В том и другом случае будут напечатаны числа 3 и 51. Очевидно, компьютеру все равно, как мы обозначаем переменные величины, в смысл имен он не вдумывается и не удивляется, что переменная Summa никакой суммой не является, а просто числом 3.
Будем называть обозначение переменной именем или идентификатор ом этой переменной.
Правило:
Именем переменной в Паскале может служить любая последовательность цифр, латинских букв и знака подчеркивания, не начинающаяся с цифры.
Примеры правильной записи имен:
a
x
Velichina
Zzz
polnaja_summa
tri_plus_dva
S25
K1
_k1
___
A1b88qq
Oshibka
Примеры неправильной записи имен:
ж - буква не латинского алфавита
polnaja summa - содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания
2as - начинается с цифры
Domby&Son - содержится символ & , не являющийся буквой, цифрой или знаком подчеркивания
Дата: 2018-12-21, просмотров: 407.