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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Mnożenie macierzy przez skalar

SPIS TREŚCI
Tematy pomocnicze

Problem

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

Rozwiązanie

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 m wierszach n kolumnach; A ∈ R. Indeksy rozpoczynają się od wartości 1.
c : skalar; c ∈ R.

Wyjście:

Macierz Am×n pomnożona przez skalar c.

Zmienne 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:
         A[iw,ik] ← A[iw,ik]×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ą oraz skalar 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 <ctime>

using namespace std;

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

  srand(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
Python (dodatek)
# Mnożenie macierzy przez skalar
# Data: 8.04.2024
# (C)2024 mgr Jerzy Wałaszek
#-----------------------------

import random

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

m = random.randrange(2,10)
n = random.randrange(2,10)

# tworzymy macierz z losowymi elementami

A = []
for i in range(m):
    a = []
    for j in range(n):
        a.append(random.randrange(100))
    A.append(a)

# losujemy skalar c

c = random.randrange(-10,11)

# wyświetlamy macierz

print("m =",m)
print("n =",n)
print()
mprint(A)

# wyświetlamy skalar

print("c =",c)
print()

# mnożymy macierz przez skalar

for iw in range(m):
    for ik in range(n):
        A[iw][ik] *= c

# wyświetlamy macierz wynikową

mprint(A)

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

del A,a
Wynik:
m = 7
n = 4

    7    3   27   19
   45   87    1   85
   57   44   94   10
   47    4   46   73
   99   49   79    5
    3   79   15   36
   39   82   92   35

c = -6

  -42  -18 -162 -114
 -270 -522   -6 -510
 -342 -264 -564  -60
 -282  -24 -276 -438
 -594 -294 -474  -30
  -18 -474  -90 -216
 -234 -492 -552 -210

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
©2024 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.