| 
| 
 | Вопрос # 5 344/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты! А то в матрицах не бум бум
 
 Заданы 3 матрицы. A(3,3); B(4,4); C(5,5).Вычислить след какой матрицы больше вычисление следа оформить в виде подпрограммы-процедуры.
 
|  |   Вопрос задал: ierihon1 (статус: 1-ый класс)Вопрос отправлен: 30 мая 2011, 11:58
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну, вот как-то так:
 program p5344;
 
{$APPTYPE CONSOLE} { В турбо-паскале убрать эту строку }
 
type
  TSize = 3..5;
  TElements = array[0..4, 0..4] of Integer;
  TMatrix = record
    Elements: TElements;
    Size: TSize;
  end;
 
procedure MakeMatrix(var X: TMatrix; const ASize: TSize);
var
  i, j: Integer;
begin
  X.Size:= ASize;
  for i:= 0 to ASize - 1 do
    for j:= 0 to ASize - 1 do
      X.Elements[i, j]:= Random(20) - 4;
end;
 
procedure PrintMatrix(const X: TMatrix; const Name: string);
var
  i, j: Integer;
begin
  WriteLn(#13#10'  Matrix "', Name, '" (', X.Size, 'x', X.Size, '):');
 
  for i:= 0 to X.Size - 1 do
    begin
      for j:= 0 to X.Size - 1 do
        Write(X.Elements[i, j]: 4);
      WriteLn;
    end;
end;
 
procedure GetTrace(const X: TMatrix; var Trace: Integer);
var
  i: Integer;
begin
  Trace:= 0;
  for i:= 0 to X.Size - 1 do
    Inc(Trace, X.Elements[i, i]);
 
  WriteLn(' ----------------------------> Trace: ', Trace);
end;
 
var
  A, B, C: TMatrix;
  Trace_A, Trace_B, Trace_C, Max: Integer;
  MaxName: Char;
 
{ В программе не учитывается то, что матриц
  с максимальным следом может быть больше одной. }  
 
begin
  Randomize;
 
  MakeMatrix(A, 3);
  PrintMatrix(A, 'A');
  GetTrace(A, Trace_A);
  Max:= Trace_A;
  MaxName:= 'A';
 
  MakeMatrix(B, 4);
  PrintMatrix(B, 'B');
  GetTrace(B, Trace_B);
  if Trace_B > Max
    then begin
           Max:= Trace_B;
           MaxName:= 'B';
         end;
 
  MakeMatrix(C, 5);
  PrintMatrix(C, 'C');
  GetTrace(C, Trace_C);
  if Trace_C > Max
    then begin
           Max:= Trace_C;
           MaxName:= 'C';
         end;
 
  WriteLn(#13#10'  Matrix "', MaxName, '" has maximum trace (', Max, ').');
  ReadLn;
end.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 30 мая 2011, 13:44
 Оценка за ответ: 5
 Комментарий к оценке: Огромное спасибо) |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 30 мая 2011, 14:59; участников в обсуждении: 2. 30 мая 2011, 12:35: Вопрос перемещён из тематического раздела Pascal » Программирование на Pascal в раздел Лабораторный практикум » Pascal модератором Ерёмин А.А. 
|   | min@y™ (статус: Доктор наук), 30 мая 2011, 13:13 [#1]:Подскажи формулу вычисления следа квадратной матрицы. А то не охота курить википедию. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 13:25 [#2]:там идёт сумма чисел по диагонали то есть A[1,1]+A[2,2]+..+A[n,n] |  
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 13:26 [#3]: program ss;
uses crt;
var a          : array [1..3,1..3] of integer;
    b          : array [1..4,1..4] of integer;
    c          : array [1..5,1..5] of integer;
    n,A1,B1,C1 :                      integer;
procedure ArrayMake(n:integer);
var i,j : integer;
begin
for i := 1 to n do begin
  for j := 1 to n do begin
    a[i,j] := random(3);
    write(a[i,j]:3);
  end;
  writeln;
end;
end;
 
procedure sledA;
var i,j:integer;
begin
A1:=0;
for i := 1 to 3 do begin
  for j := 1 to 3 do begin
    if i=j then
      A1:=A1+a[i,j];
  end;
end;
end;
 
procedure sledB;
var i,j:integer;
begin
B1:=0;
for i := 1 to 4 do begin
  for j := 1 to 4 do begin
    if i=j then
      B1:=B1+b[i,j];
  end;
end;
end;
 
procedure sledC;
var i,j:integer;
begin
C1:=0;
for i := 1 to 5 do begin
  for j := 1 to 5 do begin
    if i=j then
      C1:=C1+c[i,j];
  end;
end;
end;
 
begin
clrscr;
randomize;
ArrayMake(3);
  writeln;
ArrayMake(4);
  writeln;
ArrayMake(5);
  writeln;
sledA;
sledB;
sledC;
writeln(A1:3);
writeln(b1:3);
writeln(c1:3);
readkey;
end. |  
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 13:27 [#4]:так то вроде всё нормально но почему то вычисляет не правильно и ошибку найти не могу |  
|   | min@y™ (статус: Доктор наук), 30 мая 2011, 13:37 [#5]: Цитата (ierihon1): там идёт сумма чисел по диагонали то есть A[1,1]+A[2,2]+..+A[n,n]  Да я уж нагуглил. Ща сделаю.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  30 мая 2011, 14:08: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1) 
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 14:09 [#6]:min@y™: у меня ещё такая посьба: если не трудно не мог бы ты составить к этому блок схему? и к предыдущей тоже..? |  
|   | min@y™ (статус: Доктор наук), 30 мая 2011, 14:17 [#7]: Цитата (ierihon1): у меня ещё такая посьба: если не трудно не мог бы ты составить к этому блок схему? и к предыдущей тоже..?  А пиво будет?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 14:44 [#8]:по почте только если) |  
|   | ierihon1 (статус: 1-ый класс), 30 мая 2011, 14:45 [#9]:ну если ты в кемерово живёшь то без проблем) |  
|   | min@y™ (статус: Доктор наук), 30 мая 2011, 14:59 [#10]: Цитата (ierihon1): ну если ты в кемерово живёшь то без проблем)  Я в Рязани живу. Вместо пива могу принять денег на телефон (я так часто делаю).
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |