- •Министерство образования и науки российской федерации
- •Начальный курс программирования на основе алгоритмического языка Паскаль
- •Введение
- •Часть. Основы программирования на Паскале
- •1.1. Структура простейшей Паскаль-программы
- •1.2. Данные и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных
- •1.2.3. Правила записи констант
- •1.2.4. Описание переменных и именованных констант в Паскале
- •1.2.5. Выражения
- •1.3. Операторы преобразования данных
- •1.3.1. Оператор присваивания
- •1.3.2. Понятие ввода и вывода
- •1.3.3. Оператор вывода
- •1.3.4. Оператор ввода
- •1.4. Разработка простейших программ
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале
- •1. Следование
- •2. Ветвление (развилка)
- •If условие then
- •If условие then
- •3. Цикл
- •1.4.5. Примеры разработки программ
- •1.5. Массивы
- •1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
- •1.5.2. Примеры программ с массивами
- •1.614. Структура паскаль-программы
- •Часть.Подпрограммы
- •2.1. Общие сведения о подпрограммах
- •2.2. Процедуры в Паскале
- •2.2.1.Описание процедур
- •2.2.2. Обращение к процедуре
- •2.3. Функции Паскаля
- •2.3.1. Описание функций
- •2.3.2. Обращение к функции
- •2.4. Глобальные и локальные имена
- •2.5. Использование подпрограммы в качестве параметра другой подпрограммы
- •2.6. Модули
- •2.6.1. Общие сведения
- •2.6.2. Структура модуля
- •2.6.3. Использование модулей
- •2.6.4. Модули как средство программирования
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации
- •3.1.1. Символьный тип
- •3.1.2.Строковые типы
- •3.1.3. Подпрограммы, работающие со строками
- •Функции
- •Процедуры
- •3.2. Тип запись
- •3.3. Файлы
- •3.3.1. Общие понятия
- •3.3.2. Файлы в Турбо Паскале
- •3.3.3. Текстовые файлы
- •Пример 1
- •Пример 2
- •3.3.4. Типизированные файлы
- •3.3.5. Нетипизированные файлы
- •Часть IV. Работа с динамическими массивами
- •О статическом и динамическом распределении памяти
- •Указатели в Паскале
- •Динамические массивы
- •Формальные параметры-массивы без указания границ
- •Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.
- •Режимы компиляции программы, использующей модули
- •Приложение 2. Краткая инструкция по работе в режиме консольного приложения средыDelphi. Создание консольного приложения
- •Сохранение консольного приложения.
- •Отладка программы
- •Контрольные вопросы
- •Заключение
- •Библиографические ссылки
- •Содержание
- •Часть IV. Работа с динамическими массивами 98
2.6.3. Использование модулей
Если программа использует модули, то в ее начале, перед всеми разделами описаний, должно стоять ключевое словоUSES, после которого через запятую перечисляются имена этих модулей. Например:
Program ppp;
Uses crt,graph;{программа ppp использует модули crt и graph}
Если модуль использует другие модули, то предложение USESможет стоять либо после словаINTERFACE, либо после словаIMPLEMENTATION. Модули, подключенные в интерфейсной части, доступны в любой точке рассматриваемого модуля; модули, подключенные в исполняемой части, доступны в любом месте модуля, за исключением интерфейной части.
Чтобы файлы с расширением .TPUбыли доступны средеTurbo(Borland)Pascal, их следует поместить в текущий каталог или указать их содержащий каталог в диалоговом окне опцииOPTIONS/DIRECTORIES/UNIT DIRECTORIES.
В Delphiсуществуют специальные возможности для подключения модуля к проекту; кроме того, директория местоположения модуля может быть указана в предложенииUSES:
Uses имя_модуляinимя директории
Пример
Ниже приведена программа, использующая модуль VECTORиз §2.6.2.
Program Primunit;
{Даны два вектора а и b в трехмерном пространстве;}
{вычисляется длина вектора с (с=а+b) и угол между вектором с и плоскостью XOY}
Uses VECTOR; {используется модуль VECTOR}
Var a,b,c,cpr:Ar;{тип ar объявлен в модуле}
Begin
Writeln(' Введите координаты исходных векторов');
Inp(a,3);Inp(b,3); {ввод а и в}
Sum(a,b,c,3); {c=a+b}
Writeln(' Длина вектора-суммы:', Lngth(c,3):10:3);
cpr[1]:=c[1]; cpr[2]:=c[2]; cpr[3]:=0;
{cpr - проекция с на плоскость XOY}
If Lngth(cpr,3)< 1.0e-6 then
Writeln('вектор c ортогонален плоскости XOY')
Else
Begin
Write(
' Угол между вектором с и плоскостью XOY:',UngleGr(c,cpr,3):6:1);
Writeln(' градусов');
End;
Readln;
End.
2.6.4. Модули как средство программирования
Модули, прежде всего, дают возможность компилировать программу по частям и создавать библиотеки откомпилированных подпрограмм. Однако этим не исчерпываются возможности, которые они дают программисту.
Модули, кроме описания процедур и функций, могут содержать также описания констант, типов, переменных, что избавляет программиста от необходимости их повторного описания.
Информация модуля разделена по уровням доступа. В модуле выделяются видимая, доступная другим программам и содержащая основную информацию для использующего модуль программиста, интерфейсная часть и невидимая исполняемая часть.
В модуле могут присутствовать инициирующая и завершающая части, обеспечивающие грамотное использование модуля.
Часть. Обработка символьной информации и документов сложной структуры
3.1. Обработка символьной информации
3.1.1. Символьный тип
Здесь мы углубим знания, полученные в части Iпособия. Символьные (или литерные) переменные - это переменные типаchar. Они принимают значения на множестве символов данной ЭВМ. Пример описания символьной переменнойА:
var A: char;
Все символы упорядочены, имеют свой номер, зависящий от системы кодирования, так что символьный тип является порядковым типом. В средах программированияTurbo(Borland)Pascal(ориентированных на шестнадцатиразрядные персональные ЭВМ типа IBM PC и операционную системуMSDOS) используется система кодированияASCII, в которой код символа занимает 1 байт. В версиях среды программированияDelphiдля 32-разрядных персональных компьютеров имеется также символьный типwidechar, основанный на системе кодированияUnicode, в которой на код символа отводится 2 байта. Типcharдля этих компьютеров поддерживается однобайтовой таблицейANSI. Первые 256 кодов таблицыUnicodeсовпадают с таблицейANSI.
К символьным переменным (как и к переменным любого порядкового типа) применимы встроенные функции ORD(определение порядкового номера, т. е. кода, символа),SUCC (определение следующего символа) иPRED (определение предшествующего символа); функцияCHRпо коду определяет символ.
В дальнейшем также потребуется функция UPCASE(CH). Это функция типаCHAR; возвращает символCHв верхнем регистре, если он определен для него, либо сам символCH, если для него нет верхнего регистра. Например,UPCASE('a')вернетА, в то время какUPCASE('2')вернет2.
Cимвольная константа - это соответствующий символ, заключенный в апострофы. Оператор А:='A'означает, что символьной переменной с именемАприсваивается значение символаА.
Для обозначения символьных констант используется также значок #,действие которого эквивалентно функцииCHR. Например,#97- символ, код которого равен 97 (символ a),#90- символ, код которого равен 90 (символZ). Особенно удобно такое обозначение для специальных символов; например,#27соответствует клавишеEsc, #10-сдвигу курсора на одну строку вниз,#13- перемещению курсора на левую границу окна; последовательность символов#13#10соответствует нажатию клавишиEnter.
Рассмотрим массивы символов. Например,
Var L,LP: array[1..10] of char;
Допустимо присваивать значение массиву символов одним оператором, например: L:='ABC '; LP:='1234567890';L:=LP; размеры массивов в левой и правой частях должны совпадать. Разрешено использовать имя массива символов без указания индексов в операторе вывода. Ввод массивов осуществляется только поэлементно.
Над массивами символов определены операции сравнения. Сравнение массивов осуществляется как сравнение последовательностей битов (каждый символ заменяется своим кодом). Допустимо сравнивать только массивы одинаковой длины.
Применительно к массивам символов знак +означает конкатенацию (сцепление) массивов. ОператорL:=L1+L2показывает, что массив символовLполучен присоединением справа к массивуL1массиваL2.
При использовании массивов символов контроль над их длиной должен осуществлять программист, для облегчения этого утомительного труда в алгоритмический язык добавляются специальные строковые типы, описывающие последовательности символов переменной длины.