Скачиваний:
24
Добавлен:
01.05.2014
Размер:
292.38 Кб
Скачать
    1. Цель, требования и рекомендации к выполнению задания

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

Требования и рекомендации к выполнению задания:

  1. организовать представление данных в программе с помощью массивов (одно- и двухмерных векторов и матриц) и определить требуемую размерность;

  2. определить структуру хранения исходных данных и результатов на внешних носителях (в файлах);

  3. обеспечить контроль обращения к элементам массива через индекс, а также корректную реализацию ввода данных из файла и запись результатов в файл;

  4. разработать алгоритм обработки, учитывающий структуру исходных данных;

  5. все преобразования выполнять в исходном массиве, если иное не оговаривается особо;

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

  7. при реализации процедур (функций) обязательно обеспечить передачу данных с помощью параметров;

  8. необходимо представить спецификацию реализованных процедур.

    1. Примеры выполнения задания. Работа с одномерным массивом

Пример 7.1. Найти остаток от деления на 8 всех элементов массива.

Для представления данных двух видов в программе определяются новые типы Arr1 и Arr2. Для однотипной обработки этих данных разрабатывается одна процедура, имеющая открытый параметр-массив.

{ Программа определяет остаток от деления целых чисел на 8 }

program ProgModulo8;

const n=4; m=8;

type Arr1 = array[1..n] of Integer; Arr2 = array[-m..m] of Integer;

var A : Arr1; B : Arr2; i : Integer;

procedure Mod8(var X : array of Integer);

{ модифицируемый параметр (открытый параметр-массив): X }

var j : byte {0..255}; { индексация открытого параметра-массива (с 0) }

begin

for j := 0 to High(X)-1 do X[j] := X[j] mod 8;

end;

begin

for i := 1 to n do Read(A[i]); { Ввод исходных }

for i := -m to m do Read(B[i]); { данных }

Mod8(A); { остаток от деления 4 элементов массива A на 8 }

for i := 1 to n do Write(A[i],' '); WriteLn;

Mod8(B); { остаток от деления 17 элементов массива B на 8 }

for i := -m to m do Write(B[i],' '); WriteLn;

end.

Пример 7.2. Найти в одномерном массиве индекс максимального элемента.

Для единой обработки массивов с однотипными элементами разрабатывается функция, имеющая открытый параметр-массив str. Если A – исходный формальный параметр-массив, то надо найти индекс максимального элемента из A[first..m], т. е. (MAX k: first..m: A[k] ). Индекс последнего фактически используемого элемента этого массива передается в параметре m, который имеет тип index. В функции используется открытый параметр-массив, поэтому в нем индексация элементов начинается с 0 и для описания индексов вводится новый тип index0. Поиск индекса максимального элемента argMax выполняется в str[0..m – first], т.е. str[argMax] = (MAX k: 0..(m – first): str[k]). Поэтому вначале необходим переход от индексации исходного массива (формального параметра) к индексации открытого параметра-массива – для этого вычитаем значение первого индекса first, а в конце при формировании результата поиска ArgMaxInRow происходит возврат к исходной индексации.

{ Фрагмент программы поиска индекса максимального элемента }

const first = 1; nml = 10;

type index = first..nml; Row = array [index] of Real;

var A : Row; { одномерный массив из 10 элементов }

Imax : index; { индекс максимального элемента }

function ArgMaxInRow( m: index; var str: array of Real ): index;

{ Если A - формальный параметр-массив, то требуется }

{ найти ArgMaxInRow - индекс максимального элемента }

{ из A[first..m], т.е. A[ArgMaxInRow] = ( MAX k: first..m : A[k] ); }

{ входные аргументы: m - индекс последнего элемента в A, }

{ str- открытый массив (индексация с 0 ), }

{ результат: значение функции ArgMaxInRow . }

{ В функции поиск argMax - индекса максимального элемента }

{ из str[0..m-first], т.е. str[argMax] = ( MAX k:0..m-first : str[k] ) }

type index0 = 0..nml-first; { новая индексация параметра-массива str }

var argMax, i : index0;

begin

argMax := 0;

for i := 1 to m-first do

{ m-first - новая индексация последнего элемента A в str }

{ inv: str[argMax] = ( MAX k:0..i : str[k] ) }

if str[i] > str[argMax] then argMax := i;

ArgMaxInRow := argMax+first { возврат к исходной индексации }

end;

begin

Imax := ArgMaxInRow( 7; A ); { индекс последнего элемента - 7 }

end.