精华内容
下载资源
问答
  • C++离散数学算法判断对称矩阵,是一个6*6的矩阵,输入时候可要仔细一点,输入错误的话矩阵就没意义了,VC++写这类矩阵程序,其实也并不复杂哦,判断是否是配对矩阵,其实是很有意思的事。
  • 内容索引:VC/C++源码,算法相关,离散数学,真值表 不用介绍了吧,离散数学的玩意,求真值表,用C++编程序实现的,可以学习一下哦。
  • c++离散数学】由合式公式生成多层真值表
  • C/C++ 离散数学程序实现(总和篇)

    千次阅读 2020-06-16 11:56:23
    一、求两个集合的交集、并集、差集 二、生成包含三个变量和两个逻辑连接词的真值表 三、等价关系判定 四、关系的闭包运算 warshall算法 五、偏序关系上的最大最小极大极小元 六、图中两个顶点的通路数

    目录:
    一、求两个集合的交集、并集、差集
    二、生成包含三个变量和两个逻辑连接词的真值表
    三、等价关系判定
    四、关系的闭包运算 warshall算法
    五、偏序关系上的最大最小极大极小元
    六、图中两个顶点的通路数

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    1、题目:求两个集合的交集、并集、差集

    1.1代码

    #include <iostream>
    #include <stdio.h>
    #include <string>
    using namespace std;
    //集合的交集、并集运算
    string quchong(string str)          //字符串去重
    {
    	if(str.size()<2)   return str;
    	string tmp_str("\0");
    	tmp_str += str[0];
    	string::size_type j;
    	for(string::size_type i=1 ; i<str.size() ; i++)
    	{
    		for(j=0 ; j<tmp_str.size() ; j++)
    			if(tmp_str[j]==str[i])  break;
    		if(j==tmp_str.size())   tmp_str+=str[i];
    	}
    	return tmp_str;
    }
    //集合的差集、补集运算
    string quziji(string str,string temp)      //字符串去子集
    {
        string result ;
        for (int i = 0; i < str.size(); i++)
        {
            int flag = 0;
            for (int j =0;j < temp.size();j++)
                if (temp[j] == str[i])  flag = 1;
            if (flag == 0)  result += str[i];
        }
        return result;
    }
    
    int main()
    {
        int choice;
        printf("若求交集、并集输入1,若求差集输入2,请输入:");
        cin>>choice;
        string str1,str2,str3;
        char temp[128];
        int len1,len2,num=0,k;
        cout<<"请输入集合1:";
        cin>>str1;
        cout<<"请输入集合2:";
        cin>>str2;
        len1 = str1.length();
        len2 = str2.length();
        str3 = str1 + str2;
    
        for(int i = 0;i < len1; i++)
            for(int j = 0;j < len2 ; j++)
                if(str1[i] == str2[j]) temp[num++]=str1[i];
        temp[num] = '\0';
    
        if(choice == 1) cout<<"两集合交集为:"<<quchong(temp)<<endl;
        if(choice == 1) cout<<"两集合并集为:"<<quchong(str3)<<endl;
        if(choice == 2)
        {
            cout<<"集合1对集合2的差集:"<<quchong(quziji(str1,quchong(temp)))<<endl;
            cout<<"集合2对集合1的差集:"<<quchong(quziji(str2,quchong(temp)))<<endl;
        }
    }
    

    1.2测试

    453fsdf
    Fdg4234

    1.3结果

    在这里插入图片描述
    在这里插入图片描述

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    2、题目:生成包含三个变量和两个逻辑连接词的真值表

    2.1代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    //打印表头
    void printtitle(char a,char b,char c,int one,int two)
    {
    	printf("%c    %c    %c     %c",a,b,c,a);
        switch(one)
    	{
    	    case 0:printf("~%c",b);break;
    		case 1:printf("^%c",b);break;
    		case 2:printf("\\/%c",b);break;
    		case 3:printf("->%c",b);break;
    		case 4:printf("<->%c",b);break;
    	}
    	switch(two)
    	{
    		case 0:printf("~%c\n",c);break;
    		case 1:printf("^%c\n",c);break;
    		case 2:printf("\\/%c\n",c);break;
    		case 3:printf("->%c\n",c);break;
    		case 4:printf("<->%c\n",c);break;
    	}
    }
    //真值运算
    int yunsuan(int p,int q,int connective)
    {
        if(connective==1)
    	{
    		return p*q;
    	}
    	else if(connective==2)
    	{
    		return ((p+q)/2+(p+q)%2);
    	}
    	else if(connective==3)
    	{
    		if(p==0)
    			return 1;
    		else
    		{
    			if(q==1)
    				return 1;
    			else
    				return 0;
    		}
    	}
    	else if(connective==4)
    	{
    		if(p==q)
    			return 1;
    		else
    			return 0;
    	}
    }
    
    int main()
    {
    //输入
        char a,b,c;
        int m,n;
        cout<<"逻辑联结词选择:“非”请输入0,“与”请输入1,“或”请输入2,“蕴涵”请输入3,“双向蕴涵”请输入4!"<<endl;
        cout<<"输入第1个变量:";         cin>>a;
        cout<<"输入第一个逻辑连接词:";  cin>>m;
        cout<<"输入第2个变量:";         cin>>b;
        cout<<"输入第二个逻辑连接词:";  cin>>n;
        cout<<"输入第3个变量:";         cin>>c;
    //输出表头
        printtitle(a,b,c,m,n);
    //输出格式及运算结果
        int i,j,k;
        for (i=0;i<2;i++)
        {
            for (j=0;j<2;j++)
            {
                for (k=0;k<2;k++)
                {
                    printf("%d    %d    %d      ",i,j,k);
                    if(m<=n) cout<<yunsuan(yunsuan(i,j,m),k,n)<<endl;
                    else cout<<yunsuan(i,yunsuan(j,k,n),m)<<endl;
                }
            }
        }
    return 0;
    }
    

    2.2测试

    a
    1
    b
    4
    c

    2.3结果

    在这里插入图片描述

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    3、题目:等价关系判定

    3.1代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    //等价关系:满足自反对称传递
    int main()
    {
    //输入
        int n,num[20][20];
        cout<<"请输入该关系矩阵阶数:";
        cin>>n;
        for (int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                cin>>num[i][j];
        }
    //自反判断
        for(int i = 0;i<n;i++)
        {
            if(num[i][i] != 1)
            {
                cout<<"非等价关系"<<endl;
                return 0;
            }
        }
    //对称判断
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            {
                if (i != j)
                {
                    if(num[i][j] != num[j][i])
                    {
                        cout<<"非等价关系"<<endl;
                        return 0;
                    }
                }
            }
    //可传递判断(算法)
        int num0[20][20];
        //矩阵相乘
        int temp=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                temp = 0;
                for (int m=0;m<n;m++)
                    temp += num[i][m]*num[m][j];
                num0[i][j] = temp;
            }
        }
    
        //子集判断
        for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < n; j++)
    		{
    			if (num[i][j] == 0)
    			{
    				if (num0[i][j] != 0)
    				{
    					cout << "非等价关系"<<endl;
    					return 0;
    				}
    			}
    		}
    	}
    //最后结果
        cout<<"是等价关系"<<endl;
        return 0;
    }
    
    

    3.2测试

    5
    1 1 0 0 0
    1 1 1 0 1
    0 1 1 1 0
    0 0 1 1 1
    0 1 0 1 1

    5
    1 0 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    0 0 0 0 1

    3.3结果

    在这里插入图片描述
    在这里插入图片描述

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    4、题目:关系的闭包运算 warshall算法

    4.1代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    int main()
    {
    //输入
        int n=0,num[20][20];
        char name[20];
        cout<<"请输入元素个数:";
        cin>>n;
        cout<<"请输入关系矩阵:\n";
        for (int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                cin>>num[i][j];
        }
    
    //warshall算法
        for (int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(num[j][i])
                    for (int m=0;m<n;m++)
                        num[j][m] = num[j][m] + num[i][m];
            }
        }
    //输出
        cout<<"----------传递闭包关系矩阵----------\n";
        for (int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(num[i][j] > 1)
                    num[i][j] = 1;
                cout<<num[i][j]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    
    

    4.2测试

    4
    0 1 0 0
    1 0 1 0
    0 0 0 1
    1 0 1 1

    4.3结果

    在这里插入图片描述

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    5、题目:偏序关系上的最大最小极大极小元

    5.1代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    //偏序关系上的最大最小极大极小元
    //判断除主对角线上的数
    int main()
    {
        int n,num[20][20];
        cout<<"请输入集合中元素个数:";
        cin>>n;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                cin>>num[i][j];
        }
    //最大元判定(列全1)
        int flag=0;
        cout<<"最大元为:";
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if (i!=j)
                {
                    if(num[j][i] == 0)
                        flag = 1;
                }
            }
            if (flag == 0)
            {
                cout<<i+1<<" ";
            }
            flag = 0;
        }
        cout<<endl;
    //极大元判定(行全0)
        cout<<"极大元为:";
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if (i!=j)
                {
                    if(num[i][j] == 1)
                        flag = 1;
                }
            }
            if (flag == 0)
            {
                cout<<i+1<<" ";
            }
            flag = 0;
    
        }
        cout<<endl;
    //最小元判定(行全1)
        cout<<"最小元为:";
       for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if (i!=j)
                {
                    if(num[i][j] == 0)
                        flag = 1;
                }
            }
            if (flag == 0)
            {
                cout<<i+1<<" ";
            }
            flag = 0;
        }
        cout<<endl;
    //极小元判定(列全0)
        cout<<"极小元为:";
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if (i!=j)
                {
                    if(num[j][i] == 1)
                        flag = 1;
                }
            }
            if (flag == 0)
            {
                cout<<i+1<<" ";
            }
            flag = 0;
        }
        cout<<endl;
    }
    
    

    5.2测试

    6
    1 1 1 0 1 1
    0 1 0 0 0 1
    0 0 1 0 1 1
    0 0 0 1 0 1
    0 0 0 0 1 1
    0 0 0 0 0 1

    5.3结果

    在这里插入图片描述

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610

    6、题目:图中两个顶点的通路数

    6.1代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int main()
    {
    //输入
        int n;
        int num1[10][10]={0};
        int num[10][10];
        cin>>n;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                cin>>num[i][j];
            }
        }
    //矩阵乘法
        int temp=0;
        for(int k=0;k<n-1;k++)        //k阶
        {
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    temp = 0;
                    for (int m=0;m<n;m++)
                        temp += num[i][m]*num[m][j];
                    num1[i][j] = temp;
                }
            }
        }
    //输出答案
        printf("----------------------------------\n");
        int sum=0;
        int x,y;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                cout<<num1[i][j]<<" ";
            }
            printf("\n");
        }
    
        cout<<"输入起始点:";
        cin>>x>>y;
        cout<<num1[x-1][y-1];
    }
    
    

    6.2测试

    4
    1 2 3 4
    1 2 3 4
    1 2 3 4
    1 2 3 4

    6.3结果

    在这里插入图片描述

    展开全文
  • 采用C/C++/其它语言编程,构造一个n阶群<G={a,b,c,…},*>,G的阶|G|满足:3<=|G|<=6 1、判断该群是否是循环群,若是,输出该群的某个生成元。 2、给出每一个元素的阶和逆元 1 #include<...

    采用C/C++/其它语言编程,构造一个n阶群<G={a,b,c,…},*>,G的阶|G|满足:3<=|G|<=6

    1、判断该群是否是循环群,若是,输出该群的某个生成元。

    2、给出每一个元素的阶和逆元

      1 #include<iostream>
      2 
      3 using namespace std;
      4 //返回元素下标
      5 //n为集合元素个数,set[]为存放元素集合,s为要求下标的元素
      6 int sub(int n, char set[], char s)
      7 {
      8     for (int i = 0; i < n; i++)
      9     {
     10         if (set[i] == s)
     11             return i;
     12     }
     13 }
     14 
     15 //判断群是不是循环群
     16 //n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
     17 int Iscyc(int n, char set[], char ele[][6])
     18 {
     19     int x, count;
     20     int cnt;
     21     for (int i = 0; i < n; i++)
     22     {
     23         count = 0;//计量---集合中的元素是否由set[i]的幂组成
     24 
     25         for (int j = 0; j < n; j++)
     26         {
     27             x = i;
     28             cnt = 2;//防止死循环
     29             if (set[j] == set[i])
     30                 count++;
     31             if (set[j] == ele[x][i])
     32                 count++;
     33 
     34             while (set[j] != ele[x][i] && cnt < n)
     35             {
     36                 x = sub(n, set, ele[x][i]);
     37                 cnt++;
     38                 if (set[j] == ele[x][i])
     39                     count++;
     40             }
     41 
     42 
     43         }
     44         if (count == n)
     45             return 1;
     46     }
     47     return 0;
     48 
     49 }
     50 
     51 //输出循环群的生成元
     52 //n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
     53 void gen(int n, char set[], char ele[][6])
     54 {
     55     int x, count;
     56     int cnt;
     57     for (int i = 0; i < n; i++)
     58     {
     59         count = 0;
     60         for (int j = 0; j < n; j++)
     61         {
     62             x = i;
     63             cnt = 2;
     64             if (set[j] == set[i])
     65                 count++;
     66             if (set[j] == ele[x][i])
     67                 count++;
     68             while (set[j] != ele[x][i] && cnt < n)
     69             {
     70                 x = sub(n, set, ele[x][i]);
     71                 cnt++;
     72                 if (set[j] == ele[x][i])
     73                     count++;
     74             }
     75         }
     76         if (count == n)
     77             cout << "循环群的生成元是:" << set[i] << endl;
     78     }
     79 }
     80 
     81 //给出群中每个元素的阶
     82 //n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组,ie为幺元
     83 void order(int n, char set[], char ele[][6], char ie)
     84 {
     85     int  x, cnt;
     86     for (int i = 0; i < n; i++)
     87     {
     88         if (set[i] != ie)
     89         {
     90             x = i;
     91             cnt = 2;
     92             if (ele[x][i] == ie)
     93                 cout << set[i] << "的阶是" << cnt << endl;
     94             while (ele[x][i] != ie)
     95             {
     96                 x = sub(n, set, ele[x][i]);
     97                 cnt++;
     98                 if (ele[x][i] == ie)
     99                 {
    100                     cout << set[i] << "的阶是" << cnt << endl;
    101                     break;
    102                 }
    103             }
    104         }
    105         else
    106             cout << set[i] << "的阶是1" << endl;
    107     }
    108 
    109 
    110 }
    111 
    112 //输出群中每个元素的逆元
    113 //n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
    114 //ie为幺元
    115 void inver(int n, char set[], char ele[][6], char ie)
    116 {
    117 
    118     for (int i = 0; i < n; i++)
    119         for (int j = 0; j < n; j++)
    120         {
    121             if (ele[i][j] == ie)
    122             {
    123                 cout << set[i] << "的逆元是" << set[j] << endl;
    124                 break;
    125             }
    126         }
    127 
    128 
    129 }
    130 
    131 
    132 int main()
    133 {
    134     cout << "请输入元素的个数(要求3到6之间)" << endl;
    135     int inputnum;
    136     cin >> inputnum;
    137     cout << "请输入元素" << endl;
    138     char Y[4];
    139     for (int i = 0; i < inputnum; i++)
    140     {
    141         cin >> Y[i];
    142     }
    143     cout << "请输入群的幺元" << endl;
    144     char e;
    145     cin >> e;
    146     char outputform[7][7];
    147     char out1[6][6];
    148     outputform[0][0] = '*';
    149     for (int i = 1; i <= inputnum; i++)
    150     {
    151         outputform[0][i] = Y[i - 1];
    152         outputform[i][0] = Y[i - 1];
    153     }
    154     int m;
    155     for (int i = 0; i < inputnum; i++)
    156     {
    157         if (Y[i] == e)
    158         {
    159             m = i;
    160             break;
    161         }
    162     }
    163     int n = m;
    164     int r = m;
    165     for (int i = 0; i < inputnum; i++)
    166     {
    167         out1[n%inputnum][m] = Y[n%inputnum];
    168         n = n + 1;
    169     }
    170     int q;
    171     for (int i = 0; i < inputnum; i++)
    172     {
    173         q = 0;
    174         for (int y = 0; y < inputnum; y++)
    175         {
    176             if (out1[i][m] == Y[y])
    177             {
    178                 q = y;
    179                 break;
    180             }
    181         }
    182         for (int j = m; j < inputnum + m; j++)
    183         {
    184             out1[i][j%inputnum] = Y[q%inputnum];
    185             q++;
    186         }
    187     }
    188     for (int i = 1; i <= inputnum; i++)
    189     {
    190         for (int j = 1; j <= inputnum; j++)
    191         {
    192             outputform[i][j] = out1[i - 1][j - 1];
    193         }
    194     }
    195     for (int i = 0; i <= inputnum; i++)
    196     {
    197         for (int j = 0; j <= inputnum; j++)
    198         {
    199             cout << outputform[i][j] << ' ';
    200         }
    201         cout << endl;
    202     }
    203 
    204 
    205     cout << "---------------------------" << endl;
    206     if (Iscyc(inputnum, Y, out1))
    207     {
    208         cout << "<G,*>是循环群" << endl;
    209         gen(inputnum, Y, out1);
    210     }
    211     else
    212         cout << "<G,*>不是循环群" << endl;
    213     cout << "---------------------------" << endl;
    214     order(inputnum, Y, out1, e);
    215     cout << "---------------------------" << endl;
    216     inver(inputnum, Y, out1, e);
    217 
    218 
    219     return 0;
    220 }

     

    转载于:https://www.cnblogs.com/-rfq/p/5924924.html

    展开全文
  • 完整地图涂色的实现,用C++,离散数学作业!
  • C++ 图论 离散数学

    2014-03-30 22:50:23
    以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A)。并计算任意两个结点间的距离(B)。对不连通的图输出其各个连通支(C)。
  • 内容索引:VC/C++源码,算法相关,离散数学,矩阵 6行6列的矩阵,闲来无事,用VC++写一个小程序,判断是否是配对矩阵,很有意思哦!
  • 离散数学C++编程

    2009-02-12 00:18:30
    离散数学C++编程,离散数学 编程 c++ 实验
  • 内容索引:VC/C++源码,算法相关,离散数学 用C++实现离散数学中的求集合这一公式,原理及代码都很简单的问题。
  • c++程序判断离散数学中命题公式
  • 高等数学 离散数学 线性代数 c++的书局版高等数学 离散数学 线性代数 c++的书局版高等数学 离散数学 线性代数 c++的书局版高等数学 离散数学 线性代数 c++的书局版
  • c++程序判断离散数学中命题公式,MFC开发
  • c++实现 离散数学 “自反 对称 ” 详解 想要一个关系的实现,那么最重要的就是对于其关系原理的理解 话不多说直接开始吧! 自反性: 其实就是要求在关系图中每一个顶点都有一个环,即在关系矩阵中要求主对角线上的...

    c++实现 离散数学 “自反 对称 ” 详解

    想要一个关系的实现,那么最重要的就是对于其关系原理的理解
    话不多说直接开始吧!


    自反性:

    其实就是要求在关系图中每一个顶点都有一个环,即在关系矩阵中要求主对角线上的元素为1。
    就像这样:

    在这里插入图片描述
    注意:这里的时候要每一个元素都有环,或者说在关系矩阵中主对角线都是1,才叫做具有自反性
    像下面的这个,就不具有自反性了

    在这里插入图片描述

    反自反性:

    听名字就可以知道,他和自反性是完全相反的,所以只要在关系图中每一个顶点都没有环,即在关系矩阵中要求主对角线上的元素为0。
    像这样:

    在这里插入图片描述
    注意:这里的时候要每一个元素都没有环,或者说在关系矩阵中主对角线都是0,才叫做具有反自反性
    像下面的这个,就不具有自反性了,也不具有反自反性,他啥也不是

    在这里插入图片描述
    清楚了他的原理,那么代码的思路就直接出来了
    思路:他是4个元素对吧,我们其实就是在判断他主对角线0和1的个数,设立一个二维数组,来对于a[i][i]主对角线进行判断
    代码:

    void shuzu::zifanxing()//主要依据 
    {
    	int cout0 = 0,cout1 = 0;
    	for (int i = 1; i < 5; i++)
    	{
    		if (a[i][i] == 0)
    			cout0++;
    		else if (a[i][i] == 1)
    			cout1++;
    	}
    	if (cout0 == 4) cout << "这个呢,具有自反性" << endl;
    	else if (cout1 == 4) cout << "这个呢,具有反自反性" << endl;
    	else cout << "这个呢,在自反方面啥也不是" << endl;
    }
    

    对称性

    这个就比较的好判断,在关系图中就看他有没有礼尚往来,如果具有对称性那么他一定全部!是双边,而在关系矩阵中就是直接关于主对角线对称就可以哒。
    像这样:

    在这里插入图片描述
    他们是不是对称了,哈哈哈哈哈哈哈

    反对称性

    这个嘛,就是只有单边,没有双边,即在关系矩阵里面没有一个对称的。
    超级经典的就是下三角:

    在这里插入图片描述
    在这里的话,就要注意一下,如果有单有双,那么他在对称性方面他啥也不是。主对角线上的的数不影响他的对称性,你想嘛!关于主对角线对称的话不就是他本身了
    思路:
    简单的来说就是履历看,a[i][j]和a[j][i],他们是不是相等。来记录他的的单边和双边,再在最后来判断。
    代码:

    void shuzu::duichenxing()
    { 
    	int cout1 = 0, cout0 = 0;
    	for (int i = 1; i < 5; i++)
    	for (int j = 1; j < 5; j++)
    	{
    		if (a[i][j] == a[j][i])  cout1++;
    		else if (a[i][j] != a[j][i])  cout0++;
    	}
    	if (cout0 == 0 && cout1 != 0) cout << "这个呢,具有对称性";
    	else if (cout1 == 0 && cout0 != 0)  cout << "这个呢,不具有对称性";
    	else cout << "这个呢,在对称性方面啥也不是" << endl;
    
    }
    

    最后为了让输入输出的效率更高,我在数组那一块用了重载
    重载的介绍可以看 数组输入输出流的重载
    https://blog.csdn.net/weixin_52521533/article/details/116309686?spm=1001.2014.3001.5502

    *

    整体代码

    #include <iostream>
    using namespace std;
    class shuzu
    {
    public:
    	void display();
    	void zifanxing();//自反性
    	void duichenxing();//对称性
    	friend istream & operator >> (istream&input,shuzu&A);
    	friend ostream & operator << (ostream&output, shuzu&A);
    private:
    	int a[5][5];//定义一个4*4的数组,下标0不储存。
    };
    void shuzu::zifanxing()//主要依据 
    {
    	int cout0 = 0,cout1 = 0;
    	for (int i = 1; i < 5; i++)
    	{
    		if (a[i][i] == 0)
    			cout0++;
    		else if (a[i][i] == 1)
    			cout1++;
    	}
    	if (cout0 == 4) cout << "这个呢,具有自反性" << endl;
    	else if (cout1 == 4) cout << "这个呢,具有反自反性" << endl;
    	else cout << "这个呢,在自反方面啥也不是" << endl;
    }
    void shuzu::duichenxing()
    { 
    	int cout1 = 0, cout0 = 0;
    	for (int i = 1; i < 5; i++)
    	for (int j = 1; j < 5; j++)
    	{
    		if (a[i][j] == a[j][i])  cout1++;
    		else if (a[i][j] != a[j][i])  cout0++;
    	}
    	if (cout0 == 0 && cout1 != 0) cout << "这个呢,具有对称性";
    	else if (cout1 == 0 && cout0 != 0)  cout << "这个呢,不具有对称性";
    	else cout << "这个呢,在对称性方面啥也不是" << endl;
    
    }
    void shuzu::display()
    {
    	for (int i = 1; i < 5; i++)
    	for (int j = 1; j < 5; j++)
    		cin >> a[i][j];
    }
    ostream & operator << (ostream&ou, shuzu&A)
    {
    	for (int i = 1; i < 5; i++)
    	for (int j = 1; j < 5; j++)
    		ou << A.a[i][j];
    	return ou;
    }
    istream & operator >> (istream&in, shuzu&A)
    {
    	for (int i = 1; i < 5; i++)
    	for (int j = 1; j < 5; j++)
    		in >> A.a[i][j];
    	return in;
    }
    int main()
    {
    	shuzu A;
    	cin>>A; 
    	A.duichenxing();
    	A.zifanxing();
    	return 0;
    }
    
    展开全文
  • 离散数学集合运算C++或C语言实验报告 离散数学的实验
  • 使用离散数学理解C++函数 举一个简单的例子 int fac(int n) { int ret = 1; for(int i = 1; i &lt; n; i++) sum *= i; return ret; } 函数主要有返回类型,参数列表, 函数名,函数体 函数其实就是离散...

    使用离散数学理解C++函数


    举一个简单的例子

    int fac(int n)
    {
    	int ret = 1;
    	for(int i = 1; i < n; i++)
    		sum *= i; 
    	return ret;
    }
    

    函数主要有返回类型,参数列表, 函数名,函数体

    函数其实就是离散数学中的映射,函数名就是函数名,返回类型其实是返回值所属的集合,

    展开全文
  • 真值表的C++实现 离散数学课程设计论文
  • 在linux下用easyEclipse编写的离散数学原代码.
  • 离散数学逻辑运算符C++实现

    千次阅读 2017-04-16 12:09:12
    离散数学老师留的课下实验,上网查找没有免费的,较为完善的C++代码, 就通过学习,自己敲了一组代码,实现各个逻辑运算符之间的简单运算, 用到了STL,栈的出入,逆波兰表达式和递归,对初学者来说有一点小难度 程序还有...
  • 离散数学 关系运算代码(c++) 包含以下功能: 1.求有限集上给定关系的自反闭包、对称闭包、传递闭包。 2.求有限集上等价关系的数目。 3.输入集合和等价关系,求对应的商集。 4.判断是否为等价关系。 Relation.h #...
  • 离散数学 真值表
  • C++.NET做的一个离散数学演示软件,主要针对集合和函数两方面
  • 用C\C++实现离散数学简单逻辑运算

    千次阅读 2015-05-09 18:52:20
    这两天写C语言代码遇到这个离散题,感觉还是蛮经典的,自己总结一下。 编写程序,解决下述问题:已知有A、B、 C、D、E、F共6人参加程序竞赛。其中:  A和B中至少一人获奖;  A、C、D中至少二人获奖;  A、E...
  • Graph底层是一个int型二维数组,当进行addEdge操作时,相当于在关系图的相应位置打上记号。 1 #include <vector> 2 #include <cassert> 3 #include <iostream> 4 using namespace std;......

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 704
精华内容 281
关键字:

c++离散数学

c++ 订阅