Mnożenie macierzy przez skalar


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

Pomnożyć macierz Am × n przez skalar c.

 

Operacja mnożenia macierzy Am × n przez skalar c polega na pomnożeniu przez liczbę c wszystkich elementów macierzy.

 

Algorytm mnożenia macierzy przez skalar

Wejście
m  –  liczba wierszy macierzy, m N
n  – liczba kolumn macierzy, n N
A  – macierz o m wierszach i n kolumnach, A R
c  – skalar, c R
Wyjście:

Macierz Am × n pomnożona przez skalar c.

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:     A[iw,ik] ← A[iw,ik] × c
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 macierz o losowej liczbie wierszy (od 2 do 9) i losowej liczbie kolumn (od 2 do 9) oraz losowy skalar z zakresu od -10 do 10. Macierz zostaje wypełniona losowymi liczbami (od 0 do 99).  Program wyświetla m,n, macierz wejściową, c. Następnie mnoży macierz przez skalar i wyświetla macierz wynikową.

 

Lazarus
// Mnożenie macierzy przez skalar
// Data: 6.01.2010
// (C)2012 mgr Jerzy Wałaszek
//-----------------------------

program mmulc;

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

var
  A : MInt;
  c,n,m,iw,ik : integer;

begin

  Randomize;

  // losujemy wymiary macierzy

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

  // tworzymy tablicę wskaźników

  SetLength(A,m);

  // tworzymy tablice wierszy

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

  // wypełniamy macierz losowymi liczbami

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

  // losujemy skalar c

  c := random(21) - 10;

  // wyświetlamy macierz

  writeln('m = ',m);
  writeln('n = ',n);
  writeln;

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

  // wyświetlamy skalar

  writeln; 
  writeln('c = ',c);
  writeln;

  // mnożymy macierz przez skalar

  for iw := 0 to m - 1 do
    for ik := 0 to n - 1 do A[iw][ik] := c * A[iw][ik];

  // wyświetlamy macierz wynikową

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

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

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

end.
Code::Blocks
// Mnożenie macierzy przez skalar
// Data: 6.01.2010
// (C)2012 mgr Jerzy Wałaszek
//-----------------------------

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

using namespace std;

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

  srand((unsigned)time(NULL));

  // losujemy wymiary macierzy

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

  // tworzymy tablicę wskaźników

   A = new int * [m];

  // tworzymy tablice wierszy

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

  // wypełniamy macierz losowymi liczbami

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

  // losujemy skalar c

  c = rand() % 21 - 10;

  // wyświetlamy macierz

  cout << "m = " << m << endl
       << "n = " << n << endl << endl;

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

  // wyświetlamy skalar

  cout << endl << "c = " << c << endl << endl;

  // mnożymy macierz przez skalar

  for(iw = 0; iw < m; iw++)
    for(ik = 0; ik < n; ik++) A[iw][ik] *= c;

  // wyświetlamy macierz wynikową

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

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

  for(iw = 0; iw < m; iw++) delete [] A[iw];
  delete [] A;

  return 0;
}
Free Basic
' Mnożenie macierzy przez skalar
' Data: 6.01.2010
' (C)2012 mgr Jerzy Wałaszek
'-----------------------------

Dim As Integer c,n,m,iw,ik

Randomize

' losujemy wymiary macierzy

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

' tworzymy macierz dynamicznie

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

' wypełniamy macierz losowymi liczbami

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

' losujemy skalar c

c = Int(Rnd(1) * 21) - 10

' wyświetlamy macierz

Print "m = ";m
Print "n = ";n
Print

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

' wyświetlamy skalar

Print
Print "c = ";c
Print

' mnożymy macierz przez skalar

For iw = 1 To m
  For ik = 1 To n
    A(iw,ik) *= c
  Next
Next

' wyświetlamy macierz wynikową

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

End
Wynik
m = 3
n = 4

  16   24   36   85
  69   27   80   45
  33   73   53   22

c = 9

 144  216  324  765
 621  243  720  405
 297  657  477  198
 

Mnożenie macierzy przez skalar
(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.