Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct Punct
- {
- double coordX, coordY;
- };
- struct Segment
- {
- Punct capat1, capat2;
- double inaltime;
- };
- void citire(Segment& vapor, Segment poduri[], int& nrPoduri)
- {
- ifstream fin("vapor.in");
- fin >> vapor.capat1.coordX >> vapor.capat1.coordY;
- fin >> vapor.capat2.coordX >> vapor.capat2.coordY;
- fin >> vapor.inaltime;
- while (!fin.eof())
- {
- nrPoduri++;
- fin >> poduri[nrPoduri].capat1.coordX >> poduri[nrPoduri].capat1.coordY;
- fin >> poduri[nrPoduri].capat2.coordX >> poduri[nrPoduri].capat2.coordY;
- fin >> poduri[nrPoduri].inaltime;
- }
- fin.close();
- }
- double determinant(Punct p1, Punct p2, Punct p3)
- {
- //Determinant Sarrus
- return p1.coordX * p2.coordY + p2.coordX * p3.coordY + p1.coordY * p3.coordX
- - p3.coordX * p2.coordY - p3.coordY * p1.coordX - p1.coordY * p2.coordX;
- }
- void parcurgereFluviu(Segment vapor, Segment poduri[], int nrPoduri)
- {
- ofstream fout("vapor.out");
- bool poateTrece = true;
- for (int i = 1; i <= nrPoduri; i++)
- {
- if (determinant(vapor.capat1, vapor.capat2, poduri[i].capat1) * determinant(vapor.capat1, vapor.capat2, poduri[i].capat2) <= 0)
- if (vapor.inaltime > poduri[i].inaltime)
- {
- poateTrece = false;
- break;
- }
- }
- if (poateTrece)
- fout << "Vaporul a putut ajunge la destinatie!";
- else fout << "Vaporul nu a putut ajunge la destinatie!";
- fout.close();
- }
- int main()
- {
- Segment poduri[100], vapor = { 0 };
- int nrPoduri = 0;
- citire(vapor, poduri, nrPoduri);
- parcurgereFluviu(vapor, poduri, nrPoduri);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement