Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
32
Добавлен:
12.03.2016
Размер:
3.29 Mб
Скачать
      1. Что делает оператор присваивания с памятью

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

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

В 0.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. Что произойдет?

        1. Оператор присваивания меняет значение переменной величины

Пока я не рассматривал программы, в которых переменные меняют свою величину. Теперь настало время такую программу рассмотреть:

VARk : Integer;BEGINk:=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:

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]