Matematické Fórum

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

#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