#include <stdio.h>
#include <math.h>
#define ERROMAX 0.0001

int main (void) {
	printf("Entradas inteiras:\n");
	int falsosPositivos = 0;
	for ( int cat1 = 1 ; cat1 <= 100 ; cat1++ )
	    for ( int cat2 = cat1 ; cat2 <= 100 ; cat2++ )
	        for ( int hip = 1 ; hip <= 100 ; hip++ ) {
	        	int semConversao = (hip == sqrt(pow(cat1,2) + pow(cat2,2)));
	        	int inteiro = (hip == (int)sqrt(pow(cat1,2) + pow(cat2,2)));
	        	int quadrado = (hip*hip == cat1*cat1 + cat2*cat2);
	        	int maxErro = (fabs((float)hip - sqrt(pow(cat1,2) + pow(cat2,2))) < ERROMAX);
	        	if ( semConversao || quadrado || maxErro ) {
	        		printf("(%d,%d,%d) %d%d%d%d\n", cat1, cat2, hip, 
	        		       semConversao, inteiro, quadrado, maxErro);
	        	}
	        	else if ( inteiro ) {
	        		falsosPositivos++;
	        	}
	        }
    printf("\nFalsos positivos: %d\n", falsosPositivos);
   
    printf("\nEntradas em ponto flutuante:\n");
	falsosPositivos = 0;
	for ( float cat1 = 0.1 ; cat1 <= 10 ; cat1 += 0.1 )
	    for ( float cat2 = cat1 ; cat2 <= 10 ; cat2 += 0.1 )
	        for ( float hip = 0.1 ; hip <= 10 ; hip += 0.1 ) {
	        	int semConversao = (hip == sqrt(pow(cat1,2) + pow(cat2,2)));
	        	int inteiro = (hip == (int)sqrt(pow(cat1,2) + pow(cat2,2)));
	        	int quadrado = (hip*hip == cat1*cat1 + cat2*cat2);
	        	int maxErro = (fabs((float)hip - sqrt(pow(cat1,2) + pow(cat2,2))) < ERROMAX);
	        	if ( semConversao || quadrado || maxErro ) {
	        		printf("(%f,%f,%f) %d%d%d%d\n", cat1, cat2, hip, 
	        		       semConversao, inteiro, quadrado, maxErro);
	        	}
	        	else if ( inteiro ) {
	        		falsosPositivos++;
	        	}
	        }
   printf("\nFalsos positivos: %d\n", falsosPositivos);
   return 0;
}