c++ 기초적인 질문입니다.
소라
내용은 전치행렬 8X8 행렬을 2차원 배열 a에 저장하고, 희소행렬로 바꿔서 2차원 배열 b에 저장하고 출력하는 프로그램인데요. 에러는 없는데 무한루프 돕니다. 대략 아래에서 크게 벗어나지 않는 범위 네에서 변형이나 잘못된 점 고쳐주세요.
아직 초보 수준이라서... 배열의 이용 및 구조체, 포인터 부분에서 좀 많이 취약합니다. ㅜ.ㅜ
-------------------------------------------------------------------------------------------------------
#includestdio.h
#define X 100
void main()
{
int a[8][8] = {
{0, 0, 0, 5, 0, 18, 0, 0},
{0, 10, 0, 3, 27, 0, 0, 16},
{0, 9, 0, 0, 77, 0, 0, 44},
{0, 55, 0, 13, 0, 0, 0, 6},
{0, 0, 0, 14, 0, 0, 0, 0},
{43, 0, 1, 74, 27, 0, 0, 0},
{0, 0, 34, 0, 0, 0, 91, 0},
{66, 10, 0, 3, 0, 68, 0, 0} // 8X8행렬에 데이터 값 넣기- 이건 문제 없는거 같은데...
};
int i, j, x, y, total = 0; // 변수 선언
int b[X][3]; //희소 행렬 저장할 2차원 배열
for(i=0; i8; i++) {
for(j=0; j8; j++) {
if(a[i][j] != 0) { // 2차원 행렬 a[i][j]의 값이 0이 아니면 다음의문장 실행(여기서 배열명 써도 되는건가요?)
b[i+1][0] = i; // 첫번째 0행 1열, 0행 2열, 0행 3열에는 8, 8,23이라는 값이 들어가야 하기 때문에i+1을 사용
b[i+1][1] = j; // 혹시i+1을 사용하면 안되는건가요??
b[i+1][2] = a[i][j];
total++; // 0이 아닌값을 세어서 b[0][3]에 표기할려고 만듬.
}
}
}
b[0][0] = 8; // 희소행렬 0행 0열은 행의 수= 8 이므로 8값 저장
b[0][1] = 8; // 희소행렬 0행 1열은열의 수 = 8 이므로 8값 저장
b[0][2] = total; // 희소행렬 0행 2열에는 0이 아닌 데이터의 겟수가 저장되므로 total 값 저장
for(x=0;xtotal+1;i++) { // 여기서 부터 출력문, total + 1이라고 한건 total의 개수 보다 한칸 더 많아야
for(y=0;y3;y++) { // 맨위에 8, 8, 16이라는 값을 출력해야 하기 때문.
printf(%d %d %d\n, b[i][0], b[i][1], b[i][2]);
}
}
}
-
나리
일단 틀린곳은 밑에 for문 돌리실때 for(x=0;xtotal+1;x++)이렇게 고쳐주세요 x값을 증가시켜야지i값을 증가시키시면 안끝나고 무한루프를 돌죠 그리고 당연히printf에서도 b[x][0],이런식으로 x값이들어가야져
그리고 for문을 고쳤다고 해두 이상하게 실행되실텐데요. 제대로 고치실려면
for(i=0;i8;i++)
{
for (j=0;j8;j++)
{
if (a[i][j]!=0)
{
b[total+1][0]=i;
b[to