Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int ile(string filename, ifstream &plik_odczyt, ofstream &plik_zapis)
- {
- string new_filename;
- unsigned char bajt;
- plik_odczyt.open(filename.c_str(), ios::binary);
- if(!plik_odczyt.is_open())
- {
- cout << "Blad otwierania pliku odczytywanego w trybie binarnym!\n";
- return -3;
- }
- cout << "Pomyslnie otworzono plik do odczytu\n";
- new_filename = filename.substr(0, filename.find_last_of(".")) + ".ile";
- plik_zapis.open(new_filename.c_str());
- if (!plik_zapis.is_open())
- {
- cout << "Blad otwierania pliku do zapisu!\n";
- return -4;
- }
- cout << "Pomyslnie otworzono plik do zapisu\n";
- int ilosc=0;
- while(true)
- {
- bajt=plik_odczyt.get();
- if (!plik_odczyt.good()) break;
- ++ilosc;
- }
- cout << "Zakonczono zliczanie ilosci symboli\n";
- plik_zapis << ilosc;
- plik_odczyt.close();
- plik_zapis.close();
- return 0;
- }
- int licz(string filename, ifstream &plik_odczyt, ofstream &plik_zapis, int tab[], int &n)
- {
- string new_filename;
- unsigned char bajt;
- plik_odczyt.open(filename.c_str(), ios::binary);
- if(!plik_odczyt.is_open())
- {
- cout << "Blad otwierania pliku odczytywanego w trybie binarnym!\n";
- return -3;
- }
- cout << "Pomyslnie otworzono plik do odczytu\n";
- new_filename = filename.substr(0, filename.find_last_of(".")) + ".licz";
- plik_zapis.open(new_filename.c_str());
- if (!plik_zapis.is_open())
- {
- cout << "Blad otwierania pliku do zapisu!\n";
- return -4;
- }
- cout << "Pomyslnie otworzono plik do zapisu\n";
- while(true)
- {
- bajt=plik_odczyt.get();
- if (!plik_odczyt.good()) break;
- tab[(int)bajt]++;
- }
- cout << "Zakonczono zliczanie powtorzen symboli\n";
- for(int i=0;i<256;++i)
- {
- if(tab[i]!=0)
- {
- ++n;
- plik_zapis << i << " " << tab[i] << endl;
- }
- }
- plik_odczyt.close();
- plik_zapis.close();
- return 0;
- }
- int msort(string filename, ofstream &plik_zapis, int tab[], int n)
- {
- string new_filename = filename.substr(0, filename.find_last_of(".")) + ".msort";
- plik_zapis.open(new_filename.c_str());
- if (!plik_zapis.is_open())
- {
- cout << "Blad otwierania pliku do zapisu!\n";
- return -4;
- }
- cout << "Pomyslnie otworzono plik do zapisu\n";
- int new_tab[n][2];
- for(int i = 0, j = 0; i < 256; i++)
- {
- if(tab[i] != 0)
- {
- new_tab[j][0] = tab[i]; //ilosc powtorzen
- new_tab[j][1] = i; //symbol
- j++;
- }
- }
- cout << "Zakonczono tworzenie pomocniczej macierzy\n";
- int buf1, buf2;
- for(int i = 0; i < n; i++) //sortowanie babelkowe
- {
- for(int j = 0; j < n - 1; j++)
- {
- if(new_tab[j][0] == new_tab[j + 1][0])
- {
- if((int)new_tab[j][1] > (int)new_tab[j + 1][1]) //dla rownych powtorzen sprawdzenie ktore ascii wieksze
- {
- buf1 = new_tab[j][0];
- buf2 = new_tab[j][1];
- new_tab[j][0] = new_tab[j+1][0];
- new_tab[j][1] = new_tab[j+1][1];
- new_tab[j+1][0] = buf1;
- new_tab[j+1][1] = buf2;
- }
- }
- if(new_tab[j][0] < new_tab[j + 1][0])
- {
- buf1 = new_tab[j][0];
- buf2 = new_tab[j][1];
- new_tab[j][0] = new_tab[j+1][0];
- new_tab[j][1] = new_tab[j+1][1];
- new_tab[j+1][0] = buf1;
- new_tab[j+1][1] = buf2;
- }
- }
- }
- cout << "Zakonczono sortowanie\n";
- for(int i=0;i<n;++i) plik_zapis << new_tab[i][1] << " " << new_tab[i][0] << endl;
- plik_zapis.close();
- return 0;
- }
- int main(int argc, char* argv[])
- {
- if(argc<2)
- {
- cout<<"Nie podano nazwy pliku jako parametru wejsciowego!\n";
- return -1;
- }
- string filename = argv[1];
- ifstream plik_odczyt;
- ofstream plik_zapis;
- int RetCode, tab[256]={0}, n=0;
- RetCode = ile(filename, plik_odczyt, plik_zapis);
- if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje zliczajaca symbole\n";
- RetCode = licz(filename, plik_odczyt, plik_zapis, tab, n);
- if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje tworzaca tabele symboli\n";
- RetCode = msort(filename, plik_zapis, tab, n);
- if(RetCode == 0) cout<<"Pomyslnie wykonano funkcje sortujaca tabele\n";
- return RetCode;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement