ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.03.2025

Просмотров: 1643

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Московский государственный социальный университет

Часть I

Лекция 1: Введение в программирование.

Лекция 2: Язык Паскаль и системы программирования на Паскале.

Лекции 3-4: Базисные конструкции языка.

Лекции 5-6: Простые операторы и программы с линейной структурой.

Лекция 7: Операторы с условиями.

Лекция 8: Методика разработки простых программ.

Лекция 9: Концепция типа данных.

Лекция 10: Структурный тип - Массив.

Лекция 11: Структурный тип - Строка.

Лекция 15: Структурный тип - Множество.

Лекция 16: Структурный тип - Запись.

Часть II

Лекции 17-19: Модули и их использование.

Interface

Interface

Implementation

Interface

Implementation

Лекция 20: Структурный тип - Файл.

Лекции 21-22: Основные задачи обработки файлов.

Interface

Implementation

Лекция 23: Динамическая память и указатели.

Лекции 24-25: Использование указателей для представления динамически структур данных.

Лекции 26-27: Объекты и объектно-ориентированное программирование.

Interface

Implementation

Оглавление

Часть I 3

Часть II 53

Часть II

В этой части курса рассматриваются более сложные конструкции Паскаля: Модули, Файлы, Указатели и Объекты. Они играют ключевую роль в прикладном программировании и используются почти в любой прикладной программе.

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

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

Около трети данной части курса посвящено весьма важному обобщению понятия типа данных - объектам (классам) и принципам объектно-ориентированного программирования, которые являются определяющими в современном прикладном программировании.

Лекции 17-19: Модули и их использование.

1. Концепция модуля.

2. Структура описания модуля.

3. Разработка модулей.

4. Примеры модулей.

5. Использование модулей в программах.

6. Стандартный модуль СRT.

7. Стандартный модуль GRAPH.

1. Концепция модуля.

Рассмотренный ранее механизм подпрограмм (процедур и функций) действует только внутри одной программы. Поэтому такие процедуры и функции называются внутренними подпрограммами. Ограниченность применения внутренних подпрограмм очевидна. Весьма желательно иметь возможность эффективного использования одной и той же подпрограммы во многих программах без её повторного описания. Это, в частности, совершенно необходимо для стандартных подпрограмм. Турбо Паскаль и предоставляет такую возможность за счёт введения модулей как вида программных структур.

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


Понятие модуля отсутствовало в Паскале и в первоначальных версиях Турбо Паскаля. Оно было введено в связи с потребностями коммерческих приложений Турбо Паскаля. Разработанная для Турбо Паскаля концепция модуля зарекомендовала себя как весьма удачная и плодотворная. Модули представляют удобный инструмент для создания библиотек прикладных программ. Этот инструмент получил также широкие приложения в объектно-ориентированном программировании.

2. Структура описания модуля.

Принятая в Турбо Паскале структура описания модуля выделяет в модуле четыре части: заголовок, интерфейс, исполняемую часть и инициализирующую часть. Общая структура описания модуля имеет следующий вид:

unit < имя модуля >;


Interface

< описания компонентов модуля >

[implementation

< реализация тел процедур и функций >]

[begin

< операторы инициализирующей части >]

end.

Заголовок модуля включает ключевое слово unit и имя модуля (желательно, чтобы оно совпадало с именем файла, хранящего текст модуля). Имя модуля служит средством связи модуля с использующей его программой. Такая связь устанавливается специальным описанием, помещаемым в начале раздела описаний программы, в которой используются данные модули:

uses < список имён используемых модулей >;

Интерфейс является видимой частью модуля, в которой описаны все представленные в модуле компоненты, предназначенные для экспорта в программы. При этом процедуры и функции описываются только своими заголовками, остальные компоненты описываются точно в такой же форме, как и в разделе описаний программы. Интерфейс начинается ключевым словом interface и заканчивается ключевым словом implementation (или begin или end при отсутствии исполняемой части). Интерфейс является обязательным разделом описания модуля.

Исполняемая часть содержит так называемые тела процедур и функций, заголовки которых описаны в интерфейсной части. Тела имеют обычную форму описаний процедур и функций, либо могут отличаться от таковой только сокращенными заголовками, состоящими лишь из ключевого слова procedure или function и имени процедуры (функции). Исполняемая часть является как бы "невидимой" для пользователя частью модуля, поскольку пользователю модуля нет необходимости знать, как реализованы процедуры или функции, которыми он пользуется. Ему достаточно лишь знать, как их вызывать и какую функцию они выполняют. Исполняемая часть отсутствует, если в модуле не описаны процедуры и/или функции.

Инициализирующая часть завершает описание модуля и является необязательной частью модуля. Если она присутствует, то помещается между скобками begin end , если отсутствует - то остаётся только закрывающая модуль скобка end и последующая точка.

Назначением инициализирующей части является выполнение начальных действий при подключении модуля к исполняемой программе. Такие действия составляют некоторый фрагмент программы, выполняемый непосредственно перед передачей управления основной программе (в которой имеется обращение к модулю описанием uses). Обычно инициализирующие действия подготавливают нормальную работу программы. Например, инициализируют переменные начальными значениями, открывают файлы, устанавливают связь с коммуникационными средствами и др.


В интерфейсной или исполняемой частях можно использовать другие модули, подключаемые описанием uses, которое должно следовать непосредственно за ключевыми словами interface или implementation. В исполняемой части можно также использовать локальные имена (типов, констант, переменных и т.д.), относящиеся к инициализирующей части модуля.

3. Разработка модулей.

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

А) Создание текста модуля. Текст модуля подобен тексту программы, поэтому к его разработке применима в целом та же методика, что и для разработки программ с подпрограммами.

Б) Компиляция и отладка модуля. Для использования разработанного модуля (в том числе и для его отладки на программах-примерах) необходимо получить откомпилированный код модуля. Эта операция легко выполняется с помощью интегрированной среды Турбо Паскаля. Результатом компиляции модуля является одноименный с модулем файл с расширением tpu (сокращение от TURBO PASCAL Unit). Этот файл следует поместить в папку, доступную при компиляции.

Отладка модуля обычно предполагает выполнение тестовой программы, в которой имеются, по меньшей мере, обращения ко всем компонентам, описанным в спроектированном модуле. Более качественное тестирование должно следовать соответствующим критериям тестирования.

4. Примеры модулей.

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

Примером простого модуля является модуль points, содержащий некоторые подпрограммы работы с точками на плоскости, константу null - начало координат, а также тип point, представляющий координаты точки. Инициализирующая часть модуля содержит оператор randomize. Тестом этого модуля является программа test_points.

UNIT points;{Точки на плоскости}


Interface

type point = array[1..2] of real;{координаты точки}

const null:point =(0,0);{начало координат}

procedure rpoint(var x:point); {случайная точка}

procedure r(x:point;var d:real);{расстояние точки х от null}

function dist(x,y:point):real;{расстояние между точками x и y}

function line(x,y,z:point):Boolean;{точки x,y,z на одной прямой}

Implementation

procedure rpoint;

begin x[1]:=random(100)/10;x[2]:=random(90)/10 end{rpoint};

procedure r;

begin d:=sqrt(sqr(x[1])+sqr(x[2])) end {r};

function dist;

begin dist:=sqrt(sqr(x[1]-y[1]) + sqr(x[2]-y[2])) end {dist};

function line;

begin line:=false;if (dist(x,y)=dist(x,z)+dist(y,z)) then line:=true;

if (dist(x,z)=dist(x,y)+dist(y,z)) then line:=true;

if (dist(z,y)=dist(x,z)+dist(x,z)) then line:=true;

end {line};

begin randomize;

END {points}.

program test_points; {Тест модуля points}

uses points;

var a,b,c:point;s:string[1];ra,rb,rc:real;

begin repeat writeln('Генерация точек a,b,c:');

rpoint(a);rpoint(b);rpoint(c);

writeln('a[1] a[2] b[1] b[2] c[1] c[2] ');

writeln(a[1]:2:2,' ',a[2]:2:2,' ',b[1]:2:2,' ',b[2]:2:2,' ',c[1]:2:2,' ',c[2]:2:2);

writeln('Расстояния от начала координат:');r(a,ra);r(b,rb);r(c,rc);

writeln('ra=',ra:2:2,' rb=',rb:2:2, ' rc=',rc:2:2);

writeln('Расстояния между точками:');

writeln('dist(a,b)=',dist(a,b):2:2);

writeln('dist(b,c)=',dist(b,c):2:2);

writeln('dist(a,c)=',dist(a,c):2:2);

if line(a,b,c) then

writeln('line(a,b,c)=true {Точки а,в,с -лежат на одной прямой}')

else

writeln('line(a,b,c)=false {Точки а,в,с -не лежат на одной прямой}');

a:=b; writeln('a:=b; dist(a,b)=',dist(a,b):2:2);

if line(a,b,c) then writeln(' line(a,b,c)=true');readln(s);

until s=' ';

end {test_points}.

Представленный ниже модуль convert содержит два компонента: тип - массив из 5 строк и процедуру преобразования целого числа в название числа. Для тестирования этого модуля использована программа demo_conv_int, позволяющая в цикле вводить исходные числа и выводить их названия на экран.

UNIT convert; {Преобразование целого числа в строку - название числа}

Interface

type array_s =array[1..5] of string;