- •Введение
- •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. Метод
Чтение числа и значений элементов массива согласно их размещению во входной форме.
7. Описание процедурысделаем сразу на Паскале.
8. Кодирование на паскале
Определение глобальных типов(интерфейс для параметров нестандартных типов)
По описанию входов и выходов подзадач выберем:
n:byte(стандартный тип),
s:real(стандартный тип),
элементы матрицы – real(стандартный тип).
Параметром нестандартного типа является только массив. При этом все три фактических параметра – массива должны принадлежать этому типу. Поэтому в качестве границы массива в описании типа необходимо взять значение максимальной из трех фактических границ.
Тогда глобальные объекты:
const
nmax=20;
type
massiv=array[1..nmax] of real;
Описание процедуры и вызовы. Реализуем варианты 1 и 2 из табл. 6.1
•• Описание
Вариант 1. Файловая переменная открытого файла передается как глобальная
procedure input(var n:byte; var mas:massiv);
var
i:byte;
begin
readln(dat,n);
for i:=1 to n do
readln(dat,mas[i]);
end;
Вариант 2. файловая переменная открытого файла передается как параметр
procedure input(var n:byte; var mas:massiv; var dat1:text);
var
i:byte;
begin
readln(dat1,n);
for i:=1 to n do
readln(dat1,mas[i]);
end;
•• Вызовы
-
Подзадача
n
mas
Вариант 1
Вариант 2
A0.3.1
na
a
input(na,a);
input(na,a,dat);
A0.3.2
nb
b
input(nb,b);
input(nb,b,dat);
A0.3.3
nc
c
input(nc,c);
input(nc,c,dat);
Задача A0.2
1. Задача A0.2. Вывести в файл, представленный вторым параметром программы, число элементов и значения элементов одномерного массива согласно выходной форме.
Уточнение. Число элементов выводится по образцам 2,4,6. Тексты этих образцов различаются наличием в них разных символов – имен массивов. Формально это три разных текстовых константы.
Чтобы одна процедура могла реализовать эти три образца, надо организовать передачу в процедуру имени массива. Для процедуры это будет входной параметр, но связанный не с решением задачи, а с организацией вывода, т.е. служебный параметр.
2. Входные данные
цел n– число элементов массива; во внутреннем представлении;
вещ mas[n] – исходный массив; во внутреннем представлении;
симв name_mas– имя выводимого массива (служебный параметр).
3. Выходные данные
Отсутствуют (во внешнем представлении согласно выходной форме).
Оформление заголовка и вызова процедуры
Анализ специфики вывода и технических аспектов
Процедура вызывается трижды. При втором и третьем вызовах данные должны выводиться с позиции, где закончилось предшествующий вывод.
При открытии операцией rewriteфайл очищается; следовательно, если поместить операции открытия внутри файла, то каждый последующий вызов будет уничтожать результаты предыдущего.
Можно в программе создать файл, выведя в него заголовок, и закрыть его. Тогда процедура может открывать его для добавления в конец – операцией append. Для вывода результатов (уже вне процедуры) снова придется открывать файл операциейappend. Все это усложнит программу. Для программы с внутренними процедурами представляется разумным отдать предпочтение решению с лучшей структурой и более наглядному – как при вводе.
Откроем файл вне процедуры. Тогда, как и в случае ввода, для процедуры файловая переменная открытого файла будет представлять служебное входное данноеи может передаваться либо как глобальная, либо как параметр. Это варианты 1 и 2 таблицы 6.1 (см. § 6 .3, с. 84).
При передаче через список параметров файловая переменная здесь также должна описываться как var.
Назначение файла предшествует открытию, т.е. делается тоже вне процедуры.
Реализуем оба варианта.
Вид– общего вида
Имя–output
Заголовок– процoutput(n,mas);
Вызов – осуществляется трижды, для каждого из массивов.
Соответствие формальных и фактических параметров и вызовы:
-
Подзадача
n
mas
A0.3.1
na
a
A0.3.2
nb
b
A0.3.3
nc
c
Вызовы запишем в головной модуль после кодирования процедур.
4. Аномалиине рассматриваем
5. Функциональные тестыте же, что для задачи в целом