Вы находитесь на странице: 1из 58

Информатика 2012г.

Информатизация общества
Информатизация обеспечит переход общества от индустриального этапа
развития к информационному этапу. В истории развития цивилизации было
несколько информационных революций:
- первая связана с изобретением письменности т.е. появилась
возможность передачи знаний от поколения к поколению;
- вторая (середина XVI века) – изобретение книгопечатания;
- третья (конец XIX века) – изобретение электричества. Появились
телефон, радио, телеграф позволяющие оперативно передавать и накапливать
информацию;
- четвертая (70-е годы XX века) – изобретение микропроцессорной
технологии и появление персонального компьютера.
Свершились три фундаментальные инновации:
- переход от электрических и механических средств преобразования
информации к электронным средствам;
- миниатюризация всех узлов, устройств, приборов и машин;
- создание программно-управляемых устройств и процессов.
Были созданы информационные технологии (ИТ).
Информационные технологии – процесс, использующий совокупность
средств и методов сбора, обработки и передачи данных (первичной
информации) для получения информации нового качества о состоянии объекта,
процесса или явления.
Телекоммуникация – дистанционная передача данных на базе
компьютерных сетей и современных технических средств связи.
Материальной и технологической базой информационного общества
станут системы на базе компьютерной техники и компьютерных сетей,
информационных технологий, телекоммуникационной связи.
Информационное общество – общество, в котором большинство
работающих занято производством, хранением, переработкой и реализацией
информации, особенно ее высшей формой – знанием. Характерные черты
информационного общества:
- решена проблема информационного кризиса т.е. разрешено
противоречие между информационной лавиной и информационным голодом;
- обеспечен приоритет информации по сравнению с другими
ресурсами;
- главной формой развития станет информационная экономика;
- информационные технологии приобретут глобальный характер,
охватывая все сферы социальной деятельности человека;
- формируется информационное единство всей человеческой
цивилизации.
Опасные тенденции:
- большое влияние на общество средств массовой информации;
- информационные технологии могут разрушить частную жизнь людей и
организаций;
Информатика 2012г. 2

- проблема качественной и достоверной информации;


- многим людям трудно адаптироваться к среде информационного
общества.
Деятельность людей все больше зависит от их информированности и
способности эффективно использовать имеющуюся информацию. Отыскание
рациональных решений в любой сфере требует обработки больших объемов
информации. Выгоднее стало создать новый материальный продукт, нежели
вести розыск аналога, выполненного ранее. Большие потоки обусловлены:
- большим ростом числа документов, отчетов в которых излагаются
результаты научных исследований и опытно-конструкторских работ;
- постоянно увеличивающимся числом периодических изданий по разным
областям человеческой деятельности;
- появление разнообразных данных, записываемых обычно на магнитную
ленту и поэтому не попадающих в сферу деятельности системы коммуникации.
Как результат – наступает информационный кризис (взрыв), который
имеет следующие проявления:
- противоречия между ограниченными возможностями человека по
восприятию и переработке информации и существующими потоками
информации. Так общая сумма знаний менялась очень медленно, но с 1900 года
она удваивалась каждые 50 лет, с 1950 года каждые 10 лет, с 1970 года – уже
каждые 5 лет, с 1990 года – ежегодно;
- существует большое количество избыточной информации, которая
затрудняет восприятие полезной для потребителя информации;
- возникают определенные барьеры которые препятствуют
распространению информации.
Накоплены огромные информационные потенциалы, и люди могут ими в
полном объеме.
Информатизация общества – организованный социально-
экономический и научно-технический процесс создания оптимальных условий
для удовлетворения информационных потребностей и реализации прав
граждан, органов государственной власти, органов местного самоуправления,
организаций, общественных объединений на основе формирования и
использования информационных ресурсов (Федеральный закон «Об
информации, информатизации и защите информации).

Информация и ее свойства

Термин информация происходит о латинского слова informatio, что


означает разъяснение, осведомление, изложение.
Информация – сведения об объектах и явлениях окружающей среды, их
параметрах, свойствах и состояниях, которые уменьшают имеющуюся о них
степень неопределенности, неполноты знаний.
Данные – это признаки или записанные наблюдения, которые по каким
либо причинам не используются, а только хранятся.
Информатика 2012г. 3

При работе с информацией всегда имеется источник и потребитель


(получатель информации). Пути и процессы, обеспечивающие передачу
сообщения от источника информации к ее потребителю, называют
информационными коммуникациями.
Адекватность информации – это определенный уровень соответствия
созданного с помощью полученной информации образа реальному объекту,
процессу, явлению и т.п. Адекватность информации выражается в трех формах.
Синтаксическая адекватность – отображает формально-структурные
характеристики информации, не затрагивая ее смыслового содержания.
Учитывается тип носителя и способы представления информации, надежность
и точность преобразования этих кодов и т.п.
Семантическая адекватность (смысловая) – определяет степень
соответствия образа объекта и самого объекта. Служит для формирования
понятий и представлений, выявления смысла, содержания информации и ее
обобщения.
Прагматическая (потребительская) адекватность – отражает отношение
информации и ее потребителя, соответствие информации цели управления,
которая на ее основе реализуется. Отражает ценность информации, ее
полезность.
Меры информации и ее качество

Для измерения информации есть два параметра: количество информации


I и объем данных Vg . Каждой форме адекватности информации соответствует
своя мера:

Объем данных Vg измеряет количество символов (разрядов) в сообщении.


В двоичной системе счисления единица измерения – бит, в десятичной дит
(десятичный разряд).
Информатика 2012г. 4

Количество информации I – на синтаксическом уровне не определяется, а


связано с понятием состояния системы (энтропией системы). Зависит от
количества всевозможных состояний системы и чем их больше вероятность
получения количества информации меньше.
Коэффициент (степень) информативности (лаконичности):
=
Величина Y изменяется от нуля до единицы.

Для смыслового содержания информации используется понятие тезаурус.


Тезаурус – это совокупность сведений, которыми располагает пользователь или
система. Между смысловым содержанием S и тезаурусом пользователя Sp
изменяется количество информации Ic.

Sp→0 пользователь не воспринимает, не понимает поступающую


информацию.
Sp→∞ пользователь все знает, и поступающая информация ему неи
нужна. Максимальная количество информации Ic пользователь приобретает при
согласовании смыслового содержания S со своим тезаурусом Sp.

Показатели качества информации:


Репрезентативность связана с правильностью отбора и формирования
адекватного отражения свойств объекта и строится на следующих положениях:
- правильность концепции, на базе которой сформировано
исходное понятие;
- обоснованность отбора существенных признаков и связей
отображаемого явления.
Содержательность – отражает семантическую емкость
=
с увеличением содержательности растет семантическая
пропускная способность информационной системы.
Информатика 2012г. 5

Достаточность (полнота) – означает, что информация содержит


минимальный, но достаточный для принятия правильного решения состав.
Понятие достаточности связано с ее смысловым содержанием (семантикой).
Доступность – информация воспринимается пользователем. Достигается
это согласованием ее семантической формы с тезауросом пользователя.
Актуальность – определяется степенью сохранения ценности информации
для управления и зависит от динамики ее изменения и характеристик.
Точность – определяется степенью близости получаемой информации к
реальному состоянию объекта, процесса, явления и т.п.
Для информации известны четыре классификационных понятия точности:
- формальная точность, измеряется значением единицы младшего разряда
числа;
- реальная точность, определяется значением единицы последнего разряда
числа;
- максимальная точность, которую можно получить в конкретных условиях
функционирования системы;
- необходимая точность, определяемая функциональным назначением
показателя.
Устойчивость – способность информации реагировать на изменение
исходных данных без нарушения необходимой точности.
Информатика 2012г. 6

Компьютерные сети. Основные понятия

Компьютерная (вычислительная) сеть – совокупность компьютеров и


терминалов, соединенных с помощью каналов связи в единую систему,
удовлетворяющую требованиям распределенной обработки данных.
Абоненты сети – объекты, генерирующие или потребляющие
информацию в сети. Абонентами могут быть отдельные ЭВМ, комплексы
ЭВМ, терминалы, станки с ЧПУ и т.д.
Станция – аппаратура, которая выполняет функции, связанные с
передачей и приемом информации.
Для организации взаимодействия абонентов необходима физическая
среда. Физическая передающая среда – линии связи или пространство, в
котором распространяются электрические сигналы, и аппаратура передачи
данных.

Иерархия компьютерных сетей

Вычислительные сети классифицируются:


- глобальные сети (WAN-Wide Area Network);
- региональные сети (MAN – Metropolitan Area Network);
- локальные сети (LAN – Local Area Network).
WAN – абоненты расположены в разных странах, на разных континентах.

Локальные вычислительные сети

Наиболее распространенные сети. Любую ЛВС рассматривают как


совокупность серверов и рабочих станций.
Сервер – компьютер, подключенный к сети и обеспечивающий ее
пользователей определенными услугами.
Информатика 2012г. 7

Рабочая станция – персональный компьютер, подключенный к сети, через


который пользователь получает доступ к ее ресурсам.
ЛВС делятся на одноранговые и сеть с выделенным сервером.
Одноранговая сеть – операционная система распределена по всем
станциям, пользователю доступны все устройства подключенные к другим
станциям. Достоинство низкая стоимость и высокая надежность. Недостатки:
- сложность управления сетью;
- сложность защиты информации;
- трудность обновления и изменения программного обеспечения.
Сеть с выделенным сервером – один компьютер выполняет функции
хранения данных, управления и сервис.
Достоинства:
- надежная система защиты информации;
- высокое быстродействие;
- отсутствие ограничений на число рабочих станций;
- простота управления;
Недостатки:
- высокая стоимость сервера;
- зависимость от быстродействия и надежности сервера;
- меньшая гибкость.
В качестве физической передающей среды в ЛВС используют витую пару
скорость до 1Мбит/c, коаксиальный кабель скорость до 50 Мбит/с,
оптоволоконный кабель скорость свыше 50 Мбит/с.

Топология локальных вычислительных сетей

Топология ЛВС – усредненная геометрическая схема соединения узлов


сети.
Узел любое устройство, непосредственно подключенное к передающей
среде сети.
Топологии одноранговых сетей это сеть кольцевой топологии и сеть
шинной топологи.

Рис. Сеть кольцевой топологии


Каждый узел ретранслирует посланное сообщение. Используется
последовательная дисциплина. Недостаток низкая скорость и надежность ЛВС.
Информатика 2012г. 8

Узел 1 Узел 2 Узел 3

Узел 4 Узел 5 Узел 6 Узел 7

Рис. Сеть шинной топологии


Дисциплина обслуживания параллельная. Устойчива к неисправности
отдельных узлов. Наиболее распространенная топологи ЛВС.
Топология сети с выделенным сервером:

Рис. Сеть звездообразной топологии.

Метод доступа к передающей среде – метод, обеспечивающий


выполнение совокупности правил, по которым узлы получают доступ к
ресурсам. Есть два основных класса методов доступа: детерминированный и
недетерминированный.
При детерминированном – передающая среда распределяется с помощью
специального механизма управления. Например метод опроса и метод передачи
прав при звездообразной технологии.
Для кольцевой технологии используется маркер. Маркер служебное
сообщение определенного формата, в которое абоненты сети могут помещать
свои информационные пакеты. Маркер циркулирует по кольцу.
Недетерминированные – случайные методы доступа – предусматривают
конкуренцию всех узлов сети за право передачи и используются в шинной
топологии.
Для получения доступа к большим информационным ресурсам ЛВС
соединяются между собой. (мост, маршрутизатор, шлюз).
Мост – устройство, соединяющее две сети, использующие одинаковые
методы передачи данных.
Маршрутизатор или роутер – устройство соединяющее сети разного типа,
но использующие одну операционную систему. Задача устройства – отправить
сообщение в нужную сеть.
Информатика 2012г. 9

Шлюз – устройство, позволяющее организовать обмен данными между


двумя сетями, использующими различные протоколы взаимодействия.

Характеристики процесса передачи данных

Любая коммуникационная сеть включает следующие основные


компоненты: передатчик, сообщение, средства передачи и приемник.
Передатчик – устройство, являющееся источником данных.
Приемник – устройство, принимающее данные.
Сообщение – цифровые данные определенного формата,
предназначенного для передачи.
Средства передачи – физическая передающая среда и специальная
аппаратура, обеспечивающая передачу сообщения.
Существует три режима передачи:
Симплексный – передача данных только в одном направлении.
Полудуплексный – попеременная передача информации, когда приемник
и передатчик последовательно меняются местами.
Дуплексный режим – одновременная передача и прием сообщений.
Синхронизация данных – согласование различных процессов во времени.
В системах передачи данных используют два способа передачи данных:
синхронный и асинхронный.
Синхронная передача данных

Синхронная передача – высокоскоростная и почти безошибочная, требует


дорогостоящего оборудования.

Асинхронная передача – каждый байт ограничивается стартовыми и


стоповыми битами, что несколько снижает скорость передачи данных.
Информатика 2012г. 10

Асинхронная передача не требует дорогостоящего оборудования, широко


применяется в ЛВС.

Аппаратная реализация передачи данных

Существует два способа передачи информации по физической


передающей среде: цифровой и аналоговый способы.
При цифровом или узкополосном способе передачи данные передаются в
естественном виде на единой частоте. Длина линии не более 1000 м и скорость
до 50 Мбит/с. Применяется для локальных вычислительных сетей.

Рис. Передаваемый байт

Рис. Сигнал в канале связи

Аналоговый способ обеспечивает широкополосную передачу за счет


использования в одном канале сигналов различных несущих частот. Сигнал
несущей частоты описывается уравнением
X=Xm*sin(ω *t+φ)
где: Xm – амплитуда колебаний;
ω – частота колебаний;
t – время;
φ – начальная фаза колебаний.
Можно предложить три способа управления (модуляции): амплитудный,
частотный, фазовый. Каждый из способов реализуется изменением
соответствующего параметра. Наиболее сложной является частотная
модуляция.
В сетях высокого уровня применяется широкополосная передача т. е.
работа большого числа абонентов на одном канале, по своей частоте у каждого
пользователя.
Техническое устройство, выполняющее сопряжение ЭВМ с каналом
связи называется адаптером или сетевым адаптером.
Мультиплексор передачи данных – устройство сопряжения ЭВМ с
несколькими каналами связи.
Модем – устройство, выполняющее модуляцию и демодуляцию
информационных сигналов при передаче их из ЭВМ в канал связи и при приеме
в ЭВМ из канала связи.
Концентратор – устройство, коммутирующее несколько каналов связи на
один путем частотного разделения.
В ЛВС, где физическая передающая среда представляет кабель, для
увеличения протяженности сети используют – повторитель.
Информатика 2012г. 11

Повторитель – устройство, обеспечивающее сохранение формы и


амплитуды сигнала при передаче его на большие, чем предусмотрено данным
каналом, расстояния.
Характеристики коммуникационной сети:
- скорость передачи данных по каналу связи (бит/сек);
- пропускная способность канала связи (количество знаков в секунду);
- достоверность передачи информации (количество ошибок на знак,
показатель 10-6 – 10-7 ошибок/знак);
- надежность канала связи и модемов (измеряется средним временем
безотказной работы, как минимум несколько тысяч часов).

Архитектура компьютерных сетей

Архитектура вычислительной сети – описание ее общей модели. Для


объединения различных вычислительных сетей была разработана модель
архитектуры открытых систем.
Открытая система – система, взаимодействующая с другими системами в
соответствии с принятыми стандартами. Принята семиуровневая эталонная
архитектура открытых систем.
Уровень

7 Прикладной
6 Представительный
5 Сеансовый
4 Транспортный
3 Сетевой
2 Канальный
1 Физический

7-й уровень – прикладной обеспечивает поддержку прикладных


процессов конечных пользователей. Содержит все элементы сервиса для
прикладных задач пользователя.
6-й – представительный определяет синтаксис данных в модели, т.е.
представление данных.
5-й – сеансовый реализует установление и поддержку сеанса связи между
двумя абонентами через коммуникационную сеть.
Три верхних уровня объединяют и называют процесс или прикладной
процесс. Они определяют функциональные особенности сети как прикладной
системы.
4-й- транспортный обеспечивает интерфейс между процессом и сетью,
устанавливает логические каналы между процессами.
Информатика 2012г. 12

3-й – сетевой определяет интерфейс оконечного оборудования данных


пользователя с сетью коммуникации пакетов. Он отвечает за маршрутизацию
пакетов в сети и за связь между сетями.
2-й – канальный – уровень звена данных – реализует процесс передачи
информации по информационному каналу.
1-й – физический – выполняет процедуры в канале связи. Его основная
задача – управление аппаратурой передачи данных и каналом связи.
Все уровни (кроме физического) добавляют к информации заголовок –
служебную информацию необходимую для адресации и для контрольных
функций. Сообщение, обрамленное заголовком и концевиком, уходит в сеть и
поступает на абонентскую ЭВМ. В абонентской ЭВМ происходит обратный
процесс – чтение и отсечение заголовков уровнями модели взаимодействия
открытых систем.
Функции физического уровня реализуются в аппаратуре. Функции
остальных уровней в виде программных модулей – драйверов.
Протокол - набор правил, определяющий взаимодействие двух
одноименных уровней модели открытых систем в различных абонентских
ЭВМ. Основные типы протоколов:
Байт – ориентированные – обеспечивают передачу сообщения в виде
последовательности байтов и состоят из информационных, управляющих и
служебных байтов. Для физической передающей среды байт-протокол не
удобен. После каждого переданного кадра возвращается квитанция – принято
или повтор передачи. Быстродействие ограничено.
Бит-ориентированные протоколы – поток битов, не разделяемый на
байты. Для разделения кадров используются флаги. Более скоростной, малое
затухание в физической среде.
Информатика 2012г. 13

Язык программирования Pascal

Язык программирования Паскаль был разработан в 1968-1971 гг.


Никлаусом Виртом в Цюрихском Институте информатики ( Щвейцария ) и
назван в честь знаменитого математика Блеза Паскаля.
Текст программы на языке Паскаль содержится в файле, который может
быть сформирован любым текстовым редактором. Текст, представляет собой
последовательность строк, состоящих из символов, образующих алфавит языка.
Алфавит состоит из заглавных и строчных латинских букв и символа
подчеркивания.
A, B, C, D …..X, Y, Z a, b, c, ……x, y, z
Десять арабских цифр от 0 до 9
Двадцать два специальных символа
+-*/=><.,;:@‘()[]{}#$^
Символы из алфавита языка используются для построения базовых
элементов программ – лексем.
Лексема – минимальная единица языка имеющая, имеющая
самостоятельный смысл.
Классы лексем:
1. Служебные (зарезервированные) слова. Ограниченная группа слов.
Слово представляет неделимое образование, смысл которого фиксирован в
языке. Служебное слово нельзя использовать в качестве имен т.е.
идентификаторов, переменных, констант и т.д..
Служебные слова:
absolute and array
asm assembler begin
case const constructor
destructor div do
downto else end
external file for
forward function go to
if implementation in
inline interface interrupt
label mod nil
not object of
or packed private
procedure program record
repeat set shl
shr string then
to type unit
until uses var
virtual while with
xor
Информатика 2012г. 14

2. Идентификаторы (имена). Формируются по следующей диаграмме

длина может быть произвольной, но значимыми являются несколько


первых символов (количество зависит от системы программирования).
3. Изображения. Группа лексем обозначающих числа, символьные
строки и некоторые другие значения.
4. Знаки операций – предназначены для задания действий по
преобразованию данных и вычислению значений.
5. Разделители – формируются из специальных символов. Комментарии
– произвольная последовательность символов заключенных в разделители вида
(* и *). Например (* Это комментарий *)

Структура Pascal программы

Состоит из двух основных частей: описания данных, с которыми


оперируют действия, и действий которые необходимо выполнить.
Программа снабжена заголовком, который задает имя программы и ее
параметры. Текст программы должен завершатся символом ‘.’ (точка).
Совокупность описаний и определений и следующая за ней
последовательность операторов называется блоком. Диаграмма:

Блок состоит из шести разделов, каждый из которых, за исключением


раздела операторов может быть пустым.
Блок = [раздел описания меток]
[раздел определения констант]
[раздел определения типов]
[раздел описания переменных]
[раздел описания процедур и функций]
[раздел операторов]

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


Информатика 2012г. 15

Программа вычисляет ряд вида R=1+1/2+1/3+…+1/N.


Program example;
var
N: integer;
R: real;
begin
readln(N);
R:=0;
While N>0 do
begin
R:=R+1./N;
N:=N-1;
end;
writeln(R);
end.

Раздел описания меток

Любой оператор в программе может быть помечен меткой. Метка


ставится перед оператором и отделяется от него двоеточием. Метки должны
быть описаны в разделе описания меток прежде чем они будут использованы.
Синтаксис :
Раздел описания меток = “Label метка”;
Метка = целое без знака
Пример Label 3, 100, 9999;
Использование меток при написании программы не приветствуется.

Раздел описания констант

Языки программирования допускают введение в программы объекты,


внешне похожие на переменные, но которые, в отличие от них, не могут
изменять свое значение. Такие объекты называются константами.
Синтаксис:
Описание констант

Определение константы
Информатика 2012г. 16

Использование в программе идентификаторов констант вместо записи


конкретных значений делает программу более «читабельной» и способствует
лучшему ее пониманию.
Например:
const HIGH=100;
Low=- HIGH;
В качестве констант разрешается использовать целые и
вещественные значения, а так же строки
Const Pi=3.14151619;
STR=’------‘;
Значения констант, заданные в разделе определения констант, в
программе менять нельзя, сразу следует сообщение об ошибке.

Раздел описания переменных

Каждая переменная, встречающаяся в программе, должна быть описана в


разделе описания переменных. Определение переменной должно содержать два
элемента: имя переменной и ее тип.
Синтаксис:

Описание переменных

Определение переменных

Например:
var R1, R2, R3:integer;
Xku, Jio: real;
Word: char;

Раздел определения типов


Информатика 2012г. 17

Наряду с именами стандартных типов (которые не нуждаются в


специальных определениях), программист может определять и использовать
свои собственные типы, расширяя тем самым исходный набор типов языка
Паскаль применительно к потребностям решаемой задачи.

Синтаксическая диаграмма

Определение типов

Например
Type Color = (RED, ORANGE, YELLOW, GREEN, BLUE, VIOLET);
Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
Sunday);

Целый тип
Представляет собой подмножество множества целых чисел, определяемое
конкретной реализацией. Описание переменных целого типа производится с
помощью зарезервированного слова: integer с длиной данного типа 2 байта.

Синтаксическая диаграмма

Над целыми значениями допустимы следующие операции:


+ сложение,
- вычитание,
* умножение,
div деление нацело (с отбрасыванием дробной части),
mod взятие остатка от целочисленного деления.
Информатика 2012г. 18

Следующие четыре стандартные функции дают результаты целого типа:


ABS(х) – вычисляет абсолютную величину х,
SQR(х) – вычисляет х2 ,
Trunc(x) – х должно быть вещественного типа, результат целый тип,
дробная часть отбрасывается. Функция приводит значения вещественного типа
к целому типу путем отсечения дробной части.
Trunc(2.5)=2, Trunc(-4.7)=-4
Round(x) - х должно быть вещественного типа, результат целый тип,
округленный до ближайшего целого.
Round(5.7)=6, Round(-1.7)=-2.
Нельзя смешивать операнды целого и вещественного типа.
Имеется пять целых типов, различающихся допустимым диапазоном
значений и размером занимаемой памяти.
Целые типы
Идентификатор Диапазон Размер памяти
типа значений
shortint 128…127 1 байт
integer -32768…32767 2 байта
longint -2147483648 … 4 байта
2147483647
byte 0…255 1 байт
word 0…65535 2 байта

Вещественный тип

Подмножество множества вещественных чисел. Вещественный тип


используется для представления чисел с плавающей точкой.
Пример описания
var K, Tr, Dfg: real;
Вещественные типы имеют следующие характеристики
Идентифик Диапазон Число цифр Размер
атор типа значений мантисы памяти
-
real 2,9e 11-12 4 байта
29 38
…1.7e
single 1,5e- 7-8 2 байта
45 38
…3.4e
double 5,0e- 15-16 8 байт
324 308
…1.7e
extende 3,4e- 20 10 байт
493 493
…1.1e

Если хотя бы один из операндов имеет целый тип, то следующие


операции дают в качестве результата вещественный тип:
Информатика 2012г. 19

+ сложение,
- вычитание,
* умножение,
/ деление.
Имеется развитая библиотека стандартных функций:
ABS(x), SQR(x), SIN(x), COS(x), LN(x), EXP(x), ARCTAN(x), SQRT(x).

Символьный литерный тип

Значениями символьного типа являются символы из множества ASCII


(American Standard Code Information Interchange) состоящего из 256 различных
символов. Описание типа производится с помощью стандартного
идентификатора char. Например
Char hg1, jg, Lt67: char;
Размер, занимаемый переменной в памяти, равен 1 байту. Переменная
литерного типа может принимать значение только одной литеры. Несмотря на
отсутствие единого, стандарта набор литер отвечает следующим требованиям:
1. Для любого набора литер все литеры фиксированы и
упорядочены.
2. Включены все прописные буквы латинского алфавита от A до
Z. Это множество упорядочено по алфавиту.
3. Включены все строчные буквы латинского алфавита от A до
Z. Это множество упорядочено по алфавиту.
4. Включены все десятичные цифры от 0 до 9. Это множество
упорядочено по возрастанию цифр.
5. Включены литеры: пробел, запятая, точка, разделители строк
и т.д.
Литеры, заключенные в апострофы, являются константами литерного
типа, для апострофа они повторяются дважды:
‘’’ ‘A’ ‘Y’ ‘6’ ‘3’
Упорядоченность букв означает ‘A’< ‘B’< ‘C’…<’Z’
‘0’<’1’<’2’<…<’9’
Две стандартные функции преобразования:
ORD(C) – является порядковым номером литеры С из упорядоченного
набора литер,
CHR(I) - является литерой с порядковым номером I.
Порядковый номер литер – это значения целого типа, которые
определяется реализацией и задается путем отображения литерных значений в
последовательность неотрицательных целых чисел, начинающихся с нуля.
Между функциями преобразования существует взаимосвязь:
CHR(ORD(C))=C
ORD(CHR(I))=I
Информатика 2012г. 20

Пример: Прочитать последовательность цифр и преобразовать ее к виду


целого числа.
program rdprint;
var ch: char;
I, J: integer;
begin
read(ch);
I:=0;
while(ch>=’0’) AND (ch<=’9’) do
begin
J=:ORD(ch)-ORD(‘0’);
I:=10*I+J;
Read(ch);
end;
writeln(‘Введено число -’, I);
end.
Логический тип (булевский)
Определяет диапазон логических значений, который содержит два
элемента:
True (истина)
False (ложь)
Допустимая операция сравнения False < True
Логические переменные описываются с помощью слова boolean и
занимают 1 байт памяти
var R, Dt, yut: boolean;
и могут принимать одно из значений False или True
Над аргументом логического типа определены следующие операции:
NOT (не) – отрицание;
AND (И) – конъюнкция или логическое умножение;
OR (или) – дизъюнкция или логическое сложение.
Операции отношения
= равно, <> не равно, < меньше, > больше, <= меньше или равно, >=
больше или равно.
var R: boolean;
Y:integer;
R:=Y<5;
Переменная R получит значение True, если значение Y меньше 5, в
противном случае False.
Старшинство операций: NOT затем AND затем OR, затем операции
отношения. Порядок выполнения операций изменяется круглыми скобками.
NOT P=Q означает (NOT P)=Q
P OR Q AND R означает P OR (Q AND R)
Информатика 2012г. 21

В языке программирования Паскаль нельзя записать двухстороннее


неравенство 1<x<2 правильная запись (x>1) AND (x<2).
Стандартные логические функции:
ODD(x) – значение True, если х – целое нечетное число, False – если х –
целое четное число.
EOF(f) - значение True, если файл f находится в состоянии “конец файла”,
в противном случае False.
EOLN(f) - значение True, если файл f находится в состоянии “конец
строки”, в противном случае False.

Оператор присваивания

Самый простой, но наиболее часто используемый оператор. Он


предназначен для вычисления нового значения некоторой переменной, а также
для определения значения возвращаемого функцией.
Синтаксическая диаграмма

Новое значение получается в результате вычисления значения


выражения, состоящего из констант, переменных, указателей функции и знаков
операций. Операции выполняются в следующем порядке, если выражение не
содержит скобок:
1. NOT
2. *, /, DIV, MOD, AND
3. +, -, OR
4. =, <>, <=, >, >=, IN
операции одинакового старшинства выполняются слева на право.
Скобками задается желаемый порядок вычисления.
Переменные и выражения должны быть одного типа. Исключение для
переменной real, тогда тип выражения может быть integer.
Например заданы следующие описания
Var I, J, K:integer;
A, B, C:real;
Ch1, ch2: char;
Bool:bolean;
Bool:=A=B;
Ch1:=ch2;
I:=K*J div 2;
A:=K*J div 2;
Информатика 2012г. 22

Нельзя записать I:=A*B/C; т.к. I – переменная целого типа


Преобразование вещественного типа в целый тип допустимо только
через функции приведения типов
I:=round(A*B/C);
I:=trunc(A*B/C);
Соответствие между целыми типа и литерным типом задается
функции приведения типов ORD() и CHR()
I:=ORD(Ch1)+ORD(ch2);
ch2:=CHR(I);
Недопустимая запись
I:=J:=0; необходимо писать I:=0; J:=0;

Составной оператор
Является простейшим структурным оператором и задает
последовательность выполнения операторов, входящих в него в порядке «один
за другим». Операторы, входящие в состав составного оператора, заключаются
между служебными словами begin и end.

Составной оператор применяется, когда синтаксис языка допускает


использование только одного оператора, а требуется задание нескольких
действий.

Условный оператор

Выбирает и выполняет один из операторов входящих в состав


условного оператора.

Выражение должно быть типа boolean. Если значение выражения


true то выполняется оператор после служебного слова then, в противном
случае выполняется оператор за служебным словом else. Если часть условного
оператора, начиная со слова else, отсутствует, то управление передается
оператору, следующему за условным оператором.
При использовании вложенных условных операторов может
возникнуть синтаксическая неоднозначность:
Информатика 2012г. 23

if выражение1 then if выражение2 then оператор1 else оператор2


Служебное слово else всегда сопоставляется с ближайшим по тексту
служебным словом if, которое еще не связано со служебным словом else.
if выражение1 then
begin
if выражение2 then
оператор1
else
оператор2
end.

Операторы цикла

Оператор цикла с предусловием

Имеет следующую алгоритмическую структуру

Синтаксис оператора цикла с предусловием

Выражение должно иметь тип boolean. Истинность выражения


проверяется каждый раз перед выполнением цикла. Оператор while
выполняется, пока выражение не станет равным False. Если значение
выражения False в самом начале, то оператор while вообще не выполняется.
Пример вычисления факториала.
Var X, FACT, N:integer;
begin
N:=5; X:=1;
while X<=N do
begin
Информатика 2012г. 24

FACT:= FACT*X;
X:=X+1;
end;
Оператор цикла с постусловием

Имеет следующую алгоритмическую структуру

Синтаксис оператора цикла с постусловием

Последовательность операторов между repeat и until выполняется до тех


пор, пока значение выражения не станет true. Оператор repeat until
выполняется по крайней мере один раз. Слова repeat until играют роль скобок,
поэтому скобки begin end являются избыточными (но не правильными).
Пример вычисления факториала.
Var X, FACT, N:integer;
begin
N:=5; X:=1;
repeat
FACT:= FACT*X;
X:=X+1;
until X>N ;

Оператор цикла с параметром


Информатика 2012г. 25

Используется, когда число повторений цикла может быть


определено перед его началом.
Синтаксис оператора цикла с параметром

Диапазон

Переменная и выражения должны быть одного и того же типа ( кроме


типа real) и их значения не должны изменятся внутри оператора for. Если в
случае to (downto) начальное значение больше (меньше) конечного значения,
то оператор for не выполняется ни разу. После выполнения оператора for
значение переменных цикла не определено.
Пример: подсчитать количество “счастливых шестизначных билетов”, у
которых сумма трех цифр равна 13.
Program happy;
var I, J, K, N:integer;
begin
N:=0;
for I:=0 to 9 do
for K:=0 to 9 do
for J:=0 to 9 do
if I+K+J=13
then N:=N+1;
N:=SQR(N);
Writeln(N);
end.

Перечисляемый тип

Иногда приходится работать с данными, которые не попадают в


категорию названных ранее типов. В этом случае создается новый тип данных,
состоящий из значений, заключаемых в скобки. Перечисляемый тип – это тип,
определяемый программистом, составленный из множества упорядоченных
элементов.
Синтаксическая диаграмма для перечисляемых типов имеет следующий
вид:
Информатика 2012г. 26

Например
Type Color = (RED, ORANGE, YELLOW, GREEN, BLUE, VIOLET);
Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
Sunday);
Для любого перечисляемого типа Т, определенного записью type T=(W1,
W2, …, Wn), где Т – идентификатор типа; W1, W2, …, Wn – константные
идентификаторы, постулируются следующие аксиомы:
1. Wi <> Wj если i <> j (различимость);
2. Wi < Wj если i < j (упорядоченность);
3. значениями типа Т могут быть только W1, W2, …, Wn
Операции отношения =, <>, <=, >, >= применимы если оба компонента
отношения имеют одинаковый тип.
Наличие упорядоченности позволяет ввести функции получения
следующего или предыдущего элемента:
SUCC(Wi)= Wi+1 для i=1, 2, …, n-1;
PRED(Wi)= Wi-1 для i=2, 3, …, n;
Функция определения порядкового номера константного идентификатора
Wi :
ORD(Wi)=i-1
ORD(W1)=0
Запрещается использовать один и тот же константный идентификатор
при задании различных перечисляемых типов.
type Color=(RED, BLUE, GREEN);
Traf_Color=(YELLOW, ORANGE, BLUE);
Пример работы с переменными перечисляемого типа
program perechis;
type Day=(MO, TU, WE, TH, FR, SA, SU); (* задание перечисляемого типа
*)
var D1, D2:Day; (* Описание переменных *)
D1:=MO;
D2:=FR;
If D1 < D2 then D1:=SUCC(D1)
else D1:=PRED(D1);
for D1:=TU to SU do
D2:=PRED(D1);
Информатика 2012г. 27

Диапазоны

Часто при описании переменных в программе известно, что они будит


использоваться для представления подмножества значений некоторого
дискретного типа. Это осуществляется с помощью типа, называемого
диапазоном.
Синтаксис:

Диапазон можно задать для любого простого типа за исключением


вещественного. При задании диапазона указывают наименьшее и наибольшее
значения. При этом первая константа задает наименьшее значение, которое
должно быть меньше или равно наибольшему значению, задаваемому второй
константой. Обе константы должны быть одного и того же типа.
Пусть задан перечисляемый тип DAY
Type Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
Sunday);
Можно выделить два диапазона: Workday(рабочие дни) и Weekend
(выходные дни)
Workday= Monday.. Friday;
Weekend= Saturday.. Sunday;
Var D:Day;
WDay: Workday;
Wend: Weekend;
Переменной D можно присвоить любое из значений, заданных при
определении типа DAY. Переменной WDay – любое из пяти значений
диапазона Workday.
Наиболее часто диапазоны используются для переменных целого типа.
var Hour: 1..60;
При задании диапазона можно использовать имена констант.
Const Linesize=80;
var Curline: 1.. Linesize;
ch: ‘A’..’Z’; (*пример использования литерного типа*)
chr:’0’..’9’;
Использование диапазонов имеет несколько преимуществ:
1. повышается удобочитаемость программ;
2. появляется возможность более экономного распределения
памяти;
3. вводится дополнительный контроль значений, присваиваемых
переменной во время выполнения программы.

Оператор выбора
Информатика 2012г. 28

Данный оператор является обобщением условного оператора для случая


произвольного числа альтернатив.
case Color of
Red: X:=Y+2;
Yellow: X:=Y-2;
Green: X:=Y
Else
Writeln (‘Ошибка’);
end;

Сначала вычисляется текущее значение переменной Color. Затем это


значение сравнивается с константами, записанными перед оператором. В
случае совпадения значения переменной и константы выполняется оператор
после этой константы.

Синтаксическая диаграмма:

Альтернатива

Ветвь else

Правила использования оператора выбора:


1. Значение выражения - “переключателя”, записанное после
служебного слова case, должно принадлежать дискретному типу.
2. Все константы, предшествующие операторам альтернатив, должны
иметь тип, совместимый с типом выражения.
Информатика 2012г. 29

3. Все константы в альтернативах должны быть уникальными в


пределах оператора варианта (то есть повторения констант в альтернативах не
допускается), диапазоны не должны пересекаться и не должны содержать
констант, указанных в данной или других альтернативах.

Пример: Простой калькулятор


program CAL;
var ch:char;
OP1, OP2:real;
begin
read(ch);
case ch of
‘+’: begin
read(OP1, OP2);
writeln(OP1+OP2);
end;
‘-’: begin
read(OP1, OP2);
writeln(OP1-OP2);
end;
‘*’ : begin
read(OP1, OP2);
writeln(OP1*OP2);
end;
‘/’ : begin
read(OP1, OP2);
writeln(OP1/OP2);
end;
Else
Writeln (‘Ошибка’);
end (*case*);
end.

Массивы

Переменная, имеющая структуру массива (тип array) – это


совокупность компонентов одного и того же типа. Для массива характерно
следующее:
1. Каждый компонент массива может быть явно обозначен и к
нему имеется прямой доступ.
2. Число компонент массива определяется при его описании и в
дальнейшем не меняется.
Применение массива позволяет программе обращаться к нескольким
различным ячейкам памяти, используя одно имя. Для доступа к конкретному
Информатика 2012г. 30

элементу или компоненте массива требуется дополнительная информация, в


качестве которой выступает индекс массива. Когда индекс состоит из одного
индексного выражения, массив называется одномерным. Из двух -двухмерный
и т.д. Переменные с индексами записываются двумя способами. Первый
сокращенная форма A[I, J, K] и второй полная форма A[I][J][K].

Синтаксическая диаграмма

Тип индекса может быть только порядковым типом, типы real и integer не
допускаются. В качестве типа индексов можно указывать диапазон целого типа.
Определение типа массива имеет вид:
Type A=array[T1] of T2;
где А – идентификатор нового типа; Т1 – тип индекса; Т2 – тип
компонент.
Пример:
var X:array[1..20] of real;
Y :array[Color] of Color;
Многомерный массив var M:array[A..B] of array [C..D] of T;
Обращение к I, Jэлементу массива M[I][J].
Для многомерных массивов пользуются следующим сокращением
var M:array[A..B, C..D] of T; и M[I, J].
Массив, как и любую структуру данных, сначала надо описать, а затем
использовать. Возможны два способа описания массива.
1. Сначала определяется тип со структурой массива. Затем
описывается переменная имеющая данный тип.
Type REST=array[1..10] of real;
var R:REST;
2. Вся необходимая информация о типа индексов и компонент
указывается в разделе описания переменных.
var R:array [1..10] of real;
В качестве типа индекса рекомендуется использовать символические
константы
const N=8; M=10;
var TARN: array[1..N, 1..M] of real;
в этом случае задача модификации программы значительно упрощается.
Пример: Найти максимальное значение в массиве
program MAX;
const M=10; N=20;
Информатика 2012г. 31

var I, J:M..N;
X:array[M..N] of real;
begin
for I:=M to N do
read(X[I]);
J:=M;
for I:=M+1 to N do
if X[I] > X[J] then J:=I;
writeln(‘Максимальный элемент - ’, X[J]);
end.

В качестве типа индекса можно использовать перечисляемый тип, а также


диапазон литерного типа:
var Sekond:array [‘A’..’Q’] of char;
Если одномерный массив описать как array [1..N] of char;
то это будет строка символов. Над строками можно выполнять те же
действия, что и над обычными массивами. К элементам строки можно
обращаться с помощью переменных с индексами. Над строками определены все
шесть операций отношения, при ограничении, что можно сравнивать строки
одинаковой длины.

Записи

Запись (тип record) – это структура данных, состоящая из


фиксированного числа компонентов, называемых полями. При этом поля могут
быть различных типов. При определении типа record указывается ее тип и
идентификатор (идентификатор поля). Область действия каждого
идентификатора поля – это наименьшая запись, в которой он определен.
Записи, как и массивы, используются для описания упорядоченной
последовательности величин. Но у них различный механизм выбора
компонентов. В случае массива используется вычисляемый выбор
компонентов. В записях каждому компоненту дается имя, которое и
используется для выбора поля.
Пример определения записи для даты рождения:
type Date = record
Day:1..31;
Month:( January, February, March, April, May, June, July, August,
September, October, November, December);
Year:integer;
End;
Доступ к элементам (полям) записей производится с помощью
конструкции, называемой селектор записи и имеющей общий вид
R.F
где: R-переменная комбинированного типа, F – идентификатор поля.
Информатика 2012г. 32

Опишем переменную типа запись Date


var Son:Date;
тогда обращение к полям записей выглядит следующим образом
Son.Day:=15;
Son.Month:= November;
Son.Year:=1998;
Разрешается использовать тип record при описании других
структурированных типов данных, например, создать массив записей. Пример
массива записей - для членов семьи нужно записать даты рождения
type Family=(Father, Mother, Son1, Son2);
List=array[Family] of Date;
var Z:List;
тогда доступ к полям
Z[Mother].Day:=22;
Z[Mother]. Month:= February;
Z[Mother]. Year:=1961;
Z[Son1].Day:=30;
Z[Son1]. Month:= October;
Z[Son1]. Year:=1987;

Синтаксическая диаграмма:

Комбинированный тип

Список полей

Фиксированная часть

Вариантная часть
Информатика 2012г. 33

Дискриминант

Альтернатива

Любой комбинированный тип, помимо фиксированного списка полей,


может содержать так называемую вариантную часть, предполагающую
определение нескольких вариантов структуры этого типа. Это означает, что
различные переменные одного итого же типа, могут иметь различную
структуру. Различие может касаться как тела компонентов, так и их типа.
Пример переменной с вариантной частью:

type Alfa=array[1..10] of char;


Variety=(Book, Journal, Newspaper);
var V: Variety;
Name=record
First, Last: Alfa;
end;
Edition=record
Nane1:Name;
Title, Publishers: Alfa;
case V of
Book:(Year:integer);
Journal:(Number:1..12;
Volume:integer;
YearJ:1990..2020;);
Newspaper:(Day:1..31;
Month:1..12;
YearN:integer;);
end;
В описании записи можно использовать только одну вариантную часть и
только после фиксированной части. Однако в вариантную часть может быть
Информатика 2012г. 34

вложена другая вариантная часть. При записи варианта обязательно


присутствие круглых скобок.

Оператор над записями With

Этот оператор предназначен для более наглядной и эффективной


организации работы с записями, т.к. он используется для сокращения записи
составных имен.
Синтаксис:

Пример использования:

if Date.Month=12 then
begin
Date.Month:=1;
Date.Year:= Date.Year+1;
end
else
Date.Month:= Date.Month+1;

Используя оператор with, получим более короткую запись:

with Date do
if Month=12 then
begin
Month:=1;
Year:= Date.Year+1;
end
else
Month:=Month+1;

Если задан оператор with R do , то R не должна содержать никакой


переменной , изменяемой в операторе with. Например, такой оператор не верен
with Map[I] do
begin
………….
I:=I+1;
Информатика 2012г. 35

………….
end;

Оператор with R1, R2, ….Rn do эквивалентен последовательности


операторов
with R1 do
with R2 do
………….
with Rn do

Множество

Это структурированный тип языка Паскаль как и массив. Множество в


математике – это произвольный набор объектов природы, понимаемый как
одно целое.
Значение множества как и значения массива, строятся из нескольких
значений одного (базового) типа, со следующими ограничениями:
1. вещественный тип использовать нельзя;
2. для целого типа можно использовать только диапазоны.
В отличие от диапазонов и записей, множество может содержать любое
количество различных элементов базового типа от ноля (пустое множество) до
всех возможных значений базового типа.
Синтаксическая диаграмма для множественных типов и для
изображения множеств:
Множественный тип

Изображение множества

Пример:
Type Primcolor=(RED, ORANGE, YELLOW, GREEN, BLUE, VIOLET);
Color= set of Primcolor;
Var Colorset, Colorset1, Colorset2: Color;
OneColor: Primcolor;
B:Boolean;
Отметим:
Информатика 2012г. 36

1. Все значения базового типа, образующие конкретные значения


множественного типа, должны быть различны;
2. Порядок расположения элементов в множестве никак не
фиксируется.
Пример оператора присваивания:
Colorset1:=[RED, VIOLET];
Colorset2:=[];
Colorset1:=[BLUE, RED, GREEN];
Однако нельзя записать:
Colorset1:=[ BLACK ];
Colorset2:=[WHITE];

Операции над множествами

Пусть S1 и S2 однотипные множества


1. Объединение множеств: S1 + S2 содержит элементы, которые
принадлежат либо S1, либо S2, либо тому и другому, например
COL1:=[RED, GREEN];
COL2:=[GREEN, BLUE];
COL:= COL1+ COL2;
Получим COL:[ RED, GREEN, BLUE]
2. Пересечение множеств: S1 * S2 содержит элементы, которые
принадлежат как S1 так и S2, например:
COL1:= [ RED, GREEN, BLUE];
COL2:=[ORANGE, RED, VIOLET];
COL:= COL1* COL2;
Получим COL:[ RED]
3. Разность множеств (или относительное дополнение): S1 - S2
содержит элементы из S1, которые не принадлежат S2, например:
COL1:= [ RED, GREEN, BLUE];
COL2:=[ RED, GREEN, ORANGE];
COL:= COL1- COL2;
Получим COL: [ BLUE];
4. Проверка на равенство, неравенство и включение множеств.
Бинарные операции обозначаются следующими знаками:
= равенство (совпадение) двух множеств;
<> неравенство множеств;
<= проверка на вхождение множества из левого операнда в
множество из правого операнда;
>= проверка на вхождение множества из правого операнда в
множество из левого операнда;
Результат операций значение логического типа true или false.
[1, 2, 3]=[1, 2] false
Информатика 2012г. 37

[1, 2, 3] >=[1, 2] true


[1, 2, 3] <>[1, 3, 4] true
5. Проверка принадлежности множеству. Операция обозначается
служебным словом in. Первый операнд должен множество, левый значением
базового типа множества
2 in [1..10, 12] true
5 in [1, 2, 7, 10] false
В языке Паскаль рекомендуется использовать значения или
диапазон целого типа
Type SET1=set of 1..10;
Использование множеств позволяет сокращать громоздкие записи
If (ch=’a’) OR (ch=’b’) OR (ch=’x’) OR (ch=’y’) then S:=ch;
получим при использовании множественного типа
if ch in [‘a’, ‘b’, ‘x’, ‘y’] then S:=ch;

Пример: Пусть идентификатор есть произвольная последовательность


букв и цифр, начинающаяся с буквы. Построить программу распознаватель,
считая, что идентификаторы отделяются друг от друга пробелом, а в конце
последовательности идентификаторов стоит точка с запятой.
program parset;
var ch:char;
Error:boolean;
begin
read(ch);
write(ch);
repeat
if NOT(ch in[‘A’..’Z’])
then Error:=true;
read(ch);
write(ch);
while ch<> ‘ ‘ do
begin
if NOT(ch in [‘A’..’Z’, ‘0’..’9’])
then Error:=true;
read(ch);
write(ch);
end;
WRITELN;
If Error then WriteLN(‘ERROR’);
read(ch);
write(ch);
until ch=’;’;
end.
Информатика 2012г. 38

Файлы в языке Pascal

Последовательность это из фундаментальных структур данных. В языке


Паскаль используется термин “файл” для обозначения последовательности
компонент, причем все компоненты должны быть одного и того же типа.
Порядок расположения компонент определяется самой последовательностью. В
любой момент времени доступна только одна компонента файла. Другие
компоненты доступны путем последовательного продвижения по файлу. Число
компонент не фиксируется и называется длиной файла. Файл, не содержащий
ни одной компоненты, называется пустым.
Основные действия над файлами:
1. Просмотр файла. Выполняется в результате последовательного
продвижения по файлу, начиная с его начала. Доступен только один компонент
файла. Менять значения компонентов на новые запрещается.
2. Создание файла. Выполняется в результате добавления новых
компонент в конец первоначально пустого файла.
Все остальные действия над файлом являются композицией его
просмотра и решения.
Синтаксис:

В качестве типа компонент файла разрешается использовать любой


простой или структурированный тип за исключением: не допускается тип
имеющий тип-файл.
Для организации работы по вводу-выводу в файл в программе
определяются специальные переменные, называемые файловыми
переменными. Например:
var f:file of T;
где Т – определяет тип компонент файла.
С каждой файловой переменной также связано понятие текущего
указателя файла. Текущий указатель – это скрытая переменная (то есть не
явно описанная) которая указывает на некоторый конкретный элемент файла.

В действии участвует тот элемент файла, который обозначен текущим


указателем. Указатель может перемещаться по файлу.
Пример описания файловых типов и переменных:
type Sqwer=file of char;
var F1, F2: Sqwer;
table: file of real;
Информатика 2012г. 39

zasd: file of Date;

Операции над файлами


Реализованы в виде стандартных процедур и функций и делятся на
четыре основные группы:
1. установочные и завершающие операции;
2. операции ввода/вывода;
3. перемещение по файлу;
4. специальные операции.
Рассмотрим установочные и завершающие операции:
Далее под f-понимаем заранее описанную файловую переменную.
Тогда
Assign(f, str); - присвоение имени файлу, где str – строковое выражение
для имени файла. Например: Assign(f, ‘frees.txt’);
Rewrite(f); - создание нового файла. Указатель нового файла
устанавливается на начало (компонент под номером 0). Если файл уже
существовал, то он стирается.
Reset(f); - установка файла в исходное состояние. Файл должен быть уже
создан, указатель устанавливается на начало файла (компонент под номером 0).
Close(f); - закрытие файла. Прекращается доступ к файлу и сбрасываются
все его буфера.

Операции ввода/вывода.
Read(f, V1, V2, …, Vn); - считывание из файла. V1, V2, …, Vn – имена
переменных того же типа, что и компоненты переменной f. После считывания
каждого значения указатель автоматически перемещается на следующую
компоненту.
Write(f, V1, V2, …, Vn); - запись в файл. V1, V2, …, Vn – имена
переменных того же типа, что и компоненты переменной f.

Перемещение по файлу.
Seek(f, N); - поиск N-й компоненты. N- целочисленное выражение,
указатель перемещается на N-ю компоненту файла.
Truncate(f);- отсечение от файла его хвостовой части, начинающейся от
текущей позиции указателя включительно.

Дополнительные функции.
EOF(f) – логическая функция возвращает значение true, если указатель
файла находится в конце файла, в противном случае false.
FilePos(f) – функция определяет номер текущей компоненты, на которую
установлен указатель файла.
FileSize(f) – функция определяет количество компонент файла f.

Общие схемы работы над файлами


Информатика 2012г. 40

Пусть f – описанная файловая переменная. Тогда можно записать


следующие стандартные схемы работы над файлами.
1. Просмотр файла ghj.txt
Используя цикл предусловием
Assign(f, ‘ghj.txt’);
Reset(f);
while NOT EoF(f) do
begin
Read(f, компонента);
Обработка компоненты;
end;
Close(f);

Используя цикл постусловием


Assign(f, ‘ghj.txt’);
Reset(f);
repeat
Read(f, компонента);
Обработка компоненты;
Until EoF(f);
Close(f);

2. Запись фала prd.doc


Используя цикл предусловием

Assign(‘prd.doc’);
Rewrite(f);
while признак создания файла do
begin
Создание компоненты;
Write(f, компонента);
end;
Close(f);
Используя цикл постусловием
Assign(‘prd.doc’);
Rewrite(f);
repeat
Создание компоненты;
Write(f, компонента);
Until NoT создание файла;
Close(f);
Информатика 2012г. 41

Например: Дано N>0 измерений хi , представленных в виде файла st.dat


вещественных чисел. Вычислить среднее значение М и стандартное отклонение
S по формулам

program statistic;
var f:file of real;
M, S, Fz:real;
N:integer;
begin
N:=0; M:=0; S:=0;
assign(f, ‘st.dat’);
reset;
repeat
N:=N+1;
Read(f, Fz);
M:=M+Fz;
S:=S+SQR(Fz);
Until EoF(f);
M:=M/N;
S:=SQRT(S/N-SQR(M));
Writeln(‘M=’, M);
Writeln(‘S=’, S);
Writeln;
end.
Файлы могут быть локальными в программе или внешними. Внешние
файлы выводятся как параметры программы в заголовок.

Текстовые файлы

Файлы, компонентами которого являются литеры, называются


текстовыми и описываются следующим образом:
type text=file of char;
text – стандартный идентификатор, такой как integer, real или char.
Специальные процедуры работы над текстовыми файлами:
Writeln(x); - завершение текущей строки текстового файла х;
Readln(x); - переход к началу следующей строки текстового файла х;
EoLN(x) – логическая функция, показывающая достигнут ли конец
текущей строки, текстового файла х. Если достигнут то возвращает значение
true, в противном случае false.
Все выше перечисленные процедуры применимы только к текстовым
файлам.
При обработке текстовых файлов используются следующие общие
схемы:
Информатика 2012г. 42

Просмотр текстового файла:


Reset(f);
While NOT EoF(f) do
begin
while NOT EoLN(f) do
begin
read(f, ch);
обработка ch;
end;
readln(f);
end;

или
Reset(f);
repeat
repeat
read(f, ch);
обработка ch;
until EoLN(f);
readln(f);
until EoF(f);

Создание текстового файла f:


rewrite(f);
while создание файла do
begin
while формирование строки do
сформировать ch;
write(f, ch);
end;
writeLN(f);
end;

Или

rewrite(f);
repeat
repeat
сформировать ch;
write(f, ch);
until NOT формирование строки;
writeLN(f);
until NOT создание файла;
Информатика 2012г. 43

При создании текстового файла f с помощью процедуры writeLN(f) в


конце каждой строки записывается разделитель строк, который при просмотре
текстового файла распознается процедурой readLN(f).
Дополнительно для текстовых файлов определены следующие операции:
Append(f) – аналогична rewrite, однако не очищает файл, а только
устанавливает текущий указатель файла в его коней.
Для перемещения указателя по текстовому файлу применимы следующие
функции:
SeekEoLN(f) – производит поиск конца текущей строки.
SeekEoF(f) – осуществляет поиск конца файла.
Пример: Копирование файла Х в файл Y с заменой последовательности
подряд стоящих пробелов одним.
Program cop;
var ch:char;
x, y:text;
begin
assign(x, ‘x.txt’);
assign(y,’y.txt’);
reset(x);
rewrite(y);
while NOT EoF(x) do
begin
while NOT EoLN(x) do
begin
read(x,ch); write(y, ch);
if ch=’ ‘ then begin
repeat
read(x, ch);
until ch <> ‘ ‘;
write(y, ch);
end;
end;
readLN(x)
writeLN(y);
end;
end.

Строковые типы

Являются расширением языка Pascal. Строковый тип данных обобщает


символьный массив, позволяет динамически изменять длину строки.
Строковый тип – множество символьных цепочек произвольной длины.
Синтаксическая диаграмма:
Информатика 2012г. 44

type Line=string[80];
var Myline: Line;
Youline:string[80];
Переменные в примере в качестве своего значения могут иметь любую
последовательность символов произвольной длины от 0 до 80. Значение может
быть присвоено или считано из файла.
Myline:=’пример строки’;
Youline:=Myline;
Read(f, Myline);
Максимально допустимая длина строки – 255 символов. При описании
можно не указывать длину строки тогда она будет максимальной – 255.
Line:string;
Основное отличие строки от обычных символьных массивов состоит в
том, что они могут динамически изменять свою длину.
Myline:=’строка’;
Myline:=Myline+’стала длинее’;
Память под строку резервируется по максимальной длине и используется
только часть этой памяти реально занятой символами. В строке N байтов
предназначены для хранения символов строки, а один байт – для значения
текущей длины этой строки. Структура строки string:

Это используют для определения текущей длины строки


Myline:=’QPRS’;
writeLN(Ord(Myline[0])); // результат 4
Myline[0]:=2;
writeLn(Myline);// будет напечатано QP
Myline:=’’;
writeLN(Ord(Myline[0])); // результат 0
Стандартная функция Length – определяет текущую длину строки.
Операции сравнения над строками:
< <= > >= = <>
Действуют по правилу:
Информатика 2012г. 45

1. Более короткая строка всегда меньше более длиной.


2. Если длины строк равны, производится поэлементное сравнение
символов.
Если при присвоении длина строки меньше чем длина строковой
константы производится обрубание строки
var str:string[5];
begin
str:=’строка была длинна’;
writeLN(str);
Доступ к отдельным элементам строки производится аналогично доступу
к элементам одномерного массива. Но всегда необходимо учитывать текущую
длину строки. Например:
var str:string[26];
i:integer;
begin
str:=’A’;
for i:=1 to 26 do
str[i]:=Chr(Ord(‘A’)+i-1);
writeLn(str);
end.

Результат выполнения программы символ А.


Правильная следующая программа

var str:string[26];
i:integer;
begin
str:=’A’;
for i:=1 to 26 do
str:=str+Chr(Ord(‘A’)+i-1);
writeLn(str);
end.

Процедуры и функции

Современный подход к программированию поощряет явное оформление в


виде подпрограммы любого достаточно самостоятельного и законченного
программного фрагмента. Подпрограмма – это элементарное средство
повышения уровня языка.
При описании подпрограммы в общем случае необходимо задать три
основных компоненты:
1. Интерфейс подпрограммы, т.е. информацию необходимую для ее вызова
(активации);
Информатика 2012г. 46

2. Локальный контекст подпрограммы: совокупность описаний (рабочих)


объектов, с которыми осуществляются действия;
3. Собственно действия (операторы), составляющие смысл подпрограммы.
Интерфейс подпрограммы сосредоточен в заголовке. Описание локальных
объектов и операторы (алгоритм) составляют внутреннюю часть подпрограммы
и имеют синтаксис блока.
В языке Pascal имеются два вида подпрограмм: - процедуры и функции.
Процедуры – служат для задания совокупности действий, направленных на
изменение внешней по отношению к ним программной обстановки. Вызов
процедуры реализуется оператором процедуры. Этот оператор задает
выполнение операторов, определенных в теле процедуры. После выполнения
процедуры управление передается на оператор, следующий за оператором
процедуры. Вызов процедуры может сопровождаться передачей значений
фактических параметров, если в определении процедуры был указан список
соответствующих формальных параметров.
Синтаксис

Смысл функций заключается в первую очередь в том, чтобы определить


алгоритм вычисления нового значения некоторого простого или ссылочного
типа. В этом отношении функции подобны выражениям. Вызов функции
является одним из допустимых операндов выражения, обозначая в нем то
значение, которое вычисляет функция.
Описание процедуры

Описание функции

Заголовок процедуры
Информатика 2012г. 47

Заголовок функции

Для функции необходимо указать тип возвращаемого функцией значения,


которое задается после списка параметров и отделяется от него символом ‘:’
двоеточие. Пример:
procedure Swap(var X,Y: real);
procedure Stop;
function GHJ(a, b:byte):byte;
Телом процедуры или функции, как правило, является блок. Имена
объектов, описанных в блоке подпрограммы, считаются известными только в
пределах данного блока. Это относится и к именам формальных параметров.
Среди описаний блока могут содержатся описания процедур и/или функций.
Pascal допускает наличие в подпрограмме вложенных подпрограмм, которые, в
свою очередь, могут содержать свои вложенные подпрограммы.

Область действия имен в подпрограммах

Имена объектов, описанные в блоке подпрограммы, по определению


считаются известными только в пределах данного блока. Это же относится к
именам формальных параметров. Говорят, что формальные параметры и
объекты, описанные в блоке подпрограммы, образуют собственный локальный
контекст данного блока.
Схематически изобразить структуру блоков некоторой Pascal-программы
можно следующим образом:
Информатика 2012г. 48

Буквой А – обозначим самый внешний блок программы; B и E – блоки


подпрограмм, описанные во внешнем блоке А; С и D блоки, вложенные в
подпрограмму В (то есть описанные в ней). Тогда доступ к объектам,
описанным в различных блоках, производится по правилу:
1. Имена объектов, описанных в некотором блоке, считаются известными в
пределах данного блока, включая и все вложенные блоки.
2. Имена объектов, описанных в блоке, должны быть уникальными в
пределах данного блока и могут совпадать с именами объектов из других
блоков.
3. Если в некотором блоке описан объект, имя которого совпадает с именем
объекта, описанного в объемлющем блоке, то это последнее имя становится
недоступным в данном блоке. Имя, описанное в блоке, экранирует (делается
недоступным) одноименные объекты из блоков, объемлющих данный.
Объекты из А и В видимы в C и D. Имена из C,D и E видимы только в
своих блоках. Имена из А известны во всех вложенных блоках. Объекты,
описанные в самом внешнем блоке, называются глобальными. Локальные
объекты – объекты блока вместе с объектами объемлющих блоков.

Механизм параметров
Информатика 2012г. 49

В заголовке процедуры или функции может быть задан список формальных


параметров. Каждый параметр, заданный в заголовке, считается локальным в
данной подпрограмме. Идентификаторы формальных параметров можно
считать условными обозначениями в теле подпрограммы тех реальных или
ФАКТИЧЕСКИХ параметров, которые будут переданы в подпрограмму при
ее вызове.
Синтаксическая диаграмма
Список формальных параметров

Описание параметров

Тип параметра

Пример заголовков процедур и функций


Function MaxElem(A:Vector, n:byte):real;
Procedure Sum(A, B: Matrix; var C:Matrix);
Типы формальных параметров должны обязательно обозначатся
идентификаторами. Например следующая запись недопустима:
Procedure Incorrect(var A:array[1..10] of byte);
Если необходимо передать в подпрограмму параметр с типом,
определяемым программистом, следует воспользоваться его идентификатором:
type MYArray= array[1..10] of byte;
……………………….
procedure correct(var A:MYArray);
Информатика 2012г. 50

В языке Pascal различают четыре вида формальных параметров: параметры-


значения, параметры-переменные, параметры-процедуры, параметры-функции.
В последних двух случаях фактическими параметрами являются
идентификаторы процедур и идентификаторы функций соответственно.

Параметры-значения

Данный параметр является обычной локальной переменной в пределах


подпрограммы. Начальное значение параметра автоматически устанавливается
равным значению соответствующего фактического параметра, заданного при
вызове подпрограммы. Внутри подпрограммы возможны любые действия с
данным формальным параметром, но любые значения никак не отражаются на
значениях переменных вне программы.
Например:
program fur;
var A,B:real
procedure SumSq(X, Y:real);
begin
X:=X*X;
Y:=Y*Y;
writeln(‘Сумма квадратов=’, X+Y);
end;
begin
A:=1.34;
B:=8.95;
SumSq(A, B);
end.
Параметры-переменные

Указываются заданием служебного слова var перед их идентификаторами в


списке формальных параметров. Этот способ передачи параметров
используется, когда надо передать некоторое значение в точку вызова
подпрограммы. Например:
program gwer;
procedure SumS(X, Y:real; var Sum, Sub:real);
begin
Sum:=X*X+Y*Y;
Sub:=X*X-Y*Y;
end;
var A,B:real;
SA, SB:real;
Begin
A:=45.87;
Информатика 2012г. 51

B:=-675.9;
SumS(A, B, SA, SB);
writeln(‘SA-‘, SA, ‘SB-‘, SB);
end.

Вычисление значения функции

Функции вычисляют единственное значение простого типа или типа


указатель. Обращение к функции производится с помощью указателя функции,
состоящего из идентификатора вызываемой функции и списка фактических
параметров, заключенного в круглые скобки.
В теле функции должен присутствовать оператор присваивания, в левой
части которого стоит идентификатор этой функции. Тип выражения в правой
части оператора присваивания должен быть совместим с типом возвращаемого
функцией значения. Если в процессе выполнения функции не было выполнено
ни одного такого присваивания, то результат функции считается
неопределенным.
Пример: Определение максимума двух целых чисел
program examplf;
function Max(A, B:integer;):integer;
begin
if A>B then Max:=A
else Max:=B;
end;
var g, k:integer;
g:=98.9; k:=765.7;
writeln(‘max_rez –‘, Max(g, k));
end.

Функция может быть использована в выражении, например M:=Max(A,


F)+2*Max(A-F,G); Работа функции и процедуры завершается по определению
после выполнения последнего оператора ее тела.

Параметры-процедуры и параметры-функции

В заголовках подпрограмм процедуры или функции могут появляться в


качестве формальных параметров. Это означает, что в качестве фактических
параметров им будут соответствовать процедуры или функции.
В операторе процедуры или функции в тех позициях которые
соответствуют формальным параметрам – процедурам или функциям
записывается либо идентификатор процедуры, либо идентификатор функции,
список фактических значений для них не задается.
Пример: вычислить  Ui , где Ui=f(i)
Информатика 2012г. 52

function Sum(M, N:integer; function F(x:integer):real):real;


var I:integer;
S:real;
begin
S:=0;
for I:=M to N do
S:=S+F(I);
Sum:=S;
end; (* SUM*)
function F(L:integer):real;
begin
F:=L/(L+1.);
end;(* F*)
вызов функции
U:=Sum(1, 100, F);

В качестве параметров нельзя использовать имена стандартных функций.

Рекурсия

В теле подпрограммы доступны все объекты, описанные в объемлющем


блоке, в том числе и имя самой подпрограммы. Таким образом, возможен вызов
подпрограммой самой подпрограммы. Использование подпрограммой самой
себя называется рекурсией. Допускается косвенная рекурсия: процедура А
вызывает процедуру В, а та вызывает А. Рекурсия применяется для решения
задач комбинаторики.
Например: вычисление факториала
function Fact(N:integer;):integer;
begin
if N=1 then Fact:=1
else Fact:=N*Fact(N-1);
end;

В языке Pascal нет никаких ограничений на рекурсивные функции. Каждый


очередной рекурсивный вызов приводит к образованию новой копии
локальных объектов подпрограммы, и все эти копии существуют независимо
друг от друга. Необходимо предусмотреть завершение рекурсивной задачи, в
нашем случае это N=1.

Предварительное и внешнее описание подпрограмм


Информатика 2012г. 53

Как правило, телом процедуры является блок. Однако имеется несколько


исключений из этого правила. Бывает так, что две подпрограммы, описанные
рядом (на одном уровне вложенности) содержать взаимные вызовы друг друга:
procedure John(x, y:real);
begin
………..
Jack(1, 2);
………..
end;
procedure Jack( a, b:real);
begin
……….
John(0.5, 0.8);
……….
end;

При трансляции процедуры John не известна процедура Jack. Если поменять


местами процедуры, то проблема остается. Во избежание этой проблемы
существует предварительное описание процедур.
Предварительное описание процедур содержит заголовок подпрограммы, а
вместо тела записывается служебное слово forward, которое указывает, что
полное описание подпрограммы располагается в тексте далее. В этом случае
заголовок полного (определяющего) описания может быть записан в
сокращенном виде, без списка параметров и (для функций) без типа результата.
Например:
procedure John(x, y:real); forward;
procedure Jack( a, b:real); forward;
…………..
procedure John;
begin
…………..
Jack(1, 2);
………..
end;
procedure Jack;
begin
……….
John(0.5, 0.8);
……….
end;

Отметим, что в случае предварительного описания подпрограммы далее в


тексте должно обязательно содержаться ее определяющее описание, даже если
нигде в программе не встречается вызов этой подпрограммы.
Информатика 2012г. 54

Внешнее описание используется когда подпрограмма или группа


подпрограмм разрабатывается вне системы языка Pascal, на другом языке, и
необходимо подключить ее к данной Pascal - программе. В Pascal – программе
необходимо указать заголовок подключаемой подпрограммы, после которого
(вместо тела подпрограммы) должны следовать служебное слово external или
fortran и т.п. Подключение происходит на уровне объектных файлов (***.obj).
Детальное описание механизма подключения можно найти в фирменной
документации по системе.
Например:
Procedure SqRoot(F, JK:real); external;
Procedure CbTUT(Hl, Hb, Sk:integer) fortran;

Модули. Общая структура модуля

Модуль – отдельно хранимая и независимо компилируемая единица.


Модуль содержит совокупность (коллекцию) программных ресурсов,
предназначенных для использования другими модулями и программами.
Модуль не является выполняемой программой – его объекты используются
другими программными единицами.
Модуль имеет заголовок и две основные части: интерфейс и реализацию.
Структура модуля:

unit UnitName;
interface

implementation

begin

end.

Пример модуля содержащего средства работы с комплексными числами

unit CmplVals;
interface
type
Complex=record {способ представления комплексных чисел}
Re, Im: real;
Информатика 2012г. 55

{Заголовки процедур, реализующих операции над комплексными числами}


procedure InitC(C:Complex; R, I:real;);
procedure AddC(C1, C2:Complex; var R: Complex;);
procedure MultC(C1, C2:Complex; var R: Complex;);
procedure DivC(C1, C2:Complex; var R: Complex;);

procedure WriteC(C:Complex;);

implementation
{полное описание процедур с сокращенным заголовком}
procedure InitC;
begin
with C do begin
Re:=R; Im:=I;
end;
end;
procedure AddC;
begin
{операторы;}
end;
procedure MultC;
begin
{операторы;}
end;
procedure DivC;
begin
{операторы;}
end;
procedure WriteC;
begin
{операторы;}
end;
end.
Модуль компилируется как обычная программа, но в результате образуется
файл с расширением .tpu . Для доступа к интерфейсным объектам необходимо
указать имя нужного tpu файла. Спецификация имеет вид:
uses U1, U2, U3;
uses – служебное слово; U1, U2, U3 – идентификаторы используемых
модулей. Пример использования модуля CmplVals:

program UseCmplVals;
uses CmplVals;
var C1, C2, C3: Complex;
begin
Информатика 2012г. 56

InitC(1, 2, C1); InitC(3, 4, C2); MultC(C1, C2, C3);


WriteC(C3);
end.

Видимость переменных в программе в случае описания


Uses A, B;
будет иметь вид:

Указатели или ссылочные типы

Указатели или ссылочные типы занимают промежуточное положение


между простыми и составными типами: с одной стороны, значения этого типа
являются неразделимыми, с другой стороны эти типы определяются через
другие (в том числе составные) типы. Реально значения ссылочных типов
содержат адреса расположения в памяти конкретных значений базового типа.
Указатели реализуют для разыменнованого (без использования
идентификатора) доступа к объектам так как хранят адреса памяти по которым
расположены объекты.
Содержательно любой ссылочный тип определяет множество значений,
которые являются УКАЗАТЕЛЯМИ на значения некоторого определенного
типа. Для описания ссылочных типов используется символ ^ и идентификатор
типа, например:
type p=^integer;
Это описание определяет множество указателей на целые значения. Тип , на
значения которого можно конструировать указатели, может быть любым (он в
данном случае называется базовым для ссылочного типа).
Явное описание указателей:
var P1, P2:P;

Синтаксис:
Ссылочный тип

Для того, чтобы присвоить переменной ссылочного типа некоторое


значение (адрес памяти), необходимо воспользоваться унарной операцией
Информатика 2012г. 57

взятия указателя, которая состоит из знака этой операции – символа @


(амперсант) и одного операнда – переменной того типа на который ссылается
этот указатель. Например:
var i:integer;
p1:^integer;
p1:=@i; то р1 получит в качестве своего нового значения указатель на
переменную i (или, попросту говоря, адрес переменной i).

Операция взятия указателя допустима для любых переменных, в том числе


для элементов массива, полей записей и т.д. Например:
Var A:array[1..10] of integer;
Pt:^integer;
Pt:=@A[i];
Допустимо определение вида “указатель на указатель” так как ссылочные
типы можно образовывать от ЛЮБЫХ типов
var P1, P2:^integer;
i:integer;
P1:=@i;
P2:=@P1;
Возникшие в результате связи можно изобразить следующей схемой:

Среди указателей есть один специальный указатель который “никуда не


указывает” это пустой указатель, который обозначается служебным словом nil.
Указатель nil считается константой, совместимой с любым ссылочным типом.
Над значениями ссылочных типов допускаются две операции сравнения на
равенство и неравенство; эти операции проверяют, ссылаются ли два указателя
на одно и тоже место памяти, и обозначаются знаками ‘=’ и ‘<>’ например:
var bt: boolean;
p1, p2: ^real;
…………….
bt:=p1=p2;
Информатика 2012г. 58

if p1<>p2 then …..

Применение механизма указателей обеспечивает доступ к любой


переменной двумя способами: первый – через идентификатор, второй – через
адрес этой переменной, который содержится в указателе.
Например
var i:integer;
pt:^integer;
begin
pt:=@i;
i:=i+2;//первый способ увеличения i на 2

pt^:=pt+2;// второй способ увеличения i на 2

Приведенные выше два оператора эквиваленты.


Правила доступа: для того, чтобы получить по указателю доступ к
значению переменной, необходимо после переменной указателя поставить знак
^ . Доступ к переменной через указатель называется разыменованием.
Разыменование не корректно если ссылочная переменная имеет значение nil.