- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
7.4. Примеры оформления процедур во внешних модулях
Пример 1.В варианте решения задачиm.0с процедурой (§ 6.5, пример 1, с. 89) перенесем процедуру в отдельный модульm0_unt.
Внешний модуль (файлm0_unt. pas)
unit m0_unt;
Interface
const
nmax=100; mmax=100;
type
diap=1..nmax; { для m,n,i }
matr=array[1..mmax,1..nmax] of real;
procedure provstr(m,n,i: diap; var a:matr;var y2:boolean);
Implementation
procedure provstr(m,n,i: diap; var a:matr;var y2:boolean);
var j:diap;
begin
< операторы >
end;
end.
Вызывающая программа
program ..... ;
uses m0_unt;
{описание глобальных типов и констант размещено во внешнем модуле} var
{описания переменных головного модуля}
m,n,i,j,k:diap; {описание типа доступно из модуля}
a:matr; {описание типа доступно из модуля}
y1,y2:boolean;
< описание процедуры >
begin
< ввод и вывод данных >
y1:=false; i:=1;
while not y1 and (i<=m) do
begin
{А01. Проверка строки}
provstr(m,n,i,a,y2); {описание процедуры доступно из модуля}
if y2 then
begin
y1:=true; k:=i
end;
i:=i+1;
end;
< вывод результата >
end.
Пример 2. В задаче mas_3 все процедуры разместим в модуле proc.pas.
● Вариант с передачей файловой переменной открытого файла как параметра процедуры реализуется простым переносом глобальных типов и процедур в модуль.
Внешний модуль
unit proc;
Interface
{описание глобальных типов и констант }
const
nmax=20;
type
massiv=array[1..nmax] of real;
{заголовки процедур}
procedure input(var n:byte; var mas:massiv; var dat1:text);
procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);
procedure summa(n:byte;mas:massiv;var s:real);
Implementation
procedure input(var n:byte; var mas:massiv; var dat1:text);
…….
begin
…….
end;
procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);
…….
begin
…….
end;
procedure summa(n:byte;mas:massiv;var s:real)
…….
begin
…….
end;
end.
Вызывающая программа
programmas3 (dat,res);
uses proc;
{описание глобальных типов и констант размещено во внешнем модуле} var
{описания переменных головного модуля}
na,nb,nc:byte;
a,b,c:massiv; {все массивы одного типа, доступного из модуля}
sa,sb,sc:real;
name:char;
dat,res:text; {файловые переменные для входного и выходного файлов} {описание процедур размещено во внешнем модуле }
begin
assign (dat, paramstr(1)); reset(dat);
assign (res,paramstr(2)); rewrite(res);
writeln (res, ' <Заголовок по обр1>');
{ввод и вывод массивов}
input(na,a,dat); {ввод массива a}
output (na, a,'a', res); { вывод массива a по обр 2, 3}
input(nb,b,dat); { ввод массива b}
output (nb, b,'b', res); { вывод массива b по обр 4, 5}
input(nc,c,dat); { ввод массива c}
output (nc, c,'c',res); {вывод массива c по обр 6, 7}
{подсчет сумм элементов }
summa(10,a,sa); {обработка.10 элементов массива a из 20 элементов}
summa(20,b,sb); {обработка.20 элементов массива b из 20 элементов}
summa(15,c,sc); {обработка.15 элементов массива c из 20 элементов}
< вывод sa,sb,sc по обр 8>
< сравнение sa,sb,sc и формирование name >
< вывод name по обр 9>
close(dat); close(res);
end.
● Вариант с локализацией файловой переменной и всех операций с файлом в процедуре
Каждый массив разместим в своем файле. Имена этих файлов будем задавать как параметры программы: 1-й параметр – файл с массивом а, 2-й – с массивомb, 3-й – с массивомс.
В процедуру ввода будем передавать как параметр имя входного файла. Назовем этот параметр name_inp.
Имя выходного файла зададим как 4-й параметр программы.
В процедуру вывода будем передавать как параметр имя выходного файла. Назовем этот параметр name_out.
Тогда последовательность обработки, касающейся работы с файлами, такова:
открытие и запись заголовка в выходной файл; закрытие его;
для каждого массива вызов процедур чтения из отдельного массива и записи в общий результирующий массив путем добавления в конец;
открытие результирующего массива и добавление в конец результатов.
Остальное явствует из текста программы.
Внешний модуль
unit proc;
Interface
{описание глобальных типов и констант }
const
nmax=20;
type
massiv=array[1..nmax] of real;
{заголовки процедур}
procedure input(var n:byte; var mas:massiv; name_inp:string);
procedure output(n:byte; var mas:massiv; name_mas:char; name_out:string);
procedure summa(n:byte;mas:massiv;var s:real);
Implementation
procedure input(var n:byte; var mas:massiv; name_inp:string);
var
dat: text; {локальная файловая переменная}
begin
assign (dat, name_inp);
reset (dat);
< ввод числа и значений элементов согласно входной форме>
close (dat);
end;
procedure output(n:byte; var mas:massiv; name_mas:char; name_out:string);
var
res: text; {локальная файловая переменная}
begin
assign (res, name_out);
append (res); {открытие текстового файла для добавления в конец}
< вывод числа и значений элементов согласно выходной форме >
close (res);
end;
procedure summa(n:byte;mas:massiv;var s:real);
var
i:byte;
begin
< операторы подсчета s >
end;
end.
Вызывающая программа
programmas3 (.....);
uses proc;
var
na,nb,nc:byte;
a,b,c:massiv;
sa,sb,sc:real;
name:char;
res:text; {локализованная в головном модуле файловая переменная для выходного файла}
name_res: string; {локализованная в головном модуле строка - имя выходного файла}
in_a,in_b,in_c:string; { локализованные в головном модуле строки - имена входных файлов}
begin
{инициация выходного файла и вывод в него заголовочного текста}
name_res:= paramstr(4); {чтобы не обращаться многократно к paramstr}
assign (res, name_res); rewrite(res);
writeln (res, ‘ <Заголовок по обр1 >’);
close (res); {закрытие выходного файла, так как процедура вывода предусматривает
открытие}
{ввод и вывод массивов}
in_a:= paramstr(1);
input (na, a,in_a); {ввод массива из соответствующего входного файла}
output (na, a,’a’, name_res); {вывод массива в конец постепенно формируемого выходного файла}
in_b:= paramstr(2);
input (nb, b, in_b); {ввод массива из соответствующего входного файла}
output (nb, b, ‘b’,name_res); {вывод массива в конец выходного файла}
in_c:= paramstr(3);
input (nc, c,in_c); {ввод массива из соответствующего входного файла}
output (nc, c, ‘c’,name_res); {вывод массива в конец выходного файла}
{подсчет нужных сумм: обращения к процедуре summa }
summa(na,a,sa);
summa(nb,b,sb);
summa(nc,a,sa);
< сравнение sa,sb,sc и формирование name >
{открытие выходного файла для добавления в конец и вывод в него результатов}
append(res);
< вывод результатов в файл>
close(res);
end.