АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Пример применения модульного программирования

Читайте также:
  1. I. Організація та проведення модульного і підсумкового контролю
  2. I. Основы применения программы Excel
  3. X. примерный перечень вопросов к итоговой аттестации
  4. Акты применения права
  5. Акты применения права
  6. Акты применения права, их особенности и виды
  7. Акты применения права, их характерные черты, реквизиты, виды.
  8. Акты применения права: понятие, особенности и виды.
  9. Акты применения права: понятие, признаки, виды
  10. Анализ практического применения технологии «лечение алкоголизма без желания пациента»
  11. Базовые средства программирования
  12. Базовые управляющие структуры структурного программирования

Рассмотрим решение следующей задачи. Пусть даны две квадратные матрицы С и Т. Если количество отрицательных элементов в матрице С больше, чем в матрице Т, то вычислить матрицу F=(C*T)T, иначе F=CT*T.

Данную задачу можно разбить на следующие подзадачи: ввод матрицы, подсчет количества отрицательных элементов матрицы, транспонирование матрицы, умножение двух матриц, печать матрицы. Решение каждой из них оформим в виде отдельного модуля.

Схема иерархии модулей будет иметь вид (рис. 10):

 

 
 

Рис. 10. Схема иерархии модулей задачи

Matrix_Work – главная программа.

Приведем спецификации для каждого модуля (Табл. 6).

Спецификация модулей Таблица 6

Имя Назначение Тип п/п Параметры Тип результата
  Input Ввод квадратной матрицы Процедура 1. А – квадратная матрица 2. m – порядок матрицы -
  Koln Определение количества отрицательных элементов Функция 1. А – квадратная матрица 2. m – порядок матрицы Целый
  Umn Умножение двух матриц Процедура 1. А – первая матрица (вх.) 2. B – вторая матрица (вх.) 3. m – порядок матриц (вх.) 4. r – результат А*В (вых.) -
  Trans Транспонирова-ние матрицы Процедура 1. B-квадратная матрица (вх.) 2. m – порядок матрицы 3. r – результата Bt (вых.) -
  Print Печать матрицы Процедура 1. А – квадратная матрица 2. m – порядок матрицы -

Блок-схема главной программы представлена на рис. 11. Прямоугольник с двойными боковыми стенками обозначает вызов подпрограммы.

Рис. 11. Блок схема главного модуля (программы) Matrix_work

Текст программы представлен ниже.

 

program Matrix_work;

uses crt;

const

n=5; {максимальный порядок матрицы}

type

matrix=array[1..n,1..n] of real;

var

row: integer; {Порядок матриц}

c,t: matrix; {Исходные матрицы}

f: matrix; {Результирующая матрица}

r,tt: matrix; {Рабочие матрицы}

i,j: integer;

kc,kt: integer;

s: string;

{ Описания подпрограмм }

{1. Описание функции koln }

{ Функция определения количества отрицательных элементов в матрице}

function koln(a:matrix; m:integer):integer;

var

i,j,mx: integer;

begin

mx:=0;

for i:=1 to m do

for j:=1 to m do

if a[i][j]<0 then mx:=mx+1;

koln:=mx;

end;

 

{ 2. Описание процедуры умножения матриц umn(a,b,m,r). r=a*b }

procedure umn(a, b:matrix; m:integer; var r:matrix);

var

i,j,k:integer;

z:real;

begin

for i:=1 to m do

for j:=1 to m do

begin

z:=0;

for k:=1 to m do

z:=z+ a[i,k]*b[k,j];

r[i,j]:=z;

end;

end;

 

{ 3. Описание процедуры trans. r=b транспонированная }

procedure trans(b:matrix; m:integer; var r:matrix);

var

i,j:integer;

begin

for i:=1 to m do

for j:=1 to m do

r[i,j]:=b[j,i];

end;

 

{ 4. Описание процедуры input – ввод квадратной матрицы A[m,m] }

procedure input(var a:matrix; m:integer);

var

i,j:integer;

begin

clrscr;

writeln(' ввод матрицы порядка ',m);

writeln(' Ввод каждого элемента завершайте нажатием EnteR');

for i:=1 to m do

begin

gotoxy(1,i+2); write(' row #',i);

for j:=1 to m do

begin

gotoxy(j*6+8,i+2); readln(a[i,j])

end;

end;

end;

 

{ 5. Описание процедуры print. Вывод квадратной матрицы A[m,m] }

procedure print(a:matrix; m:integer);

var

i,j:integer;

begin

for i:=1 to m do

begin

for j:=1 to m do

write(a[i,j]:8:2);

writeln

end;

end;

 

begin

{ главный модуль }

clrscr;

{ввод порядка матриц с контролем}

repeat

write('Read row '); readln(row);

until (row>0)and(row<=n);

writeln(' ввод матрицы С ');

input (c,row);

writeln(' ввод матрицы T ');

input (t,row);

writeln(' Матрица С');

print(C,row);

kc:= koln(c,row);

writeln('count of negative in C ',kc);

writeln(' Матрица T');

print(T,row);

kt:= koln(t,row);

writeln('count of negative in T ',kt);

if kc>kt then

begin

{ Вычисление матрицы F }

umn(c, t,row,r);

trans(r, row,f);

s:='=(c*t) transp';

end else

begin

{ f = c транспонированная, умножена на t }

s:='=C транспонированная, умножена на t ';

trans(c, row,r);

umn(r, t,row,f);

{ Вычисленa матрицa F}

end;

writeln(' Матрица F'+s);

print(f,row);

readln;

end.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)