Реферат по предмету ""


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
Переменные
Целочисленный
Рабочая переменная
Блок – схемапрограммы
Начало Case operation
Operation = 1
Operation = 2
Operation = 3
Operation = 6 Вводoperation
НЕТ Вводm1 Вводn1
1>n1 or n1>10
or 1>m1 or m1>10
ДА
Ввод MAS1
Вывод MAS1
Подсчет det
Вывод det
Подсчет обр.матр.
Вывод обр.матр.
Транспонир. матрицы
Вывод
транспонир. матрицы
Operation = 4,5 Вводm2 Вводn2
n1n2 or m1m2
ДА
НЕТ
Ввод MAS2
Вывод MAS2
Operation = 4
ДА
k :=1
НЕТ
Operation = 5
ДА
k :=-1
Вывод MAS3
(сумма/разность)
1
2
3
4
5
6
7

Ввод MAS2
Вывод MAS2
m3:= m1
n3:= n2
Вывод MAS3
(произведение) Вводm2 Вводn2
1>=m2 or m2>10
or 1>=n2 or n2>10
n2m1
ДА
НЕТ
Текст: «Ошибка» Конец

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


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');


     ReadLn (n1);
      If ((1>n1) or  (n1>10) or (1>m1) or  (m1>10)) {Условия ошибки}
        then begin
               WriteLn('ОШИБКА!!!');
               Halt;
             end
        else begin
               WriteLn ('Введите исходную матрицу');  {Ввод исходной матрицы}
               for i1:=1to 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;

          Case operation of  {Оператор выбора «operation»}
              1: begin  {Определитель}
                    if (m1n1) 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]);
                         WriteLn('Opredelitel det=',det); {Вывод определителя}
                        end;
                 end;

              2: begin  {Обратная матрица}
                   if (m1n1) 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 tom1 do
                                     for j1:=1 to n1 doMAS2[i1,j1]:=MAS1[j1,i1];
                                 {Итоговая формула}             
                                for i1:=1 to m1 do
                                     for j1:=1to 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 {Транспонирование матрицы}
                   fori1:=1 to m1 do
                    for j1:=1 to n1 doMAS2[i1,j1]:=MAS1[j1,i1]; {Формула}
                   WriteLn ('Транспонированная матрица: ');
                   fori1:=1 to m1 do begin {Вывод транспонированной матрицы}
                                          forj1:=1 to n1 do
                                          Write(MAS2[i1,j1]);
                                          WriteLn;
                                      end;
                 end;

              4,5: begin{Сложение/вычитание матриц}
                        {Ввод второй матрицы}
                       WriteLn ('Введите кол-во строк второй матрицы');
                       ReadLn (m2);
                       Writeln ('Введите кол-во столбцов второй матрицы');
                       ReadLn (n2);
                       If (n2n1) or(m2m1)
                        then WriteLn ('OSHIBKA!!!') {Условие ошибки}
                        else begin
                                 WriteLn ('Введите вторую матрицу');
                                 for i1:=1 tom1 do
                                   for j1:=1 ton1 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;

                       if operation = 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('Сумма/разность:');
                       fori1:=1 to m1 do
                           begin
                             for j1:=1 to n1 doWrite(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  (n2m1)) then WriteLn('ОШИБКА!!!')
                       else begin
                             WriteLn ('Введите вторую матрицу');
                             for i2:=1 to m2 do
                                 for j2:=1 ton2 do Read (MAS2[i2,j2]);
                            end;
                    for i2:=1 to m2 do begin {Вывод второй матрицы}
                                         forj2:=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 dobegin
                                            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('Произведение:');
                      fori3:=1 to m1 do begin
                                           forj3:=1 to n2 do Write (MAS3[i3,j3]);
                                           WriteLn;
                                         end;
                    end;
              end;
          End; {End Case}
          ReadKey;
END.  {Конец программы}
Примерработы программы
1.   Операция нахождения определителя:
1)     
2)     
3)     
4)                      æ  1 4  5  ö
ç  5 3  7  ÷
è  8 1  4  ø
5)      det= 54.
2.   Операция нахождения обратной матрицы:
1)   При появлении на экране меню с выборомопераций, выбираем 2.
2)   На предложение ввести кол-во строк матрицы,выбираем 3.
3)   Кол-во столбцов – 3.
4)   Вводим матриц


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.