445,898 Members | 2,022 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,898 IT Pros & Developers. It's quick & easy.

# Unpredictable program behavior ..

 P: n/a Hi all , i am supposed to create a program that performs a specific operation to a 2-D matrix whose elements are positive (or zero ). This operation is repeated T times on the matrix and only the final matix is needed . The operation to be perormed is V(t,x,y)=1/2*(sqrt(V(t-1,x-1,y))+sqrt(V(t-1,x-1,y))) . The problem iis that i have (or i think i have ) created a correct program that performs this operation but something happens that i cannot understand .. The final matrix is the same regardless the value of T . That means that the final matrix is the same for T=10 and T=1000 !!! The code i have managed to write so far is the following : /********** VERSION FOR ONE PROCESSOR *****/ #include #include #include #include #define T 2000 #define X 10 #define Y 10 /* TODO ... to pass these values from the command line ... */ double **CreateMatrix(int,int); void DestroyMatrix(double **,int); void InitializeMatrix(double **,int,int); void CopyMatrix(double **,double **,int,int); /* The following function is for DEBUG purposes only */ void PrintMatrix(double **,int,int); int main(void) { double **currentMatrix; // Initialization ??? cast to NULL ??? double **tempMatrix; // Initialization ??? double tempValue; int t,x,y; for(t=1; t1)) { tempValue=(double)1+(double)sqrt(tempMatrix[y-1][x]); } if((y==1) && (x>1)) { tempValue=(double)sqrt(tempMatrix[y][x-1]); } if((x>1) && (y>1)) { tempValue=(double)sqrt(tempMatrix[y][x-1])+(double)sqrt(tempMatrix[y-1][x]); } currentMatrix[y][x]=((double)tempValue)/((double)2); } } /* printf("After changing the matrix ..... \n"); */ /* PrintMatrix(currentMatrix,Y,X); */ if(t!= T-1) { /* printf("You reached so far .... !!\n"); */ CopyMatrix(tempMatrix,currentMatrix,Y,X); /* printf("Now printing the old matrix..... \n"); */ /* PrintMatrix(tempMatrix,Y,X); */ DestroyMatrix(currentMatrix,Y); } } /* end of the triple loop ... */ for(int tempi=0; tempi