C矩阵程序
我有一个矩阵程序,到目前为止,它接受一个输入文件,并用矩阵表示数字。我还写了一个函数来寻找它的转置,但我不知道如何做对称 我只需要3个输入参数(MainMatrix[max][max]main transpose[max][max]和大小) 如果不是对称的,则返回-1;如果是对称的,则返回0 我的程序显示了所有正确的东西,除了1,它说它在应该是对称的时候不是对称的 我希望你们中的一个能帮我C矩阵程序,c,matrix,symmetric,C,Matrix,Symmetric,我有一个矩阵程序,到目前为止,它接受一个输入文件,并用矩阵表示数字。我还写了一个函数来寻找它的转置,但我不知道如何做对称 我只需要3个输入参数(MainMatrix[max][max]main transpose[max][max]和大小) 如果不是对称的,则返回-1;如果是对称的,则返回0 我的程序显示了所有正确的东西,除了1,它说它在应该是对称的时候不是对称的 我希望你们中的一个能帮我 int Symmetry (int mainmatrix[max][max], int maintrans
int Symmetry (int mainmatrix[max][max], int maintranspose[max][max], int size) {
double thesqrtSize = sqrt((double)Size);
double fract = thesqrtSize - floor(thesqrtSize);
if(fract > 0.0001)
return -1;
int isqrtSize = (int)thesqrtSize;
int i, j;
for(i=0;i<isqrtSize;i++){
for(j=0;j<isqrtSize;j++) {
if(mainmatrix[i][j]!=maintranspose[i][j]) {
return -1;
}
}
}
return 0;
}
int对称性(int mainmatrix[max][max],int main transpose[max][max],int size){
双尺寸=sqrt((双)尺寸);
双分形=thesqrtSize-地板(thesqrtSize);
如果(分形>0.0001)
返回-1;
int isqrtSize=(int)thesqrtSize;
int i,j;
对于(i=0;i浮点数以舍入错误著称。如果sqrt的结果略低于预期结果,则调用floor
将使其通过(几乎)1.在求平方根之前,尝试将1添加到大小。这是安全的,并且如果大小是一个平方数,则可以保证结果正确
建议的修改:
double thesqrtSize = sqrt((double)(Size+1));
显然,这意味着使用floor
检查方正度的方法不起作用。我建议使用int、squaring,并与原始大小进行比较,以确定它们是否相同。对称函数不需要转置矩阵。您可以在没有转置矩阵的情况下找到答案:
int Symmetry (int mainmatrix[max][max], int size) {
int isqrtSize= (int)sqrt((double)size);
if(isqrtSize*isqrtSize!=size)
return -1;
int i, j;
for(i=0;i<isqrtSize;i++){
for(j=0;j<isqrtSize;j++) {
if(mainmatrix[i][j]!=mainmatrix[j][i]) {
return -1;
}
}
}
return 0;
}
向我们展示代码投入一些努力,添加代码。如果我们没有代码和失败的测试用例,这对你没有帮助。我喜欢在半分钟内有三个人给我们代码BWARGH。但是如果你有矩阵和转置,这不就是比较每个元素的简单问题吗?你说的是哪一行至少,我应该添加它?对于相当小的尺寸,如果Size
是一个平方,那么在所有常用硬件中计算出的平方根都是精确的。哇,对于显示不正确输出的那一个,这很有效,但我只有一个数字(14)在矩阵中,它的转置也是14,但这并不表明它是对称的。我假设它是因为矩阵=转置。@Davidsapanova可能Size
不等于Size
。大小和大小是怎么来的?只声明了一个Size
,但我认为询问者在这里输入了他的代码,而不是在这里输入的这就是为什么这个例子到处都是。这没有什么区别,因为你可以比较main或transpose(只需切换i和j变量)。我不确定为什么有一个矩阵的数字是14表示“不对称”即使它应该是?@DavisApanasova我编辑了代码。如果输入的大小正确,那么对完美正方形的检查也应该是有效的。现在另一个矩阵表示它是不对称的:(发生了一些非常不对劲的事情,但无法找出原因is@DavisApanasova您是否尝试过这个或使用转置的语句?在第二种情况下,请将其中一个return语句更改为return-2;
,以查看错误答案的来源。然后将size
写入输出,以查看它是否不正确。我尝试过这样做那么在比较主矩阵的if语句之后返回-2?
int Symmetry (int mainmatrix[max][max], int rows, int cols) {
if(rows!=cols)
return -1;
int i, j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++) {
if(mainmatrix[i][j]!=mainmatrix[j][i]) {
return -1;
}
}
}
return 0;
}