Постановка задачи. Определить номер наименьшего по абсолютной величине элемента массива A из n элементов. Ввод массива должен осуществляться из файла, а вывод полученных результатов – в файл. Для передачи имён файлов должны использоваться параметры программы.
Шаг 1. Общая структура программы
Программа на процедурном языке программирования состоит из данных и действий по их обработке.
program Extremum;
{ Описание данных – констант, типов и переменных }
begin
{ Обработка данных }
end.
Шаг 2. Разработка структуры данных
Из постановки задачи следует, что на вход программы подаётся одномерный массив A, а также количество элементов массива n. Тип элементов массива не указан, поэтому возьмём вещественный тип, как более общий случай. Количество элементов, ествественно, должно быть целым.
Из постановки задачи также следует, что надо найти imin – номер наименьшего по абсолютной величине элемента массива. Эта переменая будет целочисленной.
Для задания массива введём константу, ограничивающую максимально возможное количество элементов массива, и тип для массива.
program Extremum;
const
nmax = 10;
type
mas = array [1..nmax] of real;
var
{ Входные данные }
a: mas; { вещ a[1..n] – исходный массив }
n: integer; { цел n – количество элементов массива }
{ Выходные данные }
imin: integer; { цел imin – номер наименьшего по абсолютной величине элемента массива }
begin
{ Обработка данных }
end.
Шаг 3. Разработка тестов
№ теста | Входные данные | Ожидаемые результаты | Смысл теста |
---|---|---|---|
1 |
n = 5 a = {12, 3, -2, 5, 8} |
imin = 3 | Минимальный по модулю элемент находится в середине массива. Минимальный по модулю элемент совпадает с минимальным элементом. |
2 |
n = 5 a = {12, 3, 6, -5, 8} |
imin = 2 | Минимальный по модулю элемент находится в середине массива. Минимальный по модулю элемент не совпадает с минимальным элементом. |
3 |
n = 4 a = {1, -5, 7, 13} |
imin = 1 | Минимальный по модулю элемент – первый в массиве. Минимальный по модулю элемент не совпадает с минимальным элементом. |
4 |
n = 4 a = {-25, -15, -10, -7} |
imin = 4 | Минимальный по модулю элемент – последний в массиве. Минимальный по модулю элемент не совпадает с минимальным элементом. |
Шаг 4. Разработка общей структуры программы
Программа должна состять из трёх основных частей – ввод исходных данных, получение результатов, вывод полученных результатов.
program Extremum;
const
nmax = 10;
type
mas = array [1..nmax] of real;
var
{ Входные данные }
a: mas; { вещ a[1..n] – исходный массив }
n: integer; { цел n – количество элементов массива }
{ Выходные данные }
imin: integer; { цел imin – номер наименьшего по абсолютной величине элемента массива }
begin
{ Ввод исходных данных }
{ Нахождение номера наименьшего по абсолютной величине элемента массива }
{ Вывод результатов }
end.
Шаг 5. Разработка ввода и вывода
Поскольку требуется организовать ввод из файла, входная форма будет достаточно простой, т.к. при вводе из файла не требуется писать приглашения «введите ...».
Однако при вводе из файла необходимо сделать ряд проверок, чтобы повысить надёжность программы. Во-первых, надо проверить, что в программу переданы параметры в требуемом количестве (в данном случае должно быть два параметра – имя входного файла и имя выходного файла). Во-вторых, надо проверить существование входного файла, т.к. в случае его отсутствия также возникнут ошибки времени выполнения (выходной файл создаётся, так что, если он не существует, ничего страшного не произойдёт).
В итоге общая структура программы будет более сложной – собственно ввод, обработка и вывод будут осуществляться только в случае отсутствия ошибок работы с параметрами и файлом.
Для ввода и вывода массива нам потребуется промежуточная переменная i – параметр цикла. Также нам потребуется файловая переменная для работы с файлами. Достаточно одной переменной, т.к. после чтения данных файл будет закрываться, и ту же самую файловую переменную можно использовать для работы с выходным файлом.
В качестве заглушки для обработки данных напишем пока присваивание значения 0 переменной imin.
Входная форма
Выходная форма
program Extremum;
const
nmax = 10;
type
mas = array [1..nmax] of real;
var
{ Входные данные }
a: mas; { вещ a[1..n] – исходный массив }
n: integer; { цел n – количество элементов массива }
{ Выходные данные }
imin: integer; { цел imin – номер наименьшего по абсолютной величине элемента массива }
{ Промежуточные данные }
i: integer; { цел i – параметр цикла }
f: TextFile; { файловая переменная }
begin
if ParamCount < 2 then { Проверяем количество параметров }
writeln('Недостаточно параметров!');
else
begin
if not FileExists(ParamStr(1)) then { Проверяем существование файла }
writeln('Невозможно открыть файл ''', ParamStr(1), ''' для чтения');
else
begin
{ Ввод исходных данных }
AssignFile(f, ParamStr(1)); { Открываем файл }
Reset(f);
readln(f, n);
for i := 1 to n do
read(f, a[i]);
CloseFile(f); { Закрываем файл }
{ Нахождение номера наименьшего по абсолютной величине элемента массива – заглушка }
imin := 0;
{ Вывод результатов }
AssignFile(f, ParamStr(2));
Rewrite(f);
writeln(f, 'Массив A из ', n:2, ' элементов');
for i := 1 to n do
write(f, a[i]:8:2, ' ');
writeln(f); writeln(f);
writeln(f, 'Номер наименьшего по абсолютной величине элемента = ', imin:2);
CloseFile(f);
end;
end;
end.
Шаг 6. Разработка вычислительной части программы
Описание методов нахождения экстремальных элементов массива см. в соответствующем практическом занятии.