Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

4.7. Что делает оператор присваивания с памятью

Рассмотрим пример программы;

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. Компьютер отведет для них в памяти три двухбайтовые ячейки.

Вот как будет работать оператор присваивания:

Выполняя оператор присваивания (например, у:=а+b+1), компьютер сначала смотрит на его правую часть (а+b+1). Если в ней встречаются переменные (в нашем случае это а и b ), то компьютер перед вычислением ищет их значения в отведенных для них ячейках памяти (и находит там 10 и 6), подставляет эти значения в правую часть и вычисляет ее. Затем вычисленное значение (17) компьютер записывает в ячейку памяти, отведенную под переменную, поставленную в левой части (у).

Таким образом, когда мы говорим "Компьютер запомнил, что а равно 2", мы подразумеваем "Компьютер записал в ячейку памяти, предназначенную для a число 2".

А теперь рассмотрим, как будут заполняться информацией ячейки а, b, у в процессе выполнения нашей программы. В самом начале выполнения паскалевской программы в них находится неизвестно что. Первым выполняется оператор а:=10. Согласно только что приведенному определению оператора присваивания в ячейку a будет записано число 10. Затем выполняется оператор b:= 6 и в ячейке b появляется шестерка. Затем выполняется оператор у:=a+b+1. Компьютер смотрит, что находится в ячейках а и b, видит там 10 и 6, подставляет их в выражение а+b+1, получает 17 и записывает в ячейку у. Наконец, выполняется оператор WriteLn (у+200). Компьютер заглядывает в ячейку у, видит там 17, вычисляет 17+200 и выводит 217 на экран.

Схематически этот процесс можно изобразить так:

Порядок исполнения

Что находится в ячейках памяти

Что видим

операторов

а

b

y

на экране

A:=10

10

?

?

B:=6

10

6

?

Y:=а+b+1

10

6

17

WriteLn(у+200)

10

6

17

217

Теперь мы можем также уточнить работу оператора WriteLn:

Если в скобках оператора WriteLn встречаются выражения с переменными величинами, то Паскаль находит в памяти значения этих величин, подставляет их в выражения, вычисляет выражения и результат выводит на экран.

Задание 7

Поменяйте местами операторы b:=6 и у:=а+b+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 четверку, a 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

Определите без компьютера, что будет напечатано при выполнении следующих фрагментов программ:

  1. a:=100; а =10*а+1; WriteLn (а)

  2. а:=100; а=-а; WriteLn (а)

  3. a:=10; b.=25; a=b-a; b=a-b; WriteLn (a,' ',b)