|
||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Пример применения модульного программированияРассмотрим решение следующей задачи. Пусть даны две квадратные матрицы С и Т. Если количество отрицательных элементов в матрице С больше, чем в матрице Т, то вычислить матрицу F=(C*T)T, иначе F=CT*T. Данную задачу можно разбить на следующие подзадачи: ввод матрицы, подсчет количества отрицательных элементов матрицы, транспонирование матрицы, умножение двух матриц, печать матрицы. Решение каждой из них оформим в виде отдельного модуля. Схема иерархии модулей будет иметь вид (рис. 10):
Рис. 10. Схема иерархии модулей задачи Matrix_Work – главная программа. Приведем спецификации для каждого модуля (Табл. 6). Спецификация модулей Таблица 6
Блок-схема главной программы представлена на рис. 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. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.01 сек.) |