Mam napisac taki program (tresc w komentarzu), wszystko jest ok, tylko kompletnie nie wiem jak zrobic funkcje compare do quicksorta, ktora ma porownywac elementy (moduly) z kazdej struktury tworzacych tablice. Majac to compare poradze sobie z dalsza trescia zadania ;)
Ma ktos jakis pomysl na to compare?
z gory dzieki za pomoc
#include <stdio.h>
#include <time.h>
#include <math.h>
/*Skonstruuj strukturę, która ma 2 pola: zmienną zespoloną (struktura) oraz moduł liczby zespolonej. Zaalokuj pamięć dla jednowymiarowej tablicy struktur o rozmiarze podanym przez użytkownika, wypełnij ją liczbami losowymi podobnie jak w zadaniu poprzednim. Napisz funkcję typu void, która wypełni pole moduł pojedynczego elementu tablicy struktur. Wypisz tablicę na ekran w postaci:
|(5.000000+8.000000*i)|=9.433981
|(4.000000+8.000000*i)|=8.944272
|(3.000000+11.000000*i)|=11.401754
|(6.000000+9.000000*i)|=10.816654
|(5.000000+10.000000*i)|=11.180340
|(7.000000+12.000000*i)|=13.892444
Korzystając z funkcji bibliotecznej qsort posortuj tablicę struktur niemalejąco względem modułów. Wypisz wynik na ekran. Zademonstruj działanie funkcji bsearch na posortowanej tablicy. W przypadku nie znalezienia poszukiwanej wartości wypisz komunikat o błędzie. Jeżeli została znaleziona wartość o szukanym module wypisz jej indeks. */
typedef struct zesp
{
float x;
float y;
}zesp;
typedef struct zm
{
float modul;
zesp zesp;
}zm;
void fun(zm* a);
float compare (const void * a, const void * b)
{
float* arg1 = (float*) a;
float* arg2 = (float*) b;
if( *arg1 < *arg2 ) return -1;
else if( *arg1 == *arg2 ) return 0;
else return 1;
}
int main()
{
srand(time(0));
int n;
scanf("%d", &n);
zm *tab=(zm*)malloc(n * sizeof(zm));
int i;
for (i=0; i<n; ++i)
{
tab[i].zesp.x=6+rand()%(10-6+1);
tab[i].zesp.y=5+rand()%(12-5+1);
}
for (i=0; i<n; ++i)
fun(&tab[i]);
for (i=0; i<n; ++i)
printf("|(%f + %fi)|=%f\n", tab[i].zesp.x, tab[i].zesp.y, tab[i].modul);
printf("\n\n\n");
qsort(tab, n, sizeof(float) ,compare);
for (i=0; i<n; ++i)
printf("|(%f + %fi)|=%f\n", tab[i].zesp.x, tab[i].zesp.y, tab[i].modul);
return 0;
}
void fun(zm* a)
{
a->modul=sqrt((a->zesp.x*a->zesp.x)+(a->zesp.y*a->zesp.y));
}