프로그램의 개요를 설명하면, 먼저 사용자가 크기를 정한 동적 할당 배열에 수를 입력받음. (출력은 2차원 배열인 것 처럼 하지만 포인터를 이용한 1차원 동적할당임.)


그리고 그 배열 (mat)을 함수의 argument로 넘겨서, 0이 아닌 값만을 저장하는 행렬로 만드는 것.


저장 방법은 다음 사진과 같음.






다음은 내가 짠 함수




int *non_zero_mat (int *mat,int r_leng, int c_leng){

   

   int i,r,c,m = 0;                 //루프 통제용 함수. r이 행의 길이(r_leng)와 같아질때까지 , c는 열의 길이(c_leng)와 같아질때까지 루프를 돈다. 


   

   int *mat2;

   mat2 = (int*) calloc ( count*3,sizeof(int));  


   /*count는 행렬의 원소 중에 0이 아닌 것이 얼마나 되는지 세는 전역변수. 새로운 배열의 크기는 arr[count][3]이 됨.*/   


   for(r=0; r<r_leng; r++){

            for(c=0; c<c_leng; c++){

                     if(mat[i-r_leng] != 0){

                                  mat2[m]=r; 

                                  mat2[m+1]=c; 

                                  mat2[m+2]= mat[i-r_leng];

                                  

                                  m+=3; i++;

                                  }

                     else i++;

                     }

                     }

                                

   return mat2;



이 코드는 정상동작함.


근데 어째서 mat[i]가 아니라 mat[i-r_leng] (행의 길이를 뺀 것)이어야 정상 동작을 하는지 모르겠음.. 저거 고치면 바로 행의 길이만큼 밀린 값 나오다가 쓰레기값 토해냄.