Dodawanie macierzy


Tematy pokrewne
Macierze
Podstawowe pojęcia dotyczące macierzy
Reprezentacja macierzy w pamięci komputera
Mnożenie macierzy przez skalar
Dodawanie macierzy
Transponowanie macierzy
Mnożenie macierzy
Potęgowanie macierzy
Eliminacja Gaussa
Eliminacja Gaussa-Crouta
Wyznacznik macierzy
Rozkład LU
Rozkład LU – rozwiązywanie układu równań liniowych
Rozkład LU – macierz odwrotna
Rozkład LU – wyznacznik macierzy

Problem

Dodać macierz Bm × n do macierzy Am × n i wynik umieścić w macierzy Cm × n.

 

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

Elementy pomocnicze:
iw  –  indeks wierszowy macierzy, iw N
ik  – indeks kolumnowy macierzy, ik N
Lista kroków:
K01: Dla iw = 1,2,...,m wykonuj K02...K03
K02:   Dla ik = 1,2,...,n wykonuj K03
K03:     C[iw,ik] ← A[iw,ik] + B[iw,ik]
K04: Zakończ

 

Program

Ważne:

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.

 

Lazarus
// Dodawanie macierzy
// Data: 7.01.2010
// (C)2012 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.
Code::Blocks
// Dodawanie macierzy
// Data: 7.01.2010
// (C)2012 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;
}
Free Basic
' Dodawanie macierzy
' Data: 7.01.2010
' (C)2012 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)2012 mgr Jerzy Wałaszek


 

.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.