Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::ops::{AddAssign, MulAssign};
- use std::fmt::Display;
- struct Matrix<T: AddAssign + MulAssign + Clone + Display + Copy> {
- rows: usize,
- columns: usize,
- m: Vec<Vec<T>>,
- }
- impl<T: AddAssign + MulAssign + Clone + Display + Copy> Matrix<T> {
- fn from(vector: Vec<Vec<T>>) -> Self {
- Self {
- rows: vector.len(),
- columns: vector[0].len(),
- m: vector,
- }
- }
- fn get(&self, row: usize, column: usize) -> &T {
- &self.m[row][column]
- }
- fn get_row(&self, row: usize) -> &Vec<T> {
- &self.m[row]
- }
- fn set(&mut self, row: usize, column: usize, value: T) {
- self.m[row][column] = value;
- }
- fn multiply_row(&mut self, row: usize, value: T) {
- for i in 0..self.columns {
- self.m[row][i] *= value;
- }
- }
- fn interchange(&mut self, row1: usize, row2: usize) {
- let temp = self.m[row1].clone();
- self.m[row1] = self.m[row2].clone();
- self.m[row2] = temp;
- }
- fn multiply_and_add(&mut self, row1: usize, row2: usize, value: T) {
- let mut row = self.m[row1].clone();
- for n in &mut row {
- *n *= value;
- }
- for i in 0..self.columns {
- self.m[row2][i] += row[i];
- }
- }
- fn print(&self) {
- print!("┍");
- for _ in 0..self.columns {
- print!("{:5}", " ");
- }
- println!(" ┑");
- for row in &self.m {
- print!("│");
- for n in row {
- print!("{:5}", n);
- }
- println!(" │");
- }
- print!("┕");
- for _ in 0..self.columns {
- print!("{:5}", " ");
- }
- println!(" ┙");
- }
- }
- fn main() {
- let mut v = vec![vec![0.0, 1.0, 2.0, 3.0],
- vec![1.0, 2.0, 3.0, 4.0],
- vec![9.0, 3.2, 5.3, 1.0]];
- let mut m: Matrix = Matrix::from(v);
- m.print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement