You are on page 1of 2

#include <omp.

h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define DIM 20
#define T 8
#define K 3

typedef struct {
int id;
int value;
} Centroide;

void inicializarPoints(){

// distancia entre Vectores


float distance(float *vector1, float *vector2){
float sum = 0.0;
for (int i = 0; i < DIM; i++){
sum += pow(vector1[i] - vector2[i], 2.0);
}
return sqrt(sum);
}

//seleccionar K numeros random


int getKnumbers(int *total, Centroide* ctrde, float **dtBase){
int i, j, temp;
printf("Total : %d \n", *total);
int numbers[5];
for(i = 0 ; i < *total; i++){
numbers[i] = i + 1;
}
srand(time(NULL));
for ( i = 0; i < 3; i++ ){
j = rand() % (5 - i) + i;
ctrde[i].id = numbers[j];
ctrde[i].value = *dtBase[numbers[j] - 1];
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}

//Mostrar Distancias Euclidianas


void printEuclidian(float **dtBase, int **nblist, float **results){
float Edist = 0.0;
for (int i = 0; i < k; i++){
float kmean = 0.0;
for(int jk = 0; jk < 5; jk++){
Edist = distance(dtBase[jk], dtBase[((int)* nblist[i]) - 1]);
kmean += Edist / 4;
printf("%f \t", Edist);
}
printf("Kmean : %f \n", kmean);
}
}

int main(){
// Ejecutar como: ./a.out < test.txt
int N_DB, i, j;
int *nblist[K];
Centroide ctrde[K];

float **ELEMS;
float **RESULTS;

//cantidad de vectores
scanf("%d", &N_DB);

//resultados
RESULTS = (float **)malloc(sizeof(float *)*N_DB);
for (i=0; i < N_DB; i++)
RESULTS[i] = (float *)malloc(sizeof(float)*K);

//lectura de los Vectores


ELEMS = (float **)malloc(sizeof(float *)*N_DB);
for (i=0; i < N_DB; i++)
ELEMS[i] = (float *)malloc(sizeof(float)*DIM);

//En este punto ELEMS es una matriz de tamaño [N_DB][DIM]

for (i=0; i < N_DB; i++)


for (j=0; j < DIM; j++)
scanf("%f", &(ELEMS[i][j]));

printf("%d\n", N_DB);
for (i=0; i < N_DB; i++)
{
for (j=0; j < DIM; j++)
if (j == DIM-1)
printf("%.2f\n", ELEMS[i][j]);
else
printf("%.2f\t", ELEMS[i][j]);
}

getKnumbers(&N_DB, ctrde, ELEMS);


for(i=0; i<3; i++){
printf("%d \t %d \n", ctrde[i].id, ctrde[i].value);
}

printEuclidian(ELEMS, nblist, RESULTS);


return 0;
}

You might also like