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 |