c#矩阵行列式计算//线程同步

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 实现矩阵行列式计算
{
    internal class Program
    {
        static void Main(string[] args)
        {//=================================定义矩阵
            Console.WriteLine("矩阵是:");
            double[,] matrix =  {
               //{ 1, 2,3},{  3, 4,5},{  3, 4,7 }
                { 1, 2,4},{  1, 1,3},{  2, 3,5 }
                     };
            //=================================打印矩阵
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j] + " ");
                }
                Console.WriteLine();//输出一行后,换行
            }
            Console.WriteLine();
            //=================================调用计算行列式的静态方法
            double determinant = CalculateDeterminant(matrix);
            Console.WriteLine("矩阵的行列式: " + determinant);
            //=================================计算行列式的静态方法的定义
            Console.WriteLine();
            Console.WriteLine("这是自写程序的结果 ");
            Console.ReadLine();
        }

        static double CalculateDeterminant(double[,] matrix)
        {
            int n = matrix.GetLength(0);
            double determinant = 0;

            if (n == 2)
            {
                // 对于2x2矩阵,直接计算
                determinant = (matrix[0, 0] * matrix[1, 1]) - (matrix[0, 1] * matrix[1, 0]);
            }
            else
            {
                // 对于大于2x2的矩阵,按第一行展开计算
                for (int i = 0; i < n; i++)
                {
                    double[,] subMatrix = new double[n - 1, n - 1];//按第i个元素展开,去掉第i行,第i列,给subMatrix
                    for (int j = 1; j < n; j++)//一共循环n-1次,得到去除第一行第一列的子矩阵
                    {
                        for (int k = 0, l = 0; k < n; k++)
                        {
                            if (k != i)//如果k不等于i,则说明当前列不是第一行的列,将这一列的元素添加到子矩阵中
                            {
                                subMatrix[j - 1, l] = matrix[j, k];//如果当前列不是第一行的列,我们将原矩阵中matrix[j, k]复制到子矩阵subMatrix[j - 1, l]。j-1是子矩阵的行,l是子矩阵的列
                                l++; //放下一个元素
                            }
                        }
                    }
                    determinant += (double)Math.Pow(-1, i) * matrix[0, i] * CalculateDeterminant(subMatrix);//按第i个元素进行行列式计算
                }
            }
            return determinant;
        }
           
    }

}

运形效果:

线程同步:一个线程写缓存,一个线程读缓存.用延时配合

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 线程间的同步
{
    internal class Program
    {//缓冲区,只能容纳一个字符
        private static char buffer;
        //标识量(缓冲区中已使用的空间,初始值为 0 )
        private static long numberOfUsedSpace = 0;
        static void Main(string[] args)
        {//线程:写者
            Thread writer = new Thread(delegate ()
            {
                string sentence = "无可奈何花落去,似曾相识燕归来,小园香径独徘徊。";
                for (int i = 0; i < 24; i++)
                {//写入数据前检查缓冲区是否有一个字符
                 //如果有,就进行等待,直到缓冲区中的数据被进程 reader 读取为止
                    while (Interlocked.Read(ref numberOfUsedSpace) == 1)
                    { Thread.Sleep(800); }//当缓存中数据被读取后此延时不会执行
                    buffer = sentence[i]; //向缓冲区写入数据
                     
                    Interlocked.Increment(ref numberOfUsedSpace); //写入数据后把缓冲区标记为满(由 0 变为 1)
                }
            });
            //线程:读者
            Thread reader = new Thread(delegate ()
            {
                for (int i = 0; i < 24; i++)
                {//读取数据前检查缓冲区是否为空
                 //如果为空,就进行等待,直到进程 writer 向缓冲区中写入数据为止
                    while (Interlocked.Read(ref numberOfUsedSpace) == 0)
                    { Thread.Sleep(200); }
                        char ch = buffer; //从缓冲区读取数据
                    Console.Write(ch);
                    
                    Interlocked.Decrement(ref numberOfUsedSpace);//读取数据后把缓冲区标记为空(由 1 变为 0)

                }
            });
            //启动线程
            writer.Start();
            reader.Start();
            Console.ReadKey();  
        }
    }
}

实际效果:不是一下全部输出的,是一秒输出一个字符.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/370796.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五、MyBatis 高级扩展

本章概要 Mapper 批量映射优化插件和分页插件 PageHelper 插件机制和 PageHelper 插件介绍PageHelper 插件使用 逆向工程和 MybatisX 插件 ORM 思维介绍逆向工程逆向工程插件 MyBatisX 使用 5.1 Mapper 批量映射优化 需求 Mapper 配置文件很多时&#xff0c;在全局配置文件…

【INTEL(ALTERA)】带有浮点单元 (FPU) Nios® V/g 处理器在 英特尔® Cyclone10 GX 设备中执行不正确的浮点运算

说明 由于 英特尔 Quartus Prime Pro Edition 软件版本 23.3 存在一个问题&#xff0c;当使用 Nios V/g 处理器并在 英特尔 Cyclone 10 GX 设备中启用 FPU 时&#xff0c;浮点运算无法按预期进行。 Nios V/g 处理器 – 启用浮点单元 解决方法 请勿在 英特尔 CycloneNios 10 G…

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例&#xff1a;社交媒体数据分析1.1.3 拓展案例1&#xff1a;电商网站价格监控1.1.4 拓展案例2&#xff1a;新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例&#xff1a;股票市场数据采…

fastjson 导致的OOM

fastjson 导致的OOM 示例代码 public static void main(String[] args) throws Exception {try {List<Integer> list JSONObject.parseArray("[2023,2024", Integer.class);}catch (Exception e){System.err.println("error");}System.out.println…

Qos--优先级映射关系

precedence字段 根据RFC791定义,IP报文头 ToS(Type of Service)域由 8个比特组成,其中 3个比特的Precedence字段标识了 IP报文的优先级,Precedence在报文中的位置如图1所示。 比特0~2表示Precedence字段,代表报文传输的 8个优先级,按照优先级从高到低顺序取值为7、6、…

word表格文字上下居中怎么设置?简单教程分享!

“我在使用Word编辑表格时&#xff0c;想让文字上下居中对齐&#xff0c;但是不知道应该怎么操作&#xff0c;请问大家有什么比较简单实用的操作方法吗&#xff1f;” 在使用Word时&#xff0c;为了提高文档的视觉效果和可读性&#xff0c;很多用户会选择将表格文字上下居中&am…

华为突然官宣:新版鸿蒙系统,正式发布

华为&#xff0c;一家始终引领科技创新潮流的全球性企业&#xff0c;近日再次引发行业震动——全新HarmonyOS NEXT&#xff0c;被誉为“纯血版鸿蒙”的操作系统正式官宣。这是华为在操作系统领域迈出的坚实且具有突破性的一步&#xff0c;标志着华为正逐步摆脱对安卓生态系统的…

HTTP学习

HTTP学习 HTTP 协议是 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&#xff0c;是用于从万维网&#xff08; WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP 是一个基于 TCP/IP 通信协议来传递数据&#xff…

小埋的解密游戏的题解

题目描述 小埋最近在玩一个解密游戏&#xff0c;这个游戏的解密方法是这样的&#xff0c;这个游戏会给你提供 个数,让我们求出这 个数里面&#xff0c;有多少个连续的数的平均数大于某个给定的数 。这个数可能会很大&#xff0c;所以我们要输出这个数对 的取模结果。现在小…

珠海盈致MES系统的应用领域

珠海盈致MES系统在多个领域都有应用&#xff0c;以下是一些主要的应用领域&#xff1a; 注塑行业&#xff1a;针对注塑行业的生产特点和要求&#xff0c;MES系统提供了一系列专业的管理功能&#xff0c;满足注塑企业各种实际生产需求。 电子制造&#xff1a;在电子制造领域&…

算法复杂度之大O复杂度表示法及空间复杂度

目录 简介 时间复杂度 大O复杂度表示法 空间复杂度 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xff0c;感受周围…

EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色&#xff08;RGB颜色模型&#xff09; 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数&#xff1a; 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

【Springcloud篇】学习笔记十一(十八章):Seata解决分布式事务问题

第十八章_Seata解决分布式事务问题 1.Seata简介 1.1分布式事务问题由来 分布式前 单机单库没这个问题从1:1 -> 1:N -> N:N 单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源&#xff0c;业务操作需要调用三个…

ref和reactive, toRefs的使用

看尤雨溪说&#xff1a;为什么Vue3 中应该使用 Ref 而不是 Reactive&#xff1f; toRefs import { ref, toRefs } from vue;// 定义一个响应式对象 const state ref({count: 0,name: Vue });// 使用toRefs转换为响应式引用对象 const reactiveState toRefs(state);// 现在你…

BUG:docker启动之后直接退出问题

示例如下&#xff1a; 问题排查&#xff1a; 启动命令 sudo docker run --privilegedtrue --runtimenvidia --shm-size80g -v /mmm_data_center:/mmm_data_center -v /imagecenter_new/:/imagecenter_new -v /data1:/data1 -v /mnt/offline_data/:/mnt/offline_data/ --neth…

python 基础知识点(蓝桥杯python科目个人复习计划32)

今日复习内容&#xff1a;基础算法中的位运算 1.简介 位运算就是对二进制进行操作的运算方式&#xff0c;分为与运算&#xff0c;或运算&#xff0c;异或运算&#xff0c;取反&#xff0c;左移和右移。 &#xff08;1&#xff09;与运算 xyx&y000010100111 (2)或运算 …

UE5动画源码剖析

重点剖析的类&#xff1a; UAnimationInstanceFAnimInstanceProxy 参考&#xff1a;https://zhuanlan.zhihu.com/p/405437842 参考&#xff1a;https://blog.csdn.net/qq_23030843/article/details/109103433 参考&#xff1a;https://ikrima.dev/ue4guide/gameplay-programm…

vue实现带缩略图的轮播图(vue-awesome-swiper)

demo 请复制打开 https://download.lllomh.com/cliect/#/product/E125504451206525 如点击链接跳转失败请复制网址到浏览器打开 1.引入swiper和vue-awesome-swiper插件 npm install swiper4 --save npm install vue-awesome-swiper3 --save2.在main.js中引入&#xff1a; …

vue插槽

1.插槽使用 正常渲染子组件时&#xff0c;如果子组件的起始标签和闭合标签内有内容&#xff0c;内容是无法被渲染出来的&#xff0c;如下图&#xff1a; // Son.vue <template><div>子组件</div> </template>// Parent.vue<Son>123123123</S…

vue3 之 项目创建

1.使用create-vue创建项目 前提环境条件 已安装 16.0 或更高版本的 Node.js 创建一个Vue应用 npm init vuelatest 这一指令将会安装并执行 create-vue 2.熟悉项目目录和关键文件