i have the following

the program is supposed to find the product of 4 consecutive numbers in the grid either up down left right or diagonally. However, each time i run the program i get a different answer (none of them right).Code:#include <stdio.h> #include <stdlib.h> long int GetBiggest( long int, long int ); int main() { //declare variables const int iGrid[20][20] = { { 8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8 }, //row 0 { 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0 }, //row 1 { 81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65 }, //row 2 { 52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91 }, //row 3 { 22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80 }, //row 4 { 24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50 }, //row 5 { 32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70 }, //row 6 { 67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21 }, //row 7 { 24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72 }, //row 8 { 21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95 }, //row 9 { 78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92 }, //row 10 { 16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57 }, //row 11 { 86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58 }, //row 12 { 19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40 }, //row 13 { 4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66 }, //row 14 { 88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69 }, //row 15 { 4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36 }, //row 16 { 20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16 }, //row 17 { 20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54 }, //row 18 { 1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48 }}; //row 19 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int iRow, iCollum; long int iMaxHorandVer = 0, iMaxDiagonal = 0, iBiggestTotal = 0; long int iVertical = 1, iMaxVertical = 0, iHorizontal = 1, iMaxHorizontal = 0; long int iLDiagonal = 1, iLMaxDiagonal = 0, iRDiagonal = 1, iRMaxDiagonal = 0; for ( iRow = 0; iRow < 20; iRow++ ) { for ( iCollum = 0; iCollum < 20; iCollum++ ) { //down if ( iRow < 17 ) //calculate ivertical downwards (no need to go up as its allready calculated when irow was 3 less) { iVertical = iGrid[ iRow ][ iCollum ] * iGrid[ iRow ][ iCollum + 1 ] * iGrid[ iRow ][ iCollum + 2 ] * iGrid[ iRow ][ iCollum + 3 ]; iMaxVertical = GetBiggest( iMaxVertical, iVertical ); } //across if ( iCollum < 17 ) { //calculate ihorizontal left to right (as above no need to go the other way) iHorizontal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum ] * iGrid[ iRow + 2 ][ iCollum ] * iGrid[ iRow + 3 ][ iCollum ]; iMaxHorizontal = GetBiggest( iMaxHorizontal, iHorizontal ); } //right diagonal down if ( iRow < 17 && iCollum < 17 ) { //calculate right diagonal iRDiagonal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum + 1 ] * iGrid[ iRow + 2 ][ iCollum + 2 ] * iGrid[ iRow + 3 ][ iCollum + 3]; iRMaxDiagonal = GetBiggest( iRMaxDiagonal, iRDiagonal ); } //left diagonal down if ( iRow < 17 && iCollum > 2 ) { //calculate left diagonal going down iLDiagonal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum - 1 ] * iGrid[ iRow + 2 ][ iCollum - 2 ] * iGrid[ iRow + 3 ][ iCollum - 3]; iLMaxDiagonal = GetBiggest( iLMaxDiagonal, iLDiagonal ); } } } //calculate the maximum between ivertical and ihorizontal iMaxHorandVer = GetBiggest( iMaxHorizontal, iMaxVertical ); //calculate the maximum between irmaxdiagonal and ilmaxdiagonal iMaxDiagonal = GetBiggest( iRMaxDiagonal, iLMaxDiagonal ); //calculate the biggest number of imaxdiagonal and imaxhorandver iBiggestTotal = GetBiggest( iMaxHorandVer, iMaxDiagonal ); printf("biggest total of four numbers in any direction is: %ld\n", iBiggestTotal); return 0; } long int GetBiggest( long int x, long int y ) { if ( x > y ) { return x; } return y; }

I thought it might be because i was using a standard int so changed to unsigned int and got a negative answer again each time run different answer.

Changed to long int and still getting different answers.

Only 2 reasons i can think of

1) im going outside the bounds of the array but i cant see how and stepping through at no point does it go out of bounds

2) the bloody wind has changed direction again and once again everything is defying the laws of the universe