Question

hey there, Im having problems displaying my results in this program but the program compiles. Any idea as to what is going wrong?. The purpose of the program is to take two, 2 by 2 matrixes and add them to create the matrix called result. but when it comes to displaying the values in each matrix (A,B and result) it hangs. why does at the search(A,0,0) call?

-thanks

#include <stdio.h>

int gvalue;

struct Node {
    int row;
    int column;
    int value;
    Node *next;
};

void AddNode(Node *&listpointer,int r,int c,int v);
void getValue(Node *listpointer, int grow, int gcol);
void search(Node *listpointer, int srow, int scol);
void display(Node *listpointer,int drow,int dcol,int dvalue);
Node *A,*B,*result;

int main(){
    A = NULL;
    B = NULL;
    result = NULL;

    int row1p1,row1p2,row2p1,row2p2; //row 1 position 1 etc

    //matrix A values!
    printf("Enter the first row of values for matrix A: ");
    scanf("%d %d",&row1p1,&row1p2);
    printf("\nEnter the second row of values for matrix A: ");
    scanf("%d %d",&row2p1,&row2p2);

    AddNode(A,0,0,row1p1); //matrix created...
    AddNode(A,0,1,row1p2);
    AddNode(A,1,0,row2p1);
    AddNode(A,1,1,row2p2);

    //matrix B values!
    printf("\n\nEnter the first row of values for matrix B: ");
    scanf("%d %d",&row1p1,&row1p2);
    printf("\nEnter the second row of values for matrix B: ");
    scanf("%d %d",&row2p1,&row2p2);

    AddNode(B,0,0,row1p1); //matrix created...
    AddNode(B,0,1,row1p2);
    AddNode(B,1,0,row2p1);
    AddNode(B,1,1,row2p2);


    //next part...
    int a_row1p1,a_row1p2,a_row2p1,a_row2p2;
    int b_row1p1,b_row1p2,b_row2p1,b_row2p2;
    int sum;
    //-------------------------------------------------------------------------------|
    getValue(A,0,0);            //RESULT NODE for position 0,0
    a_row1p1=gvalue;
    getValue(B,0,0);
    b_row1p1=gvalue;

    sum=a_row1p1+b_row1p1;
    AddNode(result,0,0,sum);   

    getValue(A,0,1);                //RESULT NODE for position 0,1
    a_row1p2=gvalue;
    getValue(B,0,1);
    b_row1p2=gvalue;

    sum=a_row1p2+b_row1p2;
    AddNode(result,0,1,sum); 

    getValue(A,1,0);                //RESULT NODE for position 1,0
    a_row2p1=gvalue;
    getValue(B,1,0);
    b_row2p1=gvalue;

    sum=a_row2p1+b_row2p1;
    AddNode(result,1,0,sum); 

    getValue(A,1,1);                //RESULT NODE for position 1,1
    a_row2p2=gvalue;
    getValue(B,1,1);
    b_row2p2=gvalue;

    sum=a_row2p2+b_row2p2;
    AddNode(result,1,1,sum); 
    printf("success\n");
    //-------------------------------------------------------------------------------|
    search(A,0,0);
    printf("success\n"); //issue????
    search(A,0,1);
    search(A,1,0);
    search(A,1,1);


    search(B,0,0);
    search(B,0,1);
    search(B,1,0);
    search(B,1,1);

    search(result,0,0);
    search(result,0,1);
    search(result,1,0);
    search(result,1,1);



    return 0;
}

void AddNode(Node *&listpointer,int r,int c,int v){
    Node *temp;
    temp = new Node;
    temp->row = r;
    temp->column = c;
    temp->value = v;
    temp->next = listpointer;
    listpointer = temp;
}

void getValue(Node *listpointer, int grow, int gcol){
    Node *current;
    current = listpointer;
    while (current != NULL){
        if (current == NULL){break;}
        if ( (current->row == grow ) && (current->column == gcol) ){
            gvalue = current->value;
            break;
        }
        current = current->next;
    }
}

void search(Node *listpointer, int srow, int scol){
    Node *current;
    current = listpointer;
    while (current != NULL){
        if (current == NULL){break;
        }
        if ( (current->row == srow) && (current->column == scol) ){
            display(current,srow,scol,current->value); //call to display
        }
    }
}

void display(Node *listpointer,int drow,int dcol,int dvalue){
    if (listpointer == A){
        printf("\n\nMatrix A\n");
    }
    if (listpointer == B){
        printf("Matrix B\n");
    }
    if (listpointer == result){
        printf("Matrix Result\n");
    }
    //---------------------------------------------------------|
    if ( (drow == 0) && (dcol == 0) ){
        printf("%d ",dvalue);
    }
    if ( (drow == 0) && (dcol == 1) ){
        printf("%d\n",dvalue);
    }
    if ( (drow == 1) && (dcol == 0) ){
        printf("%d ",dvalue);
    }
    if ( (drow == 1) && (dcol == 0) ){
        printf("%d\n\n",dvalue);
    }

}
Was it helpful?

Solution

I'm assuming that this is homework. How is the loop going to end if current does not meet either of the two conditions you check. You need to set current to the next node of the list at some point.

 while (current != NULL){
        if (current == NULL){break;
        }
        if ( (current->row == srow) && (current->column == scol) ){
            display(current,srow,scol,current->value); //call to display
        }
    }

OTHER TIPS

You never update current.

If current is not NULL when you enter search you end up in while loop forever.

void search(Node *listpointer, int srow, int scol){
    Node *current;
    current = listpointer;
    while (current != NULL){
        if (current == NULL){break;
        }
        if ( (current->row == srow) && (current->column == scol) ){
            display(current,srow,scol,current->value); //call to display
        }
    }
}

Your search should look like (not the best way of doing it...I'm just giving a way that works by making little changes to existing code):

void search(Node *listpointer, int srow, int scol){
        Node *current;
        current = listpointer;
        while (current != NULL){
                if ( (current->row == srow) && (current->column == scol) ){
                        display(current,srow,scol,current->value); //call to display
                }
                current = current->next;
        }
}

In the display method, you are printing (1,0) value instead of (1,1)

if ( (drow == 1) && (dcol == 0) ){
        printf("%d\n\n",dvalue);
}

should be:

if ( (drow == 1) && (dcol == 1) ){
        printf("%d\n\n",dvalue);
}

There is a redundant if check in the getValue function.

Given that

The purpose of the program is to take two, 2 by 2 matrixes and add them to create the matrix called result.

I am wondering why three 2-dimensional arrays like the following is not sufficient. What am I missing?

#define N 2

int a[ N ][ N ];
int b[ N ][ N ];
int result[ N ][ N ];

for( i = 0; i < N; ++i )
  for( j = 0; j < N; ++j )
     result[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top