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

Mnożenie macierzy przez skalar

SPIS TREŚCI
Tematy pomocnicze

Problem

Należy pomnożyć macierz A m  × n przez skalar c.

Rozwiązanie

Operacja mnożenia macierzy A m × 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 A m × n pomnożona przez skalar c.

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:
    A [ i w, i k  ] ← A [ i w, i k  ] × c
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 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ą.
Pascal
// Mnożenie macierzy przez skalar
// Data: 6.01.2010
// (C)2020 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.
C++
// Mnożenie macierzy przez skalar
// Data: 6.01.2010
// (C)2020 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;
}
Basic
' Mnożenie macierzy przez skalar
' Data: 6.01.2010
' (C)2020 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)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.