Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <cstdlib>
- using namespace std;
- int numOfKarton = 1;
- struct SPiwo{
- int wysokosc;
- float promien_podstawy;
- string marka;
- };
- struct SKarton{
- int ile_piw;
- int kod;
- SPiwo *piwo;
- };
- bool strumienOK(istream &file){
- if(!file.good()){
- cerr << "Pomylka wczytu!" << endl;
- file.clear();
- return false;
- }
- return true;
- }
- SPiwo * wczytaj_piwa(istream &file, unsigned &rozmiar){
- SPiwo * piwo = 0;
- if(!file.good()){
- cerr << "Error while reading!" << endl;
- file.clear();
- return piwo;
- }
- file >> rozmiar;
- if(!file.good()){
- cerr << "Error while reading!" << endl;
- file.clear();
- return piwo;
- }
- if(rozmiar > 0){
- piwo = new SPiwo[rozmiar];
- for(unsigned i = 0; i < rozmiar; i++){
- file >> piwo[i].wysokosc;
- if(!file.good()){
- cerr << "Error 1" << endl;
- delete[] piwo;
- piwo = 0;
- file.clear();
- return piwo;
- }
- file >> piwo[i].promien_podstawy;
- if(!file.good()){
- cerr << "Error 2" << endl;
- delete[] piwo;
- piwo = 0;
- file.clear();
- return piwo;
- }
- file >> piwo[i].marka; // WHY?
- }
- }
- else{
- cerr << "Amount is less or equals 0" << endl;
- return piwo;
- }
- return piwo;
- }
- void pakuj_karton(SKarton &karton, SPiwo * piwo, const unsigned rozmiar){
- karton.ile_piw = rozmiar;
- karton.kod = numOfKarton;
- karton.piwo = piwo;
- numOfKarton++;
- }
- bool zapisz_piwa(ostream &file, SKarton karton, const unsigned rozmiar){
- if(!file){
- cerr << "Error opening writing file!" << endl;
- return false;
- }
- file << karton.ile_piw << endl;
- if(!file.good()){
- cerr << "Blad zapisu ilosci" << endl;
- file.clear();
- return false;
- }
- for(unsigned i = 0; i < rozmiar; i++){
- file << karton.piwo[i].wysokosc << " ";
- if(!file.good()){
- cerr << "Error zapisu danych piwa" << endl;
- return false;
- }
- file << karton.piwo[i].promien_podstawy << " ";
- if(!file.good()){
- cerr << "Error zapisu danych piwa" << endl;
- return false;
- }
- file << karton.piwo[i].marka << endl;
- if(!file.good()){
- cerr << "Error zapisu danych piwa" << endl;
- return false;
- }
- }
- return true;
- }
- void wypisz_karton(SKarton karton, const unsigned rozmiar){
- cout << "Karton z kodem " << karton.kod << " ma w sobie " << karton.ile_piw << " piw:" << endl;
- for(unsigned i = 0; i < rozmiar; i++){
- cout << karton.piwo[i].wysokosc << " "<< karton.piwo[i].promien_podstawy << " ";
- cout << karton.piwo[i].marka << endl;
- }
- }
- void bubbleSort(SPiwo *& piwo, const unsigned rozmiar){
- for(unsigned i =0; i < rozmiar - 1; i++){
- for(unsigned j = 0; j < rozmiar - 1 - i; j++){
- if(piwo[j].wysokosc > piwo[j+1].wysokosc){
- swap(piwo[j].wysokosc, piwo[j+1].wysokosc);
- swap(piwo[j].promien_podstawy, piwo[j+1].promien_podstawy);
- swap(piwo[j].marka, piwo[j+1].marka);
- }
- }
- }
- }
- int main(int argc, char **argv)
- {
- if( argc != 3){
- cerr << "Zamala ilosc argumentow!" << endl;
- cerr << "Format: nazwa_pliku.txt" << endl;
- return 0;
- }
- ifstream read(argv[1]);
- ofstream write(argv[2]);
- if(read){
- SKarton karton = { 0, 0, 0};
- unsigned ileWczytanoPiw;
- SPiwo * piwa = wczytaj_piwa(read, ileWczytanoPiw);
- pakuj_karton(karton, piwa, ileWczytanoPiw);
- wypisz_karton(karton, ileWczytanoPiw);
- bubbleSort(piwa, ileWczytanoPiw);
- pakuj_karton(karton, piwa, ileWczytanoPiw);
- if(write){
- zapisz_piwa(write, karton, ileWczytanoPiw);
- cout << "Dane poprawnie zapisane!" << endl;
- write.close();
- }
- else{
- cerr << "Error opening writing file!" << endl;
- write.clear();
- write.close();
- return 0;
- }
- read.close();
- }
- else{
- cerr << "Blad otwierania pliku" << endl;
- return 0;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement