Informatică, întrebare adresată de Infoman, 9 ani în urmă

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ăspunsuri la întrebare

Răspuns de Dactyls
2
#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.*/
Anexe:

Infoman: Multumesc.M-a ajutat mult.
Dactyls: Algoritmul l-am facut in graba..daca nu ai inteles ceva,spune-mi.
Infoman: Salut.Daca ma gandesc mai bine as avea o intrebare legata de 2 lucruri:
Infoman: 1.de ce ai ales la inceput ca variabila i sa fie pana in 2*n
Infoman: 2.daca mi-ai putea explica structura asta ar fi ideal :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++;
Dactyls: Pai un punct are 2 coordonate(x,y) ..Sa luam n=3(Adica citim 3puncte) Daca luam i<=n citea decat un punct si o cordonata(x1,y1 si x2)---sunt 3..asa daca i<=2*n citeste(x1,y1,x2,y2,x3,y3)---fiind 6(adica 2*n)...Analog pentru 4,5,6...n puncte.
Dactyls: La 2 )...Pai am memorat in tabloul A[ ] toate punctele..Aceste valori le atribui variabilelor x1,y1...x3,y3.(Testem decat 3 puncte pe rand)..Apoi testeaza cu functia "coliniar" daca sunt coliniare..daca sunt crestem valoarea(s++) daca nu ,incercam cu alte puncte(daca exista)..dupa ce se termina ciclul se scrie s..
Alte întrebări interesante