Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie.doc
Скачиваний:
27
Добавлен:
31.03.2015
Размер:
1.43 Mб
Скачать

3.4. Задание

Выполнить индивидуальную задачу типа «Точки в круге» из § 2.6 в варианте с файлами. Имена входных и выходных файлов задавать как параметры программы.

Целесообразно точно следовать всем приведенным рекомендациям, чтобы не тратить лишнего времени, не делать лишних ошибок, а главное – хорошо освоить работу с файлами и ее отличие от режима ввода-вывода в диалоге.

4. Некоторые методы решения типовых задач

4.1. Поиск экстремальных значений (максимума, минимума) в одномерном массиве

● По структуре данных и алгоритма – это задача того же класса, что и задача «Точки в круге» из гл. 2. Образец полной разработки, приведенный в гл. 2, может быть использован и здесь. Поэтому ниже рассмотрены только специфические особенности задачи.

Чтобы изложение оставалось связным, поступим следующим образом: будем руководствоваться структурой документации, описанной в примере §1.3, так же нумеруя и именуя пункты, но опуская те из них, которые не меняются по сравнению с примером.

1. Задача Extr. Найти номер и значение максимального элемента в одномерном массивеa[n].

Пример, на базе которого затем построим тесты.

Возьмем n=6 и изображенные ниже значения элементов.

Максимальный элемент равен 9, его номер равен 4.

2. Входные данные

цел n- число элементов массива; простая переменная; ...

вещ а- заданный одномерный массив; .....

Диапазоны и т.д., вплоть до формата, определяются аналогично задаче «Точки в круге».

3. Выходные данные

цел kmax- номер максимального элемента; ....

вещ amax- его значение; ....

4. Аномалиине рассматриваем

5. Функциональные тестысоставить самостоятельно. Рассмотреть следующие варианты входных данных:

1) один экстремум в середине массива;

2) более одного экстремума (несколько равных максимумов/минимумов);

3) все равные элементы.

6. Метод

Рассмотрим процесс поиска максимума и его номера на примере, приведенном после условия задачи.

Просматривая поочередно все элементы массива, сравниваем каждый из них с текущим значением максимума (amax).

Если текущий элемент больше amax, то заменяем значениеamaxна значение текущего элемента, а значениеkmax- на его номер.

Сначала возьмем amax=a[1],kmax=1.

Пусть i- текущий индекс элемента. Описание метода приобретает вид:

amax:=a[1];kmax:=1;

повторяем для всех элементов массива (для i от 1 до n):

если a[i]>amax то

amax:=a[i];

kmax:=i;

конец если;

конец повторения;

Алгоритм и программа не содержат ничего нового по сравнению с примером главы 2. На его основе программу для данной задачи можно записать самостоятельно.

● Для поиска минимума знак ">" следует заменить на "<".

● В целочисленном массиве элементы могут совпадать. При поиске номера требуется уточнение: найти номер первого или последнего максимума (минимума).

Например, в массиве a= (1,9,2,3,9,7)amax=9;kmax=2 при поиске первого максимума иkmax=5 при поиске последнего максимума.

При поиска первого максимума (минимума) в условии приведенного алгоритма должен стоять знак строгого неравенства > (<); при поиске последнего – неравенство заменяется на нестрогое: >= (<=).

● Экстраполируем приведенный алгоритм для поиска экстремума cmaxв матрицеc[m,n] и его индексовimax,jmax

Просмотр начинаем с первого элемента (i=1,j=1)! Иначе потеряется целый столбец или строка.

При обработке матрицы по столбцам действия аналогичны.

● Варианты поиска максимального элемента и его номера в одномерном массиве

Массив можно просматривать с начала либо с конца. Порядок просмотра задается начальным и конечным значением индекса и шагом его изменения.

В качестве начального значения максимума можно выбрать первый либо последний элемент.

При просмотре массива текущее значение максимума может изменяться либо если текущий элемент оказался строго больше, либо если он оказался не меньше.

Получим следующие схемы поиска.

•• Поиск номера первого максимального элемента

С начала

С конца

amax:=a[1];kmax:=1;

для i от 1 до nшаг +1 цикл

если a[i] > amax то

amax:=a[i]; kmax:=i;

кесли;

кц;

amax:=a[n]; kmax:=n;

для iотnдо 1 шаг -1 цикл

если a[i] >= amax то

amax:=a[i]; kmax:=i;

кесли;

кц;

•• Поиск номера последнего максимального элемента

С начала

С конца

amax:=a[1];kmax:=1;

для i от 1 до nшаг +1 цикл

если a[i] >= amax то

amax:=a[i]; kmax:=i;

кесли;

кц;

amax:=a[n]; kmax:=n;

для iотnдо 1 шаг -1 цикл

если a[i] >= amax то

amax:=a[i]; kmax:=i;

кесли;

кц;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]