Cześć,
mam problem z sortowaniem tablicy struktur, konkretniej program ma sortowac rosnąco wzgledem pola 'dlugosc', a tego nie robi i nie moge znaleźć błędu, pomożecie? ;)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
double length(double x, double y, double z);
int compare(const void * a, const void * b);
struct wektory {
double v1;
double v2;
double v3;
};
struct abc {
struct wektory vec;
double dlugosc;
};
int main()
{
srand(time(0));
struct abc tab[10];
for (int i = 0; i < 10; i++)
{
tab[i].vec.v1= 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);
tab[i].vec.v2 = 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);
tab[i].vec.v3 = 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);
}
for (int i = 0; i < 10; i++)
{
printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v1);
printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v2);
printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v3);
puts(" ");
}
for (int i = 0; i < 10; i++)
tab[i].dlugosc = length(tab[i].vec.v1, tab[i].vec.v2, tab[i].vec.v3);
printf("\n\n");
for (int i = 0; i < 10; i++)
printf("tab[%d].dlugosc = %.1f\n", i, tab[i].dlugosc);
printf("\n\n");
qsort(tab, 10, sizeof(double), compare);
for (int i = 0; i < 10; i++)
printf("tab[%d].dlugosc = %.1f\n", i, tab[i].dlugosc);
return 0;
}
double length(double x, double y, double z)
{
double dl = x*x + y*y + z*z;
dl = sqrt(dl);
return dl;
}
int compare(const void * a, const void * b)
{
struct abc * c = (struct abc *)a;
struct abc * d = (struct abc *)b;
if (c->dlugosc < d->dlugosc)
return -1;
else if (c->dlugosc == d->dlugosc)
return 0;
else
return 1;
}