Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

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   ? ?  
b:= 6     ?  
y:= a+b+1        
WriteLn (y+200)        

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

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

Задание 7: Поменяйте местами операторы b:= 6 и y:= a+b+1. Что произойдет?

 

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

VAR k: Integer;
BEGIN
k:=10; WriteLn (k); k:=25; WriteLn (k); k:=4; WriteLn (k)
END.

 

Запишем схематически процесс изменения информации в ячейке k:

ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ k ЧТО ВИДИМ НА ЭКРАНЕ
k:=10    
WriteLn (k)    
k:=25    
WriteLn (k)    
k:=4    
WriteLn (k)    

Как видите, в процессе работы программы содержимое ячейки 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)




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 559; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.