Mógłby mi ktoś doradzić co może być błędem w funkcjach liczących mediany dla X, Y i RHO? Liczba, która się wyświetla na pewno medianą nie jest a gdy podam więcej wartości, z których ma być ta mediana liczona to wyskakuje że mediana wynosi 0.
#include <stdio.h>
#include <stdlib.h>
float medianaX(float *tablicaX, int wielkosc);
float medianaY(float *tablicaY, int wielkosc);
float medianaRHO(float *tablicaRHO, int wielkosc);
int main()
{
FILE *plik;
plik=fopen("grades.txt","r");
int line=0;
char input[512];
fgets(input, 512, plik);
line=line+1;
printf("Linia %d: %s", line, input);
int i=0;
int wielkosc=0;
int t=0;
printf("Podaj ilosc wszystkich wartosci ktore chcesz wyswietlic (max 200): ");
scanf("%d", &wielkosc);
while (wielkosc>200)
{
printf("Sprobuj jeszcze raz podajac wartosc maksymalnie 200");
exit(0);
}
float *tablicaLP;
tablicaLP=(float *)malloc(wielkosc*sizeof(float));
float *tablicaX;
tablicaX=(float *)malloc(wielkosc*sizeof(float));
float *tablicaY;
tablicaY=(float *)malloc(wielkosc*sizeof(float));
float *tablicaRHO;
tablicaRHO=(float *)malloc(wielkosc*sizeof(float));
while (i<wielkosc)
{
if (i%4==0)
{
fscanf(plik, "%f", &tablicaLP[i]);
printf("Tablica LP (nieistotna):%f\t", tablicaLP[i]);
}
else if (i%4==1)
{
fscanf(plik, "%f", &tablicaX[i]);
printf("Tablica X:%f\t", tablicaX[i]);
}
else if (i%4==2)
{
fscanf(plik, "%f", &tablicaY[i]);
printf("Tablica Y:%f\t", tablicaY[i]);
}
else
{
fscanf(plik, "%f", &tablicaRHO[i]);
printf("Tablica RHO:%f\n", tablicaRHO[i]);
}
i++;
}
printf("\nMediana dla tablicy X wynosi: %f\n", medianaX(tablicaX, wielkosc));
printf("\nMediana dla tablicy Y wynosi: %f\n", medianaY(tablicaY, wielkosc));
printf("\nMediana dla tablicy RHO wynosi: %f\n", medianaRHO(tablicaRHO, wielkosc));
free(tablicaLP);
free(tablicaX);
free(tablicaY);
free(tablicaRHO);
fclose(plik);
return 0;
}
float medianaX(float *tablicaX, int wielkosc)
{
float medianaX=0;
if (wielkosc%2==0)
{
medianaX=tablicaX[(wielkosc-1)/2]+tablicaX[wielkosc/2];
medianaX=medianaX/2;
}
else
medianaX=tablicaX[wielkosc/2];
return medianaX;
}
float medianaY(float *tablicaY, int wielkosc)
{
float medianaY=0;
if (wielkosc%2==0)
{
medianaY=tablicaY[(wielkosc-1)/2]+tablicaY[wielkosc/2];
medianaY=medianaY/2;
}
else
medianaY=tablicaY[wielkosc/2];
return medianaY;
}
float medianaRHO(float *tablicaRHO, int wielkosc)
{
float medianaRHO=0;
if (wielkosc%2==0)
{
medianaRHO=tablicaRHO[(wielkosc-1)/2]+tablicaRHO[wielkosc/2];
medianaRHO=medianaRHO/2;
}
else
medianaRHO=tablicaRHO[wielkosc/2];
return medianaRHO;
}