Sortowanie pliku - łączenie proste 
Ostatnio zmodyfikowano 2017-12-07 08:51
MariuszM Temat założony przez niniejszego użytkownika  | 
Sortowanie pliku - łączenie proste  » 2017-12-07 07:10:05 
  void Split( int partLength ) {     DATA_TYPE buffer;          int counter;          do {                  counter = 1;         while(( counter <= partLength ) &&( !feof( inFile ) )         {             read( inFile, & buffer );             write( auxFileOne, buffer );             counter = counter + 1;         }                  counter = 1;         while(( counter <= partLength ) &&( !feof( inFile ) )         {             read( inFile, & buffer );             write( auxFileTwo, buffer );             counter = counter + 1;         }     }     while( !feof( inFile ) );      }
 
 
 
 
  void Combine( int partLength ) {     DATA_TYPE bufferOne;          DATA_TYPE bufferTwo;          int counterOne;          int counterTwo;               if( feof( auxFileOne ) == false )          read( auxFileOne, & bufferOne );          if( feof( auxFileTwo ) == false )          read( auxFileTwo, & bufferTwo );               while(( feof( auxFileOne ) == false ) &&( feof( auxFileTwo ) == false ) )     {                  counterOne = 1;         counterTwo = 1;                  do {             if( bufferOne < bufferTwo )             {                 Write( inputFile, bufferOne );                 if( feof( auxFileOne ) == false )                      read( auxFileOne, & bufferOne );                                  counterOne = counterOne + 1;             }             else {                                  write( inputFile, bufferTwo );                 if( feof( auxFileTwo ) == false )                      read( auxFileTwo, & bufferTwo );                                  counterTwo = counterTwo + 1;             }         }         while(         ( counterOne <= partLength ) &&         ( counterTwo <= partLength ) &&         ( feof( auxFileOne ) == false ) &&         ( feof( auxFileTwo ) == false ) );                                                      while(( counterOne <= partLength ) &&( feof( auxFileOne ) == false ) )         {             read( auxFileOne, & bufferOne );             write( inputFile, bufferOne );             counterOne = counterOne + 1;         }                                    while(( counterTwo <= partLength ) &&( feof( auxFileTwo ) == false ) )         {             read( auxFileTwo, & bufferTwo );             write( inputFile, bufferTwo );             counterTwo = counterTwo + 1;         }     }          while( feof( auxFileOne ) == false )     {         read( auxFileOne, & bufferOne );         write( inputFile, bufferOne );     }          while( feof( auxFileTwo ) == false )     {         read( auxFileTwo, & bufferTwo );         write( inputFile, bufferTwo );     } }
 
 int main( void ) {     int partLength = 1;          bool exitCond = false;          do {                  inputFile = fopen( inputFileName, ” r ” );         auxFileOne = fopen( auxFileNameOne, ” w ” );         auxFileTwo = fopen( auxFileNameTwo, ” w ” );         Split( partLength );         fclose( auxFileOne );         fclose( auxFileTwo );         fclose( inputFile );                  inputFile = fopen( inputFileName, ” w ” );         auxFileOne = fopen( auxFileNameOne, ” r ” );         auxFileTwo = fopen( auxFileNameTwo, ” r ” );                  if( !feof( auxFileTwo ) )         {                          Combine( partLenght );             partLength = 2 * partLength;         }         else              exitCond = true;                  fclose( auxFileTwo );         fclose( auxFileOne );         fclose( inputFile );                  while( exitCond == false );              } }
  Gdy przepisałem ten kod na Pascala (Operacje na łańcuchach Pascalowych są wygodniejsze niż na tablicach znakowych z C)  to okazało się że ten kod nie dość że nie kopiuje całego pliku to i nie sortuje poprawnie nawet tego co przekopiował  Nie wiem gdzie jest błąd i jak go poprawić   | 
 | 
darko202  | 
» 2017-12-07 08:08:06 >> okazało się że ten kod nie dość że nie kopiuje całego pliku  używasz warunku np. " while(( counter <= partLength ) &&( !feof( inFile ) ) " nie zależącego tylko od napotkania końca pliku  ? dlatego nie jest to dziwne
  >> nie sortuje poprawnie nawet tego co przekopiował  w kodzie nie widać algorytmu sortującego coś, dlatego nie jest to dziwne
 
  2. zapoznaj się z techniką debugowania kodu, dzięki czemu możesz obejrzeć stany zmiennych, przebieg całego programu i bardzo szybko zobaczyć wady tworzonego algorytmu
 
   | 
 | 
MariuszM Temat założony przez niniejszego użytkownika  | 
» 2017-12-07 08:22:14 To chyba jednak nie to bo ta pętla którą wymieniłeś jest wewnątrz pętli  do while 
  Co do debugowania to wątpię aby to miało jakoś pomóc  ale gdybyście coś o tym napisali np w tych waszych kursach to bym poczytał 
 
   | 
 | 
YooSy  | 
» 2017-12-07 08:51:02 | Co do debugowania to wątpię aby to miało jakoś pomóc ale gdybyście coś o tym napisali np w tych waszych kursach to bym poczytał |   Debugging with Code::BlocksDebugger jest pierwszą linią poszukiwań błędów logicznych, crashy itd. Wszystko co dotyczy C::B jest na stronie producenta. W serwisie YouTube jest cała masa tutoriali o debuggowaniu kodu. np.  chałupnicze sposoby.  | 
 | 
|  « 1 »  |