- •Введение
- •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. Выходные данные
<тип> а- упорядоченный массив; ....
Замечание. Упорядочение делается принципиально в том же массиве (in situ, на месте), т.е. входной массив портится.
Чтобы не портить входные данные (это важное программистское правило, которое следует по возможности выполнять), можно использовать другой массив, например, а1, который и будет выходным. Тогда первым шагом обработки будет переписьава1, а вторым - упорядочениеа1. Здесь мы этого делать не будем.
Выходная форма должна включать исходный и упорядоченный массив с соответствующими заголовками и пояснительными текстами.
4. Аномалиине рассматриваем
5. Функциональные тестыследует составить, задав следующие варианты входных данных:
1) частично неупорядоченный массив;
2) массив, упорядоченный в обратном порядке;
3) массив, упорядоченный в требуемом порядке.
6_А. Метод включения
Пусть am- значение максимального элемента,
k- его номер.
Ищем в массиве, начиная с 1-го элемента, максимальный элемент amи его номерk. Меняем значениями 1-й иk-й элементы. Первый элемент поставлен на место.
Ищем в массиве, начиная со 2-го элемента, максимальный элемент amи его номерk. Меняем значениями 2-й иk-й элементы. Второй элемент поставлен на место.
…………………………………………….
Часть массива с 1-го по (m-1)-й элемент упорядочена.
Ищем в массиве, начиная с m-го элемента, максимальный элементamи его номерk. Меняем значениямиm-й иk-й элементы;m-й элемент поставлен на место.
……………………………………………
Часть массива с 1-го по (n-1)-й элемент упорядочена.
Ищем в массиве, начиная с m-го элемента, максимальный элемент amи его номерk. Меняем значениямиm-й иk-й (последний и предпоследний) элементы.
Массив упорядочен.
Замечание. Очевидно, тот же результат получился бы при поиске минимума и перемещении его в конец.
● Опишем метод формально.
Пусть m- номер очередного шага упорядочения (шага поиска максимума).
Дляmот 1 до (n-1) цикл
Вх.: n, a, m
Вых.: [am],
k
Поиск максимального элемента и его
номера, начиная с m-го элемента
А1
Вх.: a, m,
[am], k
Вых.: a
Обмен значениями m-го иk-го
элементов
А2
кц;
Задача А2 - обмен значениями элементов.
Пусть в общем случае необходимо обменять значениями две переменные cиd.
В нашем случае роль переменной cиграетa[m], роль переменнойdиграетa[k]. Значение максимума – переменнаяam– не используется.
Учитывая, что значение amвсе-таки ищется, можно его использовать и обойтись при обмене двумя операциями:
a[m]:=a[k];
a[k]:=am;
Дальнейшее тривиально и уже известно.
6_Б. Метод пузырька
Метод состоит в попарном сравнении всех элементов массива и упорядочении неупорядоченных пар. Массив просматривается до тех пор, пока не окажется полностью упорядоченным, т.е. при очередном просмотре не будет обнаружено неупорядоченных пар.
При первом просмотре максимальный элемент, постепенно перемещаясь, оказывается в начале («всплывает»), при втором – на второе место всплывает следующий по значению элемент и т.д. Отсюда – название метода.
Поясним метод на примере, используя следующие обозначения.
Пример
На данном шаге были неупорядоченные пары.
На данном шаге были неупорядоченные пары.
На данном шаге неупорядоченных пар не было. Массив упорядочен.
Кратко и четко метод может быть описан следующим образом.
Пока есть хотя бы одна пара неупорядоченных соседних элементов, повторять просмотры массива с начала до конца, упорядочивая неупорядоченные пары и фиксируя их наличие.
Пусть
лог у– переменная, фиксирующая наличие неупорядоченных пар;
истина, если массив упорядочен (неупорядоченных пар нет),
у=
ложь, в противном случае (есть хотя бы одна неупорядоченная пара).
Поскольку упорядоченность массива означает отсутствие соседних неупорядоченных пар и наоборот, переменная y по своему смыслу фиксирует одновременно и упорядоченность (или неупорядоченность) всего массива, и отсутствие (или наличие) неупорядоченных пар соседних элементов.
Схема метода
Сначала следует положить y=ложь (массив не упорядочен).
П
Вх.:
n,aвых.:y
Просмотр
массива с упорядочением пар соседних
элементов и фиксацией их наличия
А4
конец повторений
Задача А4
1. Условие. Проверить, есть ли в заданном массиве неупорядоченные пары элементов (формулировка задачи «Поиск по условию»), и упорядочить эти пары .
Другая формулировка задачи А4: проверить, упорядочен ли массив (формулировка задачи «Проверка условия»), и, если нет, упорядочить пары соседних неупорядоченных элементов .
В отличие от задач «Поиск по условию» и «Проверка условия», здесь надо просматривать весь массив.
2. Входные данные
.... n....
.... a[n] .....
3. Выходные данные
.... a[n] - измененный массив, .......
лог у– переменная, фиксирующая наличие неупорядоченных пар;
истина, если массив упорядочен (неупорядоченных пар нет),
у=
ложь, в противном случае (есть хотя бы одна неупорядоченная пара).
Здесь yпринимает значения, соответствующие формулировке задачи «Проверка условия».
6. Метод
Пусть i- текущий номер элемента.
Сначала полагаем y= истина (массив упорядочен).
При просмотре массива будем сравнивать i-й иi+1-й элементы; тогдаiменяется от 1 доn-1,
Итак:
y=истина;
для i от 1 до (n-1) цикл
если <пара a[i] и a[i+1] не упорядочена> то
y:=ложь;
<упорядочить пару: поменять значениями a[i] и a[i+1] >;
кесли;
кц