@[TOC]
群的判定
实验目的
掌握群的判定方法
实验内容
输入代数系统(A,)的集合A和运算的运算表,判断(A,*)是否是群
实验原理和方法
(1)用一维数组a[n]存贮集合A。
(2)用二维数组op[n][n]存贮运算表。
(3)根据群的定义,代数系统(A,)若为群,除运算表已表明运算封闭外,还应该满足下列三个条件:*运算可结合、有幺元e、 A中任何元素都有逆元。算法提示
运算可结合
for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(k=0;k<N;k++)
{
for(l=0;l<N;l++)
{
if(op[i][j]==a[l]) x=l;/*op[i][j] 代表a*b*/
if(op[j][k]==a[l]) y=l;/*op[j][k] 代表b*c*/
}
if(op[i][y]!=op[x][k])/*op[i][y]代表a*(b*c)*/
{
printf("(%d*%d)*%d=%d,%d*(%d*%d)=%d,运算是不可结合!\n",
a[i],a[j],a[k],op[x][k],a[i],a[j],a[k],op[i][y]);
flag=0;/*不满足结合性*/
}
}
if(flag) printf("运算是可结合!\n");
有幺元
flag=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(op[i][j]!=a[j] || op[j][i]!=a[j]) break;
if(j==N)
{
printf("群有幺元%d!\n",a[i]);
e=a[i];
flag=1; break;
}
}
if(!flag) printf("群没有幺元!\n");
A中任何元素都有逆元
flag=1;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(op[i][j]==e && op[j][i]==e) break;/*e是幺元*/
if(j==N)
{
flag=0;
printf("A中元素%d没有逆元!\n",a[j]);
}
}
if(flag) printf("A中任何元素都有逆元!\n");
源码实现
#include <stdio.h>
#define N 5
int main()
{
int a[N];
int i, j;
for (i = 0; i < N; i++)
{
printf("Number %d :", i + 1);
scanf("%d", &a[i]);
}
int op[N][N];
int e;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
op[i][j] = a[i] * a[j];
}
}
int flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
if (op[i][j] * a[k] != a[i] * op[j][k])
{
printf("运算是不可结合\n");
flag = 0;
}
}
}
}
if (flag)
{
printf("运算是可结合\n");
}
flag = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] != a[j] || op[j][i] != a[j])
{
break;
}
}
if (j == N)
{
printf("群有幺元%d\n", a[i]);
e = a[i];
flag = 1;
break;
}
}
if (!flag)
{
printf("群没有幺元\n");
}
flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] == e && op[j][i] == e)
{
break;
}
}
if (j == N - 1)
{
flag = 0;
printf("A中元素%d没有逆元\n", a[j]);
}
}
if (flag)
{
printf("A中任何元素都有逆元\n");
}
}
==下面代码和上面是一样的==
#include <stdio.h>
#define N 5
int main()
{
int a[N];
int i, j;
for (i = 0; i < N; i++)
{
printf("Number %d :", i + 1);
scanf("%d", &a[i]);
}
int op[N][N];
int e;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
op[i][j] = a[i] * a[j];
}
}
int flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
if (op[i][j] * a[k] != a[i] * op[j][k])
{
printf("运算是不可结合\n");
flag = 0;
}
}
}
}
if (flag)
{
printf("运算是可结合\n");
}
flag = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] != a[j] || op[j][i] != a[j])
{
break;
}
}
if (j == N)
{
printf("群有幺元%d\n", a[i]);
e = a[i];
flag = 1;
break;
}
}
if (!flag)
{
printf("群没有幺元\n");
}
flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] == e && op[j][i] == e)
{
break;
}
}
if (j == N - 1)
{
flag = 0;
printf("A中元素%d没有逆元\n", a[j]);
}
}
if (flag)
{
printf("A中任何元素都有逆元\n");
}
}
#include <stdio.h>
#define N 5
int main()
{
int a[N];
int i, j;
for (i = 0; i < N; i++)
{
printf("Number %d :", i + 1);
scanf("%d", &a[i]);
}
int op[N][N];
int e;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
op[i][j] = a[i] * a[j];
}
}
int flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
if (op[i][j] * a[k] != a[i] * op[j][k])
{
printf("运算是不可结合\n");
flag = 0;
}
}
}
}
if (flag)
{
printf("运算是可结合\n");
}
flag = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] != a[j] || op[j][i] != a[j])
{
break;
}
}
if (j == N)
{
printf("群有幺元%d\n", a[i]);
e = a[i];
flag = 1;
break;
}
}
if (!flag)
{
printf("群没有幺元\n");
}
flag = 1;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (op[i][j] == e && op[j][i] == e)
{
break;
}
}
if (j == N - 1)
{
flag = 0;
printf("A中元素%d没有逆元\n", a[j]);
}
}
if (flag)
{
printf("A中任何元素都有逆元\n");
}
}