Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj, řeším pravděpodobně velmi obdobný problém jako s násobením matic. Tentokrát mám matici transponovat... Tady je můj výtvor. Jak je možné, že mi program vypisuje pouze druhý řádek transponované matice?
Program Matrix_Tranpose;
const
m = 3;
n = 2;
type
TMatrix = array[1..m, 1..n] of Integer;
TTransposed_Matrix = array[1..n, 1..m] of Integer;
var Matrix:TMatrix;
i,j:integer;
procedure Transpose(var Matrix_1:TMatrix);
var i,j: integer;
Transposed_Matrix_1: TTransposed_Matrix;
begin
Writeln('Transposed matrix: ');
for i:=1 to m do
begin
for j:=1 to n do
Transposed_Matrix_1[j,i]:=Matrix_1[i,j];
write(Transposed_Matrix_1[j,i]:3);
end;
end;
begin
Writeln('==========================================');
Writeln('Welcome to MATRIX TRANSPOSITION programme');
Writeln('==========================================');
Writeln;
Write('Enter a matrix (',m,' x ',n,')');
Writeln;
for i:=1 to m do
for j:=1 to n do
begin
write('Insert an element on position [',i,',',j,']: ');
readln(Matrix[i,j]);
end;
Writeln('=====================================');
Writeln('The Matrix entered: ');
Writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
write(Matrix[i,j]:5);
end;
writeln;
end;
Writeln('=====================================');
Readln;
Transpose(Matrix);
Readln;
end.Děkuji moc za odpověď.
Offline
Zdravím,
koukám, že si další příklad udělal úplně obdobně jako předchozí - chválím.
A proč to vypisuje jeden řádek? No myslím, že když koukneme na procedurku Transpose, tak prvně jí necháme celou transponovat (první for cyklus) a potom vypíšeme až tu samotnou matici (druhý for cyklus). Nesmíme zapomenou prohodit indexy n a m při výpisu té transponované matice.
Jinak jsi zapomněl u toho výpisu v té procedurce na příkazy begin a end. S dovolením teda když to upravím, tak to bude vypadat následovně:
Program Matrix_Tranpose;
const
m = 4;
n = 2;
type
TMatrix = array[1..m, 1..n] of Integer;
TTransposed_Matrix = array[1..n, 1..m] of Integer;
var Matrix:TMatrix;
i,j:integer;
procedure Transpose(var Matrix_1:TMatrix);
var i,j: integer;
Transposed_Matrix_1: TTransposed_Matrix;
begin
Writeln('Transposed matrix: ');
for i:=1 to m do
begin
for j:=1 to n do
begin
Transposed_Matrix_1[j,i]:=Matrix_1[i,j];
end;
writeln;
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
write(Transposed_Matrix_1[i,j]:3);
end;
writeln;
end;
end;
begin
Writeln('==========================================');
Writeln('Welcome to MATRIX TRANSPOSITION programme');
Writeln('==========================================');
Writeln;
Write('Enter a matrix (',m,' x ',n,')');
Writeln;
for i:=1 to m do
for j:=1 to n do
begin
write('Insert an element on position [',i,',',j,']: ');
readln(Matrix[i,j]);
end;
Writeln('=====================================');
Writeln('The Matrix entered: ');
Writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
write(Matrix[i,j]:5);
end;
writeln;
end;
Writeln('=====================================');
Readln;
Transpose(Matrix);
Readln;
end.Funguje?
Jenom ještě připomenu, že můžeme použít proceduru clrscr (clear-screen), která vymaže vždy obsah okna. Docela dobrá věc pro přehlednost.
Offline
Jen doplním kolegu: pozor, k použití fce clscr; je zapotřebí použít unitu CRT.
Jinak si myslím, že pouhý výpis transponované matice (tj. pokud s ní dál třeba nebotřebuješ pracovat) by se dal zvládnout pouze za použití jednoho cyklu a jednoho pole - netřeba nejprve zjišťovat prvek A(T)ij, zapsat ho do jiného pole a teprve to pak vypsat, neboť platí, že A(T)ij = Aji.
Offline