矩阵类(练习)

151 - 矩阵类
Time Limit: 1000   Memory Limit: 65535
Submit: 252  Solved: 137

Description

    利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width():返回矩阵的列数;(4)height():返回矩阵的行数;(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的矩阵;(6)Matrix multiply(Matrix b):返回当前矩阵与矩阵b相乘后的矩阵。(7)Matrix transpose():返回当前矩阵的转置矩阵;(8)toString():以行和列的形式打印出当前矩阵。

Input

    矩阵的行列数
    矩阵的数据
    设置矩阵值的行、列和值
    获取矩阵值的行、列
    待相加矩阵的行列数
    待相加矩阵的值
    待相乘矩阵的行列数
    待相乘矩阵的值

Output

    矩阵的行、列数
    设置矩阵值后的矩阵
    某行某列的矩阵值
    矩阵相加结果
    矩阵相乘结果
    矩阵转置结果

Sample Input

    3 3
    1 2 3
    4 5 6
    7 8 9
    2 3 8
    1 3
    3 3
    1 2 3
    4 5 6
    7 8 9
    3 2
    1 2
    1 2
    1 2

Sample Output

    row:3 column:3
    after set value:
    1 2 3
    4 5 8
    7 8 9
    value on (1,3):3
    after add:
    2 4 6
    8 10 14
    14 16 18
    after multiply:
    6 12
    17 34
    24 48
    after transpose:
    1 4 7
    2 5 8
    3 8 9
import java.math.BigDecimal;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int r, c;
        r = cin.nextInt();
        c = cin.nextInt();
        Matrix matrix = new Matrix(r,c);
        matrix.input(cin);
        System.out.println("row:" + matrix.height() + " " + "column:" + matrix.width());
        r = cin.nextInt();
        c = cin.nextInt();
        double v = cin.nextDouble();
        matrix.set(r,c,v);
        System.out.println("after set value:");
        System.out.print(matrix.toString());
        r = cin.nextInt();
        c = cin.nextInt();
        System.out.println("value on (" + r + "," + c + "):"+new BigDecimal(String.valueOf(matrix.get(r,c))).stripTrailingZeros().toPlainString());
        r = cin.nextInt();
        c = cin.nextInt();
        Matrix tmp = new Matrix(r,c);
        tmp.input(cin);
        System.out.println("after add:");
        System.out.print(matrix.add(tmp).toString());
        System.out.println("after multiply:");
        r = cin.nextInt();
        c = cin.nextInt();
        tmp = new Matrix(r,c);
        tmp.input(cin);
        System.out.print(matrix.multiply(tmp));
        System.out.println("after transpose:");
        System.out.print(matrix.transpose().toString());
    }
}

class Matrix {
    int rowCnt, colCnt;
    double mat[][];
    Matrix(int rowCnt, int colCnt) {
        this.colCnt = colCnt;
        this.rowCnt = rowCnt;
        mat = new double[rowCnt][colCnt];
    }
    public void set(int row, int col, double val) {
        row--;
        col--;
        mat[row][col] = val;
    }
    public double get(int row, int col) {
        row--;
        col--;
        return mat[row][col];
    }

    public int width() {
        return colCnt;
    }

    public int height() {
        return rowCnt;
    }
    public Matrix add(Matrix b) {
        Matrix ret = new Matrix(this.rowCnt, this.colCnt);
        for(int i = 1; i <= rowCnt; i++) {
            for(int j = 1; j <= colCnt; j++) {
                ret.set(i, j, b.get(i,j)+this.get(i,j));
            }
        }
        return ret;
    }
    public Matrix multiply(Matrix b) {
        Matrix ret = new Matrix(this.rowCnt, b.colCnt);
        for(int i = 1; i <= rowCnt; i++) {
            for(int j = 1; j <= b.colCnt; j++) {
                for(int k = 1; k <= colCnt; k++) {
                    ret.set(i, j, ret.get(i, j) + this.get(i, k) * b.get(k, j));
                }
            }
        }
        return ret;
    }
    public Matrix transpose() {
        Matrix ret = new Matrix(this.colCnt, this.rowCnt);
        for(int i = 1; i <= rowCnt; i++) {
            for(int j = 1; j <= colCnt; j++) {
                ret.set(j, i, this.get(i, j));
            }
        }
        return ret;
    }
    public void input(Scanner cin) {
        for(int i = 1; i <= this.rowCnt; i++) {
            for(int j = 1; j <= this.colCnt; j++) {
                double val = cin.nextDouble();
                this.set(i,j,val);
            }
        }
    }
    @Override
    public String toString() {
        String ret = "";
        for(int r = 1; r <= rowCnt; r++) {
            for(int c = 1; c <= colCnt - 1; c++) {
                ret += (new BigDecimal(String.valueOf(this.get(r,c))).stripTrailingZeros().toPlainString() + " ");
            }
            ret += new BigDecimal(String.valueOf(this.get(r,colCnt))).stripTrailingZeros().toPlainString() + "\n";
        }
        return ret;
    }
}
矩阵键盘是一种常用的输入设备,它主要由多个行和列组成,通过按下不同的组合键来输出不同的字符或指令。Arduino作为一种常用的微控制器,可以轻松地与矩阵键盘进行连接,实现输入输出控制。对于初学者而言,用Arduino控制矩阵键盘是一种很好的习题,因为它涉及到数字输入、数组存储、按键扫描及字符显示等多方面的编程知识。 Arduino矩阵键盘练习可以分为以下几个步骤: 1.准备工作:连接矩阵键盘和Arduino开发板,并下载安装相关的Arduino开发软件。 2.键盘扫描:通过使用Arduino或外部库提供的键盘扫描函数,可以获取用户输入的按键所对应的列、行信息。通常情况下,矩阵键盘为4*4或3*4的矩形方阵,需要定义对应的数组用于存储扫描结果。 3.字符映射:获取按键的列、行信息后,需要对应到相应的字符,在Arduino中可以使用switch case语句或者数组查表法来实现。例如,当按下数字“1”的时候,我们需要输出ASCII码值为49的字符“1”,而当按下符号“+”时,则需要输出ASCII码值为43的字符“+”。 4.输出结果:最后,将字符输出到LCD显示器或串口终端上,供用户查看和操作。 通过实际进行Arduino矩阵键盘练习,可以加深对数字信号输入和处理的理解,提高编程技巧和代码逻辑思维能力。同时,还可以为实际项目中的数据采集和控制提供基础支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值