39 lines
1.2 KiB
Nim
39 lines
1.2 KiB
Nim
import strutils, sequtils
|
|
|
|
## prints a matrix to the standard output
|
|
proc printMatrix*(matrix: seq[seq[float]]) =
|
|
let row: int = matrix.len
|
|
for i in countup(1, row):
|
|
echo matrix[i-1]
|
|
|
|
## get elements of matrix from standard input
|
|
proc fillMatrix*(matrix: var seq[seq[float]], row, col: int) =
|
|
for i in countup(1, row):
|
|
for j in countup(1, col):
|
|
echo "Enter item:"
|
|
var entry: float = parseFloat(readLine(stdin)) # TODO: while loop to check if input is valid
|
|
matrix[i-1].add(entry)
|
|
matrix[i-1].delete(0)
|
|
echo matrix[i-1]
|
|
|
|
## calculate dot product
|
|
proc dot*(matrix1: seq[seq[float]], matrix2: seq[seq[float]]): seq[seq[float]] =
|
|
let col1: int = matrix1.len
|
|
let row1: int = matrix1[0].len
|
|
let col2: int = matrix2.len
|
|
let row2: int = matrix2[0].len
|
|
var col, row: int
|
|
|
|
if col1 == row2:
|
|
col = col2
|
|
row = row1
|
|
else:
|
|
quit "Matrix dimensions mismatched, operation invalid!", QuitFailure
|
|
|
|
var matrix = newSeqWith(row, newSeq[float](col))
|
|
|
|
for i in countup(0, row1-1):
|
|
for j in countup(0, col2-1):
|
|
for k in countup(0, col1-1):
|
|
matrix[i][j] = matrix[i][j] + matrix1[i][k] * matrix2[k][j]
|
|
return matrix |