- •Введение
- •1. Общие положения
- •1.1. Понятие алгоритма. Данные в задачах и алгоритмах
- •1.2. Понятие о технологии разработки программ. Принципы и этапы разработки программ
- •1.3. Состав документации по отдельным этапам
- •1. Задача
- •9. Структурные тесты
- •1.4. Нисходящая разработка и нисходящая отладка
- •2. Процесс разработки программы на примере решения типовой задачи
- •2.1. Разработка алгоритма и программы уровня 0 с заглушками
- •2. Входные данные
- •3. Выходные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале. Диалоговый вариант
- •9. Структурные тесты
- •2.2. Отладка программы с заглушкой
- •2.3. Общая схема перехода от метода к алгоритму решения
- •2.4. Разработка алгоритма и программы для примера
- •2. Входные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале
- •9. Структурные тесты
- •2.5. Отладка полной программы
- •2.6. Список заданий
- •3. Организация хранения данных с позиций эффективности отладки и использования программы
- •3.1. Как лучше хранить, вводить и выводить данные
- •3.2. Использование текстовых файлов для хранения входных и выходных данных
- •3.3. Использование параметров в Паскаль-программах
- •3.4. Задание
- •4. Некоторые методы решения типовых задач
- •4.1. Поиск экстремальных значений (максимума, минимума) в одномерном массиве
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.2. Поиск элемента, удовлетворяющего заданному условию
- •2. Входные данные
- •6. Метод
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.3. Задача со сложной логикой
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.4. Упорядочение одномерного массива
- •3. Выходные данные
- •6_А. Метод включения
- •6_Б. Метод пузырька
- •4.5. Список заданий
- •5. Работа с двумерными массивами (матрицами)
- •5.1. Схема обработки матриц
- •5.2. Ввод и вывод матрицы
- •5.3. Пример решения задачи
- •3. Выходные данные
- •6. Метод
- •5.4. Список заданий
- •6. Оформление алгоритмов в виде процедур
- •6.1. Основные положения
- •6.2. Кодирование процедур на языке Паскаль
- •6.3. Специфика оформления процедур ввода – вывода
- •6.4. Рекомендации по оформлению процедур
- •6.5. Примеры разработки процедур
- •3. Выходные данные
- •6. Метод
- •3 Истина, если все элементы строки больше 1, ложь, в противном случае . Выходные данные
- •7. Описание процедуры
- •8. Кодирование на паскале
- •9. Структурные тесты
- •2. Входные данные
- •3. Выходные данные
- •4. Аномалии не рассматриваем
- •6. Метод
- •7. Алгоритм
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •7. Описание процедуры
- •8. Кодирование на Паскале
- •6.6. Список заданий
- •7. Внешние модули (unit) в турбо-Паскале
- •7.1. Суть и описание модуля
- •7.2. Связь модуля с другими модулями и главной программой. Область действия описаний объектов
- •7.3. Специфика оформления процедур ввода – вывода в модулях
- •7.4. Примеры оформления процедур во внешних модулях
- •7.5. Задания
- •7.6. Обработка многомодульных программ в среде турбо-Паскаль
- •8. Контрольные вопросы к главе 1
- •К главе 2
- •К главе 3
- •К главе 6
- •К главе 7
- •Заключение
- •Литература
- •Приложение 1. Базовые структуры алгоритмов
- •Приложение 2. Простые типы в Паскале
- •Приложение 3. Структура типов данных в языке Паскаль
- •Содержание
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;
кесли;
кц;