/* avstandskoll.c */ #include <stdio.h> #include <string.h> #include <math.h> #include "tatorter.h" #include "avstand.h" #ifdef _WIN32 #include <conio.h> #endif int main(void) { int a; /* Används som index i avståndsarrayen */ int t; /* Används som index i tätortsarrayen */ /* Gå igenom alla avstånd i avståndsarrayen */ for (a = 0; a < antal_avstand; ++a) { int startortsindex = -1; int slutortsindex = -1; /* Leta rätt på startplatsens index i tätortsarrayen */ for (t = 0; t < antal_tatorter && startortsindex == -1; ++t) { if (strcmp(tatorter[t].namn, avstand[a].startort) == 0) startortsindex = t; } /* Leta rätt på slutplatsens index i tätortsarrayen */ for (t = 0; t < antal_tatorter && slutortsindex == -1; ++t) { if (strcmp(tatorter[t].namn, avstand[a].slutort) == 0) slutortsindex = t; } /* Räkna ut och jämför med avståndet fågelvägen, om det går att räkna ut */ if (startortsindex != -1 && slutortsindex != -1 && tatorter[startortsindex].latitud != -9999 && tatorter[slutortsindex].latitud != -9999 && tatorter[startortsindex].longitud != -9999 && tatorter[slutortsindex].longitud != -9999) { /* Både startplatsen och slutplatsen fanns i tätortsarrayen, och alla fyra koordinatvärdena finns */ double lat_diff = tatorter[startortsindex].latitud - tatorter[slutortsindex].latitud; double long_diff = tatorter[startortsindex].longitud - tatorter[slutortsindex].longitud; double formel_avstand = sqrt(57.03 * 57.03 * long_diff * long_diff + 111.40 * 111.40 * lat_diff * lat_diff); if (avstand[a].avstand < formel_avstand) { printf("Konstigt avstand: %s - %s, %d kilometer, är mindre än beräknade fågelvägen, %.2f kilometer.\n", avstand[a].startort, avstand[a].slutort, avstand[a].avstand, formel_avstand); } } } /* för varje avstånd */ #ifdef _WIN32 printf("Tryck en tangent för att avsluta: "); _getch(); #endif return 0; }