/*Terrain Navigation Excercise*/
/*page 250*/
#include<stdio.h>
#define N 25
#define FILENAME "grid1.txt"
int main(void)
{
int nrows, ncols, i, j, peaks = 0, valleys = 0;
double elevation[N][N], min = 99999, max = 0;
double rowDist, colDist, dist;
FILE * grid;
grid = fopen(FILENAME,"r");
if(grid == NULL)
{
printf("Error\n");
}
else
{
fscanf(grid,"%d %d",&nrows,&ncols);
for(i=0;i<=nrows-1;i++)
{
for(j=0;j<=ncols-1;j++)
{
fscanf(grid,"%lf",&elevation[i][j]);
}
}
for(i=0;i<=nrows-2;i++)
{
for(j=0;j<=ncols-2;j++)
{
if((elevation[i-1][j] < elevation[i][j])
&& (elevation[i+1][j] < elevation[i][j])
&& (elevation[i][j-1] < elevation[i][j])
&& (elevation[i][j+1] < elevation[i][j])
&& (elevation[i+1][j+1] < elevation[i][j])
&& (elevation[i+1][j-1] < elevation[i][j])
&& (elevation[i-1][j+1] < elevation[i][j])
&& (elevation[i-1][j-1] < elevation[i][j]))
{
printf("\nPeak at row %d, col %d\n",i,j);
peaks++;
if(elevation[i][j] > max)
{
max = elevation[i][j];
}
rowDist = elevation[i] - elevation[0];
colDist = elevation[j] - elevation[0];
dist = sqrt((rowDist * rowDist) + (colDist * colDist));
printf("This peak is %.2lf metres from 0,0\n",dist);
}
if((elevation[i-1][j] < elevation[i][j])
&& (elevation[i+1][j] < elevation[i][j])
&& (elevation[i][j-1] < elevation[i][j])
&& (elevation[i][j+1] < elevation[i][j])
&& (elevation[i+1][j+1] < elevation[i][j])
&& (elevation[i+1][j-1] < elevation[i][j])
&& (elevation[i-1][j+1] < elevation[i][j])
&& (elevation[i-1][j-1] < elevation[i][j]))
{
printf("\nValley at row %d, col %d \n",i,j);
valleys++;
if(elevation[i][j] < min)
{
min = elevation[i][j];
}
rowDist = elevation[i] - elevation[0];
colDist = elevation[j] - elevation[0];
dist = sqrt((rowDist * rowDist) + (colDist * colDist));
printf("This valley is %.2lf metres from 0,0\n",dist);
}
}
}
printf("\nThere are %d peaks and %d valleys\n",peaks, valleys);
printf("\nThe highest peak is %.2lf, the lowest valley is %.2lf\n",max,min);
fclose(grid);
}
return 0;
}