Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2020 mgr Jerzy Wałaszek
I LO w Tarnowie

Dodawanie macierzy

SPIS TREŚCI
Tematy pomocnicze

Problem

Należy dodać macierz B m × n do macierzy A m × n i wynik umieścić w macierzy C m × n.

Rozwiązanie

Operacja dodawania dwóch macierzy polega na dodawaniu ich elementów leżących w tych samych wierszach i kolumnach. Wynika z tego oczywisty wniosek, iż dodawane macierze muszą posiadać takie same wymiary.

Algorytm dodawania macierzy

Wejście:

m  –  liczba wierszy macierzy, m  ∈ N
n  – liczba kolumn macierzy, n  ∈ N
A, B  – dodawane macierze o m  wierszach i n  kolumnach, A, B  ∈ R
C  – macierz wynikowa o m  wierszach i n  kolumnach, C  ∈ R

Wyjście:

Macierz C = A + B

Zmienne pomocnicze:

i w  –  indeks wierszowy macierzy, i w  ∈ N
i k  – indeks kolumnowy macierzy, i k  ∈ N

Lista kroków:

K01: Dla i w  = 1, 2, ..., m :
wykonuj krok K02
K02:     Dla i k  = 1, 2, ..., n :
    wykonuj:
        C [ i w, i k  ] ← A [ i w, i k  ] + B [ i w, i k  ]
K04: Zakończ

Przykładowe programy

Uwaga:

Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich.

Program generuje trzy macierze o losowej lecz równej liczbie wierszy ( od 2 do 5 ) i losowej lecz równej liczbie kolumn ( od 2 do 5 ). Dwie pierwsze macierze zostają wypełnione losowymi wartościami od 0 do 99 i wyświetlone. Następnie program oblicza w trzeciej macierzy ich sumę i wyświetla wynik.
Pascal
// Dodawanie macierzy
// Data: 7.01.2010
// (C)2020 mgr Jerzy Wałaszek
//-----------------------------

program madd;

type
  NInt = array of integer; // typ tablic wierszy
  MInt = array of NInt;    // typ tablicy wskaźników

var
  A, B, C : MInt;
  n, m, iw, ik : integer;

begin

  Randomize;

  // losujemy wymiary macierzy

  m := random ( 5 ) + 2;
  n := random ( 5 ) + 2;

  // tworzymy tablicę wskaźników

  SetLength ( A, m );
  SetLength ( B, m );
  SetLength ( C, m );

  // tworzymy tablice wierszy

  for iw := 0 to m - 1 do
  begin
    SetLength ( A [ iw ], n );
    SetLength ( B [ iw ], n );
    SetLength ( C [ iw ], n );
  end;

  // wypełniamy macierze A i B losowymi liczbami

  for iw := 0 to m - 1 do
    for ik := 0 to n - 1 do
    begin
      A [ iw ][ ik ] := random ( 100 );
      B [ iw ][ ik ] := random ( 100 );
    end;

  // wyświetlamy macierze A i B

  writeln ( 'm = ', m );
  writeln ( 'n = ', n );
  writeln;
  writeln ( 'Matrix A:' );

  for iw := 0 to m - 1 do
  begin
    for ik := 0 to n - 1 do write ( A [ iw ][ ik ] :5 );
    writeln;
  end;

  writeln;
  writeln ( 'Matrix B:' );

  for iw := 0 to m - 1 do
  begin
    for ik := 0 to n - 1 do write ( B [ iw ][ ik ] :5 );
    writeln;
  end;


  // sumujemy macierz A i B w C

  for iw := 0 to m - 1 do
    for ik := 0 to n - 1 do
      C [ iw ][ ik ] := A [ iw ][ ik ] + B [ iw ][ ik ];

  // wyświetlamy macierz wynikową

  writeln;
  writeln ( 'Matrix C = A + B:' );

  for iw := 0 to m - 1 do
  begin
    for ik := 0 to n - 1 do write ( C [ iw ][ ik ] :5 );
    writeln;
  end;

  // koniec, zwalniamy pamięć zajętą przez macierze

  for iw := 0 to m - 1 do
  begin
    SetLength ( A [ iw ], 0 );
    SetLength ( B [ iw ], 0 );
    SetLength ( C [ iw ], 0 );
  end;
  SetLength ( A, 0 );
  SetLength ( B, 0 );
  SetLength ( C, 0 ); 

end.
C++
// Dodawanie macierzy
// Data: 7.01.2010
// (C)2020 mgr Jerzy Wałaszek
//-----------------------------

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>

using namespace std;

int main( )
{
  int **A, **B, **C, n, m, iw, ik;

  srand ( ( unsigned )time ( NULL ) );

  // losujemy wymiary macierzy

  m = rand( ) % 5 + 2;
  n = rand( ) % 5 + 2;

  // tworzymy tablicę wskaźników

   A = new int * [ m ];
   B = new int * [ m ];
   C = new int * [ m ];

  // tworzymy tablice wierszy

  for( iw = 0; iw < m; iw++ )
  {
    A [ iw ] = new int [ n ];
    B [ iw ] = new int [ n ];
    C [ iw ] = new int [ n ];
  }

  // wypełniamy macierze A i B losowymi liczbami

  for( iw = 0; iw < m; iw++ )
    for( ik = 0; ik < n; ik++ )
    {
      A [ iw ][ ik ] = rand( ) % 100;
      B [ iw ][ ik ] = rand( ) % 100;
    }

  // wyświetlamy macierze A i B

  cout << "m = " << m << endl
       << "n = " << n << endl << endl
       << "Matrix A:" << endl;

  for( iw = 0; iw < m; iw++ )
  {
    for( ik = 0; ik < n; ik++ )
      cout << setw ( 5 ) << A [ iw ][ ik ];
    cout << endl;
  }
  
  cout << endl << "Matrix B:" << endl;

  for( iw = 0; iw < m; iw++ )
  {
    for( ik = 0; ik < n; ik++ )
      cout << setw ( 5 ) << B [ iw ][ ik ];
    cout << endl;
  }

  // sumujemy macierz A i B w C
  
  for( iw = 0; iw < m; iw++ )
    for( ik = 0; ik < n; ik++ )
      C [ iw ][ ik ] = A [ iw ][ ik ] + B [ iw ][ ik ];

  // wyświetlamy macierz wynikową

  cout << endl << "Matrix C = A + B:" << endl;
  
  for( iw = 0; iw < m; iw++ )
  {
    for( ik = 0; ik < n; ik++ )
      cout << setw ( 5 ) << C [ iw ][ ik ];
    cout << endl;
  }

  // koniec, zwalniamy pamięć zajętą przez macierze

  for( iw = 0; iw < m; iw++ )
  {
    delete [ ] A [ iw ];
    delete [ ] B [ iw ];
    delete [ ] C [ iw ];
  }
  delete [ ] A;
  delete [ ] B;
  delete [ ] C;

  return 0;
}
Basic
' Dodawanie macierzy
' Data: 7.01.2010
' (C)2020 mgr Jerzy Wałaszek
'-----------------------------

Dim As Integer n, m, iw, ik

Randomize

' losujemy wymiary macierzy

m = Int ( Rnd ( 1 ) * 5 ) + 2
n = Int ( Rnd ( 1 ) * 5 ) + 2

' tworzymy macierze

Dim As Integer A ( 1 To m, 1 To n ), B ( 1 To m, 1 To n ), C ( 1 To m, 1 To n )

' wypełniamy macierze A i B losowymi liczbami

For iw = 1 To m
  For ik = 1 To n
    A ( iw, ik ) = Int ( Rnd ( 1 ) * 100 )
    B ( iw, ik ) = Int ( Rnd ( 1 ) * 100 )
  Next
Next

' wyświetlamy macierze A i B

Print "m = ";m
Print "n = ";n
Print
Print "Matrix A:"

For iw = 1 To m
  For ik = 1 To n
    Print Using "#####";A ( iw, ik );
  Next
  Print
Next

Print
Print "Matrix B:"

For iw = 1 To m
  For ik = 1 To n
    Print Using "#####";B ( iw, ik );
  Next
  Print
Next

' sumujemy macierz A i B w C

For iw = 1 To m
  For ik = 1 To n
    C ( iw, ik ) = A ( iw, ik ) + B ( iw, ik )
  Next
Next

' wyświetlamy macierz wynikową

Print
Print "Matrix C = A + B:"

For iw = 1 To m
  For ik = 1 To n
    Print Using "#####";C ( iw, ik );
  Next
  Print
Next

End
Wynik:
m = 3
n = 6

Matrix A:
   73   41   18    3   15   60
   34   34   34   15   20   95
   88   31   83   80   88    0

Matrix B:
    5   83   26   32   75   23
   86   17   85   79   99   85
   58   31   70   93   32   78

Matrix C = A + B:
   78  124   44   35   90   83
  120   51  119   94  119  180
  146   62  153  173  120   78
Dodawanie macierzy
(C)2020 mgr Jerzy Wałaszek

 

.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2020 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.