删除此帖子,如果您可以删除我的所有其他评论,请删除此帖子,有毒的版主

问题描述 投票:0回答:1

删除此帖子,如果您可以删除我的所有其他评论,请删除此帖子,有毒的版主!!!!

c debugging math cs50
1个回答
2
投票

正如 @RetiredNinja 所报告的,您需要 two 缓冲区来完成此任务。矩阵的每个元素既用作值的源,又用作任务完成之前存储结果的目的地。


对你的方法感到困扰(使用

fakeRow
)我将你的代码提炼为以下内容,结果报告如下:

void blur( int height, int width ) {
    for (int i = 0; i< height; i++) {
        for (int j = 0; j< width; j++) {
            int dec = 0;
            int fakeRow = i;
            int cycle = 1;
            double calcAv = 1;

            if (i > 0) {
                cycle += 1;
                dec = 1;
            }
            if (i < height - 1)
                cycle += 1;

            do {
                if (cycle == 1 && fakeRow < height - 1)
                    fakeRow += 1;

                calcAv += 1;
                printf( "(%d,%d) ", fakeRow - dec, j );

                if (j > 0) {
                    printf( "(%d,%d) ", fakeRow - dec, j-1 );
                    calcAv += 1;
                }
                if (j < width - 1)
                {
                    printf( "(%d,%d) ", fakeRow - dec, j+1 );
                    calcAv += 1;
                }
                dec = 0;
                cycle -= 1;
            } while (cycle != 0);

            printf( " ... CalcAv %f\n", calcAv );
        }
    }
}

int main( void ) {
    blur( 3, 3 );

    return 0;
}

结果:

(0,0) (0,1) (1,0) (1,1)  ... CalcAv 5.000000
(0,1) (0,0) (0,2) (1,1) (1,0) (1,2)  ... CalcAv 7.000000
(0,2) (0,1) (1,2) (1,1)  ... CalcAv 5.000000
(0,0) (0,1) (1,0) (1,1) (2,0) (2,1)  ... CalcAv 7.000000
(0,1) (0,0) (0,2) (1,1) (1,0) (1,2) (2,1) (2,0) (2,2)  ... CalcAv 10.000000
(0,2) (0,1) (1,2) (1,1) (2,2) (2,1)  ... CalcAv 7.000000
(1,0) (1,1) (2,0) (2,1)  ... CalcAv 5.000000
(1,1) (1,0) (1,2) (2,1) (2,0) (2,2)  ... CalcAv 7.000000
(1,2) (1,1) (2,2) (2,1)  ... CalcAv 5.000000

使用非常规

fakeRow
,您的代码正确地形成了适当的矩阵索引(令我惊讶!)。然而,元素的
CalcAv
计数器是差一。 (一个常见的错误和一个简单的修复留给您执行。)

© www.soinside.com 2019 - 2024. All rights reserved.