В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 6
Текст из файла (страница 6)
В каждый момент времени в ящике может храниться не более одногозначения.2. Каждый ящик способен хранить только значения одного и того же типа. Попытка поместить в ящик значение любого другого типа приводитк тому, что ящик отказывается принимать на хранение передаваемое емузначение — это расценивается как ошибка в программе.3.
Значение, помещенное в ящик, будет храниться в нем до тех пор,пока в этот ящик не будет помещено новое значение (в момент присваивания соответствующей переменной этого нового значения) — при этомпредыдущее содержимое ящика безвозвратно теряется (уничтожается).4. Находящееся в ящике значение считается текущим значением соответствующей переменной. Это текущее значение может быть выдано из ящикадля использования сколько угодно раз, но при этом содержимое ящикане меняется: из него каждый раз выдается копия хранящегося значенияс сохранением оригинала в ящике без какого-либо изменения.5.
К началу выполнения программы содержимое всех запоминающихящиков считается неопределенным; в частности, их нельзя считать ипустыми, поскольку эти ящики могли использоваться при выполнениипредыдущих программ, после чего в ящиках могло что-то остаться.В свете сказанного следует вернуться к символу " : = " из числа разделителей.
При описании процессов обработки данных особенно часто приходится задавать такое действие, как присваивание переменной величине еенового текущего значения, для чего приходится использоватьвыражениятипа "присвоить значение", "положить равным" и т.д., которые являютсясинонимами. Поскольку это действие встречается особенно часто, то дляего обозначения вместо служебного слова используется сивмол " : = " ,который легко запоминается и вместе с тем обеспечивает компактностьи наглядность записи.
Например, запись z : = х + у означает, что переменной z должно быть присвоено новое текущее значение, равное значениюсуммы х + у. В математике для этой цели обычно используется знак равенства " = ", например z = х. Однако этот знак в математике используетсяи для обозначения операции сравнения. Для устранения возможностинеоднозначного понимания, в паскапе символ " = " используется толькодля обозначения операции сравнения, а для обозначения операцииприсваивания выбран символ " : = ", изображаемый парой литер.1.4.5. Функции и процедурыПонятие функции хорошо известно из школьного курса математики.С помощью функций задаются самые различные зависимости одних значений (значений функции) от других значений (аргументов функции).Заметим лишь, что в алгоритмических языках допускаются только такиефункции, для которых заданы алгоритмы вычисления их значений.В математике такое требование не является обязательным — можно, например, использовать функцию f ( x , у), значение которой равно количествупростых чисел в интервале (х, у) — даже в том случае, если мы не знаем,как именно следует вычислять значение этой функции при любых конкретных значениях аргументов х н у .
Таким образом, в алгоритмическом языке21любая функция задается некоторой вычислительной процедурой, выполнение которой и дает значение функции. Программист может , ввестив употребление любые нужные ему в данной программе функции.Наряду с функциями, предназначенными для вычисления отдельногозначения, можно вводить в употребление и процедуры более общего характера, представляющие собой некоторые вполне законченные этапы решениязадачи — упорядочение компонент вектора по их неубыванию, сложениематриц и т.п.Вводимые в употребление функции и процедуры должны быть определены (описаны) в разделе функций и процедур паскаль-программы.При таком описании каждой функции (процедуре) дается свое имя.Сама процедура формулируется, в основном в терминах формальных параметров — идентификаторов, которые в описании процедуры представляютте заранее не фиксируемые значения или программные объекты, к которымдолжна применяться эта процедура.
Все эти формальные параметрыв явном виде перечисляются в описании процедуры или функции.Для использования в программе какой-либо функции или процедурыдостаточно указать ее имя и задать ее фактические параметры, т.е. те конкретные значения и (или) объекты, к которым должна быть примененауказанная процедура или функция.
Для обращения к функциям ипроцедурам в паскале имеются соответствующие понятия — вызов функциии оператор процедуры.Некоторые функции и процедуры, например элементарные функции математического анализа (sin(xr), 1п(х) и т.д.) или процедуры ввода/выводаиспользуются во многих программах. Для удобства их использования,в паскале зафиксирован некоторый набор так называемых с т а н д а р т н ы х функций и процедур, которые можно использовать в любой программе без их явного описания.
Можно считать, что к началу трансляции любойпаскаль-программы в соответствующий ее раздел автоматически вставляются описания всех стандартных функций и процедур, используемыхв этой программе. За каждой из них в языке закреплено некоторое стандартное имя. Однако эти имена не являются зарезервированными словами,так что программист может по своему усмотрению переопределить любоеиз этих стандартных имен.1.5. Стандарт языка и его реализацииАлгоритмический язык, как правило, предназначается для его использования очень широким кругом лиц - целый ряд таких языков имеет международный характер.
Чтобы иметь возможность широкого обмена алгоритмами, записанными на таком языке, и обеспечить их однозначное понимание, обычно принимается некоторый стандарт (государственный илимеждународный) языка, т.е. дается его "эталонное" описание, позволяющее единым способом записывать и трактовать сформулированныена этом языке алгоритмы.Однако практика показывает, что даже при наличии стандарта (в томчисле и международного) на гот или иной язык, фактически используетсянесколько различных его версий, своего рода "диалектов языка".Это неожиданное на первый взгляд обстоятельство порождается целым ря22дом причин, порой весьма веских. Например, некоторые свойства и возможности языка могут быть полезными и удобными лишь для сравнительно узкого круга специальных задач, а реализация этих возможностей оказывается весьма затруднительной.
Это может привести как к усложнениютранслятора и замедлению его работы, так и к потере эффективностипрограмм, получаемых в результате трансляции на машинный я з ы к —например с точки зрения их быстродействия (т.е. затрат машинного времени на их выполнение) или расходования памяти машины.
Если же такиеспециальные задачи в той или иной организации встречаются сравнительноредко, то для устранения указанных выше недостатков целесообразноисключить из языка такие возможности. В подобного рода случаях получается версия языка, являющаяся подмножеством эталонного языка.Возможна и другая ситуация — в язык можно включить некоторые дополнительные возможности, что позволяет удобно использовать этот языки для некоторого дополнительного круга задач, на решение которых эталонный язык не был явно ориентирован.
Получаемая при этом версияязыка будет расширением эталонного языка.Необходимость модификации эталонного языка может быть вызвана ииспользуемыми внешними устройствами. Ранее мы уже говорили о том,что паскаль, вообще говоря, сознательно был ориентирован на относительно"бедные" внешние устройства, имеющие в своей клавиатуре весьма ограниченный набор литер. По этой причине вмесдо привычных для нас знаковопераций отношения Ф, < и > в паскале используются основные символы" < > " , " < = " и " > = ", которые, конечно, менее наглядны и привычны.Если же на используемых внешних устройствах имеются литерыито естественно включить их в алфавит языка. По этой же причине можнорасширить и набор букв по сравнению с эталонным языком, включивв их число, например, русские буквы, что позволяет использовать в качестве имен программных объектов идентификаторы, более удобные и наглядные для программиста, естественным я з ы к о м для которого является русский язык.
Это обстоятельство иногда учитывается самим эталоннымязыком - в нем явно оговаривается возможность расширения алфавитаязыка. Как мы увидим дальше, в языке паскаль некоторые его возможности жестко не фиксируются, а делается оговорка, что эти возможностиопределяются конкретной реализацией языка.Таким образом, читатель должен быть готов к тому, что в своей практической работе ему, возможно, придется иметь дело с разными версиямиодного и того же алгоритмического языка, в частности — Паскаля.Однако следует подчеркнуть, что в данном случае речь идет не о разныхязыках, а о различных версиях (диалектах) одного и того же языка.Это значит, что разные диалекты отличаются лишь в деталях, как правилонесущественных.