Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 07. 02. 2012 18:11

JohnNash
Příspěvky: 62
Reputace:   
 

Matrix_Transposition

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?

Code:

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

  • (téma jako vyřešené označil(a) JohnNash)

#2 08. 02. 2012 04:18 — Editoval RePRO (08. 02. 2012 05:02)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Matrix_Transposition

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ě:

Code:

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.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 08. 02. 2012 09:17

JohnNash
Příspěvky: 62
Reputace:   
 

Re: Matrix_Transposition

↑ RePRO:
Ach bože, stydím a moc děkuji.

Offline

 

#4 08. 02. 2012 14:24

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Matrix_Transposition

Nemáš se za co stydět, od toho tu jsme. Měj se. :-)


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 08. 02. 2012 19:10

Juxtapose
Příspěvky: 62
Reputace:   
 

Re: Matrix_Transposition

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson