Guest User

Untitled

a guest
Jun 11th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <cstdlib>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. typedef struct
  10. {
  11.     int x;
  12.     int y;
  13. }punkt;
  14.  
  15. vector <punkt> wczytaj_z_pliku();
  16. void dodaj_do_kontenera(vector <punkt> &kontener, punkt roboczy);
  17. int policz_wyznacznik(punkt pierwszy, punkt drugi, punkt trzeci);
  18. string okresl_strone(int wyznacznik);
  19. string okresl_wzajemne_polozenie( string pierwszy, string drugi, int &ktora_linia );
  20.  
  21. int main()
  22. {
  23.     vector <punkt> wszystkie;
  24.     int wyznaczniki[2];
  25.     string strony[2];
  26.     punkt podstawowe[2];
  27.     int ktora_linia = 0;
  28.  
  29.     string odpowiedz;
  30.  
  31.     wszystkie = wczytaj_z_pliku();
  32.  
  33.     for(int i = 0; i < wszystkie.size(); i = i + 4)
  34.     {
  35.         wyznaczniki[0] = policz_wyznacznik( wszystkie[i], wszystkie[i+1], wszystkie[i+2] );
  36.         wyznaczniki[1] = policz_wyznacznik( wszystkie[i], wszystkie[i+1], wszystkie[i+3] );
  37.  
  38.         strony[0] = okresl_strone( wyznaczniki[0] );
  39.         strony[1] = okresl_strone( wyznaczniki[1] );
  40.  
  41.         odpowiedz = okresl_wzajemne_polozenie( strony[0], strony[1], ktora_linia );
  42.  
  43.         cout<<"Omawiane proste, skladaja sie z punktow: ";
  44.         for(int j = i; j < i + 4; j++)
  45.         {
  46.             cout<<" x: " << wszystkie[j].x << " y: " << wszystkie[j].y << "\t";
  47.         }
  48.         cout<<endl;
  49.         cout<<odpowiedz<<endl;
  50.  
  51.         strony[0].clear(); strony[0].resize(2);
  52.         strony[1].clear(); strony[1].resize(2);
  53.  
  54.     }
  55.     return 0;
  56. }
  57. vector <punkt> wczytaj_z_pliku()
  58. {
  59.     vector <punkt> roboczy;
  60.     fstream plik;
  61.     string linia, bufor;
  62.     int j = 0, buf, id = 0;
  63.     punkt roboczy_struktura;
  64.  
  65.     plik.open("plik.txt", ios::in);
  66.  
  67.     while(!plik.eof())
  68.     {
  69.         getline(plik, linia);
  70.         for(int i = 0; i < linia.size(); i++)
  71.         {
  72.             while(linia[i] != ' ' && linia[i] != NULL)
  73.             {
  74.                bufor[j] = linia[i];
  75.                i++; j++;
  76.             }
  77.             switch(id)
  78.             {
  79.                 case 0: roboczy_struktura.x = atoi(bufor.c_str());id++; break;
  80.                 case 1: roboczy_struktura.y = atoi(bufor.c_str());id++; break;
  81.             }
  82.             if(id > 1){ id = 0; dodaj_do_kontenera(roboczy, roboczy_struktura); }
  83.             bufor.clear(); bufor.resize(2); j = 0;
  84.         }
  85.     }
  86.     plik.close();
  87.     return roboczy;
  88. }
  89. void dodaj_do_kontenera(vector <punkt> &kontener, punkt roboczy)
  90. {
  91.     kontener.push_back(roboczy);
  92. }
  93. int policz_wyznacznik(punkt pierwszy, punkt drugi, punkt trzeci)
  94. {
  95.     int wynik[2];
  96.     wynik[0] = pierwszy.x * drugi.y + drugi.x * trzeci.y + trzeci.x * pierwszy.y;
  97.     wynik[1] = drugi.y * trzeci.x + trzeci.y * pierwszy.x + pierwszy.y * drugi.x;
  98.  
  99.     return wynik[0] - wynik[1];
  100. }
  101. string okresl_strone(int wyznacznik)
  102. {
  103.     if(wyznacznik > 0)
  104.     {
  105.         return "lewa";
  106.     }
  107.     else if(wyznacznik < 0)
  108.     {
  109.         return "prawa";
  110.     }
  111.     else
  112.     {
  113.         return "wspolniowe";
  114.     }
  115. }
  116. string okresl_wzajemne_polozenie( string pierwszy, string drugi, int &ktora_linia )
  117. {
  118.     if(pierwszy.size() == 4 && drugi.size() == 5 || pierwszy.size() == 5 && drugi.size() == 4)
  119.     {
  120.       return "Proste przecinaja sie";
  121.     }
  122.     else if(pierwszy.size() == 4 && drugi.size() == 4 || pierwszy.size() == 5 && drugi.size() == 5)
  123.     {
  124.         return "Proste nie przecinaja sie";
  125.     }
  126.     else
  127.     {
  128.         return "Proste sa wspolniowe";
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment