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

©2026 mgr Jerzy Wałaszek

Dodawanie macierzy

SPIS TREŚCI
Tematy pomocnicze

Problem

Należy dodać macierz Bm×n do macierzy Am×n i wynik umieścić w macierzy Cm×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 m wierszach n kolumnach; A,  B ∈ R. Indeksy rozpoczynają się od wartości 1.
C
 : macierz wynikowa m wierszach n kolumnach, C ∈ R. Indeksy rozpoczynają się od wartości 1.

Wyjście:

Macierz C = A+B

Elementy pomocnicze:

iw : indeks wierszowy macierzy; iw ∈ N. Indeks rozpoczyna się od wartości 1.
ik : indeks kolumnowy macierzy; ik ∈ N. Indeks rozpoczyna się od wartości 1.

Lista kroków:

K01: Dla iw = 1, 2, …, m:
     wykonuj krok K02
K02:   Dla ik = 1, 2, …, n:
       wykonuj:
         C[iw, ik]← A[iw, ik]+B[iw, ik]
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 tablice 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('Macierz 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('Macierz 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('Macierz 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 <ctime>

using namespace std;

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

  srand(time(NULL));

  // losujemy wymiary macierzy
  m = rand()%4+2;
  n = rand()%4+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
       << "Macierz A:" << endl;
  for(iw = 0; iw < m; iw++)
  {
    for(ik = 0; ik < n; ik++)
      cout << setw(5) << A[iw][ik];
    cout << endl;
  }
  cout << endl << "Macierz 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 << "Macierz 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 "Macierz A:"
For iw = 1 To m
  For ik = 1 To n
    Print Using "#####";A(iw, ik);
  Next
  Print
Next
Print
Print "Macierz 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 "Macierz C = A+B:"
For iw = 1 To m
  For ik = 1 To n
    Print Using "#####";C(iw, ik);
  Next
  Print
Next

End
Python (dodatek)
# Dodawanie macierzy
# Data: 9.04.2024
# (C)2024 mgr Jerzy Wałaszek
# --------------------------

import random


# wyświetla macierz
#------------------
def mprint(t, x):
    print(t)
    for i in x:
        for j in i:
            print("%5d" % j, end="")
        print()
    print()


# losujemy wymiary macierzy
m = random.randrange(2, 6)
n = random.randrange(2, 6)
# tworzymy macierze
a = []
b = []
c = []
f = [0] * n
for i in range(m):
    d = []
    e = []
    for j in range(n):
        d.append(random.randrange(100))
        e.append(random.randrange(100))
    a.append(d)
    b.append(e)
    c.append(f.copy())
# wyświetlamy macierze A i B
print("m =", m)
print("n =", n)
print()
mprint("Macierz A:", a)
mprint("Macierz B:", b)
# sumujemy macierz A i B w C
for iw in range(m):
    for ik in range(n):
      c[iw][ik] = a[iw][ik]+b[iw][ik]
# wyświetlamy macierz wynikową
mprint("Macierz C = A+B:", c)
Wynik:
m = 4
n = 5

Macierz A:
   94   49   29   37   60
   13   39   35    7   73
    2   30   15   98    3
   62   42   46    7   23

Macierz B:
   81   56    4   40    9
   13   28   67   80   63
   80    9   69   89    7
   27   17   55    5   20

Macierz C = A+B:
  175  105   33   77   69
   26   67  102   87  136
   82   39   84  187   10
   89   59  101   12   43
JavaScript
<html>
  <head>
    <title>
      Macierze
    </title>
  </head>
  <body>

<div style="overflow-x: auto;"
     align="center">
  <table
  border="0"
  cellpadding="4"
  style="border-collapse:
         collapse">
    <tr>
      <td nowrap>
        <form
        name="frm"
        style="text-align: center;
               background-color:
               #E7E7DA">
          <b>
          Dodawanie macierzy
          </b><br/>&nbsp;&nbsp;
          (C)2026 mgr
          Jerzy Wałaszek
          &nbsp;&nbsp;
          <hr>
          <input
          type="button"
          value="Wykonaj"
          name="B1"
          onclick="main()">
          <hr>
          <b>Wynik:</b>
          <div id="out"
          align="center">
            .
          </div>
        </form>
      </td>
    </tr>
  </table>
</div>

<script language=javascript
        type=text/javascript>

// Dodawanie macierzy
// Data: 7.01.2010
// (C)2010 mgr Jerzy Wałaszek
//---------------------------

function main()
{
  let A = [];
  let B = [];
  let C = [];
  let n, m, iw, ik, t;

  // losujemy wymiary macierzy
  m = Math.floor(
      Math.random() * 5) + 2;
  n = Math.floor(
      Math.random() * 5) + 2;

  // tworzymy tablice wierszy
  for(iw = 0; iw < m; iw++)
  {
    A[iw] = new Array(n);
    B[iw] = new Array(n);
    C[iw] = new Array(n);
  }

  // wypełniamy macierze A i B
  // losowymi liczbami
  for(iw = 0; iw < m; iw++)
    for(ik = 0; ik < n; ik++)
    {
      A[iw][ik] = Math.floor(
      Math.random() * 100);
      B[iw][ik] = Math.floor(
      Math.random() * 100);
    }

  // wyświetlamy macierze A i B
  t = "m = " + m + "<br/>" +
      "n = " + n + "<br/>" +
      "Macierz A:<br/>" +
      "<table border='1' " +
      "cellspacing='0'" +
      "cellpadding='2'" +
      "style='border-" +
      "collapse: " +
      "collapse; " +
      "margin: 8px;' " +
      "bordercolor='#000000'>";
  for(iw = 0; iw < m; iw++)
  {
    t += "<tr>";
    for(ik = 0; ik < n; ik++)
      t += "<td style=" +
           "'text-align: right'>" + 
           A[iw][ik] + '</td>';
    t += "</tr>";
  }
  t += "</table>" +
       "Macierz B:<br/>" +
       "<table border='1' " +
       "cellspacing='0'" +
       "cellpadding='2'" +
       "style='border-" +
       "collapse: " +
       "collapse; " +
       "margin: 8px;' " +
       "bordercolor='#000000'>";
  for(iw = 0; iw < m; iw++)
  {
    t += "<tr>";
    for(ik = 0; ik < n; ik++)
      t += "<td style=" +
           "'text-align: right'>" + 
           B[iw][ik] + '</td>';
    t += "</tr>";
  }
  t += "</table>";
 
  // 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ą

  t += "Macierz C = A + B:<br/>" +
       "<table border='1' " +
       "cellspacing='0'" +
       "cellpadding='2'" +
       "style='border-" +
       "collapse: " +
       "collapse; " +
       "margin: 8px;' " +
       "bordercolor='#000000'>";
  for(iw = 0; iw < m; iw++)
  {
    t += "<tr>";
    for(ik = 0; ik < n; ik++)
      t += "<td style=" +
           "'text-align: right'>" + 
           C[iw][ik] + '</td>';
    t += "</tr>";
  }
  t += "</table><br/>";

  document.getElementById("out")
  .innerHTML = t;
}
</script>

  </body>
</html>
Dodawanie macierzy
   (C)2026 mgr Jerzy Wałaszek   

Wynik:
.

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 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.