C#的winform矩阵简单运算
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矩阵简单运算的更多相关文章
- ACM 16进制的简单运算
16进制的简单运算 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整 ...
- 1、面向对象以及winform的简单运用(开篇)
面向对象概述: 要学习好面向对象,我们应该从三个问题入手: 1.什么是面向对象? 2.为什么要面向对象? 3.该怎么面向对象? 面向对象,首先要有一个对象,那么对象是什么呢? 对象的定义是人们要进行研 ...
- NYOJ--244--16进制的简单运算(C++控制输入输出)
16进制的简单运算 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整 ...
- HDU 2276 Kiki & Little Kiki 2(矩阵位运算)
Kiki & Little Kiki 2 转载自:点这里 [题目链接]Kiki & Little Kiki 2 [题目类型]矩阵位运算 &题意: 一排灯,开关状态已知,每过一秒 ...
- 斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】
hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个 ...
- Redis 的简单运算
Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...
- nyoj 244-16进制的简单运算 (scanf("%x%c%x", &a, &b, &c); printf("%o", a ± b))
244-16进制的简单运算 内存限制:64MB 时间限制:1000ms 特判: No 通过数:12 提交数:13 难度:1 题目描述: 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结 ...
- Matlab矩阵学习三 矩阵的运算
Matlab矩阵的运算 一.矩阵的加减 在matlab中,矩阵的加减和数的加减符号一样,都是"+"和”-“,不同的是两个进行运算的矩阵维度必须相同 二.数乘 三.乘法 矩阵乘法 ...
- 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现
今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...
随机推荐
- 多行文字垂直居中(完美兼容chrome firefox IE6 7 8 9)
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- WP8__从windowsphone app store 中根据app id获取应用的相关信息(下载网址及图片id等)
windows phone 官网应用商店地址 http://www.windowsphone.com/zh-cn/store/featured-apps------------------------ ...
- How to search compound files
Last week my friend told me that she made a terrible mistake. She conducted raw serch and found no s ...
- sublime Text2 2.0.2 build 2221 64位 破解(已测试)
近终于找到 sublime Text2 升级到 2.0.2 build 2221 64位 的破破解 输入注册码就成了 ----- BEGIN LICENSE ----- Andrew Weber S ...
- leetcode 58
58. Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space char ...
- leetcode 26
26. Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...
- 用户 'IIS APPPOOL\Classic .NET AppPool' 登录失败。
“用户 'IIS APPPOOL/Classic .NET AppPool' 登录失败”的解决方法 错误: “/”应用程序中的服务器错误. 用户 'IIS APPPOOL\Classic .NET ...
- myeclipse上SVN代码合并详细步骤图解
1. 在装有svn插件的myeclipse中,在主干上选择需要合并的文件或文件夹 右击 -> 合并(merge) 2. 选择合并类型--合并两个不同的树 Merge -> Next 3. ...
- Jquery动画效果--地铁站名指示等效果
源码参考:源码爱好者--jQuery仿地铁线路指示灯效果,经修改和美化,特此记录一下. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...
- Windows 2003 FastCgi安装环境
Windows 2003 IIS+PHP5.4.3 安装教程 一.准备相关组件 安装前,先安装IIS. 1.安装FastCgi for IIS6 Fastcgi官方网址是:http://www.iis ...