Hi there,
I did some problem based on two dimensional array. I'm not quite happy with the code I've produced. Could someone tell me if there's a better way of doing this stuff? The problem demands the use of one/two dimensional arrays.
Problem Statement:
1. Read a bunch of temperature readings. ie, A latitude and a corresponding temperature value (both are ints). Latitude to be from -90 to 90.
2. I need to find the average of the temperature at a particular latitude
3. Print the average temperature for all latitudes from -90 to 90 if present, else "NO DATA"
Below is my code.
Any comments are welcome.
Thanks,
Tina
P.S: Could you tell me how to close a thread? I do not find a close thread option and I did the FAQS too. Perhaps I missed it. Let me know. Thanks again!
Code:
#include <stdio.h>
#define NO_OF_LATITUDES 181 /* possible values -90 to +90 */
void findAverage(int (*)[2], int);
int main()
{
int n = 0;
int a[181][2]; /* array of latitude and temperature */
scanf("%d", &n);
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < 2; j++)
scanf("%d", &a[i][j]);
findAverage(a, n);
return 0;
}
void findAverage(int (*q)[2], int rows)
{
int i, sign = 1;
int *p;
static int arr[NO_OF_LATITUDES][2];
for ( i = 0; i < rows; i++)
{
p = q + i;
if(*p < 0) /*store negative latitude(-90 to -1) values in array range from 1 - 90 */
{
arr[abs(*p)][0] += *(p+1);
arr[abs(*p)][1] += 1;
}
else if(*p > 0)
{
arr[(*p) + 90][0] += *(p+1); /*store positive latitude(1 to 90) in array range 91 - 180*/
arr[(*p) + 90][1] += 1;
}
else
printf("0 is not a valid latitude\n");
}
for(i = 1; i <= NO_OF_LATITUDES; i++)
if(arr[i][0])
{
if (i <= 90)
{
sign = -1;
printf("Latitude = %d : Temperature = %f\n", sign*i, (float)arr[i][0]/arr[i][1]);
}
else
{
printf("Latitude = %d : Temperature = %f\n", (i - 90), (float)arr[i][0]/arr[i][1]);
}
}
//else
// printf("NO DATA\n");
}