# please find a bug !

• 12-19-2009
kiss
Code:

``` /********************************************** **                @copyright reserved by the author **author:                        xuxuelong **data:                                20009/12/18 **IDE:                                visula c++ 6.0 **major:                        CS-software engineering-08 **email address:    xuxuelong0214@126.com **attention:                if you find a bug in the **..........                operation ,just email me! **********************************************/ #include  <stdio.h> #include  <stdlib.h> #include  <windows.h> #define Max    100 #define OK      1 #define ERROR  0 /********************/ typedef struct node {         int row;         int colum;         int value; }data; typedef struct _matrix {         int row_size;         int colum_size;         int non_zero_amount;         data  matrix[Max+1]; }tri_matrix; /********subfunctions**********/ /*******function prototypes****/ int creat_matrix(tri_matrix &T) {//creat a tri_matrix T with row_temp rows and colum_temp colums         /*input how many rows matrixs have*/         printf("The matrix's row size :");         scanf("%d",&T.row_size);         /*input how many colums matrixs have*/         printf("The matrix's colum size:");         scanf("%d",&T.colum_size);         printf("Input the number of non_zero amount :");         scanf("%d",&T.non_zero_amount);         printf("/*****************************************/\n");         for(int count=1;count<=T.non_zero_amount;count++)         {                 do                 {//insure the row mark is valid                         printf("Input the mark of <row>:");                         scanf("%d",&T.matrix[count].row);                 }while(T.matrix[count].row>T.row_size);                 do                 {//insure the colum mark is valid                         printf("Input the mark of <colum>:");                         scanf("%d",&T.matrix[count].colum);                 }while(T.matrix[count].colum>T.colum_size);                 /*input the value of the matrix*/                 do                 {//insure the value is non zero                         printf("Input the <value> of the node:");                         scanf("%d",&T.matrix[count].value);                 }while(T.matrix[count].value==0);                 printf("/************************************/\n");         }//for         return OK; }//creat_matrix void print_matrix(tri_matrix T) {//print out the info of the matrix         printf("\t\tRow\t\t\tColum\t\t\tValue\n");         printf("\t\t-------------------------------------------------\n");         for(int count=1;count<=T.non_zero_amount;count++)         {                 printf("\t\t%d\t\t\t%d\t\t\t%d\n",T.matrix[count].row,T.matrix[count].colum,T.matrix[count].value);                 printf("\t\t-------------------------------------------------\n");                 Sleep(1000);         } }//print_matrix int add_matrix(tri_matrix one,tri_matrix two, tri_matrix &three) {//add matrix one and two then put the result in three                int i,j,k;//count in the loop         for(i=1;i<=one.non_zero_amount;i++)         {//assign one's info to three                 three.matrix[i].row=one.matrix[i].row;                 three.matrix[i].colum=one.matrix[i].colum;                 three.matrix[i].value=one.matrix[i].value;         }         three.non_zero_amount=i-1;         /*insert two's info to three*/         for(j=1;j<=two.non_zero_amount;j++)         {//insert  one by one of the  two's nodes                 for(i=1;i<=three.non_zero_amount;i++)                 {                         if(two.matrix[j].row<three.matrix[i].row)                         {//node in two insert into three                                 for(k=three.non_zero_amount;k>=i;k--)                                 {//backoff the elements in three                                         three.matrix[k+1].row=three.matrix[k].row;                                         three.matrix[k+1].colum=three.matrix[k].colum;                                         three.matrix[k+1].value=three.matrix[k].value;                                 }                                 /*two's insert element replace the origin one*/                                 three.matrix[i].row=two.matrix[j].row;                                 three.matrix[i].colum=two.matrix[j].colum;                                 three.matrix[i].value=two.matrix[j].value;                                 three.non_zero_amount++;                                 break;                         }                         else                         if(two.matrix[j].row==three.matrix[i].row)                         {//row equal then compare the colums                                 if(two.matrix[j].colum==three.matrix[i].colum)                                 {//all equal                                         three.matrix[i].row=three.matrix[i].row;                                         three.matrix[i].colum=three.matrix[i].colum;                                         three.matrix[i].value+=two.matrix[j].value;                                         break;//two's element to the next one                                 }                                 else                                 if(two.matrix[j].colum<three.matrix[i].colum)                                 {                                         for(k=three.non_zero_amount;k>=i;k--)                                         {//backoff the elements in three                                                 three.matrix[k+1].row=three.matrix[k].row;                                                 three.matrix[k+1].colum=three.matrix[k].colum;                                                 three.matrix[k+1].value=three.matrix[k].value;                                         }                                         three.matrix[i].row=two.matrix[j].row;                                         three.matrix[i].colum=two.matrix[j].colum;                                         three.matrix[i].value=two.matrix[j].value;                                         three.non_zero_amount++;                                         break;//two's element to the next one                                 }                                 else                                 {                                         if(i==three.non_zero_amount)                                         {//insert to the last                                                 three.matrix[three.non_zero_amount+1].row=two.matrix[j].row;                                                 three.matrix[three.non_zero_amount+1].colum=two.matrix[j].colum;                                                 three.matrix[three.non_zero_amount+1].value=two.matrix[j].value;                                                 three.non_zero_amount++;                                         }                                         else continue;//element in three to the next one                                 }//else                         }//if                         else//two.matrix[j].row>three.matrix[i].row                         {                                 if(i==three.non_zero_amount)                                 {//insert to the last                                         three.matrix[three.non_zero_amount+1].row=two.matrix[j].row;                                         three.matrix[three.non_zero_amount+1].colum=two.matrix[j].colum;                                         three.matrix[three.non_zero_amount+1].value=two.matrix[j].value;                                         three.non_zero_amount++;                                         break;                                 }                                 else continue;                         }                 }//inner for         }//outer for         three.non_zero_amount=three.non_zero_amount;         three.row_size=one.row_size;         three.colum_size=one.colum_size;                return OK;  }//add_matrix int multiply_matrix(tri_matrix one, tri_matrix two,tri_matrix &three) {//multiply one and two ,print the result in three         int k=1;//element count in the loop three         three.row_size=one.row_size;         three.colum_size=two.colum_size;     for(int i=1;i<=one.non_zero_amount;i++)         {                 for(int j=1;j<=two.non_zero_amount;j++)                 {                         if(one.matrix[i].colum==two.matrix[j].row)                         {//the apply of matrix's attribute                                 three.matrix[k].row=one.matrix[i].row;                                 three.matrix[k].colum=two.matrix[j].colum;                                 three.matrix[k].value=one.matrix[i].value*two.matrix[j].value;                                 k++;                         }                 }//for                 NULL;         }//for         three.non_zero_amount=--k;         return OK; }//multiplay_matrix void swap(int &a,int &b) {//exchange the value between a and b         int temp;         temp=a;         a=b;         b=temp; }//swap int trans_matrix(tri_matrix one,tri_matrix &T) {//figure out the transfort matrix of one                 /*sort the colum(bubble sort) and assign to T*/         for(int i=1;i<=one.non_zero_amount;i++)         {                 /*initilize to be the minimum one*/                 T.matrix[i].row=one.matrix[i].colum;                 T.matrix[i].colum=one.matrix[i].row;                 T.matrix[i].value=one.matrix[i].value;                 for(int j=i+1;j<=one.non_zero_amount;j++)                 {                         if(T.matrix[i].row<one.matrix[j].colum)                                 continue;                         if(T.matrix[i].row>one.matrix[j].colum)                         {                                 swap(T.matrix[i].row,one.matrix[j].colum);                                 swap(T.matrix[i].colum,one.matrix[j].row);                                 swap(T.matrix[i].value,one.matrix[j].value);                                 continue;                         }else                         {//T's row equal to one's colum                                 if(T.matrix[i].colum<one.matrix[j].row)                                         continue;                                 if(T.matrix[i].colum>one.matrix[j].row)                                 {//only swap the colum of T                                         swap(T.matrix[i].colum,one.matrix[j].row);                                         swap(T.matrix[i].value,one.matrix[j].value);                                         continue;                                 }                         }                 }//for                 T.matrix[i].row=T.matrix[i].row;                 T.matrix[i].colum=T.matrix[i].colum;                 T.matrix[i].value=T.matrix[i].value;         }//for         T.row_size=one.row_size;         T.colum_size=one.colum_size;         T.non_zero_amount=one.non_zero_amount;         return OK; }//trans_matrix /*******the main function********/ /*******the main function********/ int main(void) {                /*declare three tri_matrix*/         tri_matrix one,two,three;         int choice;//as a mark of selection                char flag;//selection mark         while(OK)         {                 system("cls");                 system("color a4");                 printf("\t\$*****************************************************\$\n");                 putchar('\n');                 printf("\t\t  %c------------Functions------------%c\n",2,2);                 putchar('\n');                        printf("\t\t  %c---------------------------------%c\n",2,2);                 printf("\t\t  %c    <1>matrix---addition        %c\n",2,2);                        printf("\t\t  %c---------------------------------%c\n",2,2);                 printf("\t\t  %c    <2>matrix---multiplication  %c\n",2,2);                        printf("\t\t  %c---------------------------------%c\n",2,2);                 printf("\t\t  %c    <3>matrix---transformation  %c\n",2,2);                        printf("\t\t  %c---------------------------------%c\n",2,2);                 printf("\t\t  %c    <4>exit-----quit the program %c\n",2,2);                        printf("\t\t  %c---------------------------------%c\n",2,2);                 putchar('\n');                 printf("\t\t  %c--------Triples Row First--------%c\n",2,2);                        printf("\t\$*****************************************************\$\n");                 printf("Please choose a choice :(1--4)\n");                 scanf("%d",&choice);                 switch(choice)                 {                 case 1: printf("\t<addition>\n");                                 /***creat the first one***/                                 printf("\n");                                 printf("Creat the one matrix\n");                                 printf("\n");                                 creat_matrix(one);                                 printf("The one tri_matrix is below:\n");                                 print_matrix(one);                                 /*****creat the second one****/                                 printf("Creat the two matrix\n");                                 printf("\n");                                 creat_matrix(two);                                 printf("The two tri_matrix is below:\n");                                 print_matrix(two);                                 /*********check*******/                                 while(two.row_size!=one.row_size||two.colum_size!=one.colum_size)                                 {//insure the two matrix are valid to add                                         printf("--------------------------------ERROR---------------------------!\n");                                         printf("!!!The two matrix should have the same row size and colum size!!!\n");                                         printf("--------------------------------ERROR---------------------------!\n");                                         printf("Creat the two matrix\n");                                         printf("\n");                                         creat_matrix(two);                                         print_matrix(two);                                 }                                                                /*******add the two matrix********/                                 printf("Add the two matrix\n");                                 putchar('\n');                                 add_matrix(one,two,three);                                 printf("The three matrix is below:\n");                                 Sleep(2000);                                 print_matrix(three);                                 system("pause");                                 break;                 case 2:printf("\t<multiplication>\n");                                 /***creat the first one***/                                 printf("\n");                                 printf("Creat the one matrix\n");                                 printf("\n");                                 creat_matrix(one);                                 printf("The one matrix is below:\n");                                 print_matrix(one);                                 /*****creat the second one****/                                 printf("Creat the two matrix\n");                                 printf("\n");                                 creat_matrix(two);                                 printf("The two matrix is below:\n");                                 print_matrix(two);                                 /**********check**********/                                 while(one.colum_size!=two.row_size)                                 {//if not equal ,creat a valid one                                         printf("--------------------------------ERROR---------------------------!\n");                                         printf("!!!!!!!!!!One's colum size should equal to two's row size!!!!!!!!\n");                                         printf("--------------------------------ERROR---------------------------!\n");                                         printf("Creat the two matrix\n");                                         printf("\n");                                         creat_matrix(two);                                         printf("The two matrix is below:\n");                                         printf("\n");                                         print_matrix(two);                                 }                                 /*******multiply the two matrix********/                                 printf("Multiply the two matrix\n");                                 multiply_matrix(one,two,three);                                 printf("Print the results of multiplication\n");                                 Sleep(2000);                                 print_matrix(three);                                 system("pause");                                 break;                 case 3:printf("\t<transformation>\n");                                 /***creat a matrix***/                                 printf("\n");                                 printf("Creat a matrix\n");                                 printf("\n");                                 creat_matrix(one);                                 printf("The matrix is below:\n");                                 print_matrix(one);                                 /*****transformation of the matrix*****/                                 printf("The transfortid matrix is :\n");                                 Sleep(2000);                                 trans_matrix(one,three);                                 print_matrix(three);                                 system("pause");                                 break;                 case 4:        printf("Are you sure to quit the system<Y/N>?\n");                                 fflush(stdin);                                 scanf("%c",&flag);                                 if(flag=='y'||flag=='Y'||flag=='\n')                                 {                                         printf("\t\t%c-------%c-------%c-------%c-------%c\n",2,2,2,2,2);                                         putchar('\n');                                         printf("\t\t(^_^)Thanks  For  Using  This!(^_^)\n");                                                putchar('\n');                                         printf("\t\t%c-------%c-------%c-------%c-------%c\n",2,2,2,2,2);                                         putchar('\n');                                         Sleep(2000);                                         exit(OK);                                 }                                 break;                 }//switch                 NULL;         }//while         return OK;                        }```
• 12-19-2009
stevesmithx
• 12-19-2009