Advertisement
Tucancitto

Proiect AF - Intersecție segment (Pb vapor)

Jan 2nd, 2021 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct Punct
  6. {
  7.     double coordX, coordY;
  8. };
  9.  
  10. struct Segment
  11. {
  12.     Punct capat1, capat2;
  13.     double inaltime;
  14. };
  15.  
  16. void citire(Segment& vapor, Segment poduri[], int& nrPoduri)
  17. {
  18.     ifstream fin("vapor.in");
  19.  
  20.     fin >> vapor.capat1.coordX >> vapor.capat1.coordY;
  21.     fin >> vapor.capat2.coordX >> vapor.capat2.coordY;
  22.     fin >> vapor.inaltime;
  23.  
  24.     while (!fin.eof())
  25.     {
  26.         nrPoduri++;
  27.         fin >> poduri[nrPoduri].capat1.coordX >> poduri[nrPoduri].capat1.coordY;
  28.         fin >> poduri[nrPoduri].capat2.coordX >> poduri[nrPoduri].capat2.coordY;
  29.         fin >> poduri[nrPoduri].inaltime;
  30.     }
  31.     fin.close();
  32. }
  33.  
  34. double determinant(Punct p1, Punct p2, Punct p3)
  35. {
  36.     //Determinant Sarrus
  37.     return p1.coordX * p2.coordY + p2.coordX * p3.coordY + p1.coordY * p3.coordX
  38.         - p3.coordX * p2.coordY - p3.coordY * p1.coordX - p1.coordY * p2.coordX;
  39. }
  40.  
  41. void parcurgereFluviu(Segment vapor, Segment poduri[], int nrPoduri)
  42. {
  43.     ofstream fout("vapor.out");
  44.     bool poateTrece = true;
  45.  
  46.     for (int i = 1; i <= nrPoduri; i++)
  47.     {
  48.         if (determinant(vapor.capat1, vapor.capat2, poduri[i].capat1) * determinant(vapor.capat1, vapor.capat2, poduri[i].capat2) <= 0)
  49.             if (vapor.inaltime > poduri[i].inaltime)
  50.             {
  51.                 poateTrece = false;
  52.                 break;
  53.             }
  54.     }
  55.  
  56.     if (poateTrece)
  57.         fout << "Vaporul a putut ajunge la destinatie!";
  58.     else fout << "Vaporul nu a putut ajunge la destinatie!";
  59.  
  60.     fout.close();
  61. }
  62.  
  63. int main()
  64. {
  65.     Segment poduri[100], vapor = { 0 };
  66.     int nrPoduri = 0;
  67.  
  68.     citire(vapor, poduri, nrPoduri);
  69.     parcurgereFluviu(vapor, poduri, nrPoduri);
  70.  
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement