Сделай Сам Свою Работу на 5

Программа на Delphi (с процедурами-заглушками, кроме процедур ввода и вывода).





Национальный исследовательский университет «МЭИ»

Типовой расчет «Процедуры, функции, модули»

Вариант 22

Задание выполнил: Тимофеев Сергей Эдуардович

Студент группы A-08-12

Проверил: ____________________________

Оценка:______________________________

Замечания:______________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

________________________________________________________

 

Москва 2012 НИУ «МЭИ»

Абстракция A0.

1.Условие.

Кроме матрицы А дана матрица В такого же размера. Если каждый элемент матрицы А больше соответствующего элемента матрицы В, присвоить элементам С[1], C[2],…, C[n] значения по правилу

 

2.Уточненная постановка задачи.

Даны две вещественные квадратные матрицы A и В одинакового размера (n строк и n столбцов). Если элементы матрицы А больше соответствествующих элементов матрицы В (f=true), создать и вывести вещественную матрису С размером n на 1, где С[i]это сумма i-ыхстрок матриц А и В. В противном случае, вывести сообщение о том, что элементы матрицы А не больше соответствующих элементов матрицы В.



 

Примеры.

Пример 1. Все элементы матрицы А больше соответствующих элементов матрицы В.

n=3

 

A = B =

 

Создаем и выводим массив С:

 

С =

 

Пример 2. Есть элементы матрицы А, не большие соответствующих элементов В.

m=3

n=3

 

A = B =

 

Выводим сообщение:

«Элементы матрицы А не больше соответствующих элементов матрицы В»

 

Таблица данных

Класс Имя Описание (смысл), диапазон, точность Тип Структура Формат
  Входные данные m Число строк в матрицах 0<m<=10 цел простая переменная XX (:2)
n Число столбцов в матрицах 0 <n<= 10 цел простая переменная X X(:2)
А Первая матрица, |Aij |<=1000 Точн. 0.1 вещ двумерный массив +ХХХХ.Х(:8:1)
В Вторая матрица, |Вij |<=1000 Точн. 0.1 вещ двумерный массив +ХХХХ.Х(:8:1)
  Выходные данные С Созданная матрица, |Сij|<20000 Точн. 0.1 вещ одномерный массив +ХXXX.Х (:8:1)
Промежу-точные данные dat Файл с исходными данными с именем вида dat#.txt Текст. файл ---
res Файл с отчетом с именем вида res#.txt Текст. файл ---
ii Строка с некорр. A[ii,jj], 0<ii>=10 цел простая переменная XX (:2)
jj Столбец с некорр. A[ii,jj], 0<jj>=10 цел простая переменная XX (:2)
f =True, если все эл-ты А больше соответствующих эл-в В. В противном случае =False лог простая переменная ---
flagA = True, если есть некорректные Aij, в противном случае False лог простая переменная ---
flagB = True, если есть некорректные Bij, в противном случае False лог простая переменная ---

 



5.Входная форма. (Файлы dat<№ теста>.txt)

Обр1
Обр2.1
Обр2.2
<m> <n> <A[1,1]> <A[1,2]> . . . <A[1,n]> <A[2,1]> <A[2,2]> . . . <A[2,n]> . . . . . . . . . . . . . . . . <A[m,1]> <A[m,2]> . . . <A[m,n]>   <B[1,1]> <B[1,2]> . . . <B[1,n]> <B[2,1]> <B[2,2]> . . . <B[2,n]> . . . . . . . . . . . . . . . . <B[m,1]> <B[m,2]> . . . <B[m,n]>  

 


 

 

6.Выходная форма (Файлы res<№ теста>.txt)

 

Размер матриц A и B: <m> <n>   Матрица А: <A[1,1]> < A [1,2]> . . . < A [1,n]> < A [2,1]> < A [2,2]> . . . < A [2,n]> . . . . . . . . . . . . . . . . < A [m,1]> < A [m,2]> . . . < A [m,n]>   Матрица В: <B[1,1]> < B [1,2]> . . . < B [1,n]> < B [2,1]> < B [2,2]> . . . < B [2,n]> . . . . . . . . . . . . . . . . < B [m,1]> < B [m,2]> . . . < B [m,n]>   Матрица С: <C[1]> <C[2]> . . . . . . . . . . . . . . . . <C[m]>   Некорректный размер матриц. Задача не решалась     Некорректный элемент матрицы А A[<ii>, <jj>] = <A[ii,jj]> Задача не решалась   Некорректный элемент матрицы В B[<ii>, <jj>] = <B[ii,jj]> Задача не решалась   Элементы матрицы А не больше соответствующих элементов матрицы В  
Обр10
Обр3
Обр4.1
Обр4.2
Обр5.1
Обр5.2
Обр6.1
Обр6.2
Обр7
Обр8
Обр9



 

 


Имена входного и выходного файлов передаются как параметры программы:

Первый – имя файла с исходными данными

Второй – имя файла для вывода исходных данных и результатов

 

 

Аномалии

Описание Условие возникновения Реакция
Некорректный размер матриц (m<1) or (m>10) or (n<1) or (n>10) Обр 7
Есть некорректный элемент в матрицах $ii$jj (|A[ii,jj]|>1000) or (|B[ii,jj]|>1000) Обр 8, либо Обр 9

Функциональные тесты

№ теста Входные данные Ожидаемый результат Смысл теста
m=20 n=3   Обр 7 Аномальная ситуация 1 (m>10)
m=4 n= -1   Обр 7 Аномальная ситуация 1 (n<1)
m= -3 n=11   Обр 7 Аномальная ситуация 1 (m<1,n>10)
m=2 n=3   A =   B =   Обр 8 Аномальная ситуация 2 (A13>1000)
  m=2 n=2   A =   B =   Обр 9 Аномальная ситуация 2 (В11< -1000)
  m=2 n=2   A =   B =   Обр 8 Обр 9 Аномальная ситуация 2 (А21< -1000, В12>1000)
  m=1 n=1   A =   B =   Матрица С: 8.0 Матрицы состоят из одного элемента.
  m=3 n=2   A =   B =   Матрица С: 4.6 -15.0 5.0     Случай, когда все элементы А больше соответствующих элементов В  
m=3 n=3   A =   B = Обр 10 Случай, когда есть элементы А не большие соответствующих элементов В
m=10 n=10   A =   B =   Матрица С:   19999.0 -19999.0 19999.0 -19999.0 19999.0 -19999.0 19999.0 -19999.0 19999.0 -19999.0     Максимальная нагрузка. (Максимальные m,n максимальные и минимальные значения матрицы С)  

 

Метод

Отделим ввод-вывод от обработки данных (собственно решения задачи).

То есть, разделим нашу задачу на десять подзадач:

1. Подзадача А0.1. Ввести из файла (обр.1) и проверить размер матрицы (обр.7)

2. Подзадача А0.2.1 Ввести матрицу А из файла (обр.2.1).

3. Подзадача А0.2.2. Ввести матрицу В из файла (обр.2.2).

4. Подзадача А0.3.1. Вывести матрицу А (обр. 4.2)

5. Подзадача А0.3.2. Вывести матрицу В (обр.5.2)

6. Подзадача А0.4.1. Проверить значения элементов матрицы А (обр.8)

7. Подзадача А0.4.2. Проверить значения элементов матрицы В (обр.9)

8. Подзадача А0.5. Проверить, все ли эл-ты А больше соответстветствующих эл-ов В.

9. Подзадача А0.6. Создать матрицу С.

10. Подзадача А0.7. Вывести матрицу С (обр.6.2).

 

 

Сейчас, на нулевом уровне, опишем ввод-вывод простых переменных и массивов (А0.1, A0.2.1, A0.2.2, A.0.3.1, A.0.3.2, A.0.7) и логику решения задачи вцелом. Остальные четыре задачи оставим в виде абстракций.

Все подзадачи кроме первой выполним в виде процедур, расположенных в отдельном модуле.

 

Алгоритм

Ввод/Вывод n,m
(n<1)Ú(n>10)Ú(m<1)Ú(m>10)
 
Ввод матрицы А из файла VvodMas(dat,m,n,A)  
А0.2.1
Вх.m, n
Вых. A
Ввод матрицы В из файла VvodMas(dat,m,n,В)
А0.2.2
Вх. m,n
Вых. B
Проверка элементов матрицы А ProvMas(A,m,n,flagA,ii,jj)
А0.4.1
Вх. m,n,A
Вых. flagA,ii,jj
Вывод матрицы А VivodMas(res,m,n,A,'A')
А0.3.1
Вх. m,n,A
Вых. --
Вывод матрицы В VivodMas(res,m,n,В,'В')
А0.3.2
Вх. m,n,B
Вых. --
Сравнение элементов А и В Sravnenie(m,n,A,B,f)
А0.5
Вх. m,n,A,B
Вых. f
начало
F
Создание матрицы С SozdanieC(m,n,A,B,C)
А0.6
Вх. m,m,A,B
Вых. C
Вывод матрицы С VivodC(res,m,C)
А0.7
Вх. m,C
Вых. --
конец
Вывод по обр.7
Вывод по обр.8
Вывод по обр.10
+
+
+
Проверка элементов матрицы В ProvMas(В,m,n,flagВ,ii,jj)
А0.4.2
Вх. m,n,B
Вых. flagB,ii,jj
А0
А0.1
FlagАÚFlagB
Вывод по обр.9
FlagА
FlagB
+
+

 

Программа на Delphi (с процедурами-заглушками, кроме процедур ввода и вывода).

Имена входного и выходного файлов передаются как параметры программы:

Первый – имя файла с исходными данными

Второй – имя файла для вывода исходных данных и результатов

 

*********************Файл основной программы Project2.dpr**************************

program Project2;

{$APPTYPE CONSOLE}

uses Unit1; {там все константы, типы, процедуры и функции}

var {раздел описания переменных -----------------------------------------------------------------}

A,B:mas;

C:mas2;

dat,res:TextFile;

m,n,ii,jj:byte;

f,flagA,flagB:boolean;

begin {раздел операторов -----------------------------------------------------------------}

AssignFile(dat,paramstr(1));reset(dat);

AssignFile(res,paramstr(2));rewrite(res);

{ввод m,n --------------------------------------------------------------------------------------------}

readln(dat,m,n);

writeln(res,'Размер матриц A и B: ',m,'x',n); {Обр.3}

if (m<1) or (m>mnmax) or (n<1) or (n>mnmax) then

Begin

writeln(res,'Некорректный размер матриц.'#13#10,'Задача не решалась'); {Обр.7}

CloseFile(dat);

CloseFile(res);

Halt;

end;

{ввод и вывод матриц A и B --------------------------------------------------------------------}

VvodMas(dat,m,n,A);

VvodMas(dat,m,n,B);

closeFile(dat);

VivodMas(res,m,n,A,'A');

VivodMas(res,m,n,B,'B');

{ Проверка элементов матриц------------------------------------------------------------------- }

ProvMas(A,m,n,flagA,ii,jj);

ProvMas(B,m,n,FlagB,ii,jj);

If flagA or flagB then

Begin

If flagA then

Begin

Writeln(res,'Некорректный элемент матрицы A'); {Обр.8}

Writeln(res,'A[', ii , ',' , jj , '] = ' , A[ii,jj]:8:1);

Writeln(res,'Задача не решалась');

end;

If flagB then

Begin

Writeln(res,'Некорректный элемент матрицы B'); {Обр.9}

Writeln(res,'B[', ii , ',' , jj , '] = ' , B[ii,jj]:8:1);

Writeln(res,'Задача не решалась');

end;

closeFile(res);

Halt;

end;

Sravnenie(m,n,A,B,f); { Проверка, все ли эл-ты А больше соответстветствующих эл-ов В }

If not(f) then

writeln(res,'Элементы матрицы А не больше соответствующих элементов матрицы В') {Обр.10}

Else

Begin

{Создание и вывод матрицы С-----------------------------------------------------------------}

SozdanieC(m,n,A,B,C);

VivodC(res,m,C); {Обр.6.2}

end;

closeFile(res);

End.

 

****************Модуль Unit1.pas со всеми процедурами и функциями**********************

 

unit Unit1;

 

interface

const mnmax=10;

type

mas=array[1..mnmax,1..mnmax] of real;

mas2=array[1..mnmax]of real;

{Ввод матрицы из файла. Файл уже открыт}

procedure VvodMas(var dat:TextFile; const m,n:byte; out X:mas);

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
dat dat TextFile
m m byte
n n byte
X A(B) mas

 

{Проверка элементов матрицы}

procedure ProvMas(var X:mas; const m,n:byte; out flag:boolean; out ii,jj:byte);

 

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
Х А(В) mas
m m byte
n n byte
flag flagA(flagB) boolean
ii ii byte
jj jj byte

 

{Вывод матрицы}

procedure VivodMas(var res:TextFile; const m,n:byte; var X:mas; const ch:char);

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
res res TextFile
m m byte
n n byte
X A(B) mas
ch ‘A’(‘B’) char

 

{ Проверка, все ли эл-ты А больше соответстветствующих эл-ов В }

procedure Sravnenie(const m,n:byte; const X,Y:mas; out f:boolean);

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
m m byte
n n byte
Х A mas
Y B mas
f f boolean

 

{Создание матрицы С}

procedure SozdanieC(const m,n:byte; var X,Y:mas; out C:mas2);

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
m m byte
n n byte
Х A mas
Y B mas
C C mas2

 

{Вывод матрицы С}

procedure VivodC(var res:TextFile; const m:byte; var C:mas2);

Таблица соответствия параметров

Формальные параметры Фактические параметры Тип
res res TextFile
m m byte
C C mas2

 

 

implementation

 

procedure VvodMas;

var i,j:byte;

begin

for i:=1 to m do

begin

for j:=1 to n do read(dat,X[i,j]);

readln(dat);

end;

end;

 

procedure ProvMas;

Var i, j: byte;

{описания других локальных переменных}

Begin

{Заглушка} writeln(’ Заглушка – Проверка элементов матрицы’);

{В скобках указаны результаты для матрицы В}

{тест 4} // flagA:=true;(flagB:=false;) ii:=1; jj:=3;

{тест 5} // flagA:=false;(flagB:=true;)( ii:=1; jj:=1;)

{тест 6} // flagA:=true;(flagB:=true;) ii:=2; jj:=1;(ii:=1; jj:=2)

{остальные тесты} //flagA:=false; (flagB:=false;)

End;

 

procedure VivodMas;

var i,j:byte;

begin

writeln(res,'Матрица ',ch,':');

for i:=1 to m do

begin

for j :=1 to n do

write(res,X[i,j]:8:1);

writeln(res);

end;

end;

 

procedure Sravnenie;

Var i, j: byte;

{описания других локальных переменных}

Begin

{Заглушка} writeln(’ Заглушка – Проверка условия, что все элементы А больше соответствующих В’);

{тест 7} // f:=true;

{тест 8} // f:=true;

{тест 9} // f:=false;

{тест 10} //f:=true;

End;

 

procedure SozdanieC;

Var i, j: byte;

{описания других локальных переменных}

Begin

{Заглушка} writeln(’ Заглушка – Создание матрицы С’);

{тест 7} // C[1]=8.0;

{тест 8} // C[1]:=4.6; C[2]:= -15.0; C[3]:=5.0;

{тест 10} //C[1]:=19999.0; C[2]:= -19999.0 … C[9]:=19999.0; C[10]:= -19999.0;

End;

 

 

procedure VivodC;

var i:byte;

begin

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

for i:=1 to m do writeln(res,C[i]:8:1);

end;

 

end.

 

 

Абстракция А0.4

1.Условие. Проверить, есть ли в матрице элементы, абсолютная величина которых больше 1000

2.Уточненная постановка задачи.

Дана вещественная матрица X из m строк и n столбцов. Проверить (flag), есть ли в матрицы элементы, абсолютная величина которых больше 1000. Если есть, то присвоить flag значение True и найти номер строки (ii) и столбца (jj) первого такого элемента, иначе присвоить flag значение False.

3.Примеры. (В скобках результаты для матрицы В)

Тест 4 есть некорректный элемент X[1,3]=1001, flag=True (f=false)

Тест 5 есть некорректный элемент flag=false; (X[1,1]= -2000, flag=True)

Тест 6 есть некорректный элемент X[2,1]= -1050, flag=true, (X[1,2]= 2000, flag= True)

Таблица данных

Класс Имя Описание (смысл), диапазон, точность Тип Структура
  Входные данные X Заданная матрица, |Xij|<=5000 Точн. 0.1 вещ Двухмерный массив (10х10)
m число строк в матрице A, 1£m£10 цел простая переменная
n число столбцов в матрице A,1£n£10 цел простая переменная
  Выходные данные ii Строка с некорр. X[ii,jj], 1£ii£10 цел простая перем
jj Столбец с некорр. X[ii,jj], 1£jj£10 цел простая перем
flag = True, если есть некорректные Xij, в противном случае False лог простая переменная
Промежу-точные данные i Номер текущей строки, 1£i£10 цел простая переменная
j Номер текущего столбца, 1£j£10 цел простая переменная
           

5.Входная форма.

нет ввода/вывода

Выходная форма

нет ввода/вывода

Аномалии

нет ввода/вывода

Тесты

Тест 4 есть некорректный элемент X[1,3]=1001, flag=True (flag=false)

Тест 5 есть некорректный элемент flag=false; (X[1,1]= -2000, flag=True)

Тест 6 есть некорректный элемент X[2,1]= -1050, flag=true, (X[1,2]= 2000, flag= True)

 

Метод

Истина, если есть в матрице элемент |Xi,j|>1000; Ложь, если нет такого элемента

 


Пусть flag =

 

 

Предположим сначала, что такого элемента в матрице нет (Flag:=False)

Затем будем просматривать строки, начиная с первой (i:=1)

Пока не просмотрены все (i≤m) и не найден такой элемент (flag=False)

В каждой строке будем просматривать элементы, начиная с первого (j:=1)

Пока не просмотрены все (j≤n) и не найден такой элемент (flag=False)

Если рассматриваемый элемент Xij по модулю больше 1000

То

искомый элемент найден! (flag:=True)

Запоминаем его местонахождение (ii:=i; jj:=j)

Переходим к следующему элементу в строке (j:=j+1)

Переходим к следующей строке

 

Найденные значения flag, ii, jj будут искомыми.

 

Алгоритм

Начало А0.4
Вх. m, n, X
flag:=False
i:=1
i≤m Ù Ø flag
j:=1
j≤n Ù Ø flag
|Xij|>1000
ii:=i; jj:=j; flag:=True
j:=j+1
i:=i+1
Конец А0.4
Вых. flag, ii, jj

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.