Реферат: Turbo Paskal Операции над матрицами

ГосударственныйКомитет Российской Федерации

по Высшему Образованию

Санкт-ПетербургскийГосударственныйЭлектротехнический Университет «ЛЭТИ»

Кафедра Радиосистем

Пояснительная Записка

к Курсовой Работе поДисциплине

«Информатика. Основы Программирования»

Вариант №9: «Операции надМатрицами»

Выполнил:  студент Чапчаев В.В.

                     факультет: РТ

                     уч.группа: № 2142

Проверил:   ассистент Аникин А.П.

Санкт – Петербург

2 0 0 3

Условие задачи

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

Метод решения задачи

После запуска программы, пользователю предлагаетсявыбрать требуемую операцию: нахождение определителя, обратной матрицы,транспонированной матрицы, сложение или вычитание двух матриц, умножение двухматриц. Это производится по средствам ввода пользователем цифры,соответствующей данной операции. Далее следует запрос о размерах данной матрицы(кол-ве строк и столбцов), после ввода которых программа проверяет, чтобывведенные значения не были отрицательными или не превышали допустимых размеровматрицы (в программе – 10х10). В случае, если перечисленные условия невыполняются, на экран выводится сообщение об ошибке, и программа завершаетработу. При выполнении условий, пользователю предлагается ввести с клавиатурыисходную матрицу «А» (в программе – MAS1). Вводпроизводится построчно, для перехода к следующей строке, пользователюнеобходимо нажать клавишу  «ENTER». После того, какчисло строк становится равным числу, введенному пользователем, ввод матрицыпрекращается. Введенная матрица выводится на экран для проверки. Далее следуетпроверка «пригодности» введенной матрицы к операции, выбранной пользователем, вслучае «непригодности» матрицы, на экран выводится сообщение об ошибке, ипрограмма завершает работу. В случае «пригодности» матрицы, над нейпроизводится выбранная операция, после чего на экран выводится сообщение орезультате. Если пользователем была выбрана операция, требующая вторую матрицу«В» (в программе – MAS2), пользователю предлагаетсяввести ее размеры, как и при вводе матрицы «А», далее программа проверяет,возможно ли проведение выбранной операции над матрицами с введеннымипараметрами. Если операция невозможна, то на экран выводится сообщение обошибке, и программа завершает работу. Иначе, операция выполняется, и еерезультирующая матрица «С» (в программе – MAS3)выводится на экран.

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

Исходные данные и форма их представления

Переменные

Структура

Тип

Назначение

MAS1, MAS2, MAS3 Двумерный массив Вещественный Матрицы «А», «В», «С» i1, i2, i3 Переменные Целочисленный Счетчик строк матриц А, В и С соответственно j1, j2, j3 Переменные Целочисленный Счетчик столбцов матриц А, В и С соответственно m1, m2, m3 Переменные Целочисленный Кол-во строк матриц А, В и С соответственно n1, n2, n3 Переменные Целочисленный Кол-во столбцов матриц А, В и С соответственно operation Переменные Целочисленный Вариант программы det Переменные Вещественный Определитель k Переменные Целочисленный Рабочая переменная

Блок – схема программы

/>

/> /> /> /> /> /> /> />

Текст Программы:

Program MATRIX;            {Наименованиепрограммы}

Uses CRT;

VAR i1, i2, i3: integer;  {Счетчик строк}

    j1, j2, j3: integer;  {Счетчик столбцов}

operation: integer;    {Вариантразвития программы}

det :      real;       {Определитель}k:   integer;          {Рабочаяпеременная}

    {Массивы (матрицы),используемые в программе}

    MAS1,  {Матрица А}              

    MAS2,  {Матрица В}

    MAS3:array [1..10,1..10] of real;   {Матрица С}

BEGIN {Начало программы}

     WriteLn('Что Вы желаете делать с матрицами?');

     {Выбор пользователемварианта развития программы}

     WriteLn('Если Вы желаете найти определитель матрицы, нажмите 1');

     WriteLn('Если Вы желаете найти обратную матрицу, нажмите 2');

     WriteLn('Если Вы желаете транспонировать матрицу, нажмите 3');

     WriteLn('Если Вы желаете сложить матрицы, нажмите 4');

     WriteLn('Если Вы желаете вычесть матрицы, нажмите 5');

     WriteLn('Если Вы желаете перемножить матрицы, нажмите 6');

     ReadLn(operation); {Занесение выбранного варианта в память}

     WriteLn('Введите кол-во строк исходной матрицы, не более 10');

     ReadLn(m1);

     WriteLn('Введите кол-во столбцов исходной матрицы, не более 10');

<p/>

     ReadLn(n1);

      If ((1>n1)or  (n1>10) or (1>m1) or  (m1>10)) {Условия ошибки}

        thenbegin

              WriteLn ('ОШИБКА!!!');

              Halt;

            end

        elsebegin

              WriteLn ('Введите исходную матрицу');  {Ввод исходной матрицы}

               fori1:=1 to m1 do

                 for j1:=1 to n1 do Read (MAS1[i1,j1]);

             end;

              for i1:=1 to m1 do   {Вывод исходной матрицы}

                     begin

                      for j1:=1 to n1 do

                       Write (MAS1[i1,j1]);

                       WriteLn;

                     end;

          Caseoperation of  {Оператор выбора «operation»}

             1: begin  {Определитель}

                   if (m1<>n1) then writeLn ('ОШИБКА!!!') {Условиеошибки}

                    else

                        begin {Формула определителя}

                         det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3]

                        +MAS1[2,1]*MAS1[3,2]*MAS1[1,3]

<p/>

                        +MAS1[1,2]*MAS1[2,3]*MAS1[3,1])

                        -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]

                        +MAS1[3,2]*MAS1[2,3]*MAS1[1,1]

                        +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);

                        WriteLn ('Opredelitel det=',det); {Вывод определителя}

                        end;

                end;

             2: begin  {Обратная матрица}

                  if (m1<>n1) then WriteLn ('ОШИБКА!!!') {Условиеошибки}

                  else begin

                         det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3] {Определитель}

                         +MAS1[2,1]*MAS1[3,2]*MAS1[1,3]

                         +MAS1[1,2]*MAS1[2,3]*MAS1[3,1])

                         -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]

                         +MAS1[3,2]*MAS1[2,3]*MAS1[1,1]

                          +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);

                         if det = 0 then WriteLn ('ОШИБКА!!!') {Условие ошибки}

                         else begin {Союзная матрица}

                                for i1:=1 to m1 do

                                    for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1];

                                {Итоговая формула}             

                               for i1:=1 to m1 do

                                    for j1:=1 to n1 do                                                                                                        MAS3[i1,j1]:=(1/det)*MAS2[i1,j1];

                                WriteLn;

                                WriteLn ('Обратная матрица:');

                                for i1:=1 to m1 do begin {Вывод обратной матрицы}

                                                      forj1:=1 to n1 do

                                                     Write (MAS3[i1,j1]);

                                                     WriteLn;

                                                   end;

                              end;

                       end;

                 end;

              3: begin {Транспонирование матрицы}

                   for i1:=1 to m1 do

                   for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; {Формула}

                  WriteLn ('Транспонированная матрица: ');

                   for i1:=1 to m1 do begin {Вывод транспонированной матрицы}

                                         for j1:=1 to n1 do

                                         Write (MAS2[i1,j1]);

                                         WriteLn;

                                     end;

                 end;

              4,5:begin {Сложение/вычитание матриц}

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

                       WriteLn ('Введите кол-во строк второй матрицы');

                       ReadLn (m2);

                       Writeln ('Введите кол-во столбцов второй матрицы');

                       ReadLn (n2);

                      If (n2<>n1) or (m2<>m1)

                       then WriteLn ('OSHIBKA!!!') {Условие ошибки}

                       else begin

                                WriteLn ('Введите вторую матрицу');

                                for i1:=1 to m1 do

                                  for j1:=1 to n1 do

                                   Read (MAS2[i1,j1]);

                            end;

                      for i1:=1 to m1 do   {Вывод второй матрицы}

                          begin

                            for j1:=1 to n1 do

                            Write (MAS2[i1,j1]);

                            WriteLn;

                          end;

                       ifoperation = 4 then k := 1;

                      if operation = 5 then k := -1;

                      for i1:=1 to m1 do

                         for j1:=1 to n1 do

                           MAS3[i1,j1]:=MAS1[i1,j1]+k*MAS2[i1,j1]; {Итоговая формула}

                      writeln('Сумма/разность:');

                       for i1:=1 to m1 do

                          begin

                            for j1:=1 to n1 do Write(MAS3[i1,j1]);

                            WriteLn;

                           end;

                  end;

              6: begin {Умножение матриц}

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

                    WriteLn ('Введите кол-во строк второй матрицы');

                    ReadLn (m2);

                    Writeln ('Введите кол-во столбцов второй матрицы');

                    ReadLn (n2);

                   If ((1>=m2) or  (m2>=10) or (1>=n2) or  (n2>=10) {Условие ошибки}

                               or  (n2<>m1)) then WriteLn ('ОШИБКА!!!')

                       else begin

                              WriteLn ('Введите вторую матрицу');

                              for i2:=1 to m2 do

                                for j2:=1 to n2 do Read (MAS2[i2,j2]);

                           end;

                    fori2:=1 to m2 do begin {Вывод второй матрицы}

                                        for j2:=1 to n2 do

                                        Write (MAS2[i2,j2]);

                                        WriteLn;

                                      end;

                   m3:=m1; n3:=n2;

                   for i3:=1 to m3 do

                       for j3:=1 to n3 do begin

                                            MAS3[i3,j3] := 0;

                                            for i2:= 1 to m2 do

                                 {Итоговая формула}

                                 MAS3[i3,j3] :=MAS3[i3,j3] + MAS1[i3,i2] * MAS2[i2,j3];

                                          end;

                    begin {Вывод произведения}

                      writeln;

                      writeln('Произведение:');

                      for i3:=1 to m1 do begin

                                          for j3:=1 to n2 do Write (MAS3[i3,j3]);

                                          WriteLn;

                                        end;

                   end;

             end;

          End;{End Case}

         ReadKey;

END.  {Конец программы}

Пример работы программы

1.   Операция нахождения определителя:

1)    Припоявлении на экране меню с выбором операций, выбираем 1.

2)    Напредложение ввести кол-во строк матрицы, выбираем 3.

3)    Кол-востолбцов – 3.

4)    Вводимматрицу:                 æ  1  4 5  ö

ç  5  3  7  ÷

è  8  1  4  ø

5)    Программавыдает ответ:  det = 54.

2.   Операция нахождения обратной матрицы:

1)   Припоявлении на экране меню с выбором операций, выбираем 2.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø

5)  Программа выдает ответ:      æ 1,851*100  9,259*100  1,481*10    ö

             ç  7,407*100  5,555*100 1,851*100  ÷

             è  9,259*100  1,296*10   7,407*100  ø.

3.   Операция транспонирования матрицы:

1)   Припоявлении на экране меню с выбором операций, выбираем 3.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø

5)  Программа выдает ответ:      æ 1  5  8  ö

             ç  4  3  1  ÷

             è  5  7  4  ø.

4.   Операция сложения матриц:

1)   Припоявлении на экране меню с выбором операций, выбираем 3.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø

5)   Напредложение ввести кол-во строк матрицы, выбираем 3.

6)  Кол-во столбцов – 3.

7)  Вводим матрицу:      æ    2  8 10  ö

ç  10  6  14  ÷

                                         è  16  2    8  ø.

8)  Программа выдает ответ:      æ   3  12  15  ö

             ç  15    9  21  ÷

                                                       è  24    3  12  ø.

5.   Операция вычитания матриц:

1)   Припоявлении на экране меню с выбором операций, выбираем 3.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø

5)   Напредложение ввести кол-во строк матрицы, выбираем 3.

6)  Кол-во столбцов – 3.

7)  Вводим матрицу:      æ    2  8 10  ö

ç  10  6  14  ÷

                                         è  16  2    8  ø.

8)  Программа выдает ответ:     æ -1  -4  -5  ö

            ç  -5  -3  -7  ÷

            è  -8  -1  -4  ø.

6.   Операция перемножения матриц:

1)   Припоявлении на экране меню с выбором операций, выбираем 3.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø.

5)   Напредложение ввести кол-во строк матрицы, выбираем 3.

6)  Кол-во столбцов – 3.

7)  Вводим матрицу:      æ    2  8  10 ö

ç  10  6  14  ÷

                                         è  16  2    8  ø.

8)  Программа выдает ответ:     æ 122  42  106  ö

            ç  152  72  148  ÷

            è   90   78  126  ø.

7.   Первый исключительный случай:

1)   Припоявлении на экране меню с выбором операций, выбираем 1.

2)   Напредложение ввести кол-во строк матрицы, выбираем 0.

3)  Кол-во столбцов – 3.

4)    Программавыдает: «ОШИБКА!!!».

8.   Второй исключительный случай:

1)   Припоявлении на экране меню с выбором операций, выбираем 1 (2, 3).

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 2.

4)  Вводим матрицу:      æ  1  4  ö

ç  5  3  ÷

è  8  1  ø.

5)    Программавыдает: «ОШИБКА!!!».

9.   Третий исключительный случай:

1)   Припоявлении на экране меню с выбором операций, выбираем 4.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)    Кол-востолбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø.

5)   Напредложение ввести кол-во строк матрицы, выбираем 2.

6)  Кол-во столбцов – 2.

6)    Программавыдает: «ОШИБКА!!!».

10.  Четвертый исключительный случай:

1)   Припоявлении на экране меню с выбором операций, выбираем 6.

2)   Напредложение ввести кол-во строк матрицы, выбираем 3.

3)  Кол-во столбцов – 3.

4)  Вводим матрицу:      æ  1  4  5  ö

ç  5  3  7  ÷

è  8  1  4  ø.

5)   Напредложение ввести кол-во строк матрицы, выбираем 2.

6)  Кол-во столбцов – 2.

7)    Программавыдает: «ОШИБКА!!!».

Выводы по работе

Для проверкирезультатов, выдаваемых программой, использовался математический пакет MathCAD 2001 Professional.

Существенный недостатокпрограммы в том, что при нахождении обратной матрицы и определителя, программаможет работать только с матрицами, размером не превышающие 3х3. Это связано созначительным усложнением программы, в случаи необходимости выполнениявышеперечисленных операций над матрицами большего размера.

При написании программыиспользовалась следующая литература:

1)    ФароновВ.В. «TurboPascal 7.0, начальный курс. Учебноепособие».

2)    МизрохиС.В. «TurboPascal и объектно-ориентированноепрограмирование».

3)    ГолубевА.Б., Сидоров Ю.Н., Чередниченко А.И., Яценко И.В. «Основы программирования наязыке Pascal».

4)    БоревичЭ.И. «Определители и матрицы».

5)    ГутерР.С., Резниковский П.Т. «Программирование и вычислительная математика».

6)    ПисьменныйД.Т. «Конспект лекций по высшей математике», 1 часть.

7)    ВладимирскийБ.М., Горстко А.Б., Ерусалимский Я.М. «Математика. Общий курс».

еще рефераты
Еще работы по информатике, программированию