[C] problem z sortowaniem liczb
Ostatnio zmodyfikowano 2018-01-16 17:29
kryś98 Temat założony przez niniejszego użytkownika |
» 2018-01-15 00:13:48 Tak, poprawiłem to. Problem jest taki, że jeśli w pliku wejściowym są np. 3 liczby to w pliku wyjściowym pojawia się 3 razy "0.000000" |
|
mateczek |
» 2018-01-15 01:49:16 u mnie działa ale może sprawdź gdzie się wywala może masz jakąś literówkę przy formatowaniu w funkcjach czytających i piszących do pliku ?? odpal debugger lub napisz funkcję wyświetlającą tablice na ekran i zobacz gdzie ewentualnie może być przyczyna #include <stdio.h> #include <stdlib.h> void pritTable( double a[], int size ) { for( int i = 0; i < size; i++ ) printf( "%lf ", a[ i ] ); printf( "\n" ); } int compare( const void * a, const void * b ) { return( *( double * ) a - *( double * ) b ); } int main() { FILE * fin = fopen( "liczby.txt", "r" ); double a[ 20 ]; int n = 0; while( fscanf( fin, "%lf", & a[ n ] ) == 1 ) n++; fclose( fin ); pritTable( a, n ); qsort( a, n, sizeof( double ), compare ); pritTable( a, n ); FILE * fout = fopen( "posortowaneLiczby.txt", "w" ); for( int i = 0; i < n; i++ ) fprintf( fout, "%lf ", a[ i ] ); fclose( fout ); return 0; } |
|
kryś98 Temat założony przez niniejszego użytkownika |
» 2018-01-15 22:03:08 Problem polega na tym, że liczby całkowite sortuje bez problemu, a ułamki tylko przepisuje w tej samej kolejności |
|
mateczek |
» 2018-01-16 03:16:54 A to już inny problem:P. Ten problem jest dość oczywisty. A prawidłowo opisany powinien brzmieć: "funkcja comare nie rozpaznaje liczb, miedzy którymi różnica jest mniejsza od 1" Mając prawidłowo zdiagnozowany problem już jest z górki może rozwiązanie jak poniżej przejdzie. Wzorowane trochę na c++ gdzie operacja "a<b" zwraca true lub false int compare( const void * a, const void * b ) { return( *( double * ) a < *( double * ) b ); }
ale w C chyba lepiej tak : int compare( const void * a, const void * b ) { double diff = *( double * ) a - *( double * ) b; if( diff < 0 ) return - 1; else if( diff > 0 ) return 1; return 0; } |
|
kryś98 Temat założony przez niniejszego użytkownika |
» 2018-01-16 17:29:05 Dzięki za pomoc |
|
1 « 2 » |