- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
6.5. Примеры разработки процедур
● Пример 1. Цель – продемонстрировать процесс оформления процедуры и показать, что при наличии проекта этот процесс – дело техники и не привносит ничего врешениезадачи.
Рассматривается пример решения задачи m.0(§ 5.3, с. 72) с оформлением алгоритма подзадачи в виде процедуры.
Чтобы обеспечить самостоятельность нижеприведенной разработки, в ней воспроизведены все основные элементы задачи, возможно, в более формализованном виде. Опущены элементы, которые должны присутствовать в полной разработке, но не имеют отношения к проектированию процедур, и пояснения.
Уровень 0
1. Задача m.0.Найти в матрице первую строку, все элементы которой больше 1.
2. Входные данные. Ограничения на диапазоны данных там, где они не очевидны, взять произвольно.
цел m- число строк матрицы a; простая переменная; ……..
цел n- число столбцов матрицы а; простая переменная; ……..
вещ a- исходная матрица; двумерный массив; ……….
Входную форму взять из § 5.2.
3. Выходные данные
цел k- номер искомой строки; .........
Сообщения о наличии или отсутствии искомой строки предусмотрим в выходной форме.
Выходную форму взять из § 5.3
4. Аномалиине рассматриваем
5. Функциональные тесты – см. пример после условия задачи в § 5.3. Забегая вперед, отметим, что эти тесты покроют структурные.
6. Метод
Пусть
л
истина, если все элементы строки
удовлетворяют условию,
ложь, в противном случае.
y1=
л
истина, если искомая строка есть,
ложь, в противном случае.
y2=
Пусть i- текущий номер строки.
i:=1;y1:=ложь; {сначала искомая строка не найдена}
Пока (y1=ложь) и (i<=m) {строка не найдена и строки не исчерпаны} цикл
Вх.: m,
n,
a,
i
вых.: y2
provstr(m,n,i,a,y2);
{анализ y2и формированиеy1иk}
если y2= истина, то
y1:= истина;
k:=i;
кесли;
конец цикла
Раскроем подзадачу А1 на следующем уровне в виде процедуры. Абстракция будет заменена вызовом процедуры. Это можно сделать сразу после того, как сформирован заголовок процедуры.
Уровень 1
1. Задача А0.1.Проверить, все ли элементыi-й строки матрицыam×nбольше 1.
2. Входные данные(формальные параметры)
Выберем для формальных параметров те же имена, что для обрабатываемых переменных головного модуля (фактических параметров).
цел m,n,i – ....
вещ a[m,n] – ....
3 Истина, если все элементы строки больше 1, ложь, в противном случае . Выходные данные
y2=
Оформление заголовка и вызова процедуры
Вид- общего вида
Имя-provstr
Заголовок- процprovstr(m,n,i,a,y2);
Вызов -provstr(m,n,i,a,y2); запишем в головной модуль вместо А0.1.
4. Аномалиипока не рассматриваем
5. Функциональные тестыте же, что для задачи в целом
6. Метод– известен
7. Описание процедуры
{А01. Проверка строки}
проц provstr(m,n,i,a,y2);
арг цел m,n,i; вещ a(m,n);
рез лог y2;
нач цел j; { номер столбца - локальная переменная }
y2:=истина; j:=1;
пока y2 & j<=n цикл
если a[i,j]<=1 то
y 2:=ложь;
кесли;
j:=j+1;
кц;
кон;
кон provstr;