Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int ile(string filename, ifstream &plik_odczyt, ofstream &plik_zapis)
  7. {
  8.     string new_filename;
  9.     unsigned char bajt;
  10.  
  11.     plik_odczyt.open(filename.c_str(), ios::binary);
  12.  
  13.     if(!plik_odczyt.is_open())
  14.     {
  15.         cout << "Blad otwierania pliku odczytywanego w trybie binarnym!\n";
  16.         return -3;
  17.     }
  18.     cout << "Pomyslnie otworzono plik do odczytu\n";
  19.    
  20.     new_filename = filename.substr(0, filename.find_last_of(".")) + ".ile";
  21.     plik_zapis.open(new_filename.c_str());
  22.    
  23.     if (!plik_zapis.is_open())
  24.     {
  25.         cout << "Blad otwierania pliku do zapisu!\n";
  26.         return -4;
  27.     }
  28.     cout << "Pomyslnie otworzono plik do zapisu\n";
  29.    
  30.     int ilosc=0;
  31.     while(true)
  32.     {
  33.         bajt=plik_odczyt.get();
  34.         if (!plik_odczyt.good()) break;
  35.         ++ilosc;
  36.     }
  37.     cout << "Zakonczono zliczanie ilosci symboli\n";
  38.     plik_zapis << ilosc;
  39.     plik_odczyt.close();
  40.     plik_zapis.close();
  41.  
  42.     return 0;
  43. }
  44.  
  45. int licz(string filename, ifstream &plik_odczyt, ofstream &plik_zapis, int tab[], int &n)
  46. {
  47.     string new_filename;
  48.     unsigned char bajt;
  49.  
  50.     plik_odczyt.open(filename.c_str(), ios::binary);
  51.  
  52.     if(!plik_odczyt.is_open())
  53.     {
  54.         cout << "Blad otwierania pliku odczytywanego w trybie binarnym!\n";
  55.         return -3;
  56.     }
  57.     cout << "Pomyslnie otworzono plik do odczytu\n";
  58.    
  59.     new_filename = filename.substr(0, filename.find_last_of(".")) + ".licz";
  60.     plik_zapis.open(new_filename.c_str());
  61.    
  62.     if (!plik_zapis.is_open())
  63.     {
  64.         cout << "Blad otwierania pliku do zapisu!\n";
  65.         return -4;
  66.     }
  67.     cout << "Pomyslnie otworzono plik do zapisu\n";
  68.  
  69.     while(true)
  70.     {
  71.         bajt=plik_odczyt.get();
  72.         if (!plik_odczyt.good()) break;
  73.         tab[(int)bajt]++;
  74.     }
  75.     cout << "Zakonczono zliczanie powtorzen symboli\n";
  76.    
  77.     for(int i=0;i<256;++i)
  78.     {
  79.         if(tab[i]!=0)
  80.         {
  81.             ++n;
  82.             plik_zapis << i << " " << tab[i] << endl;
  83.         }
  84.     }
  85.     plik_odczyt.close();
  86.     plik_zapis.close();
  87.     return 0;
  88. }
  89.  
  90. int msort(string filename, ofstream &plik_zapis, int tab[], int n)
  91. {
  92.     string new_filename = filename.substr(0, filename.find_last_of(".")) + ".msort";
  93.     plik_zapis.open(new_filename.c_str());
  94.    
  95.     if (!plik_zapis.is_open())
  96.     {
  97.         cout << "Blad otwierania pliku do zapisu!\n";
  98.         return -4;
  99.     }
  100.     cout << "Pomyslnie otworzono plik do zapisu\n";
  101.    
  102.     int new_tab[n][2];
  103.     for(int i = 0, j = 0; i < 256; i++)
  104.     {
  105.          if(tab[i] != 0)
  106.          {
  107.               new_tab[j][0] = tab[i];   //ilosc powtorzen
  108.               new_tab[j][1] = i;        //symbol
  109.               j++;
  110.          }
  111.     }
  112.     cout << "Zakonczono tworzenie pomocniczej macierzy\n";
  113.     int buf1, buf2;
  114.      for(int i = 0; i < n; i++)         //sortowanie babelkowe
  115.      {
  116.              for(int j = 0; j < n - 1; j++)
  117.              {
  118.                      if(new_tab[j][0] == new_tab[j + 1][0])
  119.                      {
  120.                            if((int)new_tab[j][1] > (int)new_tab[j + 1][1])  //dla rownych powtorzen sprawdzenie ktore ascii wieksze
  121.                            {
  122.                                 buf1 = new_tab[j][0];
  123.                                 buf2 = new_tab[j][1];
  124.                                 new_tab[j][0] = new_tab[j+1][0];
  125.                                 new_tab[j][1] = new_tab[j+1][1];
  126.                                 new_tab[j+1][0] = buf1;
  127.                                 new_tab[j+1][1] = buf2;
  128.                            }
  129.                      }
  130.                      if(new_tab[j][0] < new_tab[j + 1][0])
  131.                      {
  132.                             buf1 = new_tab[j][0];
  133.                             buf2 = new_tab[j][1];
  134.                             new_tab[j][0] = new_tab[j+1][0];
  135.                             new_tab[j][1] = new_tab[j+1][1];
  136.                             new_tab[j+1][0] = buf1;
  137.                             new_tab[j+1][1] = buf2;
  138.                      }
  139.              }
  140.      }
  141.      cout << "Zakonczono sortowanie\n";
  142.      
  143.     for(int i=0;i<n;++i) plik_zapis << new_tab[i][1] << " " << new_tab[i][0] << endl;
  144.     plik_zapis.close();
  145.     return 0;
  146. }
  147.  
  148. int main(int argc, char* argv[])
  149. {
  150.     if(argc<2)
  151.     {
  152.         cout<<"Nie podano nazwy pliku jako parametru wejsciowego!\n";
  153.         return -1;
  154.     }
  155.    
  156.     string filename = argv[1];
  157.     ifstream plik_odczyt;
  158.     ofstream plik_zapis;
  159.     int RetCode, tab[256]={0}, n=0;
  160.    
  161.     RetCode = ile(filename, plik_odczyt, plik_zapis);
  162.     if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje zliczajaca symbole\n";
  163.    
  164.     RetCode = licz(filename, plik_odczyt, plik_zapis, tab, n);
  165.     if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje tworzaca tabele symboli\n";
  166.        
  167.     RetCode = msort(filename, plik_zapis, tab, n);
  168.     if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje sortujaca tabele\n";
  169.    
  170.     return RetCode;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement