Skip to content

Instantly share code, notes, and snippets.

@gabrielfern
Last active November 17, 2017 04:45
Show Gist options
  • Save gabrielfern/532d393e1043d4a37615b3530a59f80d to your computer and use it in GitHub Desktop.
Save gabrielfern/532d393e1043d4a37615b3530a59f80d to your computer and use it in GitHub Desktop.
#include "stdlib.h"
// declaracoes das funcoes para por no ".h"
double mediana(int, double *);
double *moda(int, double *);
// ate aqui
// definicoes das funcoes
// lista_tamanho: quantos elementos o conjunto possui (length)
double mediana(int lista_tamanho, double *lista)
{
for (int i = 0; i < lista_tamanho - 1; i++) {
int minElemIndex = i;
for (int j = i; j < lista_tamanho; j++) {
if (lista[minElemIndex] > lista[j]) {
minElemIndex = j;
}
}
double aux = lista[i];
lista[i] = lista[minElemIndex];
lista[minElemIndex] = aux;
}
if (lista_tamanho % 2 == 0) {
return (lista[lista_tamanho/2 - 1] + lista[lista_tamanho/2]) / 2;
}
return lista[lista_tamanho/2];
}
// lista_tamanho: quantos elementos o conjunto possui (length)
// retorna: array de doubles, onde o primeiro elemento diz quantos
// elementos sao moda nesse conjunto, a partir do segundo elemento sao as
// modas
double *moda(int lista_tamanho, double *lista)
{
double fila[lista_tamanho];
int fila_tamanho = 0;
int contagem[lista_tamanho];
for (int i = 0; i < lista_tamanho; i++) {
contagem[i] = 0;
}
for (int i = 0; i < lista_tamanho; i++) {
int repetido = 0;
for (int j = 0; j < fila_tamanho; j++) {
if (lista[i] == fila[j]) {
contagem[j]++;
repetido++;
}
}
if (!repetido) {
contagem[fila_tamanho]++;
fila[fila_tamanho++] = lista[i];
}
}
int max = 0;
for (int i = 0; i < fila_tamanho; i++) {
if (contagem[max] < contagem[i]) {
max = i;
}
}
int max_count = 0;
for (int i = 0; i < fila_tamanho; i++) {
if (contagem[max] == contagem[i]) {
max_count++;
}
}
double *moda;
if (lista_tamanho == fila_tamanho) {
moda = (double *) malloc(sizeof (double));
moda[0] = 0;
} else {
moda = (double *) malloc((max_count + 1) * sizeof (double));
moda[0] = max_count;
int moda_index = 1;
for (int i = 0; i < fila_tamanho; i++) {
if (contagem[max] == contagem[i]) {
moda[moda_index++] = fila[i];
}
}
}
return moda;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment