Pagini recente » Cod sursa (job #2640034) | Cod sursa (job #220776) | Cod sursa (job #1368522) | Cod sursa (job #2905666) | Cod sursa (job #2498550)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
const int NMax = 1505;
const double EPSILON = 0.001;
typedef struct Point Point;
struct Point {
double x,y;
};
Point points[1505];
int N = 0;
double sqdist(Point p1, Point p2);
double modul(double a);
int main()
{
FILE* fin = fopen("triang.in", "r");
FILE* fout = fopen("triang.out", "w");
unsigned int count = 0;
int i,j,k;
fscanf(fin,"%d",&N);
for(i = 0; i < N; i++) { //Pentru fiecare punct nou citit verifica toate combinatiile dintre el si punctele precedente
fscanf(fin,"%lf %lf", &(points[i].x), &(points[i].y) );
if(i < 2) continue;
for(j = 0; j < i - 1;j++) {
for(k = j + 1; k < i;k++) {
if(echilateral(points[i], points[j], points[k]))
count++;
}
}
}
fprintf(fout,"%u",count);
fclose(fin);
fclose(fout);
return 0;
}
int echilateral(Point p1, Point p2, Point p3) {
if(p1.x == p2.x && p1.y == p2.y) return 0;
if(p1.x == p3.x && p1.y == p3.y) return 0;
if(p2.x == p3.x && p2.y == p3.y) return 0;
double a = sqdist(p1, p2);
double b = sqdist(p1, p3);
double c = sqdist(p2, p3);
if(fabs(a-b) * 1.0 > EPSILON) return 0;
if(fabs(a-c) * 1.0 > EPSILON) return 0;
if(fabs(b-c) * 1.0 > EPSILON) return 0;
return 1;
}
double sqdist(Point p1, Point p2) {
return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y);
}
double modul(double a) {
if(a > 0) return a;
else return -a;
}