- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
2. Входные данные
цел n- число элементов массива; простая переменная; ...
<тип> а- заданный одномерный массив; .....
3. Выходные данные
истина, если искомый элемент есть,
ложь, в противном случае.
лог y1– результат проверки;y1=
цел k1– номер искомого элемента; . . .
<тип> ak1– его значение; …
6. Метод
Пусть i- текущий номер элемента.
Используем y1следующим образом: пустьy1сохраняет значение "ложь", пока не найден нужный элемент, и меняет значение на "истина", как только элемент найден.
Тогда до начала поиска следует положить y1=ложь (элемент пока не найден).
Просматриваем элементы, пока они не удовлетворяют условию ине исчерпаны:
если текущий элемент удовлетворяет условию, то
Обработка элемента
- k1:=i;
- ak1:=a(i);
кесли;
конец просмотра.
Задача «Проверка условия»
1. Условие. Проверить, все ли элементы заданного одномерного массиваa[n] удовлетворяют условиюВ2.
Если нет, то найти значение и номер первого элемента, не удовлетворяющего условию.
2. Входные данные
цел n- число элементов массива; простая переменная; ...
<тип> а- заданный одномерный массив; .....
3. Выходные данные
л
истина, если все элементы удовлетворяют
условию,
ложь, в противном случае (хотя бы один
элемент нарушает условие).
y2=
цел k2– номер искомого элемента; . . .
<тип> ak2– его значение; …
6. Метод
Пусть i- текущий номер элемента.
Используем y2следующим образом: пустьy2сохраняет значение "истина", пока все элементы удовлетворяют условию, и меняет значение на "ложь", как только условие нарушается.
Тогда до начала поиска следует положить y2=истина (условие пока не нарушено).
Просматриваем элементы, пока они удовлетворяют условиюине исчерпаны:
если текущий элемент не удовлетворяет условию, то
Обработка элемента
- k2:=i;
- ak2:=a(i);
кесли;
конец просмотра.
● Указания к кодированию
Кодирование цикла-покана Паскале приведено в таблице базовых структур (см. приложение 1).
В Паскале логический тип описывается как boolean, константыистинаиложькакtrueиfalse, отрицание какnot (см. таблицу типов в приложении 2).
В логике вместо y=истиназаписываетсяy, вместоy =ложь –отрицаниеy(¬y, читается «не-y»). При кодировании в Паскале можно использовать обе формы:y=trueто же, чтоy;y=falseто же, чтоnot y.
4.3. Задача со сложной логикой
Предлагаемая задача объединяет в себе несколько важных и поучительных моментов.
Простое объединение поиска максимума с поиском по условию приводит к неожиданному на первый взгляд усложнению логики решения. В итоге (по опыту решения этой задачи студентами) оказывается, что самый простой путь анализа всех возможных ситуации и получения верного решения – тщательная спецификация и нисходящая разработка!
Таким образом, задача проста по условию и структуре данных, но сложна по логике ровно настолько, чтобы быть прекрасным учебным, но полноценным примером нисходящей разработки.
1. ЗадачаCond_2, или "поиск по 2-м условиям".
Найти номер первого максимального значения из всех элементов одномерного целого массива a[n], удовлетворяющих условиюc1и расположенных до первого элемента, удовлетворяющего условиюc2.
Уточнение: элемент, удовлетворяющийс2, по желанию и смыслу задачи можно включать или не включать в рассмотрение.
В данном случае он рассматривается.
Иллюстрация.
Пусть – элементы, удовлетворяющие условию с1, – элементы, удовлетворяющие условиюс2.
Возможные варианты расположения элементов:
Есть элементы, удовлетворяющие обоим
условиям, и есть область поиска.
Схематическое описание ситуаций
№ |
Элемент, удовлетворяющий |
Что делаем
| |
с1 |
с2 | ||
1 |
есть |
есть, как надо |
ищем результат |
2 |
есть |
есть, не как надо |
искать негде |
3 |
есть |
нет |
уточняем, что делать: ищем до конца |
4 |
нет |
есть |
искать негде |
5 |
нет |
нет |
искать негде |