Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C矩阵程序_C_Matrix_Symmetric - Fatal编程技术网

C矩阵程序

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

我有一个矩阵程序,到目前为止,它接受一个输入文件,并用矩阵表示数字。我还写了一个函数来寻找它的转置,但我不知道如何做对称

我只需要3个输入参数(MainMatrix[max][max]main transpose[max][max]和大小)

如果不是对称的,则返回-1;如果是对称的,则返回0

我的程序显示了所有正确的东西,除了1,它说它在应该是对称的时候不是对称的

我希望你们中的一个能帮我

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; 
}