Witam! Wziąłem się od wczoraj za ogarnianie języka Ruby i natknąłem się na trudności przy mnożeniu dwóch macierzy o wymiarach X na Y (użytkownik sam podaje rozmiar macierzy oraz ich elementy). Otóż chodzi o to, że jak tworzę macierz:
Matrix1 = Array.new( lwierszy, Array.new( lkolumn, 0 ) ) - to wtedy, gdy chcę podstawić jakąś wartość np. do macierzy 3x3:
Matrix1[1][0] = 5 - to on podstawia mi wtedy tą wartość do każdego wiersza, tzn [ [5,0,0],[5,0,0],[5,0,0]], a chciałbym, żeby podstawił tylko do:
[ [0,0,0],[5,0,0],[0,0,0]]. Proszę o pomoc! Ja już nie mam pomysłu jak sobie z tym poradzić. Zamieszczam na wszelki wypadek jeszcze kod programu:
puts “Mnozenie macierzy”
lwierszy = 0;
lkolumn = 0;
lwierszy2 = 0;
lkolumn2 = 0;
puts “Podaj liczbe wierszy pierwszej macierzy”
lwierszy = gets.to_i
puts “Podaj liczbe kolumn pierwszej macierzy”
lkolumn = gets.to_i
Matrix1 = Array.new( lwierszy, Array.new( lkolumn, 0 ) )
puts “Podaj liczbe wierszy drugiej macierzy”
lwierszy2 = gets.to_i
puts “Podaj liczbe kolumn drugiej macierzy”
lkolumn2 = gets.to_i
Matrix2 = Array.new( lwierszy2, Array.new( lkolumn2, 0 ) )
if lkolumn != lwierszy2
puts “Macierzy o takich rozmiarach nie mozna pomnozyc”
system( “Pause” )
exit( 0 )
end
for loop in 0 … lwierszy
for loop2 in 0 … lkolumn
printf( "Podaj element macierzy pierwszej [%d] [%d] = ", loop, loop2 )
Matrix1[ loop ][ loop2 ] = gets.to_i
end
end
for loop in 0 … lwierszy2
for loop2 in 0 … lkolumn2
printf( "Podaj element macierzy drugiej [%d] [%d] = ", loop, loop2 )
Matrix2[ loop ][ loop2 ] = gets.to_i
end
end
puts “Macierz pierwsza:”
for loop in 0 … lwierszy
for loop2 in 0 … lkolumn
printf( "%d ", Matrix1[ loop ][ loop2 ] )
end
printf( “\n” )
end
puts “Macierz druga:”
for loop in 0 … lwierszy2
for loop2 in 0 … lkolumn2
printf( "%d ", Matrix2[ loop ][ loop2 ] )
end
printf( “\n” )
end
Matrix3 = Array.new( lwierszy, Array.new( lkolumn2, 0 ) )
puts “Wynik mnozenia obu macierzy”
for loop in 0 … lwierszy
for loop2 in 0 … lkolumn2
for loop3 in 0 …lwierszy
Matrix3[ loop ][ loop2] += Matrix1[ loop ][ loop3 ] * Matrix2[ loop3 ][ loop2 ]
end
printf( "%d ", Matrix3[ loop ][ loop2 ] )
end
printf( “\n” )
end