1. Задача. Напечатать ту из матриц А, В, у которой на главной диагонали нет ни
одного нуля, предварительно разделив все элементы каждой строки на свой диагональный элемент.
2.
{Преобразование матриц}
program Preobr;
Const Nmax = 20;
Type
indA = 1..10; indB = 1..20;
matr = array (1..Nmax, 1..Nmax) of real;
Var na:indA; nb:indB: A, B: matr;
{Выход: n-размер ; X - матрица}
procedure Vvod_matr (var n: indB; var X: matr);
{Вход: n-размер ; X - матрица
Выход: Analiz = true, если есть 0}
function Analiz (n: indB; X: matr) : Boolean;
{Вход: n-размер ; X – матрица
Выход: X }
procedure Change(n: indB; var X: matr);
{Вход: n: indB; X: matr }
procedure Vyvod_matr (n: indB; var X: matr);
Входные данные.
. na nanb nb
Состав: вещ {Aij}i=1 j=1 , {Bij}i=1 j=1
Диапазон: 1 < na < 10, 1 <nb < 20
input fa.txt fb.txt
<na> <nb>
<A>
<B>
3. Выходные данные
<A>
<B>
<Аномалии>
Вариант 1. Только одна из А, В Вариант 2. Возможны обе А и В
<A> 2
<B> 1
<Аномалии>
{ {
4. Аномалии. А и В не удовлетворяют условию.
5. Метод.
1. Если xii ≠ 0 для всех i = 1,…,n, то xij = xij / xii (i, j = 1,...,n)
Эскизный проект (программа)
begin
{Ввод na, A}
Vvod_matr (na, A);
{Ввод nb, B}
Vvod_matr (na, A);
{на диагонали А нет 0}
if not Analiz (na, A) then
begin
{Преобразование А}
Change(na, A);
{Печать А}
Vyvod_matr (na, A)
end
else
{на диагонали B нет 0}
if not Analiz (nb, B) then
begin
{Преобразование B}
Change(nb, B);
{Печать B}
Vyvod_matr (nb, B)
end
else
writeln(‘A, B не удовл. условию’)
end. {Preobr}
Структурная схема программы
(td – граф)
Preobr
Vvod_matr Analiz Change Vyvod_matr
Этапы проектирования
Проектирование выполняется на основе спецификации.
Используемая технология проектирования позволяет записывать проект как структуру будущей программы. Полная программа строится естественно, путем дополнения конструкциями языка Паскаль.
Проект состоит из двух частей – левой и правой. В левой – описания, в правой – алгоритм главной программы.
Основные этапы
1) Разработка интерфейса задачи. Записываем Заголовок программы и Данные, которые берутся из Состава данных Спецификации.
2) Разработка проекта алгоритма. Вначале отделяется ввод – вывод - обработка на основе Выходной формы. Если выбран Вариант1 , то мы можем записать в правой части структуру главной программы. При этом проводим декомпозицию задачи на более простые подзадачи. Эти подзадачи формулируем (как цель задачи) в виде абстракций на естественном (русском) языке. Абстракции записываем в программу в виде комментариев и оставляем пустое место для вызова процедур. Например,
___________________________
│{Преобразование матрицы А}│
│__________________________│
Причем, это применимо как к procedure, так и для function.
3) Разработка интерфейса каждой процедуры (только заголовок и в/в данные). Раскрываем абстракции в виде процедур. Переходя к левой части программы, уточняем входные, выходные данные подзадачи и записываем их в виде комментариев. Даем имя процедуре (отражающий смысл задачи) и записываем заголовок процедуры, включающий данные подзадачи в виде формальных параметров.
4) Запись операторов процедур и указателей функций. В правой части теперь можно записать обращение к процедуре (функции), представленной своим интерфейсом в левой части. При этом вместо формальных параметров подставляем фактические параметры в соответствии с правилами и способами их подстановки.
Мы получили эскизный проект программы, без тела процедур.
Структуру программы можно представить в виде td-графа (top-down графа), (см. выше). Он отражает нисходящий способ разработки программы. Об этом было рассказано в лекции.
5) Разработка тела процедур. Тело процедуры – это блок.