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. 智能指针(三):unique_ptr使用简介

    我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如 ...

  2. navicat 连接oracle

    Navicat远程连接oracle数据库数据库需要设置一下oci.dll. 下面介绍如何进行设置. 工具/原料   Navicat Pre instantclient-basiclite-nt-12. ...

  3. python md5

    import hashlib import os 简单的测试一个字符串的MD5值 src = 'teststring' print (hashlib.md5(src).hexdigest().uppe ...

  4. SQL Server 数据库设计

    一.数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置.如果不经过数据库的设计,我们构建的数据库不 ...

  5. iPhone 6 (iOS 9.2) extractiion failed by XRY

    My colleague extracted an iPhone 6 with XRY and it is iOS 9.2 . Unfortunately the Wizard crashed and ...

  6. 常用的MyEclipse快捷键

    在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当需要恢复代码功能的时候,又可以用Ctrl+/ 去掉注释.这 ...

  7. js事件 event.target

    我们购物车里,会时不时增加和删除产品时,就会绑定事件和解绑的动作. <ul> <li></li> <li></li> </ul> ...

  8. 01-实现图片按钮的缩放、动画效果(block的初步应用)

    #import "ViewController.h" #define kDelta 60 @interface ViewController () @end @implementa ...

  9. 转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789

    相关文章: http://www.360doc.com/content/13/1003/23/14070959_318861279.shtml http://www.360doc.com/conten ...

  10. 获取屏幕分辨率(C/C++)

    C/C++获取屏幕分辨率的方法 int main(int argc, char* argv[]) { // 需要添加头文件: // #include <Windows.h> system( ...