Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.39 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4. #define Pi 3.14
  5. double zamiana_x(double x, double y, double r) // funkcja zamieniajaca 1 wspolrzedna na wspolrzedna ukladu kartezjanskiego
  6. {
  7. double a;
  8. a = r * cos(x/180*Pi) * cos(y/180*Pi);
  9. return a;
  10. }
  11. double zamiana_y(double x, double y, double r) // funkcja zamieniajaca 1 wspolrzedna na wspolrzedna ukladu kartezjanskiego
  12. {
  13. double a;
  14. a = r * sin(x/180*Pi) * cos(y/180*Pi);
  15. return a;
  16. }
  17.  
  18.  
  19. double function(double poprzedni_x, double poprzedni_y, double nowy_x, double nowy_y) // obliczanie dlugosci wektora
  20. {
  21. double dlugosc = 0;
  22. double a = (nowy_x - poprzedni_x)*(nowy_x - poprzedni_x);
  23. double b = (nowy_y - poprzedni_y)*(nowy_y - poprzedni_y);
  24. dlugosc = sqrt(a + b);
  25. return dlugosc;
  26. }
  27. void zeruj(char tab[], int n) // czyszczenie tablicy przechowujacej znak np. <trkpt
  28. {
  29. for(int i = 0; i < n; i++)
  30. {
  31. tab[i] = '0';
  32. }
  33. }
  34.  
  35. int main()
  36. {
  37. char tab[10]; // tablica przechowuja czy tam jest trktpl
  38. int licznik_wierszy = 0;
  39. int licznik_znakow = 0;
  40. double dlugosc_sciezki = 0.0;
  41. int ilosc_punktow = 0;
  42. double poprzedni_x = 0.0, poprzedni_y = 0.0;
  43. double nowy_x = 0.0, nowy_y = 0.0;
  44. const double r = 6371.0; // w metrach
  45. FILE *plik = fopen("test.txt", "r");
  46. char sign;
  47. int a = 0; // indeks w tablicy na trkpt
  48. int ilosc_liczb = 0;
  49.  
  50. while(fscanf(plik, "%c", &sign) != EOF) // wczytywanie po znaku do konca pliku
  51. {
  52. licznik_znakow++;
  53.  
  54. if(sign == '\n') // zliczanie wierszy
  55. {
  56. licznik_wierszy++;
  57. }
  58.  
  59. if((a == 0 && sign == '<') || (a == 1 && sign == 't') || (a == 2 && sign == 'r') || (a == 3 && sign == 'k') || (a == 4 && sign == 'p') || (a == 5 && sign == 't')) // sprawdzanie czy ciag znakow to <trkpt
  60. {
  61. tab[a] = sign;
  62. a++;
  63. }
  64. else if((a == 1 && sign != 't') || (a == 2 && sign != 'r') || (a == 3 && sign != 'k') || (a == 4 && sign != 'p') || (a == 5 && sign != 't')) // sprawdzenie czy ciag znakow zaczynajacy sie podobnie jak <trkpt to na pewno ten ciag znakow a nie na przyklad <time
  65. {
  66. zeruj(tab,a);
  67. a = 0;
  68. }
  69.  
  70. if((a == 6 && sign == '"' && ilosc_liczb == 0) || (a == 6 && sign == '"' && ilosc_liczb == 2 && nowy_x == poprzedni_x && nowy_y == poprzedni_y)) // znalezismy <trkpt
  71. {
  72. nowy_x = 0.0;
  73. fscanf(plik, "%c", &sign);
  74. licznik_znakow++;
  75. while(sign != '.') // wczytywanie do '.' czesci calkowitej i mnozenie przez 10
  76. {
  77. nowy_x *=10.0;
  78. nowy_x += (sign - '0');
  79. fscanf(plik, "%c", &sign);
  80. licznik_znakow++;
  81. }
  82.  
  83. fscanf(plik, "%c", &sign);
  84. licznik_znakow++;
  85. double dzielnik = 10.0;
  86.  
  87. while(sign != '"') // wczytywanie do '"' czesci ulamkowej i dzielenie przez 10
  88. {
  89. nowy_x += ((sign - '0')/dzielnik);
  90. dzielnik *=10.0;
  91. fscanf(plik, "%c", &sign);
  92. licznik_znakow++;
  93. }
  94.  
  95. ilosc_liczb = 1;
  96. fscanf(plik, "%c", &sign);
  97. licznik_znakow++;
  98. }
  99.  
  100. if(a == 6 && sign == '"' && ilosc_liczb == 1)
  101. {
  102. nowy_y = 0.0;
  103. fscanf(plik, "%c", &sign);
  104. licznik_znakow++;
  105. while(sign != '.') // wczytywanie do '.' czesci calkowitej i mnozenie przez 10
  106. {
  107. nowy_y *=10.0;
  108. nowy_y += (sign - '0');
  109. fscanf(plik, "%c", &sign);
  110. licznik_znakow++;
  111. }
  112.  
  113. fscanf(plik, "%c", &sign);
  114. licznik_znakow++;
  115. double dzielnik = 10.0;
  116.  
  117. while(sign != '"') // wczytywanie do '"' czesci ulamkowej i dzielenie przez 10
  118. {
  119. nowy_y += ((sign - '0')/dzielnik);
  120. dzielnik *=10.0;
  121. fscanf(plik, "%c", &sign);
  122. licznik_znakow++;
  123. }
  124.  
  125. ilosc_liczb = 2;
  126. fscanf(plik, "%c", &sign);
  127. licznik_znakow++;
  128. double xx = zamiana_x(nowy_x, nowy_y, r); // zamiana 1 wspolrzednej na wspolrzedna w ukladzie kartezjanskim
  129. double yy = zamiana_y(nowy_x, nowy_y, r); // zamiana 2 wspolrzednej na wspolrzedna w ukladzie kartezjanskim
  130. nowy_x = xx;
  131. nowy_y = yy;
  132. a = 0;
  133.  
  134. if(poprzedni_x == 0.0 && poprzedni_y == 0.0)
  135. {
  136. poprzedni_x = nowy_x;
  137. poprzedni_y = nowy_y;
  138. a = 6;
  139. }
  140.  
  141. ilosc_punktow++;
  142. }
  143.  
  144. if(ilosc_liczb == 2 && poprzedni_x != nowy_x && poprzedni_y != nowy_y) // zliczanie dlugosci sciezki na podstawie sumy dlugosci poszczegolnych wektorow
  145. {
  146. dlugosc_sciezki += function(poprzedni_x, poprzedni_y, nowy_x, nowy_y);
  147. poprzedni_x = nowy_x;
  148. poprzedni_y = nowy_y;
  149. zeruj(tab,11);
  150. ilosc_liczb = 0;
  151. }
  152. }
  153.  
  154. printf("%d %d %d %f", licznik_znakow, licznik_wierszy, ilosc_punktow, dlugosc_sciezki); // wypisanie wynikow
  155. fclose(plik);
  156. return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement