|
Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|