Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*Terrain Navigation Excercise*/
  2. /*page 250*/
  3.  
  4. #include<stdio.h>
  5. #define N 25
  6. #define FILENAME "grid1.txt"
  7.  
  8. int main(void)
  9. {
  10.     int nrows, ncols, i, j, peaks = 0, valleys = 0;
  11.     double elevation[N][N], min = 99999, max = 0;
  12.     double rowDist, colDist, dist;
  13.     FILE * grid;
  14.    
  15.     grid = fopen(FILENAME,"r");
  16.    
  17.     if(grid == NULL)
  18.     {
  19.         printf("Error\n");
  20.     }
  21.     else
  22.     {
  23.         fscanf(grid,"%d %d",&nrows,&ncols);
  24.         for(i=0;i<=nrows-1;i++)
  25.         {
  26.             for(j=0;j<=ncols-1;j++)
  27.             {
  28.                 fscanf(grid,"%lf",&elevation[i][j]);
  29.             }
  30.         }
  31.        
  32.         for(i=0;i<=nrows-2;i++)
  33.         {
  34.             for(j=0;j<=ncols-2;j++)
  35.             {
  36.                 if((elevation[i-1][j] < elevation[i][j])
  37.                 && (elevation[i+1][j] < elevation[i][j])
  38.                 && (elevation[i][j-1] < elevation[i][j])
  39.                 && (elevation[i][j+1] < elevation[i][j])
  40.                 && (elevation[i+1][j+1] < elevation[i][j])
  41.                 && (elevation[i+1][j-1] < elevation[i][j])
  42.                 && (elevation[i-1][j+1] < elevation[i][j])
  43.                 && (elevation[i-1][j-1] < elevation[i][j]))
  44.                 {
  45.                     printf("\nPeak at row %d, col %d\n",i,j);
  46.                     peaks++;
  47.                    
  48.                     if(elevation[i][j] > max)
  49.                     {
  50.                         max = elevation[i][j];
  51.                     }
  52.                    
  53.                     rowDist = elevation[i] - elevation[0];
  54.                     colDist = elevation[j] - elevation[0];
  55.                     dist = sqrt((rowDist * rowDist) + (colDist * colDist));
  56.                     printf("This peak is %.2lf metres from 0,0\n",dist);
  57.                 }
  58.                
  59.                 if((elevation[i-1][j] < elevation[i][j])
  60.                 && (elevation[i+1][j] < elevation[i][j])
  61.                 && (elevation[i][j-1] < elevation[i][j])
  62.                 && (elevation[i][j+1] < elevation[i][j])
  63.                 && (elevation[i+1][j+1] < elevation[i][j])
  64.                 && (elevation[i+1][j-1] < elevation[i][j])
  65.                 && (elevation[i-1][j+1] < elevation[i][j])
  66.                 && (elevation[i-1][j-1] < elevation[i][j]))
  67.                 {
  68.                     printf("\nValley at row %d, col %d \n",i,j);
  69.                     valleys++;
  70.                    
  71.                     if(elevation[i][j] < min)
  72.                     {
  73.                         min = elevation[i][j];
  74.                     }
  75.                    
  76.                     rowDist = elevation[i] - elevation[0];
  77.                     colDist = elevation[j] - elevation[0];
  78.                     dist = sqrt((rowDist * rowDist) + (colDist * colDist));
  79.                     printf("This valley is %.2lf metres from 0,0\n",dist);
  80.                 }
  81.             }
  82.         }
  83.        
  84.         printf("\nThere are %d peaks and %d valleys\n",peaks, valleys);
  85.         printf("\nThe highest peak is %.2lf, the lowest valley is %.2lf\n",max,min);
  86.        
  87.         fclose(grid);
  88.     }
  89.    
  90.     return 0;
  91. }