- •Базы данных и информационные системы.
- •Где используют
- •Типы и виды модемов
- •Теперь рассмотрим принцип работы модема на простом примере.
- •Способы доступа
- •Адресация в сети
- •Прикладные программы просмотра Web-страниц
- •Обозреватель Internet Explorer
- •1. Составной и пустой операторы
- •2. Операторы ветвлений
- •3. Операторы повторений
- •Сети эвм и работа в них.
- •1. Общая структура программ в тп 7.0
- •2. Раздел объявлений и соглашений
- •3. Раздел текстов процедур и функций
- •4. Заголовок программы
- •1. Перечисляемый и ограниченный типы
- •3. Множества
- •4. Записи
- •7 Типизированные константы
- •9. Процедурные типы
- •1. Структура модулей
- •Физический уровень
- •2. Заголовок модуля и связь модулей друг с другом
- •3. Интерфейсная часть
- •4. Исполняемая часть
- •5. Инициирующая часть
- •1. Директивы-переключатели
- •2. Директивы с параметрами
- •3. Условные директивы
- •1. Объявление указателей
- •2. Выделение и освобождение динамической памяти
- •2. Доступ к файлам
- •Канальный уровень
- •6. Процедуры и функции для работы с файлами
- •Сетевой уровень
- •Транспортный уровень
- •Сеансовый уровень (уровень сессии)
- •Уровень представления
- •Прикладной уровень (уровень приложения)
удаление
некоторых сопутствующих операций.
SQL является непроцедурным языком и не содержит имеющихся в обычных языках программирования операторов управления, организации подпрограмм, ввода-вывода и т. п.
В связи с этим SQL автономно не используется, а обычно погружен в среду встроенного языка программирования СУБД или даже процедурного языка типа C++ или Pascal.
К числу основных операторов SQL относятся следующие:
CREATE TABLE — создание таблицы;
DROP TABLE — удаление таблицы;
SELECT — выборка записей;
UPDATE — изменение записей;
INSERT — вставка записей;
DELETE — удаление записей.
Сети эвм и работа в них.
40. Архитектура сети.
Эталонная модель взаимодействия открытых систем (Open System Interconnection — OSI).
ЭМВОС. Модель определяет уровни взаимодействия в компьютерных сетях (Рис. 1), описывает функции, которые выполняются каждым уровнем, но не описывает стандарты на выполнение этих задач.
7 |
Прикладной (или уровень приложения, Application) |
6 |
Представительный (или уровень представления, Presentation) |
5 |
Сеансовый (или уровень сессии, Session) |
4 |
Транспортный (Transport) |
3 |
Сетевой (Network) |
2 |
Канальный (или уровень звена данных, Data Link) |
1 |
Физический (Physical) |
Поскольку различные компьютеры имеют различные скорости передачи данных, различные форматы данных, различные типы разъемов, разные способы хранения и доступа к данным (методы доступа), разные операционные системы и организацию видов памяти, то возникает масса не очевидных проблем их соединения. Все эти проблемы классифицировали и распределили по функциональным группам – уровням ЭМВОС.
Уровни организуются в виде вертикального стека (Рис.2.2). Каждый уровень выполняет некоторую группу близких функций, требуемых для организации связи компьютеров. В реализации более примитивных функций он полагается на нижележащий уровень (пользуется его услугами) и не интересуется подробностями этой реализации. Кроме того, каждый уровень предлагает услуги вышестоящему уровню.
Когда сообщение поступает на компьютер – получатель, оно принимается физическим уровнем и последовательно перемещается вверх по стеку с уровня на уровень. Каждый уровень анализирует и обрабатывает свой заголовок, выполняет свои функции, затем удаляет этот заголовок и передает оставшийся блок данных смежному вышележащему уровню.
Правила (спецификации), по которым взаимодействуют компоненты систем, называются протоколами. В модели ЭМВОС различают два основных типа протоколов. В протоколах с установлением соединения перед обменом данными отправитель и получатель должны сначала установить логическое соединение и, возможно, выбрать протокол, который будут использовать. После завершения диалога они должны разорвать соединение. В протоколах без предварительного установления соединения) отправитель просто передает данные. Эти протоколы также называются дейтаграммными.
Для обозначения блока данных, с которым имеют дело модули определенного уровня, в модели ЭМВОС используется общее название протокольный блок данных (Protocol Data Unit, PDU). В то же время блок данных определенного уровня имеет и специальное название (Рис.2.3).
7 |
Прикладной |
Сообщение (Message) |
6 |
Представительный |
Пакет (Packet) |
5 |
Сеансовый |
Пакет (Packet) |
4 |
Транспортный |
Пакет (Packet) Сегмент (Segment) |
3 |
Сетевой |
Пакет (Packet) Дейтаграмма (Datagram) |
2 |
Канальный |
Кадр, фрейм (Frame) |
1 |
Физический |
Бит (Bit) |
Кратко рассмотрим функции, отнесенные к разным уровням ЭМВОС.
Физический уровень
Обеспечивает передачу потока бит в физическую среду передачи информации. В основном определяет спецификацию на кабель и разъемы, т.е. механические, электрические и функциональные характеристики сетевой среды и интерфейсов.
На этом уровне определяется:
физическая среда передачи – тип кабеля для соединения устройств;
механические параметры – количество пинов (тип разъема);
электрические параметры (напряжение, длительность единичного импульса сигнала);
функциональные параметры (для чего используется каждый пин сетевого разъема, как устанавливается начальное физическое соединение и как оно разрывается).
Канальный уровень
На этом уровне биты организуются в группы (фреймы, кадры). Кадр – это блок информации, имеющий логический смысл для передачи от одного компьютера другому. Каждый кадр снабжается адресами физических устройств (источника и получателя), между которыми он пересылается.
Протокол канального уровня локальной сети обеспечивает доставку кадра между любыми узлами (node) этой сети. Если в локальной сети используется разделяемая среда передачи, протокол канального уровня выполняет проверку доступности среды передачи, то есть реализует определенный метод доступа в канал передачи данных.
В глобальных сетях, которые редко обладают регулярной топологией, канальный уровень обеспечивает обмен кадрами между соседними в сети узлами, соединенными индивидуальной линией связи.
Сетевой уровень
Основной задачей этого уровня является передача информации по сложной сети, состоящей из множества островков (сегментов). Внутри сегментов могут использоваться совершенно разные принципы передачи сообщений между конечными узлами – компьютерами. Сеть, состоящую из многих сегментов, мы называем Интернет.
Передача данных (пакетов) между сегментами выполняется при помощи маршрутизаторов (router, роутер). Можно представить себе маршрутизатор как устройство, в котором функционируют два процесса. Один из них обрабатывает приходящие пакеты и выбирает для них по таблице маршрутизации исходящую линию. Второй процесс отвечает за заполнение и обновление таблиц маршрутизации и определяется алгоритмом выбора маршрута. Наиболее популярны в современных сетях два метода динамической маршрутизации: маршрутизация по вектору расстояния (протокол RIP, который минимизирует число переходов через промежуточные маршрутизаторы – число хопов) и маршрутизация с учетом состояния каналов (протокол OSPF, который минимизирует время достижения нужного сегмента сети).
На сетевом уровне может потребоваться разбить полученный фрейм на более мелкие фрагменты(дейтаграммы ), прежде чем передать их дальше.
Транспортный уровень
Транспортный уровень – это сердцевина иерархии протоколов. Он предназначен для оптимизации передачи данных от отправителя к получателю, управления потоком данных, организации приложению или верхним уровням стека необходимой степени надежности передачи данных вне зависимости от физических характеристик использующейся сети или сетей. Начиная с транспортного уровня, все вышележащие протоколы реализуются программными средствами, обычно включаемыми в состав сетевой операционной системы.
Сеансовый уровень (уровень сессии)
Уровень позволяет пользователям различных компьютеров устанавливать сеансы связи друг с другом. При этом обеспечивается открытие сеанса, управление диалогом устройств (например, выделение места для файла на диске принимающего устройства) и завершение взаимодействия. Это делается с помощью специальных программных библиотек (например, RPC-remote procedure calls от Sun Microsystems). На практике немногие приложения используют сеансовый уровень.
Уровень представления
Уровень выполняет преобразование данных между компьютерами с различными форматами кодов символов, например ASCII и EBCDIC, то есть преодолевает синтаксические различия в представлении данных. На этом уровне может выполняться шифрование и дешифрирование и сжатие данных, благодаря чему секретность обмена данными обеспечивается сразу для всех прикладных служб.
Прикладной уровень (уровень приложения)
Прикладной уровень – это набор разнообразных протоколов, с помощью которых пользователи сети получают доступ к разделяемым ресурсам, таким как файлы, электронная почта, гипертекстовые WEB-страницы, принтеры.
На этом уровне происходит взаимодействие не между компьютерами, а между приложениями: определяется модель, по которой будет происходить обмен файлами, устанавливаются правила, по которым мы будем пересылать почту, организовывать виртуальный терминал, сетевое управление, директории.
Выводы
Модель ЭМВОС – это средство для создания и понимания средств передачи данных, классификации функций сетевых устройств и программного обеспечения. В соответствии с ЭМВОС эти функции разбиты на семь уровней. Реализуются они при помощи спецификаций – протоколов.
Разработчики модели полагали, что ЭМВОС и протоколы, разрабатываемые в ее рамках, будут преобладать в средствах компьютерной связи, и, в конце концов, вытеснят фирменные протоколы и конкурирующие модели, такие как TCP/IP. Но этого не произошло, хотя в рамках модели были созданы полезные протоколы. В настоящее время большинство поставщиков сетевого оборудования определяют свои продукты в терминах ЭМВОС (OSI).
41. Аппаратные средства ЛВС.
Основными аппаратными компонентами ЛВС являются:
1. Рабочие станции (PC) – это, как правило, персональные ЭВМ, которые являются рабочими местами пользователей сети.
Требования, предъявляемые к составу PC, определяются характеристиками решаемых в сети задач, принципами организации вычислительного процесса, используемой ОС и некоторыми другими факторами. Иногда в PC, непосредственно подключенной к сетевому кабелю, могут отсутствовать накопители на магнитных дисках. Такие PC называют бездисковыми рабочими станциями. Однако в этом случае для загрузки в PC операционной системы с файл-сервера нужно иметь в сетевом адаптере этой станции микросхему дистанционной загрузки.. Недостаток бездисковой PC заключается в невозможности работать в автономном режиме (без подключения к серверу), а также иметь свои собственные архивы данных и программ.
2. Серверы в ЛВС выполняют функции распределения сетевых ресурсов. Обычно его функции возлагают на достаточно мощный ПК, мини-ЭВМ, большую ЭВМ или специальную ЭВМ-сервер. В одной сети может быть один или несколько серверов. Каждый из серверов может быть отдельным или совмещенным с PC. В последнем случае не все, а только часть ресурсов сервера оказывается общедоступной.
При наличии в ЛВС нескольких серверов каждый из них управляет работой подключенных к нему PC. Совокупность компьютеров сервера и относящихся к нему PC часто называют доменом. Иногда в одном домене находится несколько серверов. Обычно один из них является главным, а другие – выполняют роль резерва (на случай отказа главного сервера) или логического расширения основного сервера.
Важнейшими параметрами, которые должны учитываться при выборе компьютера-сервера, являются тип процессора, объем оперативной памяти, тип и объем жесткого диска и тип дискового контроллера.
3. Линии передачи данных соединяют PC и серверы в районе размещения сети друг с другом. В качестве линий передачи данных чаще всего выступают кабели. Наибольшее распространение получили кабели на витой паре и коаксиальный кабель). Более перспективным и прогрессивным является оптоволоконный кабель..
4. Сетевые адаптеры (интерфейсные платы) используются для подключения компьютеров к кабелю (рис. 7.2). Функцией сетевого адаптера является передача и прием сетевых сигналов из кабеля. Адаптер воспринимает команды и данные от сетевой операционной системы (ОС), преобразует эту информацию в один из стандартных форматов и передает ее в сеть через подключенный к адаптеру кабель.
Используемые сетевые адаптеры имеют три основные характеристики: тип шины компьютера, к которому они подключаются (ISA, EISA, Micro Channel и пр.), разрядность (8, 16, 32, 64) и топология образуемой сети (Ethernet, Arcnet, Token-Ring).
К дополнительному оборудованию ЛВС относят источники бесперебойного питания, модемы, трансиверы, репитеры, а также различные разъемы (коннекторы, терминаторы).
Источники бесперебойного питания (ИБП) служат для повышения устойчивости работы сети и обеспечения сохранности данных на сервере. При сбоях по питанию ИБП, подключаемый к серверу через специальный адаптер, выдает сигнал серверу, обеспечивая в течение некоторого времени стабильное напряжение.
Трансивер – это устройство подключения PC к толстому коаксиальному кабелю. Репитер предназначен для соединения сегментов сетей. Коннекторы (соединители) необходимы для соединения сетевых адаптеров компьютеров с тонким кабелем, а также для соединения кабелей друг с другом. Терминаторы служат для подключения к открытым кабелям сети, а также для заземления (так называемые терминаторы с заземлением).
Модем используется в качестве устройства подключения ЛВС или отдельного компьютера к глобальной сети через телефонную связь
42. Структурная и функциональная организация ЛВС.
Топология ЛВС. Принципы управления. Методы доступа и протоколы передачи данных. Технология «клиент-сервер».
Одним из подходов к классификации топологий ЛВС является выделение двух основных классов топологий: широковещательных и последовательных.
В широковещательных конфигурациях каждый персональный компьютер передает сигналы, которые могут быть восприняты остальными компьютерами. К таким конфигурациям относятся топологии «общая шина», «дерево», «звезда с пассивным центром».
В последовательных конфигурациях каждый физический подуровень передает информацию только одному персональному компьютеру. Примерами последовательных конфигураций являются: произвольная (произвольное соединение компьютеров), иерархическая, «кольцо», «цепочка», «звезда с интеллектуальным центром», «снежинка» и др.
Коротко рассмотрим три наиболее широко распространенные (базовые) топологии ЛВС: «звезда», «общая шина» и «кольцо».
В случае топологии «звезда» каждый компьютер через специальный сетевой адаптер подключается отдельным кабелем к центральному узлу Центральным узлом служит пассивный соединитель или активный повторитель.
Существует два основных принципа управления в локальных сетях: централизация и децентрализация.
В сетях с централизованным управлением функции управления обменом данными возложены на файл-серверы. Файлы, хранящиеся на сервере, доступны рабочим станциям сети. Одна PC к файлам другой PC доступа не имеет.
Децентрализованные (одноранговые) сети не содержат в своем составе выделенных серверов. Функции управления сетью в них поочередно передаются от одной PC к другой. Ресурсы одной PC (диски, принтеры и другие устройства) оказываются доступными другим PC.
Рис.
7.3. Топология «звезда»
Топология «общая шина» предполагает использование одного кабеля, к которому подключаются все компьютеры. Информация по нему передается компьютерами поочередно (рис. 7.4).
Рис.
7.4. Топология «общая шина»
Достоинством такой топологии является, как правило, меньшая протяженность кабеля, а также более высокая надежность чем у «звезды», так как выход из строя отдельной станции не нарушает работоспособности сети в целом. Недостатки состоят в том, что обрыв основного кабеля приводит к неработоспособности всей сети, а также слабая защищенность информации в системе на физическом уровне, так как сообщения, посылаемые одним компьютером другому, в принципе, могут быть приняты и на любом другом компьютере.
При кольцевой топологии данные передаются от одного компьютера другому по эстафете (рис. 7.5). Если некоторый компьютер получает данные, предназначенные не ему, он передает их дальше по кольцу. Адресат предназначенные ему данные никуда не передает.
Рис.
7.5. Кольцевая топология
Достоинством кольцевой топологии является более высокая надежность системы при разрывах кабелей, чем в случае топологии с общей шиной, так как к каждому компьютеру есть два пути доступа. К недостаткам топологии следует отнести большую протяженность кабеля, невысокое быстродействие по сравнению со «звездой» (но соизмеримое с «общей шиной»), а также слабую защищенность информации, как и при топологии с общей шиной.
Топология реальной ЛВС может в точности повторять одну из приведенных выше или включать их комбинацию. Структура сети в общем случае определяется следующими факторами: количеством объединяемых компьютеров, требованиями по надежности и оперативности передачи информации, экономическими соображениями и т. д.
Технология «клиент-сервер» пришла на смену централизованной схеме управления вычислительным процессом на базе средней или большой ЭВМ (мэйнфрейма).
В архитектуре клиент-сервера место терминала заняла ПЭВМ (клиентская), а мэйнфрейма – один или несколько мощных компьютеров, специально выделенных для решения общих задач обработки информации (компьютеры-серверы). Достоинством этой модели является высокая живучесть и надежность вычислительной системы, легкость масштабирования, возможность одновременной работы пользователя с несколькими приложениями, высокая оперативность обработки информации, обеспечение пользователя высококачественным интерфейсом и т. д.
При взаимодействии любых двух объектов в сети всегда можно выделить сторону, предоставляющую некоторый ресурс (сервис, услугу), и сторону, потребляющую этот ресурс. Потребителя ресурса традиционно называют клиентом, а поставщика – сервером.
В качестве ресурса можно рассматривать аппаратный компонент (диск, принтер, модем, сканер и т. д.), программу, файл, сообщение, информацию или даже ЭВМ в целом. Отсюда происхождение множества терминов: файл-сервер или диск-сервер, принт-сервер или сервер печати, сервер сообщений, SQL-сервер (программа обработки запросов к базе данных, сформулированных на языке SQL), компьютер-сервер и т. д. Очевидно, все эти серверы имеют соответствующих клиентов.
С точки зрения программного обеспечения, технология «клиент-сервер» подразумевает наличие программ-клиентов и программ-серверов. Клиентскими программами обычно являются такие программы, как текстовые и табличные процессоры. В роли серверных программ чаще всего выступают системы управления базами данных. Примером типичной пары программ вида «клиент-сервер» можно считать программу текстового процессора, обрабатывающую документ, в котором содержится таблица с информацией из базы данных.
Некоторая программа, выполняемая в сети, по отношению к одним программам может выступать в роли клиента и в то же время являться сервером для других программ. Более того, за некоторый интервал времени роли клиента и сервера между одними и теми же программами могут меняться.
43. Программные средства ЛВС.
Понятие сетевой операционной системы.
Программное обеспечение вычислительных сетей состоит из трех составляющих: 1) автономных операционных систем (ОС), установленных на рабочих станциях; 2) сетевых операционных систем, установленных на выделенных серверах, которые являются основой любой вычислительной сети; 3) сетевых приложений или сетевых служб.
Автономные ОС (программное обеспечение вычислительных сетей)
В качестве автономных ОС для рабочих станций, как правило, используются современные 32-разрядные операционные системы – Windows 95/98, Windows 2000, Windows XP, Windows VISTA, Windows 7 (Seven)
Сетевые ОС (программное обеспечение вычислительных сетей)
В качестве сетевых ОС в вычислительных сетях применяются:
ОС Unix;
ОС NetWare фирмы Novell;
Сетевые ОС фирмы Microsoft (ОС Windows NT, Microsoft Windows 2000 Server, Windows Server 2003, Windows Server 2008) Сетевые операционные системы необходимы для управления потоками сообщений между рабочими станциями и серверами. Они организуют коллективный доступ ко всем ресурсам сети. Получение доступа к ресурсам локальных вычислительных сетей предусматривает выполнение трех процедур: идентификация, аутентификация и авторизация:
1. Идентификация - присвоение пользователю уникального имени или кода (идентификатора).
2. Аутентификация - установление подлинности пользователя, представившего идентификатор. Наиболее распространенным способом аутентификации является присвоение пользователю пароля и хранение его в компьютере.
3. Авторизация - проверка полномочий или проверка права пользователя на доступ к конкретным ресурсам и выполнение определенных операций над ними. Авторизация проводится с целью разграничения прав доступа к сетевым и компьютерным ресурсам.
Средства аутентификации, авторизации и идентификации предназначены для управления информационной безопасностью вычислительных сетей. В большинстве сетевых операционных систем встроена поддержка протоколов: TCP/IP, IPX/SPX, NetBEUI.
TCP/IP - эти протоколы были разработаны для сети Министерства обороны США ARPAnet, они поддерживаются сетевыми операционными системами Unix, Windows и т.д. Протоколы TCP/IP - это базовые протоколы сети Интернет.
IPX/SPX - протоколы, разработанные фирмой Novell, поддерживаются операционной системой NetWare разработанной также фирмой Novell, Windows и др. Novell была одной из первых компаний, которые начали создавать ЛВС. Основным элементом локальной сети Novell NetWare является файловый сервер. На нем размещается сетевая операционная система, база данных и прикладные программы пользователей. В настоящее время наиболее распространенными являются локальные сети на базе сетевых плат Ethernet с операционной системой Novell NetWare.
NetBEUI - разработчик этого протокола фирма IBM. Протокол предназначен для небольших локальных вычислительных сетей, в нем отсутствует маршрутизация, его поддерживают операционные системы фирм IBM и Microsoft.
44. Телекоммуникационные средства.
45. Принципы работы и характеристики модема.
Модем(modem) это – устройство для физической связи информации с объектом, к которому эта информация поступает. Модулятор в модеме служит для модуляции сигнала таким образом, что бы демодулятор принимающей стороны смог его распознать, и предоставить конечному пользователю данные в понятном для него виде.
Где используют
Модемы используются не только для связи компьютеров, но и в телефонной связи, связи военных командных пунктов с терминалами, радарами и пр. Некоторые модемы имеют голосовые функции, то есть позволяет осуществлять голосовое общение через встроенные динамики, или служить автоответчиком для голосовой почты.
Типы и виды модемов
Самые распространенные по исполнению модемы бывают внешние, встроенные и программные.
Модем внешний – имеет отдельный блок питания, подключается к компьютеру через порт, или разъем сетевой карты.
Встроенный модем является частью аппарата, в который его встроили.
Программный модем имеет только входной аналоговый преобразователь, а остальные функции (кодирование сигнала, ведение протоколов), выполняет центральный процессор компьютера.
Наиболее используемые модемы вот такие:
Телефонный модем – его еще называют Dial-up modem. Занимает телефонную линию. Набор номера и звук соединения модема физически слышны, и по звуку модема можно определить в какой стадии соединения он находиться.
ADSL модем. Он внешний. Для приемки-передачи данных использует телефонную линию, не занимая ее.
Факс-модем позволяет отправлять факсы на другой такой же модем или на сам факсимильный аппарат. Встроенный факс-модем есть в современных ноутбуках и компьютерах. Голосовой факс-модем позволяет передавать и получать факсимильные и голосовые сообщения.
USB факс-модем – тот же USB- модем, но кроме прочего имеет функции факс-модема.
USB – модем – подключается через USB – порт компьютера. Внешний USB модем пользуется популярностью из-за небольших размеров, невысокой цены, скоростной передачей данных.
3G модем для компьютера – выглядит как флешка, подключается к USB- порту компьютера. Из имеющихся у нас технологий 3G – самая современная технология передачи данных.
Теперь рассмотрим принцип работы модема на простом примере.
Например, я, хочу передать данные со своего компьютера своей подружке. Так как компьютер устройство цифровое, то задача модема преобразовать цифровой сигнал компьютера, в аналоговый. Этот аналоговый сигнал поступает на модем подружки, который преобразовывает его снова в цифровой. То есть в сигнал понятный компьютеру.
46. Архитектура Internet.
Что такое Internet? Интернет - это глобальная компьютерная сеть, в которой размещены различные службы или сервисы (E-mail, Word Wide Web, FTP, Usenet, Telnet и т.д.). Компьютерные сети предназначены для передачи данных, а телефонные сети и радиосети - для передачи голоса, телевизионные сети - для передачи изображения. В зависимости от расстояний между ПК различают локальные, территориальные и корпоративные вычислительные сети. Конвергенция телекоммуникационных сетей (компьютерных, радио, телефонных и телевизионных сетей) обеспечивает возможность качественной передачи данных, голоса и изображения по единым (мультисервисным) сетям нового поколения (сетям Internet). Глобальная сеть Интернет была создана в 1990 году на базе сети ARPANet, которую создало подразделение ARPA (Advanced Research Projects Agency) Министерства Обороны США совместно с университетскими учеными в 1969 году. Эта сеть была экспериментальной сетью для исследования методов построения высоконадежной национальной компьютерной сети (сети сетей) устойчивой к локальным повреждениям при ядерной войне. ARPANet была создана с применением технологии коммутации пакетов на основе Internet Protocol - IP или семейства протоколов (стека) TCP/IP т.е. основана на самостоятельном продвижении пакетов в сети. Именно применение сетевых протоколов (сетевого программного обеспечения) TCP/IP обеспечило нормальное взаимодействие компьютеров с различными программными и аппаратными платформами в сети и, кроме того, стек TCP/IP обеспечил высокую надежность компьютерной сети (при выходе из строя нескольких компьютеров сеть продолжала нормально функционировать).
47. Протоколы обмена и адресация.
Способы подключения пользователя к Internet. TCP/IP. Сетевые адреса. Доменная адресация.
Способы доступа
Доступ в Internet, как правило, получают через Internet - провайдеров. В настоящее время существует множество способов соединения с сетью Интернет. Способ подключения компьютера к сети Интернет зависит от используемого пользователем уровня услуг, которые он хочет получить от провайдера (поставщика услуг), от скорости и качества передачи данных. Способы подключения к Интернет можно классифицировать по следующим видам:
коммутируемый доступ;
доступ по выделенным линиям;
доступ по широкополосной сети (DSL - Digital Subscriber Line);
доступ к Интернет по локальной сети;
спутниковый доступ в Интернет;
доступ к Интернет с использованием каналов кабельной телевизионной сети;
беспроводные технологии.
Адресация в сети
Каждый компьютер, подключенный к сети TCP/IP (Интернет), имеет свой уникальный IP-адрес или IP – номер. Адреса в Интернете могут быть представлены как последовательностью цифр из четырех чисел в диапазоне 0 - 255 разделенными точками (например, 223.255.255.0), так и именем (например, www.lessons-tva.info.), построенным по определенным правилам. Компьютеры при пересылке информации используют цифровые адреса, а пользователи в работе с Интернетом используют в основном имена. Метод связи имен и IP – номеров называется сервером имени домена (Domain Name Server, DNS). Сервер DNS поддерживает список имен компьютеров, локальных сетей и соответствующих им IP – номеров. Сервер DNS, как правило, устанавливается у сервис-провайдера, и он автоматически обслуживает ПК, которые подключаются к Интернет через сервер доступа данного провайдера. Браузер, прежде чем отправлять запрос узлу по введенному доменному имени, сначала обращается к серверу DNS сервис-провайдера, который сообщает браузеру IP-адрес узла соответствующий доменному имени, введенному в браузере. В Интернете применяется так называемая доменная система имен. Каждый уровень в такой системе называется доменом. Имя домена состоит из нескольких частей, расположенных в определенном порядке и разделенных точками. Домены отделяются друг от друга точками, например: www.lessons-tva.info. IP-адрес состоит из двух частей: номера сети и номера узла (компьютера) в сети. Если отдельный компьютер (хост-компьютер) или сеть являются составной частью сети Интернет, то IP-адрес присваивается специальным подразделением Интернета. Распределением IP адресов занимается организация ICANN (Internet Corporation for Assigned Names and Numbers), а в Европе распределением IP адресов между региональными провайдерами занимается RIPE. Адреса компьютеров, подключенных к локальной сети провайдера, определяют администраторы сети. IP-адреса бывают статические и динамические. Если за компьютером, подключенным к Интернет, закреплен постоянный IP-адрес, то такой адрес называется статическим. Если компьютеру присваивается новое значение IP-адреса при каждом подключении к Интернет, то этот адрес является динамическим. В Интернете используются не доменные имена, а Universal Resource Locator (URL). URL - это адрес любого ресурса (документа, файла) в Internet, он указывает, с помощью какого протокола следует к нему обращаться, какую программу следует запустить на сервере и к какому конкретному файлу следует обратиться на сервере. Общий вид URL: протокол://хост-компьютер/имя файла (например: http://www.lessons-tva.info/book.html). Более подробно об адресации в сети изложено в разделах IP-адресация и Адресация в сети Интернет.
48. Программы просмотра Web-документов.
Прикладные программы просмотра Web-страниц
Суть системы World Wide Web (WWW) состоит в применении гипертекстовой модели к информационным ресурсам, распределенным в глобальной сети. WWW - один из видов сервиса Интернет. WWW предоставляет возможность работы с документами, в которых объединены текст, графические изображения, звуки, анимация, что значительно облегчает восприятие информации. Гипертекстовые документы (Web-страницы) создаются с помощью специального языка разметки гипертекста HTML (Hyper Text Markup Language).
Система WWW работает по принципу клиент-сервер. Клиент – это интерпретатор HTML, специальная программу просмотра, называемая WWW-браузер (WWW-browser). WWW-браузер - это прикладная программа, которая взаимодействует с системой WWW, получает затребованные документы, интерпретирует данные и отображает содержание документов на экране. Программа клиент обеспечивает доступ практически ко всем информационным ресурсам Интернет, которые хранятся на серверах. Для работы с системой WWW необходимо установить на своем компьютере одну из программ просмотра Web-страниц, например, Internet Explorer, Mozilla Firefox, MyIE Web Browser, Opera и т.д. Большинство браузеров предоставляют доступ к другим серверам Интернета: к FTP-серверам, Gopher-серверам и серверам телеконференций UseNet.
Обозреватель Internet Explorer
Программа Internet Explorer устанавливается вместе с инсталляцией Windows и на рабочем столе появляется значок обозревателя Internet Explorer. Этот значок может использоваться для запуска программы Internet Explorer. После запуска программы просмотра Web-страниц Internet Explorer на экране появится окно обозревателя.
Окно программы просмотра или обозревателя Internet Explorer содержит:
строку меню;
три панели инструментов: Обычные кнопки, Адресная строка, Ссылки;
строку состояния. Панель Обычные кнопки содержит все основные кнопки управления обозревателем. Панели Адрес и Ссылки используются для указания адреса загружаемой Web-страницы. Строка состояния, находящаяся в нижней части окна, содержит сообщения о состоянии Web-страницы. Индикатор процесса в правой части строки состояния отражает процесс загрузки файла. В строке состояния также находится индикатор, показывающий установленный уровень безопасности загружаемых Web-страниц.
Для перехода на Web-страницы можно использовать:
гиперссылки, содержащиеся в открытой странице;
панель Адрес, на которой вводится адрес требуемой Web-страницы;
панели Ссылки и Избранное.
Использование гиперссылок
Каждая Web-страница содержит ссылки на другие страницы. Наиболее простым способом перехода от одной Web-страницы к другой является переход с помощью манипулятора мышь. Для перехода на другие страницы можно использовать меню навигация, текстовые гиперссылки, графические гиперссылки.
Использование адреса Web-страницы
Для осуществления перехода на Web-страницу можно использовать ее адреса, который начинается с названия протокола. Затем следует имя домена и расположение файла относительно домена. По умолчанию панель Адрес находится под основной панелью инструментов обозревателя. Когда вы вводите адрес в находящемся на этой панели раскрывающемся списке и нажимаете клавишу Enter или кнопку Переход, обозреватель открывает Web-страницу, адрес которой вы указали. Все адреса, которые вы раньше вводили на панели Адрес, сохраняются в раскрывающемся списке, и вы можете их выбрать из этого списка по мере надобности. В панель Адрес можно вводить URL страницы непосредственно с клавиатуры. При вводе адреса вы можете не вводить начальную часть адреса http://www, так как обозреватель добавит ее сам.
Алгоритмический язык программирования Pascal.
49. Общая характеристика языка.
Язык в естественной и элегантной форме отразил важнейшие современные концепции технологии разработки программ:
-развитая система типов;
-ориентация на принципы структурного программирования;
-поддержка процесса пошаговой разработки.
Благодаря своей компактности, целостности и ортогональности понятий, а также удачному первоначальному описанию, предложенному автором языка, Pascal оказался весьма легок для изучения и освоения
Несмотря на относительную простоту языка, он оказался пригоден для весьма широкого спектра приложений, в том числе для разработки очень больших и сложных программ, например, операционных систем
Pascal весьма технологичен для реализации практически для всех, в том числе и нетрадиционных, машинных архитектур. Утверждается, что разработка Pascal-транслятора «почти не превышает по трудоемкости хорошую дипломную работу выпускника вуза».
Pascal является традиционным алгоритмическим языком программирования, продолжающим линию Algol-60.
Pascal содержит удобные средства для представления данных.
Pascal является типизированным языком.
Набор операторов языка Pascal отражает принципы структурного программирования.
Pascal является процедурным языком с традиционной блочной структурой и статически определенными областями действия имен.
Синтаксис языка достаточно несложен.
50. Элементы языка.
В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения.
Подобные элементы содержит и алгоритмический язык, только слова называют лексемами (элементарными конструкциями), словосочетания — выражениями, а предложения — операторами.
лексемы образуются из символов,
выражения — из лексем и символов,
операторы — из символов, выражений и лексем
Алфавит - это основные неделимые знаки, с помощью которых пишутся все тексты на языке.
Лексема - минимальная единица языка, имеющая самостоятельный смысл
Выражение - задает правило вычисления некоторого значения.
Оператор - задает законченное описание некоторого действия.
51. Операторы языка.
Пустой и составной. Условный оператор. Операторы повторений. Множественный выбор. Оператор безусловного перехода.
1. Составной и пустой операторы
Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки.
Турбо-Паскаль допускает произвольную глубину вложенности: Begin ... Begin ... Begin ... End; End; End; Наличие ; перед End - пустой оператор.
2. Операторы ветвлений
Условный оператор
IF <условие> THEN <оператор1> [ELSE <оператор2>]
Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.
Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.
A:=B; end. а могло быть и так: If A > B Then If C < D Then If C < 0 Then C:=0 Else Else Else A:=B
3. Операторы повторений
Цикл с предопределенным числом повторений.
For <переменная цикла>:=<начальное значение> To(DownTo) <конечное значение> Do <блок операторов>
Переменная должна быть целого или перечислимого типа. При исполнении цикла переменная цикла изменяется от начального до конечного значения с шагом 1. Если стоит to, то переменная увеличивается, если downto – уменьшается.
Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется. Следующая программа подсчитывает сумму чисел от 1 до введенного:
Program Summa; Var I, N, S: Integer; Begin Write('N = '); Readln(N); S:=0; For I:=1 To N Do S:=S + I; Writeln ('Cумма = ', S) End.
Оператор выбора одного из вариантов.
Case <ключ выбора> Of <список выбора> Else <оператор> End;
<ключ выбора> - выражение любого перечислимого типа, <список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.
Оператор безусловного перехода на строку с меткой.
Goto <метка>
Метка, должна быть описана в разделе описаний. Метка, описанная в процедуре (функции) локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.
52. Общая структура программы.
1. Общая структура программ в тп 7.0
Любую программу, написанную на ТП 7.0, можно условно разделить на три основные части: • раздел объявлений и соглашений (декларационная часть), • раздел текстов процедур и функций, • раздел основного блока (сама программа).
2. Раздел объявлений и соглашений
PROGRAM |
Заголовок программы; |
{$ ... } |
Глобальные директивы компилятора; |
USES |
Подключаемые библиотеки; |
LABEL |
Подраздел объявления глобальных меток; |
CONST |
Подраздел объявления глобальных констант; |
TYPE |
Подраздел объявления глобальных типов; |
VAR |
Подраздел объявления глобальных переменных; |
3. Раздел текстов процедур и функций
В этом разделе записываются подпрограммы, осуществляющие сложные действия, которые необходимо произвести неоднократно на разных этапах выполнения программы. Подпограммы бывают двух типов: прjцедуры (PROCEDURE) и функции (FUNCTION). И те и другие пребставляют собой программы в миниатюре:
PROCEDURE (FUNCTION) |
Заголовок процедуры (функции); |
LABEL |
Подраздел объявления локальных меток; |
CONST |
Подраздел объявления локальных констант; |
TYPE |
Подраздел объявления локальных типов; |
VAR |
Подраздел объявления локальных переменных; |
BEGIN |
Раздел текстов подпрограмм. |
END; |
Основной блок процедуры или функции; |
Они могут иметь все те же разделы, что и основная программа, в частности, раздел локальных процедур и функций, вызываемых только в педелах данной подпрограммы. Раздел основного блока программы:
BEGIN {Основной блок программы} {текст программы} END.
В этом разделе содержится смысловая часть программы.
4. Заголовок программы
Со строкой заголовка Вы уже знакомы. Она состоит из зарезервированного слова PROGRAM и имени программы. В Турбо Паскале эта строка не обязательна, и ее можно без ущерба исключить. Но правила хорошего тона в программировании требуют задания некоторого имени программы, чтобы уже при первом знакомстве можно было получить хоть какую-нибудь информацию об ее назначении. Однако не стремитесь привести здесь всю известную Вам информацию о программе - для этих целей можно воспользоваться дополнительными комментариями. Обычно в заголовке достаточно указать имя и версию программы. Следующее за оператором PROGRAM имя является идентификатором и обладает всеми его свойствами. В частности, внутри тела программы не могут быть объявлены объекты, имя которых совпадает с именем программы.
53. Типы данных.
Простые и структурированные. Перечислимый и ограниченный тип. Массивы. Символьные строки. Множества. Записи.
1. Перечисляемый и ограниченный типы
Ранее рассматривались простые стандартные типы данных (Integer, Boolean,Char ...) - порядковые типы, то есть к переменным этих типов применимы Succ и Pred. Real - не порядковый тип.
В Паскале разрешено введение новых типов. Секция Type располагается между секцией констант и секцией переменных. Введение своих типов повышает "читабельность" программ.
Например: Месяцы. Type Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Var M: Month;
Максимальная мощность перечисляемого типа - 256 значений, поэтому перечисляемый тип фактически задаёт подмножество типа Byte.
В Паскале отсутствуют средства, которые бы позволяли осуществить непосредственный ввод - вывод переменных перечисляемого типа, однако можно вывести код: Write(Ord(M)).
Кроме того применимы операции сравнения: If (M > FEB) And (M < JUN) Then Write ('Весенний месяц');
Следует иметь ввиду, что упорядоченность элементов перечисляемого типа определяется порядком их следования. Самый левый элемент имеет минимальное значение, правый - максимальное.
И перечисляемый и ограниченный типы относят к простому типу. Простой тип - это такой тип, который в некоторый момент времени хранит только одно значение. Структурированные типы данных - совокупность связанных данных и множество правил, определяющих, как их организацию так и способ доступа к элементам данных. Массив - это упорядоченный набор переменных одного типа. Массив содержит фиксированное число компонент, которое задаётся при определении переменных типа массива. Тип компоненты массива может быть любым. Каждый элемент масива имеет свой индекс. Тип индекса - простой, поэтому все элементы массива могут быть перебраны при помощи операторов цикла.
В Паскале многомерный массив можно описать как одномерный: Type Mas = Array [1..3] Of Array [1..5] Of Integer; Var A, B: Mas; C: Array [1..3, 1..5] Of Integer; {такая же структура но определена как двумерный массив}
Символьные строки
Переменную типа Packed Array [0..N] of Char принято называть символьной строкой.
Строка - это упакованный массив, компоненты которого имеют тип Char и тип индекса имеет нижнюю границу равную одному. К строкам применимы все 6 операций отношений, но строки при этом должны иметь равную длину.
В Турбо-Паскале введён тип данных String вместо описанного Packed Array of Char.
Операции с Char: '5' < '25' {ошибка, так как разные длины строк} 'Var' = 'Var' {верно} Var Age: String [3]; Begin Age:="тринадцать"; {Лишние символы после "и" усекаются}
3. Множества
Паскаль позволяет оперировать с множествами как с типами данных.
Пример: Type Symbolset = Set Of ' ' .. '_'; Color = (White, Blue, Red); Colorset = Set Of Color; T1= Set Of 0..9; Var C: Color; Colset: Colorset; T: Integer; Tset: T1;
Множества - наборы однотипных объектов, каким-либо образом связанных между собой. Характер связей лишь подразумевается программистом и никак не контролируется Турбо-Паскалем. Максимальное количество элементов множества - 256.
Два множества считаются эквивалентными тогда и только тогда, когда все элементы их одинаковы, причём порядок следования элементов безразличен.
Описание: <имя типа> = Set Of <базовый тип>, где <базовый тип> есть любой порядковый тип кроме Word, Integer, Longint. Для задания множества используется конструктор множества (((: : =))). Список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется [ ]. Спецификациями элементов могут быть константы или выражения базового типа, а так же тип - диапазон того же базового типа: Type Digitchar = Set Of '0'..'9'; Digit =Set Of 0..9; Var S1, S2, S3: Digitchar; S4, S5, S6: Digit; begin . . . . . . . . . . . . . . . . S1 : = ['1', '2', '3']; S2 : = ['3', '2', '1']; S3 : = ['2', '3']; S4 : = [0..3, 6]; S5 : = [4, 5]; S6 : = [3..9];
Итак, над множествами допустимы четыре операции:
• объединение (+) • пересечение (*) • разность (-) (содержит элементы из 1-го, которых нет во 2-ом). • операция in - позволяет определить, принадлежит элемент множеству или нет.
4. Записи
Запись - наиболее общий и гибкий структурированный тип в Паскале.
Запись состоит из фиксированного числа компонентов, называемых полями, которые могут быть различных типов. Этим запись существенно отличается от массива, все компоненты которого должны быть одного и того же типа и доступ к компонентам осуществляется не по индексам (номерам), а по именам.
Пример: Type Date = Record Year: Integer; Month: 1..12; Day: 1..31; End; Book = Record Title: String [40]; Author: String [50]; Entry: Date; End; Var D1: Date; B: Book;
54. Типизированные константы.
7 Типизированные константы
Описываются в разделе констант: <идентификатор> : <тип> = < значение > В ходе выполнения программы можно присваивать другие значения. При повторном входе в блок (процедуру или функцию), в котором объявлена типизированная константа, переинициализации не происходит и она сохраняет то значение, которое имела при выходе из блока. Могут быть любого типа, кроме файлов. Нельзя так же объявить типизированную константу-запись, если хотя бы одно её поле файлового типа. Нельзя использовать в качестве значения при объявлении других констант или границ типа-диапазона.
Примеры: 1. Типизированные константы простых типов и типа String: Type Colors = (White, Red, Black); Const {Правильные объявления} Cyrrcol: Colrs = Red; Name: String = 'Ку-Ку'; Year: Word = 1989; X: Real = 0.1; Min: Integer = 0; Max: Integer = 10; Days: 1..31 = 1; Answer: Char = 'Y'; 2. Типизированные константы-массивы В качестве начального значения используется список констант, отделённых друг от друга запятыми, список заключается в круглые скобки: Type Colors = (White, Red, Black); Const Colstr: Arrray [Colors] Of String [5] = ('White', 'Red', 'Black'); Vector: Array [1..5] Of Byte = (0, 0, 0, 0, 0);
При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Турбо- Паскале хранятся в упакованном формате,.поэтому в качестве значения массива-константы типа Char допускается указывать символьную строку: Const Digit: Array [0..9] Of Char = ('0','1','2','3','4','5','6','7','8','9'); Digchr: Aray [0..9] Of Char = ('0123456789');
3. Типизированные константы-записи. <идентификатор>:<тип> = (<список значений полей>) <тип> - предварительно объявленный тип записи. <список значений полей > - список из последовательностей следующего вида: имя поля, двоеточие и константа; элементы списка отделятся друг от друга точкой с запятой.
Пример: Type Point = Record X,Y: Real; End; Vect = Array [0..1] Of Point; Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Date = Record D: 1..31; M: Month; Y: 1900..1999; End; Const Orign: Point = (X: 0; Y: -1); Line: Vector = ((X: -3.1; Y: 1.5), (X: 5.9; Y: 3.0)); Someday: Date = (D: 16; M: Mar; Y: 1989);
4. Типизированные константы множества. Значение типизированной константы множества задаётся в виде правильного конструктора множества:
Type Days = Set Of 1..31; Dige = Set Of '0'..'9'; Error = Set Of 1..24; Const Workdays: Days = [1..5, 8..12, 15..19, 22..26, 29, 30]; Evendigits: Dige = ['0', '2', '4', '6', '8']; Errorflag: Error = [ ];
5. Типизированные константы указатели. Единственным значением типизированной константы указателя может быть только Nil: Const Pr: ^Real = Nil; P: POINTER = Nil;
55. Совместимость и преобразование типов.
Два типа считаются совместимыми, если
• оба они есть один и тотже тип. • один тип есть тип-диапазон второго типа. • оба они являются типами-диапазонами одного и того же базового типа. • один тип есть строка, а другой - строка или символ. • оба они есть процедурные типы с одинаковым типом результата (для типа-функции), одинаковым количеством параметров и одинаковым типом взаимно соответствующих параметров.
В Турбо-Паскалевской программе данные одного типа могут преобразовываться в данные другого, явным или неявным образом.
При явном преобразовании используются специальные функции Ord, Trunc, Round, Chr, Ptr (преобразует четырёхбайтный целочисленный аргумент к типу-указателю).
Преобразование может достигаться применением идентификатора (имени) стандартного типа, или определённого пользователем типа, в качестве идентификатора функции преобразования к выражению преобразуемого типа (так называемое автоопределённое преобразование типов). Например, допустимы следующие вызовы функций: Type Mytype = (A, B, C, D); . . . . . . . . . . . . . . . . . Mytype (2); Integer (D); Pointer (Longint (A) + $FF); Char (127 Mod C); Byte (K);
При автоопределённом преобразовании типа выражения может произойти изменение длины его внутреннего представления (уменьшение или увеличение).
В Турбо-Паскале есть ещё один явный способ: в ту область памяти, которую занимает переменная некоторого типа, можно поместить значение выражения другого типа, если только длина внутреннего представления вновь размещаемого значения в точности равна длине внутреннего представления переменной. С этой целью вновь используется автоопределённая функция преобразования типов, но уже в левой части оператора присваивания:
Type Byt = Array [1..2] Of Byte; Int = Array [1..2] Of Integer; Rec = Record X: Integer; Y: Integer; End; Var VByt: Byt; VInt: Int; VRec: Rec; Begin Byt (VInt[1])[2]:= 0; Int (VRec)[1]:= 256; End.
Неявное преобразование типов возможно только в двух случаях: • выражение из целых и вещественных приводится к вещественным • одна и та же область памяти трактуется попеременно как содержащая данные то одного, то другого типа.
Совмещение данных может произойти при использовании записей с вариантами, типизированных указателей, содержащих одинаковый адрес, а также при явном размещении данных разного типа в одной области памяти (используется Absolute - за ним помещается либо абсолютный адрес, либо идентификатор ранее определённой переменной).
Абсолютный адрес - пара чисел, разделённых двоеточием - первое - сегмент, второе - смещение.
Пример: B: Byte Absolute $0000:$0055; W: Longint Absolute 128:0; Если за Absolute указан идентификатор переменной, то происходит совмещение в памяти данных разного типа, причём первые байты внутреннего представления данных будут располагаться по одному и тому же абсолютному адресу: Var X: Real; Y: Array [1..3] Of Integer Absolute X;
56. Общая структура подпрограммы. Механизм параметров.
Параметры-значения и параметры-переменные, безтиповые параметры.
В заголовке подпрограммы может быть задан список формальных параметров. Каждый параметр, заданный в заголовке, считается локальным в данной подпрограмме. Идентификаторы формальных параметров можно считать условными обозначениями реальных (фактических) параметров, которые будут переданы в подпрограмму при её вызове.
Внимание: Типы формальных параметров должны обязательно обозначаться идентификаторами.
Недопустимо: Procedure InCorrect (Var A: Array [1..10] of Byte); Нужно: Type MyArray = Array [1..10] of Byte; Procedure Correct (Var A: MyArray);
Допустимы по крайней мере три способа задания формальных параметров:
параметры, перед которыми отсутствует служебное слово Var и за которыми следует идентификатор типа;
параметр, перед которым Var и далее тип;
параметр со словом Var и не имеющие типа.
Эти три способа задания формальных параметров отражают три различных способа передачи параметров a - по значению; b - по ссылке; c - передача нетипизированных параметров по ссылке (b, c - параметры-переменные).
Параметры - значения. Наиболее распространенный и простой способ. Параметр - обычная локальная переменная. Может использовать выражение. Любые действия внутри подпрограммы никак не отражаются на значениях переменной вне подпрограммы.
Параметры - переменные. Передаются по ссылке. Способ используется, когда необходимо передать некоторое значение в точку вызова подпрограммы. В случае Var - формальные параметры считаются синонимами соответствующих фактических параметров. При этом фактические параметры должны быть переменными (не выражениями) того же типа, что и формальные параметры:
Procedure Swap (Var X,Y: Real); Var T: Real; Begin T:= X; X:= Y; Y:= T; End;
Переменные файловых типов могут передаваться в подпрограмму только как параметры - переменные.
Безтиповые параметры. Var Ident, где Ident - идентификатор формального параметра. Фактический параметр, соответствующий формальному нетипизированному, должен представлять собой переменную любого типа (но не выражение). Единственным способом использования таких параметров является “наделение” их определённым типом.
57. Процедурные типы.
9. Процедурные типы
Турбо-Паскаль позволяет вводить переменные специального типа, значениями которых могут служить подпрограммы. Можно интерпретировать подпрограмму как значения, которые можно присваивать переменным и передавать их в качестве параметров (речь идёт о подпрограммах как о целостных объектах, а не о значениях, возникающих в процессе их выполнения).
{$F+} Var P: Procedure;
Значениями Р могут быть любые процедуры без параметров. В более общем случае: Type Func = Function(X,Y: Integer): Integer; Var F1,F2: Func;
Например, если есть функция: Function Add(A,B: Integer): Integer; Begin Add:= A + B; End;
то допустимо F1:= Add, в этом случае переменной F1 присваивается функция Add как таковая, но её исполнения не происходит.Теперь можно: Write (Add (1,2)) или Write (F1 (1,2));.
Следует обратить внимание на строку {$F+} – она существенна, это ключ компилятора, и если он выключен, при присвоении переменным процедурного типа значений конкретных подпрограмм, возникнет ошибка присвоения типа.
Имена формальных параметров, указываемые в процедурных типах, играют часто иллюстративную роль и на смысл определений никакого влияния не оказывают. Необходимыми являются только идентификаторы типов параметров и результатов (для функций).
Процедурные типы допускают также присвоение вида F1:= F2; Такие переменные можно использовать для вызова подпрограмм, которые присвоены этим переменным.
Пример: Var Oper: Function(X, Y: Real): Real; Function Add(A,B: Real): Real; Begin Add:= A + B; End; Function Sub (A,B: Real): Real; Begin Sub:= A - B; End;
Процедурные типы, чтоб они были совместимыми по присваиванию, должны иметь одинаковое количество формальных параметров, а параметры на соответствующих позициях должны быть одного типа. Также, должны совпадать типы возвращаемых значений у функций.
Использование процедурных типов не ограничиваются простыми процедурными переменными. Как и любой другой тип, процедурные типы могут участвовать в построении структурированных типов:
Type Proc = Procedure(T: Real); Notice = Record Next: Integer; Time: Real; Action: Proc; End; Var New_Notices: Array[1..10] of Proc; Notices: Notice;
Правила корректной работы с процедурными типами.
Подпрограмма, присваиваемая процедурной переменной должна быть странслирована в режиме “дальнего вызова”.
Подпрограмма, присваиваемая процедурной переменной, не должна быть стандартной процедурой или функцией. Это ограничение легко обойти: Подпрограмма, присваиваемая процедурной переменной, не может быть вложенной в другие подпрограммы.
Подпрограмма, присваиваемая процедурной переменной, не может быть подпрограммой специального вида (interrupt или inline).
Можно описывать процедуры и функции, параметрами которых являются процедурные переменные. Таким образом, можно организовать подпрограмму, которая будет выполнять некоторое общее действие для различных подпрограмм - параметров. В общем случае использование процедурных переменных в операторе или выражении означает вызов присвоенной данной переменной процедуры или функции.
Необходимо помнить, что если в левой части оператора стоит процедурная переменная, правая часть его должна представлять идентификатор другой процедурной переменной или идентификатор подпрограммы.
Чтобы сравнить значение переменной F со значением (адресом) подпрограммы FFF нужно использовать следующую конструкцию: If @F = @FFF then . . . .
Чтобы получить адрес самой процедурной переменной нужно написать: @@F
Приведение типов переменных для процедурных типов. Определены следующие типы и переменные: Type Func:= Function(X: Integer): Integer; Function MyFunc(X: Integer): Integer; Begin MyFunc:= X; End; Var F: Func; P: Pointer; N: Integer;
Можно построить следующие присваивания:
F:= MyFunc |
{переменной F присваивается функция MyFunc} |
N:= F(N) |
{функция MyFunc вызывается через переменную F} |
P:= @F |
{P получает указатель на функцию MyFunc} |
N:= Func (P)(N) |
{функция MyFunc вызывается через указатель P} |
F:= Func (P) |
{присвоить значение подпрограммы в P переменной F} |
Func(P):= F |
{присвоить значение подпрограммы в F указателю P} |
@F:= P |
{присвоить значение указателя в P переменной F} |
58. Модули.
1. Структура модулей
Модуль имеет следующую структуру: Unit < имя >; Interface < интерфейсная часть > Implementation < исполняемая часть > [ Begin < инициирующая часть > ] End.
Здесь: Unit - кодовое слово (англ. модуль); начинающее заголовок модуля; <имя> - имя модуля (правильный идентификатор); Interface - кодовое слово, начинающее интерфейсную часть модуля; Implementation - кодовое слово (англ. реализация); начинает исполняемую часть; Begin - кодовое слово, начинающее инициирующую часть; (часть модуля Begin < инициирующая часть > необязательна); End. - признак конца модуля.
2. Заголовок модуля и связь модулей друг с другом
Заголовок модуля состоит из кодового слова Unit и следующего за ним имени модуля. Если, например, имеем заголовок Unit Global, то исходный текст соответствующего модуля должен размещаться в дисковом файле GLOBAL.PAS. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением Uses <список модулей> Здесь: Uses - кодовое слово (англ. использует); <список модулей> - список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми, например: Uses Crt, Graph, Global;
Если предложение Uses... используется, оно должно открывать раздел описаний основной программы или следовать сразу за кодовым словом Interface в модуле.
3. Интерфейсная часть
Интерфейсная часть открывается кодовым словом Interface. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям.
При объявлении глобальных блоков в интерфейсной части пишется только их заголовок, например: Unit Cmplx; Interface Type Complex = Record Re: Real; Im: Real; End; Procedure AddC (X, У: Complex; Var R: Complex); Procedure MulC (X, У: Complex; Var Z : Complex);
Если теперь в основной программе написать предложение Uses Cmplx; то в программе станут доступными тип Complex и две процедуры - Addc и Mulc из модуля Cmplx.
4. Исполняемая часть
Исполняемая часть начинается кодовым словом Implementation и содержит тела процедур и функций, объявленных в интерфейсной части. В этой части могут также объявляться локальные для модуля объекты: вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части..
Но если заголовок блока приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части, например:
Unit Cmplx; Interface Type Complex = Record Re: Real; Im: Real; End; Procedure AddC (X, У: Complex; Var Z : Complex); Implementation Procedure AddC; Begin Z.Re:= Х.Rе + Y.Re; Z.Im:= X.Im + Y.Im; End; End.
5. Инициирующая часть
Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом Begin или быть пустой - тогда за Begin сразу следует признак конца модуля (кодовое слово End и следующая за ним точка). В инициирующей части помещаются ис полняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Unit FileText; Interface Procedure Print(S: String); Implementation Var F: Text; Const Name = 'output.txt’; Procedure Print; Begin WriteLn(F, S); End; { Начало инициирующей части } Begin Assign(F, Name); Rewrite(F); { Конец инициирующей части } End.
59. Ключи и директивы компилятора Турбо-Паскаля.
Позволяют управлять процессами компиляции программы. Директива представляет собой комментарий со специальным синтаксисом: начинается с {$, далее пишется имя директивы (одна или несколько букв) и параметры.
В Турбо-Паскале 7.0 существует три основных вида директив:
Директивы - переключатели. С их помощью, указывая символ (+) или (-), можно разрешать или запрещать тот или иной режим.
Директивы с параметрами. Позволяют задавать компилятору параметры, такие как имена подключаемых файлов, размеры памяти, выделяемые под определённую задачу, и так далее.
Условные директивы. Позволяют организовывать так называемую "условную компиляцию" частей исходного текста, благодаря чему скомпоновать программу определённым образом.
Все директивы, кроме директив-переключателей, должны иметь по крайней мере один пробел между именем директивы и параметром.
Чтобы не прописывать директивы компилятора в тексте программы можно воспользоваться пунктом "Options" меню ИПО и далее подпунктом "Compiler". Но при этом все изменения будут иметь силу при всех последующих компиляциях других программ.
1. Директивы-переключатели
Различаются по диапазону своего действия на глобальные и локальные: • Глобальные - влияют на ход компиляции и выполнение всей программы, • локальные - только на определённую часть программы.
Глобальные директивы могут быть объявлены в разделе объявлений и соглашений прежде, чем будет использовано хотя бы одно из следующих зарезервированных слов: Uses, Label, Const, Type, Procedure, Function, Begin, а Локальные директивы могут быть объявлены в любом месте программы или программного модуля.
При необходимости можно сгруппировать комментарии из нескольких директив, разделённых запятой: {$A+, B-}.
Директивы: Выравнивание данных - (Word Align Data) {$A+} Тип глобальный. Делает возможным переключение между выравниванием на границу слова или байта. (Для 8086 выравнивание на границу слова игнорируется, однако для 80X86 выравнивание на границу слова означает более быстрое выполнение, поскольку адресация по всем элементам, имеющим размер в слово (чётная адресация) происходит за один цикл вместо двух. {$A+} не влияет: 1. на переменные размером в байт, 2. на поля структур или элементы массивов.
2. Директивы с параметрами
Включение файла для компиляции (Include Directories). {$I < имя файла >} Тип локальный. Сообщает компилятору о необходимости включить в компиляцию названный файл. Текст файла вставляется сразу за директивой. Расширение по умолчанию .PAS. Турбо-Паскаль допускает одновременно не более 15 входных файлов. Значит допускается вложенность до 15-ти уровней. Так же включаемый файл не может указываться в середине раздела операторов. Это означает, что все операторы между Begin и End раздела операторов должны быть в одном файле.
Компоновка объектного файла. (Object Directories). {$L < Имя-файла >} Тип локальный. Предписывает компилятору использовать указанный файл (.Obj) при компоновке компилируемой программы или модуля. Директива {$L} используется для компоновки кода Ассемблера для подпрограмм, описанных External.
Размеры выделяемой памяти (Memory Sizes). {$M < размер стека >, < размер динамической области >}. Тип глобальный. Размер-стека - целое число от 1024 до 65520. Для модуля размер- стека игнорируется (модуль использует стек основной программы). Размер динамической области - целое число от 0 до 65360. Директива {$M} при использовании в Unit не оказывает влияния на компиляцию.
3. Условные директивы
Установить условие (Conditional Defines). {$ Define < условие >} Определяет условия, которые можно использовать в операторах условной компиляции. Установить условие - значит с помощью данной директивы ввести некоторое слово, которое затем будет управлять компиляцией какого- либо фрагмента программы. За условием не должно следовать ничего кроме }.
Пример: {$Define Debug} . . . . . . . . . . . . . . {$Ifdef Debug} Writeln(‘Отладка’); {$Endif}
60. Указатели и динамическая память.
Понятие динамической памяти. Объявление указателей. Выделение и освобождение динамической памяти. Использование указателей. Процедуры и функции для работы с динамической памятью.
Динамическая память - это оперативная память ЭВМ, предоставляемая Турбо-Паскалевой программе при её работе, за вычетом сегмента данных (64 К), стека (обычно 16 К) и собственно тела программы. По умолчанию размер динамической памяти определяется всей доступной памятью ЭВМ и, как правило, составляет не менее 200 - 300 Кбайт.
Указатель - это переменная, которая в хранит качестве своего значения адрес байта памяти. В 8086 адреса задаются совокупностью двух шестнадцатиразрядных слов - сегмента и смещения. Сегмент - участок памяти, имеющий максимальную длину 64 К и начинающийся к физического адреса, кратного 16 (то есть 0, 16, 32, 48 и т.д.). Смещение - указывает, сколько байт от начала сегмента нужно пропустить, чтобы обратиться по нужному адресу. Фрагмент памяти в 16 байт называется параграфом. Сегмент адресует память с точностью до параграфа, а смещение - с точностью до байта.
1. Объявление указателей
Как правило, в Турбо-Паскале указатель связывается с некоторым типом данных (типизированные указатели).
Type PerPnt = ^PerRec;{указатель на переменную типа PerRec} PerRec = Record Name: String; Job: String; Next: PerPnt; End; Var P1: ^Integer; P2: ^Real;
В Турбо-Паскале можно объявлять указатель и не связывать его с конкретным типом данных: Var PP: Pointer;
Указатели такого рода называют нетипизированными. В них удобно размещать данные, структура которых меняется по ходу работы.
В Турбо-Паскале можно передавать значения только между указателями, связанными с одним и тем же типом данных. Var P1,P2: ^Integer; P3: ^Real; PP:Pointer; Begin P1:= P2; {- верно} P1:= P3; {- неверно}
но можно сделать так: PP:= P3; P1:= PP; так как ограничение не распространяются на нетипизированные указатели. Но подобные операции часто путают программиста и чреваты смысловыми ошибками.
2. Выделение и освобождение динамической памяти
Вся динамическая память – пространство ячеек, называемое кучей. Физически куча располагается в старших адресах, сразу за программой. Указатель на начало кучи храниться в предопределенной переменной HeapOrg, конец - FreePtr, текущую границу незанятой динамической памяти указывает указатель HeapPtr. Для выделения памяти под любую переменную используется процедура New. Единственным параметром является типизированный указатель: Var I,J: ^Integer; R: ^Real; Begin New(I); {под I выделяется область памяти,} {адрес первого байта этой области помещается в I} End.
После выполнения этого фрагмента указатель I приобретёт значение, которое перед этим имел указатель кучи HeapPtr, а HeapPtr увеличится на два (т.к. он типа Integer); New(R) - вызовет смещение указателя на 6 байт. После того как указатель приобрёл некоторое значение, то есть стал указывать на конкретный байт памяти, по этому адресу можно разместить значения соответствующего типа:
I^:= 2; R^:= 2*Pi; Допустима запись: R^:= Sqr (R^) + I^ - 17; Но недопустима запись: R:= Sqr (R^) + I^ - 17; так как указателю R нельзя присвоить значение вещественного выражения.
Возврат динамической памяти обратно в кучу осуществляется оператором Dispose: Dispose(R); Dispose(I); - вернут в кучу, ранее забранные 8 байт. Dispose(Ptr) не изменяет значения указателя Ptr, а лишь возвращает в кучу память, связанную с этим указателем. Однако повторное применение процедуры к “свободному” указателю приведет к возникновению ошибки времени исполнения. Чтобы указать, что указатель свободен, нужно использовать зарезервированное слово Nil.
К указателям можно применять операции отношения, в том числе и сравнения с Nil: Const P:^Real = Nil; . . . . . . . . Begin If P = Nil then New (P); . . . . . . . . Dispose(P); P:= Nil; End.
Можно освободить целый фрагмент кучи следующим образом: 1. Перед началом выделения динамической памяти значения указателя HeapPtr запоминается в переменной-указателе с помощью процедуры Mark. 2. Выполнение программы. 3. Освобождение фрагмента кучи от заполненного адреса до конца динамической памяти с использованием процедуры Release.
Var P, P1, P2, P3, P4, P5: ^Integer; Begin New(P1); New(P2); New(P3); New(P4); New(P5); Mark(P); . . . . . . . . Release (P); End.
В этом примере процедурой Mark(P) в указатель P было помещено текущее значение HeapPtr, однако память под переменную не резервировалась.
Вызов Release уничтожает список свободных фрагментов в куче, созданных Dispose, поэтому совместное применение этих процедур не рекомендуется.
Для работы с нетипизированными указателями используются также процедуры GetMem(P, Size) и FreeMem(P, Size) - резервирование и освобождение памяти. P - нетипизированный указатель, Size - размер.
За одно обращение к куче процедурой GetMem можно зарезервировать до 65521 байт. Освобождать нужно ровно столько памяти, сколько было зарезервировано, и именно с того адреса, с которого память была зарезервирована, иначе программа не будет работать и завершаться корректно!!!
Использование нетипизированных указателей даёт широкие возможности неявного преобразования типов: Var i,j: ^Integer; r: ^Real; Begin New (i); { I:= HeapOrg; HeapPtr:= HeapOrg+2 } j:= i; { J:= HeapOrg } j^:=2; Dispose (i); { HeapPtr:= HeapOrg } New (r); { R:= HeapOrg; HeapPtr:= HeapOrg+6 } r^:= Pi; WriteLn (j^); End. {Будет выведено: "8578"} {здесь преобразование не имеет никакого смысла}
Проблема потерянных ссылок Работа с динамическими переменными через указатели требует большой тщательности и аккуратности при проектировании программ. В частности, следует стремиться освобождать выделенные области сразу же после того, как необходимость в них отпадает, иначе “засорение” памяти ненужными динамическими переменными может привести к быстрому ее исчерпанию.
Кроме того, необходимо учитывать еще одну проблему, связанную с противоречием между стековым принципом размещения статических переменных и произвольным характером создания и уничтожения динамических переменных. Рассмотрим следующий схематический пример программы:
Program LostReference; Type PPerson = ^Person; Person = Record . . . . End; Procedure GetPerson; Var Р: РРerson; Begin P:= New(PPerson); End; Begin WriteLn(MemAvail); GetPerson; Writeln(MemAvail); End.
Вызов New в процедуре GetPerson приводит к отведению памяти для динамической переменной типа Person. Указатель на эту переменную присваивается переменной Р. Рассмотрим ситуацию, возникающую после выхода из процедуры GetPerson. По правилам блочности все локальные переменные подпрограммы перестают существовать после ее завершения. В нашем случае исчезает локальная переменная Р. Но, с другой стороны, область памяти, отведенная в процессе работы GetPerson, продолжает существовать, так как освободить ее можно только явно, посредством процедуры Dispose. Таким образом, после выхода из GetPerson отсутствует какой бы то ни было доступ к динамической переменной, так как единственная "ниточка", связывавшая ее с программой - указатель Р - оказался потерянным при завершении GetPerson. Вывод на печать общего объема свободной памяти до и после работы GetPerson подтверждает потерю определенной области.
При проектировании программ, интенсивно использующих динамическую память, следует с особой внимательностью относиться к данной проблеме, так как Turbo Pascal, как, впрочем, и многие другие языки программирования, не имеет встроенных средств борьбы с засорением памяти неиспользуемыми динамическими переменными. Во всяком случае нужно придерживаться правила, согласно которому при выходе из блока необходимо или освободить все созданные в нем динамические переменные, или сохранить каким-то образом ссылки на них (например, присвоив эти ссылки глобальным переменным).
К описанной проблеме примыкает коллизия другого рода, заключающаяся в ситуации, когда некоторая область памяти освобождена, а в программе остался указатель на эту область. Рассмотрим следующий пример:
Var P: Integer; Procedure X1; Var i: Integer; Begin i:= 12345; P:= @i; WriteLn(P^); { напечатает 12345 } End; Procedure X2; Var j: Integer; Begin j:= 7777; WriteLn(P^); { напечатает 7777, а не 12345 } End; Begin X1; X2; End;
В этом примере глобальная ссылочная переменная Р первоначально (в процедуре X1) устанавливается на локальную переменную i. После завершения процедуры X2 переменная i исчезает, указатель Р “повисает”. Вызов процедуры Х2 приводит к тому, что на место, локальной переменной i, будет помещена локальная переменная j, и указатель Р теперь ссылается на нее, что подтверждает результат второго вызова WriteLn.
Таким образом, смысл указателя Р зависит в данном случае не от семантики решаемой задачи, a от системных особенностей ее функционирования, что может привести к неожиданным эффектам. Аналогичные ситуации возможны при повторном использовании областей динамической памяти: если на освобожденную область остался указатель, то он может быть (по ошибке) использован после повторного выделения этой памяти для другой переменной, что опять- таки не будет "замечено" системой, но может сделать поведение программы непредсказуемым.
61. Файлы.
Доступ к файлам. Процедуры и функции для работы с файлами. Текстовые файлы. Типизированные и нетипизированные файлы.
Файл - именованная область внешней памяти ПЭВМ (жесткого диска, гибкой дискеты, электронного "виртуального" диска), либо логическое устройство - потенциальный источник или приемник информации.
юбой файл имеет три характерных особенности:
Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами.
Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Турбо-Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов».
В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.
Файловый тип или переменную файлового типа можно задать одним из трех способов: < имя > = FILE OF <тип>; < имя > = ТЕХТ; < имя > = FILE; . Здесь < имя > - имя файлового типа или файловой переменной, FILE, OF, TЕХТ - кодовые слова (англ.: файл, из, текст), < тип > - любой тип Турбо-Паскаля, кроме файлов. Пример: Type Man=record Name: string; LastName: string; End; Men=file of Man; Var Staff: Men; Numbers: file of real; Book: Text; A_File: File;
В зависимости от способа объявления можно выделить три вида файлов: • типизированные (задаются предложением FILE OF ...), • текстовые (задаются предложением ТЕХТ), • нетипизированные (задаются предложением FILE).
2. Доступ к файлам
Любой Турбо-Паскалевой программе доступны два предварительно объявленных файла со стандартными файловыми переменными: INPUT - для чтения данных с клавиатуры и OUTPUT - для вывода на экран. Стандартный Паскаль требует обязательного упоминания этих файлов в заголовке программы. В Турбо-Паскале это необязательно, вот почему заголовок программы можно опускать.
Любые другие файлы, а также логические устройства становятся доступны программе только после выполнения особой процедуры открытия файла (логического устройства). Эта процедура заключается в связывании ранее объявленной файловой переменной с именем существующего или вновь создаваемого файла, а также в указании направления обмена информации: чтение из файла или запись в него.
Связывание файловой переменной с именем файла осуществляется обращением к встроенной процедуре ASSIGN: ASSIGN(< ф.п. >, < имя файла или л.у. >); Здесь < ф.п. > - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа); < имя файла или л.у. > - текстовое выражение, содержащее имя файла или логическое устройство.
Пример: Assign(Book,’PascalLecture.txt’);
Если имя файла задается в виде пустой строки, например, ASSIGN(f, ‘’), то файловая переменная связывается со стандартным файлом INPUT или ОUТРUТ.
6. Процедуры и функции для работы с файлами
Ниже описываются процедуры и функции, которые можно использовать с файлами любого вида. Специфику работы с типизированными, текстовыми и нетипизированными файлами рассмотрим позднее. CLOSE(< ф.п. >) Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой АSSIGN(), сохраняется. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
RENAME (< ф.п. >, < новое имя >) Переименовывает файл < ф.п. >. Перед выполнением процедуры необходимо закрыть файл, если он ранее был открыт.
ERASE(< ф.п. >). Уничтожает файл < ф.п. >
FLUSH(< ф.п. >). Очищает внутренний буфер файла и, таким образом, гарантирует сохранение всех последних изменений файла на диске. Любое обращение к файлу в Турбо-Паскале осуществляется через некоторый внутренний буфер, что необходимо для согласования bmsrpemmecn представления файлового компонента - записи с принятым в ДОС форматом хранения данных на диске. В ходе выполнения процедуры FLUSH все новые записи будут действительно записаны на диск. Процедура игнорируется, если файл был инициирован для чтения процедурой RESET.
Функция ЕОF(< ф.п. >): BOOLEAN. Логическая функция, тестирующая конец файла. Возвращает ТRUE, если файловый указатель стоит в конце файа. При записи это означает, что очередной компонент будет добав лен в конец файла, при чтении - что файл исчерпан.
MKDIR(< имя каталога >). Создает новый каталог на указанном диске. Имя уже существующего каталога не может быть последним именем в пути, т.е. именем вновь создаваемого каталога.
62. Использование внешних процедур и функций.
63. Использование встроенных машинных кодов.
