hasek Temat założony przez niniejszego użytkownika |
[C] Sortowanie bąbelkowe struktury » 2016-05-01 17:56:41 Witam. Poszukuje pomocy z sortowaniem bąbelkowym struktury. Kod: #include <stdio.h> #include <stdlib.h> int i = 0; struct KSIEGA * osoba = NULL; size_t ROZMIAR_KSIEGI_PODCZAS_CZYTANIA = 0; struct KSIEGA { int lp; char nazwisko[ 20 ]; char imie[ 20 ]; int wiek; };
void sortowanie( struct KSIEGA * osoba, int size ) { int i, j, temp; for( j = 0; j < size - 1; j++ ) { for( i = 0; i < size - 1 - j; i++ ) { if( osoba[ i ].wiek > osoba[ i + 1 ].wiek ) { temp = osoba[ i + 1 ].wiek; osoba[ i + 1 ].wiek = osoba[ i ].wiek; osoba[ i ].wiek = temp; } } } }
void wczyt() { FILE * plik; plik = fopen( "asd.txt", "r" ); if( plik == NULL ) printf( "Nie moge znalezc bazy" ); else { ROZMIAR_KSIEGI_PODCZAS_CZYTANIA = 1; osoba =( struct KSIEGA * ) calloc( ROZMIAR_KSIEGI_PODCZAS_CZYTANIA, sizeof( struct KSIEGA ) ); for( i = 0;( !feof( plik ) ); i++ ) { if(( i + 1 ) > ROZMIAR_KSIEGI_PODCZAS_CZYTANIA ) { ROZMIAR_KSIEGI_PODCZAS_CZYTANIA += 1; osoba =( struct KSIEGA * ) realloc( osoba, ROZMIAR_KSIEGI_PODCZAS_CZYTANIA * sizeof( struct KSIEGA ) ); } fscanf( plik, "%d %s %s %d", & osoba[ i ].lp, osoba[ i ].imie, osoba[ i ].nazwisko, & osoba[ i ].wiek ); } printf( "Baza wczytana pomyslnie!\n\n" ); } fclose( plik ); } void odczyt() { int i; for( i = 0; i < ROZMIAR_KSIEGI_PODCZAS_CZYTANIA; i++ ) { printf( "%d %s \t %s \t %d\n", osoba[ i ].lp, osoba[ i ].imie, osoba[ i ].nazwisko, osoba[ i ].wiek ); } }
int main( int argc, char ** argv )
{ int wybor; wczyt(); printf( "\t\tMENU UZYTKOWNIKA\n\nCo chcesz zrobic?\n" "1. Wyswietl baze danych\n\n" "Twoj wybor: " ); scanf( "%d", & wybor ); switch( wybor ) { case 1: printf( "\nLP IMIE\t\t NAZWISKO\t\tWIEK\t\n\n" ); odczyt(); break; case 2: printf( "\nLP IMIE\t\t NAZWISKO\t\tWIEK\t\n\n" ); sortowanie(); break; default: printf( "\n BRAK TAKIEJ OPCJI\n" ); break; } free( osoba ); getch(); return 0; }
Wczytywanie i odczytywanie struktury z pliku txt działa lecz nie wiem czy pomysł z sortowaniem bąbelkowym jest dobry. Przy kompilowaniu wywala błąd error: too few arguments to function 'sortowanie'. Z góry dziękuje za odpowiedź :) |
|
carlosmay |
» 2016-05-01 21:42:40 void sortowanie( struct KSIEGA * osoba, int size )
|
Czy coś tutaj jest nie tak? too few arguments to function 'sortowanie' |
Komunikat mówi wszystko. |
|
hasek Temat założony przez niniejszego użytkownika |
» 2016-05-01 23:52:45 Mógłbyś mi w takim wypadku powiedzieć jak to napisać :) ? jak już to zobaczę to zrozumiem. |
|
mateczek |
» 2016-05-02 00:47:34 1. funkcja sortowanie wymaga parametrów !!! ty jej nic nie przekazujesz void sortowanie( struct KSIEGA * osoba, int size )
void sortowanie() { }
Taka luźna uwaga Ja bym to zrobił odwrotnie. księgę zrobił bym katalogiem na osoby :) |
|
carlosmay |
» 2016-05-02 01:10:10 |
|
hasek Temat założony przez niniejszego użytkownika |
» 2016-05-02 11:20:02 Zrozumiałem już swój błąd dziękuje. Ale teraz mam inny problem. void sortowanie() { int i, j, temp; for( j = 0; j < ROZMIAR_KSIEGI_PODCZAS_CZYTANIA - 1; j++ ) { for( i = 0; i < ROZMIAR_KSIEGI_PODCZAS_CZYTANIA - 1 - j; i++ ) { if( osoba[ i ].wiek > osoba[ i + 1 ].wiek ) { temp = osoba[ i + 1 ].wiek; osoba[ i + 1 ].wiek = osoba[ i ].wiek; osoba[ i ].wiek = temp; } } } }
ROZMIAR_KSIEGI_PODCZAS_CZYTANIA jest globalna tak samo jak struktura. Wiec czemu program nie wyświetla mi żadnych danych po włączeniu tej funkcji ? Co zrobiłem nie tak ? :( |
|
carlosmay |
» 2016-05-02 12:31:28 if( osoba[ i ].wiek > osoba[ i + 1 ].wiek ) { temp = osoba[ i + 1 ].wiek; osoba[ i + 1 ].wiek = osoba[ i ].wiek; osoba[ i ].wiek = temp; } |
Porównuj składowe 'wiek', ale zamieniaj całe obiekty, a nie składowe obiektów. { temp = osoba[ i + 1 ]; osoba[ i + 1 ] = osoba[ i ]; osoba[ i ] = temp; } |
|
hasek Temat założony przez niniejszego użytkownika |
» 2016-05-02 12:47:38 Rozumiem co do zamiany, lecz jak stworzyć obiekt w C? Z tego co czytałem to w C nie ma klas co za tym idzie nie ma obiektów. Więc chyba trzeba zrobić strukturę. Ale jak to ma wyglądać. Nie za bardzo rozumiem tego procesu jak mam zrobić z temp'a obiekt :( |
|
« 1 » 2 |