Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Билет 5
Концепция модули. Структура описания модуля.
Весьма желательно иметь возможность эффективного использования одной и той же подпрограммы во многих программах без её повторного описания. Это, в частности, совершенно необходимо для стандартных подпрограмм. Турбо Паскаль предоставляет такую возможность за счёт введения модулей как вида программных структур.
Модуль - независимая программная единица, которая может включать в себя компоненты раздела описаний программы (типы, константы, переменные, процедуры и функции, объекты), доступные для использования в любой программе. Таким образом, модуль выступает как оболочка для хранения описаний компонент и их экспорта в программы. Независимость модуля означает, что он может быть откомпилирован автономно от использующей его программы и может храниться отдельно от программ.
Структура описания модуля.
Принятая в Турбо Паскале структура описания модуля выделяет в модуле четыре части: заголовок, интерфейс, исполняемую часть и инициализирующую часть. Общая структура описания модуля имеет следующий вид:
unit < имя модуля >;
interface
< описания компонентов модуля >
[implementation
< реализация тел процедур и функций >]
[begin
< операторы инициализирующей части >]
end.
Заголовок модуля включает ключевое слово unit и имя модуля (желательно, чтобы оно совпадало с именем файла, хранящего текст модуля). Имя модуля служит средством связи модуля с использующей его программой. Такая связь устанавливается специальным описанием, помещаемым в начале раздела описаний программы, в которой используются данные модули: uses < список имён используемых модулей >;
Интерфейс является видимой частью модуля, в которой описаны все представленные в модуле компоненты, предназначенные для экспорта в программы. При этом процедуры и функции описываются только своими заголовками, остальные компоненты описываются точно в такой же форме, как и в разделе описаний программы. Интерфейс является обязательным разделом описания модуля.
Исполняемая часть содержит так называемые тела процедур и функций, заголовки которых описаны в интерфейсной части. Тела имеют обычную форму описаний процедур и функций, либо могут отличаться от таковой только сокращенными заголовками, состоящими лишь из ключевого слова procedure или function и имени процедуры (функции). Исполняемая часть является как бы "невидимой" для пользователя частью модуля. Исполняемая часть отсутствует, если в модуле не описаны процедуры и/или функции.
Инициализирующая часть завершает описание модуля и является необязательной частью модуля. Если она присутствует, то помещается между скобками begin end , если отсутствует - то остаётся только закрывающая модуль скобка end и последующая точка. Назначением инициализирующей части является выполнение начальных действий при подключении модуля к исполняемой программе. Обычно инициализирующие действия подготавливают нормальную работу программы. Например, инициализируют переменные начальными значениями, открывают файлы, устанавливают связь с коммуникационными средствами и др.
В интерфейсной или исполняемой частях можно использовать другие модули, подключаемые описанием uses, которое должно следовать непосредственно за ключевыми словами interface или implementation. В исполняемой части можно также использовать локальные имена, относящиеся к инициализирующей части модуля.
Определить столбец прямоугольной матрицы с максимальной
суммой элементов и, если его номер больше заданного,
сформировать матрицу из стобцов исходной до найденного
столбца, иначе сформировать массив из элементов
заданного столбца.
program Z433_5;
uses Z433_5;
Var A,B:matr;
C:mass1;
S:mass2;
i,j,k,G:integer;
BEGIN
for i := 1 to n do
for j := 1 to m do
readln(A[i,j]);
readln(G);
Sum(A,s);
Maximum(S,k);
if k > G then
Begin
CreateMatr(A,k,B);
for i := 1 to n do
Begin
for j := 1 to k do
write(B[i,j]:5:3,' ');
writeln;
end;
end
else Begin
CreateMass(A,k,C);
for i := 1 to n do
writeln(C[i]:5:3);
end;
readln;
END.
Unit Z433_5;
interface
Const n = 3;
m = 4;
Type matr = array[1..n,1..m] of real;
mass1 = array[1..n] of real;
mass2 = array[1..m] of real;
procedure Sum(A:matr; Var S:mass2); {записывает в массив S суммы элементов столбцов матрицы A}
procedure Maximum(S:mass2; Var k:integer); {k - максимальный элемент массива S}
procedure CreateMatr(A:matr; k:integer; Var B:matr); {формирует матрицу из столбцов исходной до k-го}
procedure CreateMass(A:matr; k:integer; Var C:mass1); {формирует массив из элементов k-го столбца исходной матрицы}
implementation
procedure Sum(A:matr; Var S:mass2);
Var i,j:integer;
Begin
for j := 1 to m do
Begin
S[j] := 0;
for i := 1 to n do
S[j] := S[j] + A[i,j];
end;
end; {Sum}
procedure Maximum(S:mass2; Var k:integer);
Var i:integer;
max:real;
Begin
max := S[1];
k := 1;
for i := 2 to m do
if S[i] > max then
Begin
max := S[i];
k := i;
end;
end; {Maximum}
procedure CreateMatr(A:matr; k:integer; Var B:matr);
Var i,j:integer;
Begin
for i := 1 to n do
for j := 1 to k do
B[i,j] := A[i,j];
end; {CreateMatr}
procedure CreateMass(A:matr; k:integer; Var C:mass1);
Var i:integer;
Begin
for i := 1 to n do
C[i] := A[i,k];
end; {CreateMass}
END.