- •Федеральное агенство по образованию российской федерации
- •1. Основные категории и понятия информатики
- •Предмет информатики как науки
- •1.2. Информация: структура, форма, измерение
- •2. Техническое и программное обеспечение пэвм
- •2.1. Структура аппаратных средств пэвм
- •2.2. Программное обеспечение пэвм
- •3. Основы алгоритмизации
- •Этапы разработки программ
- •3.2.Формы представления алгоритмов
- •Действие 1
- •Действие 2
- •Классификация и примеры алгоритмических структур
- •3.2.1. Алгоритм линейной структуры.
- •3.2.2. Алгоритм разветвляющейся структуры.
- •Да нет да да Рис 3.11
- •3.2.3. Алгоритмы циклической структуры.
- •4.2. Структура программы на языке Паскаль
- •4.3. Скалярные стандартные типы данных
- •4.4. Скалярные, пользовательские типы данных
- •5. Структурные типы данных
- •Массивы
- •5.3. Записи
- •5.4. Записи с вариантами
- •Множества
- •5.6.Файлы
- •6. Операции над данными скалярных типов. Выражения
- •7. Операторы языка Паскаль
- •7.1. Простые операторы
- •7.2. Структурные операторы
- •Оператор 2
- •8. Примеры программ на языке Паскаль
- •8.1. Пример 1. Арифметические выражения. Оператор присваивания
- •Пример 2. Условные операторы
- •Ввод чисел х, а
- •8.3. Пример 3. Программа обработки одномерного массива
- •8.4. Пример 4. Программа обработки двумерного массива
- •True False True False False
- •8.5. Пример 5. Программа обработки символьных строк
- •8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла
- •9.Разработка программ сложной структуры
- •9.1. Процедуры и функции
- •9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные
- •9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
- •9.4. Использование процедур и функций
- •True False Рис. 9.4
- •9.5. Массивы – параметры процедур и функций
- •True False True False Рис. 9.7
- •True False True False True False Рис 9.9
- •9.6. Рекурсивные процедуры и функции
- •True False Рис. 9.10 True False
- •True False Рис. 9.12
- •9.7. Модули
- •10. Динамические структуры данных
- •Основные определения
- •10.2. Объявление и создание динамических структур данных. Указатели
- •Операции над указателями
- •Программа создания и обработки линейного списка
- •Приложение. Контрольные вопросы
- •Литература
True False Рис. 9.12
Блок-схема процедуры findnod.
True False Рис.
9.13
Программа на языке Паскаль, использующая процедуру.
Program Exam7;
Var
A, B, Nod: integer;
procedure findnod (A, B: integer; Var Nod: integer);
Var R: integer;
Begin
If A mod B <>0 do
Begin
R:= A mod B;
A:=B; B:=R;
Findnod(A,B,Nod);
End
Else
Nod:=B;
End;
Begin A:=0; B:=0;
While (A<=0) or (B<=0) do begin
Writeln('Input A,B <>0 :');
Readln(A,B);
End;
findnod(A,B,Nod);
Writeln('Nod(A,B) = ',Nod);
Readln;
End.
Результаты тестирования.
1. Исходные данные:
A=84
B=36
Результат: Nod(A,B)=12
Тестовый пример 2:
A=84
B=56
Результат: Nod(A,B)=28
Результаты, выданные программой.
Тестовый пример1
InputA,B<>0 :
84
36
Nod(A,B) = 12
Тестовый пример 2
InputA,B<>0 :
84
56
Nod(A,B) = 28
Программа на языке Паскаль, использующая функцию.
Program Exam11;
Var
A, B, Nod: integer;
Function findnod (A, B: integer): integer;
Var R: integer;
Begin
R:=1;
While R<>0 do
Begin
R:=A mod B;
A:=B; B:=R;
End;
findnod :=A;
End;
Begin A:=0; B:=0;
While (A<=0) or (B<=0) do begin
Writeln('Input A,B <>0 :');
Readln(A,B);
End;
Nod := findnod(A,B);
Writeln('Nod(A,B) = ',Nod);
Readln;
End.
Результаты тестирования.
Тестовый пример 1
Исходные данные:
A=84
B=36
Результат: Nod(A,B)=12
Тестовый пример 2
Исходные данные:
A=84
B=56
Результат: Nod(A,B)=28
Результаты, выданные программой.
Тестовый пример1
InputA,B<>0 :
84
36
Nod(A,B) = 12
Тестовый пример 2
InputA,B<>0 :
84
56
Nod(A,B) = 28
9.7. Модули
Одним из слабых мест механизма подпрограмм в BorlandPascal7.0 является то, что они встроены в тело программы. Подпрограммы нельзя отдельно компилировать, отлаживать и использовать другими программами. Для того, чтобы можно было подпрограммы отдельно компилировать и вызывать многими программами, необходимо использовать модули.
Модуль представляет собой совокупность различных компонент раздела описаний (констант, типов, переменных, подпрограмм), предназначенную для использования другими модулями и программами. Сам по себе модуль не является выполняемой программой (модуль нельзя запустить на выполнение). Однако он хранится и компилируется отдельно.
Модуль имеет свой заголовок:
Unit<имя модуля>;
и два раздела: интерфейсную часть (interface) и исполняемую часть (implementation).
Общая структура модуля имеет следующий вид:
Unit<имя модуля>;
Interface
<объявления видимых объектов модуля: типов, констант, переменных, заголовков подпрограмм >
implementation
<описания скрытых объектов: процедур и функций>
begin
<операторы инициализации модуля6>
end.
Интерфейсная часть может включать следующие компоненты:
Interface
Uses<список используемых модулей >;
<раздел объявления констант (Const)>
<раздел объявления типов (Type) >
<раздел объявления переменных (Var)>
<раздел заголовков процедур и функций>.
Список используемых модулей содержит имена стандартных модулей, кроме модуля System, такие как Crt, Graph, Overlay, Dos, и имена модулей, созданных пользователем. Имена в списке разделяются запятыми.
В разделе реализации (implementation) содержатся описания процедур и функций, заголовки которых объявлены в интерфейсной части. Кроме того, в исполнительной части могут быть объявлены типы, константы, переменные, которые используются в подпрограммах, но должны быть недоступны пользователю. В конце текста модуля всегда записывает ключевое слово “end” с точкой.
Традиционные правила области действия глобальных и локальных переменных для модулей не выполняются. Языковая конструкция Unit (модуль) была специально включена в систему Borland Pascal для того, чтобы исключить влияние глобальных переменных, объявленных в главной программе, на описания подпрограмм, входящих в модули, которые эта программа использует.
Поэтому, если все-таки возникает необходимость ввести доступные для всех модулей программы описания, то для этого надо создать модуль глобальных описаний, например:
Unit globals;
Interface
Const L=100;
Type Tvector = array[1..L] of integer;
Implementation
End.
В этом случае исполнительная часть implementationявляется пустой.
Рассмотрим пример модуля, содержащего процедуры и функции обработки одномерного массива, тип которого задан в модуле Globals. Этот модуль имеет имяVectorи включает следующие подпрограммы:
function Vect_Max(Vect:TVector; N:byte): byte; - возвращает индекс максимального элемента массива из N элементов;
function Vect_Min(Vect:TVector; N:byte): byte; - возвращает индекс минимального элемента массива;
procedure Print_Vect(Vect:TVector; N:byte); - выдает все элементы массива на экран;
procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte); - меняет местами максимальный и минимальный элементы одномерного массива.
Кроме того, модуль Vector использует модуль глобальных описаний globals.
Текст модуля Vector.
unit Vector;
interface
Uses globals;
function Vect_Max(Vect:TVector; N:byte): byte;
function Vect_Min(Vect:TVector; N:byte): byte;
procedure Print_Vect(Vect:TVector; N:byte);
procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte);
implementation
function Vect_Max(Vect:TVector; N:byte): byte;
Var Max:integer;
im,i: integer;
begin
Max:=Vect[1]; im:=1;
for i:=1 to N do
if Max<Vect[i] then begin
Max:=Vect[i]; im:=i;
end;
Vect_Max:=im;
end;
function Vect_Min(Vect:TVector; N:byte): byte;
Var Min:integer;
im,i: integer;
begin
Min:=Vect[1]; im:=1;
for i:=1 to N do
if Min>Vect[i] then begin
Min:=Vect[i]; im:=i;
end;
Vect_Min:=im;
end;
procedure Print_Vect(Vect:TVector; N:byte);
Var i: integer;
begin
writeln;
for i:=1 to N do write(Vect[i],' ');
end;
procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte);
Var t: integer;
begin
t:=Vect[i1]; Vect[i1]:=Vect[i2]; Vect[i2]:=t;
end;
end.
Процедуры и функции модуля Vector могут использовать любыми программами, которые храняться и компилируются в отдельных файлах. Пример программы Main, использующей этот модуль приведен ниже.
Program Main;
Uses globals,vector;
Var A: TVector;
i,N:byte;
n1,n2:byte;
begin
writeln;
writeln(' Input N<=100');
readln(N);
writeln(' Input array A of N elements :');
for i:=1 to N do read(A[i]);
n1:=Vect_Max(A,N);
n2:=Vect_Min(A,N);
Vect_Inverse(A,n1,n2);
Print_Vect(A,N);
Readln;
end.
Тестовый пример. Результаты, выданные программой Main.
Input N<=100
10
Input array A of N elements :
1 2 3 4 5 64 7 8 9 19
64 2 3 4 5 1 7 8 9 19