- •Индуктивные функции
- •Общая схема вычисления индуктивных функций
- •Общая формулировка задания
- •Задания
- •Обработка одномерных массивов
- •Сведения о массивах в языке Паскаль
- •Цель, требования и рекомендации к выполнению задания
- •Примеры выполнения задания. Работа с одномерным массивом
- •Задания
- •Простые алгоритмы сортировки одномерных массивов
- •Обработка двухмерных массивов
- •Пример выполнения задания
- •Цель, требования и рекомендации к выполнению задания Цель, требования и рекомендации аналогичны изложеным в 7. 2.
- •Задания
- •Обработка файлов, представляющих упорядоченные множества
- •Общая формулировка задания
- •Цель, требования и рекомендации к выполнению задания
Цель, требования и рекомендации к выполнению задания
Цель выполнения задания: практическое применение массивов для представления информации, способы описания пользовательского типа, изучение способов и организация передачи массивов как параметров процедуры или функции.
Требования и рекомендации к выполнению задания:
организовать представление данных в программе с помощью массивов (одно- и двухмерных векторов и матриц) и определить требуемую размерность;
определить структуру хранения исходных данных и результатов на внешних носителях (в файлах);
обеспечить контроль обращения к элементам массива через индекс, а также корректную реализацию ввода данных из файла и запись результатов в файл;
разработать алгоритм обработки, учитывающий структуру исходных данных;
все преобразования выполнять в исходном массиве, если иное не оговаривается особо;
оформить в виде процедур (функций) фрагменты программы, обеспечивающие ввод с клавиатуры и из файлов и проверку исходной информации, вывод результатов (промежуточных и окончательных) на экран и файл(ы);
при реализации процедур (функций) обязательно обеспечить передачу данных с помощью параметров;
необходимо представить спецификацию реализованных процедур.
Примеры выполнения задания. Работа с одномерным массивом
Пример 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.
