- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
4.2. Поиск элемента, удовлетворяющего заданному условию
● Возможные формулировки задач
Задача «Поиск по условию».Среди заданного множества элементовнайтипервыйэлемент, удовлетворяющий условиюВ1 (обозначим условие в общем виде).
Задача «Проверка условия».Проверить,все лиэлементы заданного множества удовлетворяют условиюB2.
● Анализ формулировок
Сначала покажем, что приведенные постановки после уточнения можно рассматривать как варианты одной задачи.
•• Формулировка первой задачи– наиболее типичная, однако неточная. Во-первых, предполагается ли, что искомого элемента может не быть, и если да, то как это зафиксировать? Во-вторых, что следует найти – значение, номер, то и другое?
Целесообразно рассматривать общий случай; тогда решение будет универсальным. Полная постановка задачи может выглядеть, например, так.
Проверить,есть лисреди заданного множества элементов элемент (хотя бы один),удовлетворяющийусловиюВ1(подразумеваемая часть условия задачи).
Если искомый элемент есть, то найти его значение и номерпервогоудовлетворяющего условиюэлемента (явная часть условия задачи).
Будем считать, что приведенная сначала краткая формулировка подразумевает именно такую трактовку.
Входные данные: совокупность элементов.
Выходные данные:
результат проверки;
з
только в случае положительного результата проверки
начение элемента;его номер.
•• Вформулировке второй задачинеточностей нет. Здесь очевидно, что результат проверки может быть как отрицательным, так и положительным.
Расширим эту постановку следующим образом.
Проверить,все лиэлементы заданного множестваудовлетворяют условиюB2.
Если нет, то найти значение и номерпервогоэлемента,не удовлетворяющего условию.
Входные данные: совокупность элементов.
Выходные данные:
результат проверки;
з
только в случае отрицательного результата проверки
начение элемента;его номер.
По существу это две взаимообратимые формулировки одной и той же задачи, где В2является отрицаниемВ1. Например, проверить, есть ли в множестве хотя бы один отрицательный элемент, и найти его номер (здесь условиеВ1: элемент отрицателен) – то же, что проверить, все ли элементы множества неотрицательны, и найти номер первого отрицательного (В2: элемент неотрицателен ).
Однако на практике целесообразно не сводить задачу к одной из двух формулировок, чтобы не путаться с логическими операциями, включающими отрицание, а решать задачу так, как она поставлена.
● В качестве множества элементов будем рассматривать одномерный массив a[n].
● Ответы "да", "нет" при алгоритмизации наиболее точно отображаются логической переменной. Таким образом, суть решения сводится к поиску значения этой логической переменной как результата проверки.
● В рамках завершенной программы при выводе ответа в выходной форме более естественно использовать обычный язык. Тогда результат проверки приобретет статус промежуточного данного, в зависимости от значения которого выведется положительный или отрицательный ответ на вопрос задачи.
Используем уже привычную простейшую схему нисходящего проектирования (выделение в первую очередь подзадач ввода-вывода входных данных; обработки; вывода результатов). Тогда формирование выходных данных, в том числе упомянутого логического результата проверки, будет отнесено к подзадаче обработки (собственно поиска), а вывод, в том числе текста ответа на вопрос задачи в зависимости от результата проверки, реализуется в подзадаче вывода.
Подзадачи ввода и вывода опустим как не содержащие ничего нового.
● Идея метода решения подзадачи поиска.
Задача «Поиск по условию»
1. Условие. Проверить, есть ли в одномерном массивеa[n] элемент (хотя бы один), удовлетворяющий условиюВ1.
Если есть, то найти значение и номер первого такого элемента.