multrix/src/procedures.nim
array-in-a-matrix 71a2b4a057 dot product proc
2022-11-22 20:09:25 -05:00

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 in row:"
var entry: float = parseFloat(readLine(stdin))
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