Kezdőoldal » Számítástechnika » Programozás » A qsort függvény paraméterezés...

Ozmium42 kérdése:

A qsort függvény paraméterezésében van a hiba? (C)

Figyelt kérdés

Üdv!


Létrehozok egy "mátrixot" az alábbi módon:


int ROWS=20, COLUMNS=4, r, c;


double **Matrix = (double**) malloc(ROWS * sizeof(double*));

for (r=0; r<ROWS, r++) Matrix[r] = (double*) malloc(ROWS * sizeof(double));


Vagyis a mátrix tartalma 20 pointer, amik 4 elemű tömbökre mutatnak. A tömböket feltöltjük véletlenszerű számokkal.


A feladat az, hogy qsort segítségével rendezzem sorba a tömböket. Van egy függvény (tetszőleges, double CalcError(double *p)), ami egy tömbre kiszámol egy értéket, ami az összehasonlítás alapja. Van egy "compare" függvény (double CompareFnc(const void* a1, const void* a2)), ami két pointert úgy hasonlít össze, hogy a hozzátartozó tömbökre alkalmazza a függvényt.


A fent említettek helyesen működnek.


A dolog szerintem valahol ott hasal el, hogy rosszul paraméterezem a qsort függvényt.


qsort(Matrix[0], ROWS, sizeof(Matrix[0]), CompareFnc);


Ezután nem változik szinte semmi, az eredeti sorrend marad, néha egy-két elem 0-ra változik, nem értem, miért. (talán rossz memóriacímre hivatkozás?)


A másik ötletem, hogy rossz az egész megközelítés, és ezt így nem is lehet rendezni, de nem látom be, hogy miért nem.



2022. szept. 27. 21:47
 1/5 anonim ***** válasza:
qsort(Matrix, ROWS, sizeof(double*), CompareFnc);
2022. szept. 27. 22:23
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

for (r=0; r<ROWS, r++) Matrix[r] = (double*) malloc(ROWS * sizeof(double));


a mallocnál ROWS helyett COLUMNS kell

2022. szept. 27. 22:25
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
#2 Igen, csak itt írtam rosszul.
2022. szept. 27. 22:41
 4/5 A kérdező kommentje:

Majdnem egy hétig törtem a fejem, mire sikerült rájönnöm, mi volt a hiba.


A CompareFnc, ha double* értékeket hasonlít össze, akkor a const void-ként kapott pointert nem (double*)-ként castolni, hanem *(double**)-ként.


Tönkretesz ez a nyelv.

2022. okt. 1. 13:07
 5/5 anonim ***** válasza:

már a qsort hívásánál is látszott hogy a pointer aritmetika nem teljesen világos számodra


de rájöttél, gratula :) programozás az ilyen

2022. okt. 1. 13:14
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!