C#的winform矩阵简单运算


程序截图



关键代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace MatrixMultiplication {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent(); } int[,] A = new int[100,100];
int[,] B = new int[100,100];
int[,] AB = new int[100,100];
int[,] C = new int[100,100];
int[,] D = new int[100,100];
int A_row = 0,A_col = 0;
int B_row = 0,B_col = 0;
int C_row = 0,C_col = 0;
int D_row = 0,D_col = 0;
int AB_row = 0,AB_col = 0; public void readMatrix(TextBox other,char towhere){
if(towhere == 'A') {
string[] arr = new string[other.Lines.Length];
for(int i = 0; i < other.Lines.Length; i++) {
arr[i] = other.Lines[i];
}
string[] tem = arr[0].Split();
A_col = tem.Length;
A_row = other.Lines.Length;
for(int i = 0; i < A_row; i++) {
string[] temp = arr[i].Split();
for(int j = 0; j < A_col; j++) {
A[i,j] = Convert.ToInt32(temp[j]);
}
}
}
else if(towhere == 'B') {
string[] arr = new string[other.Lines.Length];
for(int i = 0; i < other.Lines.Length; i++) {
arr[i] = other.Lines[i];
}
string[] tem = arr[0].Split();
B_col = tem.Length;
B_row = other.Lines.Length;
for(int i = 0; i < B_row; i++) {
string[] temp = arr[i].Split();
for(int j = 0; j < B_col; j++) {
B[i,j] = Convert.ToInt32(temp[j]);
}
}
}
else if(towhere == 'C') {
string[] arr = new string[other.Lines.Length];
for(int i = 0; i < other.Lines.Length; i++) {
arr[i] = other.Lines[i];
}
string[] tem = arr[0].Split();
C_col = tem.Length;
C_row = other.Lines.Length;
for(int i = 0; i < C_row; i++) {
string[] temp = arr[i].Split();
for(int j = 0; j < C_col; j++) {
C[i,j] = Convert.ToInt32(temp[j]);
}
}
}
} public void compute(char Char) {
if(Char == '*') {
AB_row = A_row;
AB_col = B_col;
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
AB[i,j] = 0;
for(int k = 0; k < A_col; k++) {
AB[i,j] += A[i,k] * B[k,j];
}
}
}
}
else if(Char == '+') {
AB_row = A_row;
AB_col = A_col;
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
AB[i,j] = A[i,j] + B[i,j];
}
} }
else if(Char == '-') {
AB_row = A_row;
AB_col = A_col;
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
AB[i,j] = A[i,j] - B[i,j];
}
} }
} private void button1_Click(object sender,EventArgs e) {
if(BoxA.Text == "" || BoxB.Text == "") {
MessageBox.Show("请输入数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
readMatrix(BoxA,'A');
readMatrix(BoxB,'B');
if((A_row != B_col) || (A_col != B_row)) {
MessageBox.Show("行列规则不符合","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
BoxAB.Text = "";
compute('*');
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
BoxAB.Text += AB[i,j].ToString();
BoxAB.Text += " ";
}
BoxAB.Text += "\r\n";
}
} private void btnClear_Click(object sender,EventArgs e) {
A_row = 0; A_col = 0;
B_row = 0; B_col = 0;
AB_row = 0; AB_col = 0;
BoxA.Text = "";
BoxB.Text = "";
BoxAB.Text = "";
} private void Add_Click(object sender,EventArgs e) {
if(BoxA.Text == "" || BoxB.Text == "") {
MessageBox.Show("请输入数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
readMatrix(BoxA,'A');
readMatrix(BoxB,'B');
if((A_row != B_row) || (A_col != B_col)) {
MessageBox.Show("行列规则不符合","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
BoxAB.Text = "";
compute('+');
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
BoxAB.Text += AB[i,j].ToString();
BoxAB.Text += " ";
}
BoxAB.Text += "\r\n";
}
} private void Minus_Click(object sender,EventArgs e) {
if(BoxA.Text == "" || BoxB.Text == "") {
MessageBox.Show("请输入数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
readMatrix(BoxA,'A');
readMatrix(BoxB,'B');
if((A_row != B_row) || (A_col != B_col)) {
MessageBox.Show("行列规则不符合","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
BoxAB.Text = "";
compute('-');
for(int i = 0; i < AB_row; i++) {
for(int j = 0; j < AB_col; j++) {
BoxAB.Text += AB[i,j].ToString();
BoxAB.Text += " ";
}
BoxAB.Text += "\r\n";
}
} private void Trspos_Click(object sender,EventArgs e) {
if(BoxC.Text == "") {
MessageBox.Show("请输入数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
readMatrix(BoxC,'C');
#region 转置算法
D_row = C_col;
D_col = C_row;
for(int i = 0; i < C_row; i++) {
for(int j = 0; j < C_col; j++) {
D[j,i] = C[i,j];
}
}
#endregion
BoxD.Text = "";
for(int i = 0; i < D_row; i++) {
for(int j = 0; j < D_col; j++) {
BoxD.Text += D[i,j].ToString();
BoxD.Text += " ";
}
BoxD.Text += "\r\n";
}
} private void MatrixReturn_Click(object sender,EventArgs e) {
if(BoxC.Text == "") {
MessageBox.Show("请输入数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
readMatrix(BoxC,'C');
if(C_row!=C_col){
MessageBox.Show("该矩阵没有逆矩阵","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
#region 创建double类型二维数组作为结果
double y = 1.0;
double tem,x;
double[,] Return = new double[C_row,C_col*2];
#endregion
#region 求逆算法
for(int i = 0; i < C_row; i++) {
for(int j = 0; j < (2 * C_col); j++) {
if(j < C_row)
Return[i,j] = Convert.ToDouble(C[i,j]);
else if(j == C_row + i)
Return[i,j] = 1.0;
else
Return[i,j] = 0.0; }
}
for(int i = 0; i < C_row; i++) {
for(int k = 0; k < C_row; k++) {
if(k != i) {
tem = Return[k,i] / Return[i,i];
for(int j = 0; j < (2 * C_row); j++) {
x = Return[i,j] * tem;
Return[k,j] -= x;
}
}
}
}
for(int i = 0; i < C_row; i++) {
tem = Return[i,i];
for(int j = 0; j < (2 * C_row); j++) {
Return[i,j] /= tem;
}
}
for(int i = 0; i < C_row; i++) {
y *= Return[i,i];
}
#endregion if(y == 0) {
MessageBox.Show("该矩阵没有逆矩阵","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
} BoxD.Text = "";
for(int i = 0; i < C_row; i++) {
for(int j = 0; j < C_row; j++) {
BoxD.Text += Return[i,j + C_row].ToString("f2");
BoxD.Text += " ";
}
BoxD.Text += "\r\n";
} } private void btnClear2_Click(object sender,EventArgs e) {
BoxC.Text = "";
BoxD.Text = "";
C_row = 0;C_col = 0;
D_row = 0;D_col = 0;
} }
}

完整工程

度盘下载

C#的winform矩阵简单运算的更多相关文章

  1. ACM 16进制的简单运算

    16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果.   输入 第一行输入一个正整 ...

  2. 1、面向对象以及winform的简单运用(开篇)

    面向对象概述: 要学习好面向对象,我们应该从三个问题入手: 1.什么是面向对象? 2.为什么要面向对象? 3.该怎么面向对象? 面向对象,首先要有一个对象,那么对象是什么呢? 对象的定义是人们要进行研 ...

  3. NYOJ--244--16进制的简单运算(C++控制输入输出)

    16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果.   输入 第一行输入一个正整 ...

  4. HDU 2276 Kiki & Little Kiki 2(矩阵位运算)

    Kiki & Little Kiki 2 转载自:点这里 [题目链接]Kiki & Little Kiki 2 [题目类型]矩阵位运算 &题意: 一排灯,开关状态已知,每过一秒 ...

  5. 斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】

    hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个 ...

  6. Redis 的简单运算

    Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...

  7. nyoj 244-16进制的简单运算 (scanf("%x%c%x", &a, &b, &c); printf("%o", a ± b))

    244-16进制的简单运算 内存限制:64MB 时间限制:1000ms 特判: No 通过数:12 提交数:13 难度:1 题目描述: 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结 ...

  8. Matlab矩阵学习三 矩阵的运算

    Matlab矩阵的运算 一.矩阵的加减 在matlab中,矩阵的加减和数的加减符号一样,都是"+"和”-“,不同的是两个进行运算的矩阵维度必须相同  二.数乘  三.乘法 矩阵乘法 ...

  9. 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现

    今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...

随机推荐

  1. Js获取当前日期时间及其它操作(转)

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...

  2. PAT1038. Recover the Smallest Number

    //意识到一个重要错误,一直以为atoi,itoa是windows独有的,linux下不可用,直到刚刚... //string+=比strcat好用多了,字符比较也方便的多,但是用scanf读入str ...

  3. flask-admin

    初始化 class Admin(app=None, name=None, url=None, subdomain=None, index_view=None, translations_path=No ...

  4. 对apply和call的理解

    存在的原因: call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作. call 和 apply 都是 ...

  5. windows server 备份与还原

    1:文件备份: ①Goodsync ②Acronis Backup & Recovery 2:域控&系统备份 ①CMD -- >NTbackup (不支持异机还原) ②Acron ...

  6. 对于返回void类型的asyc的异步方法,如何修改,能使用await

    下面是使用WebClinet 获取百度首页的html代码,一般的写法如下: private void Button_Click(object sender, RoutedEventArgs e) { ...

  7. [原]Python Web部署方式总结

    不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...

  8. Internet Explorer 无法启用 JavaScript 怎么办?

    在 Internet Expllorer 8/9 中,有些同学在浏览网页时,收到提示:“需要启用 JavaScript …”,并且会发现网页上某些功能不能用了,比如点击网页里的按钮没反应等等. 怎么启 ...

  9. 点击后弧形展开的炫酷菜单--第三方开源-- CircularFloatingActionMenu(一)

    CircularFloatingActionMenu在github上项目主页地址:https://github.com/oguzbilgener/CircularFloatingActionMenu ...

  10. 黑白棋游戏 (codevs 2743)题解

    [问题描述] 黑白棋游戏的棋盘由4×4方格阵列构成.棋盘的每一方格中放有1枚棋子,共有8枚白棋子和8枚黑棋子.这16枚棋子的每一种放置方案都构成一个游戏状态.在棋盘上拥有1条公共边的2个方格称为相邻方 ...