齐小娅 2022-05-18 17:29 采纳率: 50%
浏览 36
已结题

qt矩阵 按照下面图片 写代码

img


需要再qt中可以正常实现图片上的代码运行,多谢各位 麻烦了 谢谢各位

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2022-05-18 19:04
    关注

    Qt控制台项目还是纯C++项目,稍微有点差别(头文件和返回值有差别,Qt控制台项目多一个函数调用,代码都贴出来了)。
    运行结果:

    img

    Qt控制台项目代码:

    #include <QCoreApplication>
    
    #include <iostream>
    #include <time.h>
    using namespace std;
    int main(int argc, char* argv[])
    {
        QCoreApplication a(argc, argv);
    
        srand((unsigned int)time(0));
    
        int nmbxt = 0, nmbgz = 0; //系统和故障个数
        cout << "请输入故障数和系统数:";
        cin >> nmbgz >> nmbxt; //输入故障数和系统数量
    
        //矩阵
        int** matrix = new int* [nmbgz];
        for (int i = 0; i < nmbxt; i++)
            matrix[i] = new int[nmbxt];
    
        int* gz = new int[nmbgz]; //故障类型 0表示一定发生,1表示可能发生,2表示一定不发生
        for (int i = 0; i < nmbgz; i++)
            gz[i] = 2;
    
        //随机生成矩阵
        int once = 0; //
        int count = 0;
        for (int i = 0; i < nmbxt; i++)
        {
            count = 0;
            for (int j = 0; j < nmbgz; j++)
            {
                matrix[j][i] = rand() % 2;
                if (matrix[j][i] == 1)
                {
                    count++;
                }
            }
    
            if (count == 1)
                once = 1;
        }
    
        //如果没有1,则随机选一个元素设置为1
        if (once == 0)
        {
            int index = rand() % nmbgz;
            int xt = rand() % nmbxt;
            for (int i = 0; i < nmbgz; i++)
                matrix[i][xt] = 0;
            matrix[index][xt] = 1;
    
        }
    
    
        //输出矩阵
        for (int i = 0; i < nmbgz; i++)
        {
            cout << "故障" << i+1 << "    ";
            for (int j = 0; j < nmbxt; j++)
                cout << matrix[i][j];
            cout << endl;
        }
        //计算每种故障的可能性
        int gs_must = 0;
        int gs_may = 0;
        int gs_no = 0;
        //1.先找一定会发生的故障
        for (int i = 0; i < nmbxt; i++)
        {
            int tms = 0;
            int gzindex = 0;
            for (int j = 0; j < nmbgz; j++)
            {
                if (matrix[j][i] == 1)
                {
                    tms++;
                    gzindex = j;
                }
            }
            
            if (tms == 1)
            {
                gz[gzindex] = 0; //一定发生
                gs_must++;
            }
                
        }
       
        //2 再找可能发生的故障
        for (int i = 0; i < nmbxt; i++)
        {
            for (int j = 0; j < nmbgz; j++)
            {
                if (matrix[j][i] == 1)
                {
                    if (gz[j] == 0) //如果一定发生
                        continue;
                    else
                    {
                        gz[j] = 1; //可能发生
                        
                    }
                        
                }
            }
           
    
        }
    
    
        //输出
        if (gs_must)
        {
            cout << "故障";
            for (int i = 0; i < nmbgz; i++)
            {
                if (gz[i] == 0)
                    cout << i + 1 << " ";
            }
            cout << "一定发生";
        }
        
        cout << ",故障";
        for (int i = 0; i < nmbgz; i++)
        {
            if (gz[i] == 1)
            {
                gs_may++;
                cout << i + 1 << " ";
            }
    
        }
        cout << "可能发生";
    
        
        if (gs_must + gs_may < nmbgz)
        {
            cout << ",故障";
    
            for (int i = 0; i < nmbgz; i++)
            {
                if (gz[i] == 2)
                    cout << i + 1 << " ";
            }
            cout << "一定不发生" << endl;
        }
    
       
        return a.exec();
    }
    
    
    

    纯C++代码:

    //#include <QCoreApplication>
    
    #include <iostream>
    #include <time.h>
    using namespace std;
    int main(int argc, char* argv[])
    {
        //QCoreApplication a(argc, argv);
    
        srand((unsigned int)time(0));
    
        int nmbxt = 0, nmbgz = 0; //系统和故障个数
        cout << "请输入故障数和系统数:";
        cin >> nmbgz >> nmbxt; //输入故障数和系统数量
    
        //矩阵
        int** matrix = new int* [nmbgz];
        for (int i = 0; i < nmbxt; i++)
            matrix[i] = new int[nmbxt];
    
        int* gz = new int[nmbgz]; //故障类型 0表示一定发生,1表示可能发生,2表示一定不发生
        for (int i = 0; i < nmbgz; i++)
            gz[i] = 2;
    
        //随机生成矩阵
        int once = 0; //
        int count = 0;
        for (int i = 0; i < nmbxt; i++)
        {
            count = 0;
            for (int j = 0; j < nmbgz; j++)
            {
                matrix[j][i] = rand() % 2;
                if (matrix[j][i] == 1)
                {
                    count++;
                }
            }
    
            if (count == 1)
                once = 1;
        }
    
        //如果没有1,则随机选一个元素设置为1
        if (once == 0)
        {
            int index = rand() % nmbgz;
            int xt = rand() % nmbxt;
            for (int i = 0; i < nmbgz; i++)
                matrix[i][xt] = 0;
            matrix[index][xt] = 1;
    
        }
    
    
        //输出矩阵
        for (int i = 0; i < nmbgz; i++)
        {
            cout << "故障" << i+1 << "    ";
            for (int j = 0; j < nmbxt; j++)
                cout << matrix[i][j];
            cout << endl;
        }
        //计算每种故障的可能性
        int gs_must = 0;
        int gs_may = 0;
        int gs_no = 0;
        //1.先找一定会发生的故障
        for (int i = 0; i < nmbxt; i++)
        {
            int tms = 0;
            int gzindex = 0;
            for (int j = 0; j < nmbgz; j++)
            {
                if (matrix[j][i] == 1)
                {
                    tms++;
                    gzindex = j;
                }
            }
            
            if (tms == 1)
            {
                gz[gzindex] = 0; //一定发生
                gs_must++;
            }
                
        }
       
        //2 再找可能发生的故障
        for (int i = 0; i < nmbxt; i++)
        {
            for (int j = 0; j < nmbgz; j++)
            {
                if (matrix[j][i] == 1)
                {
                    if (gz[j] == 0) //如果一定发生
                        continue;
                    else
                    {
                        gz[j] = 1; //可能发生
                        
                    }
                        
                }
            }
           
    
        }
    
    
        //输出
        if (gs_must)
        {
            cout << "故障";
            for (int i = 0; i < nmbgz; i++)
            {
                if (gz[i] == 0)
                    cout << i + 1 << " ";
            }
            cout << "一定发生";
        }
        
        cout << ",故障";
        for (int i = 0; i < nmbgz; i++)
        {
            if (gz[i] == 1)
            {
                gs_may++;
                cout << i + 1 << " ";
            }
    
        }
        cout << "可能发生";
    
        
        if (gs_must + gs_may < nmbgz)
        {
            cout << ",故障";
    
            for (int i = 0; i < nmbgz; i++)
            {
                if (gz[i] == 2)
                    cout << i + 1 << " ";
            }
            cout << "一定不发生" << endl;
        }
    
        return 0;
        //return a.exec();
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 已采纳回答 5月19日
  • 创建了问题 5月18日

悬赏问题

  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码