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

news2024/12/26 23:48:51
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();  
        }
    }
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICV报告:最新排名!北京下降至第三位

2日&#xff0c;面向前沿科技领域的全球咨询机构ICV发布了《GFII-2023 报告》&#xff0c;其中在“2023年全球产业未来评估:未来20个城市”排名中显示&#xff0c;北京排名居世界第三。进入前十名的其他未来产业城市分别是旧金山-圣何塞、伦敦、慕尼黑、波士顿、纽约、东京横滨…

自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

如今&#xff0c;大模型层出不穷&#xff0c;这为自然语言处理、计算机视觉、语音识别和其他领域的人工智能任务带来了重大的突破和进展。大模型通常指那些参数量庞大、层数深、拥有巨大的计算能力和数据训练集的模型。 但不能不承认的是&#xff0c;普通人使用大模型还是有一定…

前端工程化之:webpack2-2(内置插件)

目录 一、内置插件 1.DefinePlugin 2.BannerPlugin 3.ProvidePlugin 一、内置插件 所有的 webpack 内置插件都作为 webpack 的静态属性存在的&#xff0c;使用下面的方式即可创建一个插件对象&#xff1a; const webpack require("webpack")new webpack.插件…

【JVM调优及常见的JVM调优参数以及作用】

JVM调优及常见的JVM调优参数以及作用 JVM调优通常涉及以下几个方面&#xff1a;1. 堆内存调优&#xff1a;2. 垃圾回收调优&#xff1a;3. 线程调优&#xff1a;4. 类加载调优&#xff1a;JVM的优化配置可以通过设置JVM的启动参数来实现。以下是一些常用的JVM优化配置参数及其示…

steam搬砖项目赚钱吗?操作流程看这一篇就够了

很多人应该听说过steam&#xff0c;它是国外一款知名的游戏社交平台&#xff0c;也是目前世界上最大的游戏平台之一。而steam搬砖项目&#xff0c;关键就是靠信息差。我们要做的就是在steam以低价买入道具装备&#xff0c;然后上架到网易buff卖出&#xff0c;赚取差价。 什么人…

新年心愿清单怎么写 用这个软件列心愿清单更方便

新年的钟声在耳畔回荡&#xff0c;我站在窗前&#xff0c;看着外面熙熙攘攘的人群&#xff0c;心中充满了期待。新的一年&#xff0c;新的开始&#xff0c;我有很多心愿想要实现。于是&#xff0c;我决定写下一份心愿清单&#xff0c;给来年定下奋斗的方向。 但是&#xff0c;…

React实例之完善布局菜单(一)

今天我们来用所学的知识来做一个布局菜单的组件, 针对这个组件我之前写过一个教程 React之布局菜单-CSDN博客&#xff0c;那个呢比较基础&#xff0c;这节课算是对那个教程的一个扩展和补充。这个实例讲完&#xff0c;这个系列就算告一段落了。先看效果 这个教程要求对React知识…

uniapp使用u-popup组件弹窗出现页面还可滑动

*1、问题所在&#xff1a; 弹窗遮罩层出现了页面依旧可以上下滑动 2、要求: 为了用户更好交互体验&#xff0c;弹窗出现后应禁止页面往下滑动 3、实现思路&#xff1a; 在弹窗盒子外层添加个阻止触摸冒泡事件&#xff0c;使用touchmove.stop.prevent 4、代码如下&#xff…

Android简单支持项目符号的EditText

一、背景及样式效果 因项目需要&#xff0c;需要文本编辑时&#xff0c;支持项目符号&#xff08;无序列表&#xff09;尝试了BulletSpan&#xff0c;但不是很理想&#xff0c;并且考虑到影响老版本回显等因素&#xff0c;最终决定自定义一个BulletEditText。 先看效果&…

【深度学习】讲透深度学习第3篇:TensorFlow张量操作(代码文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归&#xff08;含代码&#xff09;&#xff0c;熟练掌握numpy,pandas,sklearn等框架使用。在算法上&#xff0c;掌握神经网络的数学原理&#xff0c;手动实…

vue + 动态加载图片

首先尝试我们经常用的require动态引入&#xff0c; 发现报错&#xff1a;require is not defind&#xff0c;这是因为 require 属于 Webpack 的方法&#xff0c;我现在的环境是 vue3.0 vite 1、 适用于处理少量链接的资源文件 import img from ./img.png; <img :src"…

Linux挂载本地ISO镜像源

1 创建挂载镜像的目录 mkdir /opt/rpm2 上传iso镜像到root目录 3 挂载镜像 mount -t iso9660 /root/CentOS-7-x86_64-DVD-2207-02.iso /opt/rpm/ 4 若是ftp文件夹挂载本地 mkdir /opt/iso 将ftp上software/caozuoxitong目录挂载到本地/opt/iso/ 目录 mount -t cifs //172.…

字符串左旋

题目&#xff1a;字符串左旋 内容&#xff1a;实现一个函数&#xff0c;可以左旋字符串中的K个字符。 例如&#xff1a; ABCDEF左旋一个字符可以得到BCDEFA ABCDEF左旋两个字符可以得到CDEFAB 方法一&#xff1a;移动字符 #include <stdio.h> #include <string.h>c…

深入分析AOP+自定义注解+RBAC实现操作权限管理设计思想

深入分析AOP自定义注解RBAC实现操作权限管理设计思想&#xff01;经过三个小节的部署&#xff0c;我们已经把这个思想走了一遍。下面内容是对于此次设计思想的一个详细介绍。帮助大家完善透彻的了解&#xff0c;到底自定义注解是如何实现的。以及&#xff0c;权限管理的核心思想…

程序报错无法打开源文件stdafx.h

在运行代码时&#xff0c;代码中头文件突然报错程序无法打开源文件stdafx.h include “stdafx.h”,编译器就说无法打开源文件&#xff0c;直接上干货解决方法是&#xff1a; 1.打开项目 ->项目属性&#xff08;最后一个&#xff09;-> C/C ->常规&#xff0c; 2在附…

音频几个相关概念及心理声学模型

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍&#xff1a;音频几个相关概念及心理声学模型 https://blog.csdn.net/littlezls/article/details/135499627 音频编解码格式介绍&#xff1a;音频编码格式介绍 https://blog.csdn.net/littlezls/article/d…

nohost本地部署

1、安装node Node.js 官方网站下载&#xff1a;https://nodejs.org/en/download/ 2、安装whistle 安装命令为 npm install -g whistle 或 npm install -g cnpm --registryhttps://registry.npm.taobao.org 后&#xff0c;使用 cnpm install -g whistle 来安装 3、插件修改 官方…

【漏洞库】O2OA系统

O2OA invoke 后台远程命令执行漏洞 CNVD-2020-18740 漏洞描述 O2OA是一款开源免费的企业及团队办公平台&#xff0c;提供门户管理、流程管理、信息管理、数据管理四大平台,集工作汇报、项目协作、移动OA、文档分享、流程审批、数据协作等众多功能&#xff0c;满足企业各类管理…

JavaSE-项目小结-IP归属地查询(本地IP地址库)

一、项目介绍 1. 背景 IP地址是网络通信中的重要标识&#xff0c;通过分析IP地址的归属地信息&#xff0c;可以帮助我们了解访问来源、用户行为和网络安全等关键信息。例如应用于网站访问日志分析&#xff1a;通过分析访问日志中的IP地址&#xff0c;了解网站访问者的地理位置分…

【Docker】Docker Registry(镜像仓库)

文章目录 一、什么是 Docker Registry二、镜像仓库分类三、镜像仓库工作机制四、常用的镜像仓库五、常用命令镜像仓库命令镜像命令(部分)容器命令(部分) 六、docker镜像仓库实战综合实战一&#xff1a;搭建一个 nginx 服务综合实战二&#xff1a;Docker hub上创建自己私有仓库综…