👤

Problema :
Se considera un sir de n puncte in plan, pentru fiecare cunoscindu-se coordonatele intregi (x,y).
Datele de inrare se citesc din fisierul puncte.in.
Realizati un program care determina si afiseaza in fisierul de iesire puncte.out numarul maxim de puncte coliniare situate pe o dreapta paralela cu axa OX.

Va rog frumos daca o rezolvati sa mi si explicati putin.Multumesc anticipat.


Răspuns :

#include <iostream>
#include <fstream>
using namespace std;
int coliniar(int, int, int, int, int, int);
int main()
{
 ifstream get("puncte.in");
 ofstream out("puncte.out");
 int x1, y1, x2, y2, x3, y3, n, s = 0, j = 1;
 cout << "Introdu numarul de puncte:";
 cin >> n;
 int a[100];
 for (int i = 1; i <= 2*n; i++)
 {
  get >> a[i];
 }
 while (j <= 2 * n)
 {
  x1 = a[j];
  y1 = a[j + 1];
  x2 = a[j + 2];
  y2 = a[j + 3];
  x3 = a[j + 4];
  y3 = a[j + 5];
  if (!coliniar(x1, y1, x2, y2, x3, y3))
   s++;
  j *=6+1;
 }
 out << s;
 get.close();
 out.close();
 return 0;
}
int coliniar(int x1, int y1, int x2, int y2, int x3, int y3)
{
 if ((x1*y2 + y1*x3 + y3*x2) - (y2*x3 + y3*x1 + x2*y1))
  return 1;
 else
  return 0;
}
/*Am folosit formula cu determinant pentru a afla daca 3 puncte in plan sunt coliniare:

|x1 y1 1|
|x2 y2 1|  =0
|x3 y3 1|

In program am implementat-o cu regula triunghiului.*/
Vezi imaginea DACTYLS