SaveText.Ru

Без имени
  1. program matrica;            // Название программы
  2. uses crt;            // Подключение встроенного модуля
  3. label p;            // Объявление метки
  4. var            // Объявление глобальных переменных
  5.   a,c: array [1..3, 1..3] of integer;
  6.   b,d: array [1..3] of integer;
  7.   t,h: array [1..3, 1..3] of real;
  8.   y:integer;
  9.   l,x,d1,d2,d3,x1,x2,x3:real;
  10.  
  11.  
  12. procedure yEo;            // Вызов: Вычисление выражения (A*A)*B
  13. var            // Объявление локальных переменных
  14.   i,j,s,k:integer;
  15. begin
  16.   ClrScr;            // Очистка экрана
  17.   for i:=1 to 3 do begin            {Цикл №1}
  18.     for j:=1 to 3 do begin            {Цикл №2}
  19.       s:=0;
  20.       for k:=1 to 3 do begin            {Цикл №3}
  21.         s:=s+a[i,k]*a[k,j];
  22.       end;            {Завершение: Цикл №3}
  23.       c[i,j]:=s;
  24.     end;            {Завершение: Цикл №2}
  25.   end;            {Завершние: Цикл №1}
  26.   d[1]:=(c[1,1]*b[1])+(c[2,1]*b[2])+(c[3,1]*b[3]);
  27.   d[2]:=(c[1,2]*b[1])+(c[2,2]*b[2])+(c[3,2]*b[3]);
  28.   d[3]:=(c[1,3]*b[1])+(c[2,3]*b[2])+(c[3,3]*b[3]);
  29.   GotoXY(10,3); Write('1. A=');            // Определение новой позиции курсора
  30.   for i:=1 to 3 do begin            {Цикл №1}
  31.     for j:=1 to 3 do begin            {Цикл №2}
  32.       GotoXY(12+4*i,1+j);            // Определение новой позиции курсора
  33.       WriteLn(a[j,i]);            // Вывод матрицы A
  34.     end;            {Завершение: Цикл №2}
  35.   end;            {Завершение: Цикл №1}
  36.   GotoXY(35,3); Write('2. B=');            // Определение новой позиции курсора
  37.   for i:=1 to 3 do begin            {Цикл №1}
  38.     GotoXY(41,(j-2)+1*i);            // Определение новой позиции курсора
  39.     WriteLn(b[i]);            // Вывод матрицы B
  40.   end;            {Завершение: Цикл №1}
  41.   GotoXY(10,10); Write('3. A*A=');            // Определение новой позиции курсора
  42.   for i:=1 to 3 do begin            {Цикл №1}
  43.     for j:=1 to 3 do begin            {Цикл №2}
  44.       GotoXY(14+4*i,8+j);            // Определение новой позиции курсора
  45.       WriteLn(c[i,j]);            // Вывод матрицы A*A
  46.     end;            {Завершение: Цикл №2}
  47.   end;            {Завершение: Цикл №1}
  48.   GotoXY(35,10); Write('4. (A*A)*B=');            // Определение новой позиции курсора
  49.   for i:=1 to 3 do begin            {Цикл №1}
  50.     GotoXY(47,(j+5)+1*i);            // Определение новой позиции курсора
  51.     WriteLn(d[i]);            // Вывод матрицы (A*A)*B
  52.   end;            {Завершение: Цикл №1}
  53.   ReadKey;            // Ожидание сигнала от клавиш клавиатуры
  54. end;            // Завершение: Вычисление выражения (A*A)*B
  55.  
  56. procedure yEtw;            // Вызов: Транспонирование матрицы A
  57. var            // Объявление локальных переменных
  58.   i,j:integer;
  59. begin
  60.   ClrScr;            // Очистка экрана
  61.   GotoXY(30,11); Write('A=');            // Определение новой позиции курсора
  62.   for i:=1 to 3 do begin            {Цикл №1}
  63.     for j:=1 to 3 do begin            {Цикл №2}
  64.       GotoXY(28+4*i,9+j);            // Определение новой позиции курсора
  65.       WriteLn(a[i,j]:2);            // Вывод транспонированной матрицы А
  66.     end;            {Завершение: Цикл №2}
  67.   end;            {Завершение: Цикл №1}
  68.   ReadKey;            // Ожидание сигнала от клавиш клавиатуры
  69. end;            // Завершение: Вычисление выражения (A*A)*B
  70.  
  71.  
  72. procedure yEth;            // Вызов: Вычисление определителя матрицы А
  73. begin
  74.   ClrScr; // Очистка экрана
  75.   l:=(a[1,1]*((a[2,2]*a[3,3])-(a[2,3]*a[3,2])))-(a[1,2]*((a[2,1]*a[3,3])-(a[2,3]*a[3,1])))+(a[1,3]*((a[2,1]*a[3,2])-(a[2,2]*a[3,1])));
  76.   GotoXY(33,12); Writeln('Определитель = ',l:2:0); // Определение новой позиции курсора // Вывод найденного определителя матрицы А
  77.   ReadKey; // Ожидание сигнала от клавиш клавиатуры
  78. end;            // Завершение: Вычисление определителя матрицы А
  79.  
  80.  
  81. procedure yEfo;            // Вызов: Поиск матрицы, обратной к матрице А
  82. var            // Объявление локальных переменных
  83.   i,j:integer;
  84. begin
  85.   ClrScr;            // Очистка экрана
  86.   l:=-80;
  87.   x:=-1;
  88.   for i:=1 to 3 do begin            {Цикл №1}
  89.     for j:=1 to 3 do begin            {Цикл №2}
  90.       t[1,1]:=sqr(x)*((a[2,2]*a[3,3])-(a[2,3]*a[3,2]));            //
  91.       t[2,1]:=(sqr(x)*x)*((a[2,1]*a[3,3])-(a[3,1]*a[2,3]));            //
  92.       t[3,1]:=(sqr(x)*x*x)*((a[2,1]*a[3,2])-(a[2,2]*a[3,1]));            //
  93.       t[1,2]:=(sqr(x)*x)*((a[1,2]*a[3,3])-(a[3,2]*a[1,3]));            //
  94.       t[2,2]:=(sqr(x)*x*x)*((a[1,1]*a[3,3])-(a[3,1]*a[1,3]));            //  Заполнение матрицы, обратной к матрице А
  95.       t[3,2]:=(sqr(x)*x*x*x)*((a[1,1]*a[3,2])-(a[3,1]*a[1,2]));            //
  96.       t[1,3]:=(sqr(x)*x*x)*((a[1,2]*a[2,3])-(a[2,2]*a[1,3]));            //
  97.       t[2,3]:=(sqr(x)*x*x*x)*((a[1,1]*a[2,3])-(a[2,1]*a[1,3]));            //
  98.       t[3,3]:=(sqr(x)*x*x*x*x)*((a[1,1]*a[2,2])-(a[2,1]*a[1,2]));            //
  99.     end;            {Завершение: Цикл №2}
  100.   end;            {Завершение: Цикл №1}
  101.   for i:=1 to 3 do begin            {Цикл №1}
  102.     for j:=1 to 3 do begin            {Цикл №2}
  103.       h[i,j]:=(1/l)*(t[i,j]);
  104.     end;            {Завершение: Цикл №2}
  105.   end;            {Завершение: Цикл №1}
  106.   GotoXY(9,11); Write('Обратная матрица = ');            // Определение новой позиции курсора
  107.   for i:=1 to 3 do begin            {Цикл №1}
  108.     for j:=1 to 3 do begin            {Цикл №2}
  109.       GotoXY(23+10*i,9+j);            // Определение новой позиции курсора
  110.       WriteLn(h[j,i]:2:4);            // Вывод матрицы, обратной к матрице А
  111.     end;            {Завершение: Цикл №2}
  112.   end;            {Завершение: Цикл №1}
  113.   ReadKey;            // Ожидание сигнала от клавиш клавиатуры
  114. end;            // Завершение: Поиск матрицы, обратной к матрице А
  115.  
  116.  
  117. procedure yEfi;            // Вызов: Решение системы методом Крамера
  118. begin
  119.   ClrScr;            // Очистка экрана
  120.   l:=-80;
  121.   d1:=(b[1]*((a[2,2]*a[3,3])-(a[2,3]*a[3,2])))-(a[1,2]*((b[2]*a[3,3])-(a[2,3]*b[3])))+(a[1,3]*((b[2]*a[3,2])-(a[2,2]*b[3])));
  122.   d2:=(a[1,1]*((b[2]*a[3,3])-(a[2,3]*b[3])))-(b[1]*((a[2,1]*a[3,3])-(a[2,3]*a[3,1])))+(a[1,3]*((a[2,1]*b[3])-(b[2]*a[3,1])));
  123.   d3:=(a[1,1]*((a[2,2]*b[3])-(b[2]*a[3,2])))-(a[1,2]*((a[2,1]*b[3])-(b[2]*a[3,1])))+(b[1]*((a[2,1]*a[3,2])-(a[2,2]*a[3,1])));
  124.   x1:=d1/l; x2:=d2/l; x3:=d3/l;
  125.   GotoXY(35,10); Write('x1='); WriteLn(x1:2:0);            // Определение новой позиции курсора
  126.   GotoXY(35,12); Write('x2='); WriteLn(x2:2:0);            // Определение новой позиции курсора
  127.   GotoXY(35,14); Write('x3='); WriteLn(x3:2:0);            // Определение новой позиции курсора
  128.   ReadKey;            // Ожидание сигнала от клавиш клавиатуры
  129. end;            // Завершение: Решение системы методом Крамера
  130.  
  131.  
  132. BEGIN            // Запуск блока основной программы
  133.   p:
  134.   TextBackground(1);            // Задание цвета фона: Синий
  135.   ClrScr;            // Очистка экрана
  136.   TextColor(7);            // Задание цвета символа: Белый
  137.   GotoXY(1,1); WriteLn(' ---------------'); GotoXY(1,2); WriteLn('     1 1 3     8');
  138.   GotoXY(1,3); WriteLn('  A=-2 4 2,  B=4'); GotoXY(1,4); WriteLn('     3 7 1     24');
  139.   GotoXY(1,5); WriteLn(' ---------------');
  140.   WriteLn('1 - Вычислить выражение (A*A)*B');
  141.   WriteLn('2 - Транспонировать матрицу А');
  142.   WriteLn('3 - Вычислить определитель матрицы A');
  143.   WriteLn('4 - Найти матрицу,обратную к матрице А');
  144.   WriteLn('5 - Решение системы методом Крамера');
  145.   WriteLn('6 - Выход');
  146.   WriteLn('Выберите нужную цифру'); readln(y);
  147.   a[1,1]:=1; a[1,2]:=1; a[1,3]:=3;            //
  148.   a[2,1]:=-2; a[2,2]:=4; a[2,3]:=2;            // Заполнение матрицы A
  149.   a[3,1]:=3; a[3,2]:=7; a[3,3]:=1;            //
  150.   b[1]:=8; b[2]:=4; b[3]:=24;            // Заполнение матрицы B
  151.   if y=1 then yEo;            // Вычисление выражения (A*A)*B
  152.   if y=2 then yEtw;            // Транспонирование матрицы A
  153.   if y=3 then yEth;            // Вычисление определителя матрицы А
  154.   if y=4 then yEfo;            // Поиск матрицы, обратной к матрице А
  155.   if y=5 then yEfi;            // Решение системы методом Крамера
  156.   if y=6 then exit;            // Выход из программы
  157.   goto p;            // Активация метки p
  158. END.            // Завершение блока основной программы
  159.  
  160. // Анализ программы: для того чтобы программа была понятна и хорошо читаема, в первую очередь, нужно использовать удобный во всех смыслах компилятор, который выделяет команды и строки разными
  161. // цветами, что делает программу удобной и более структурной для ориентирования. Были также задействованы комментарии в 90% случаях, где новичку-программисту будет проще понимать, за что
  162. // отвечает та или иная команда. Вместе с этим я использовал красные строки между основным блоком программы и подпрограмм. Необработанная программа была неструктурна в плане разделения
  163. // всей программы на подпрограмм, что создавало некоторые проблемы читаемости в коде, и я это учёл, выполнив всё перечисленное.

Share with your friends:

Распечатать