Facebook
From Anorexic Moth, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 240
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. bool bfun_OpenFile(string &sName, ifstream &fsFil);
  8. void vfun_SaveToFile1(const string sName, int iValue);
  9. void vfun_CheckNumberEdges(ifstream &fsFile, const int &iEdgeNumber);
  10. int ifun_CheckNumberVertices(ifstream &fsFile, int iEdgeNumber);
  11. void vfun_MakeIncidentList(vector<Lista> &vIncidentList, ifstream &fsFile, const int &iEdgeNumber, string sName);
  12. void vfun_SaveToFile2(vector<Lista> &vIncidentList, const int &iVerticesNumber);
  13.  
  14. int main() {
  15.         string sName;
  16.         ifstream fsFile;
  17.         int iEdgeNumber, iVerticesNumber;
  18.        
  19.         do {
  20.                 cin >> sName;
  21.         } while (!bfun_OpenFile(sName, fsFile));
  22.  
  23.         fsFile >> iEdgeNumber;
  24.         vfun_CheckNumberEdges(fsFile, iEdgeNumber);    
  25.         iVerticesNumber = ifun_CheckNumberVertices(fsFile, iEdgeNumber);
  26.         vector<Lista> incidentList(iVerticesNumber);
  27.         vfun_MakeIncidentList(incidentList, fsFile, iEdgeNumber, sName);
  28.         vfun_SaveToFile2(incidentList, iVerticesNumber);
  29.         fsFile.close();
  30.  
  31.         return 0;
  32. }
  33.  
  34. /**
  35. * Szukanie pliku, sprawdzanie czy jest z rozszerzeniem .txt, dopisywaie .txt
  36. * @param sName oryginalna nazwa pliku tekstowego
  37. * @param fsFile nazwa którą nadaliśmy plikowi
  38. * @return true gdy znaleziono plik
  39. * @return false gdy nie znaleziono pliku
  40. */
  41. bool bfun_OpenFile(string &sName, ifstream &fsFile) {
  42.         try {
  43.                 if (sName.find(".txt") != string::npos) {
  44.                         fsFile.open(sName.c_str());
  45.                 }
  46.                 else {
  47.                         sName += ".txt";
  48.                         fsFile.open(sName.c_str());
  49.                 }
  50.  
  51.                 if (!fsFile) {
  52.                         throw "!";
  53.                 }
  54.         }
  55.         catch (char *cError) {
  56.                 fsFile.clear();
  57.                 cout << cError;
  58.                 return false;
  59.         }
  60.  
  61.         return true;
  62. }
  63.  
  64. /**
  65. * Funkcja zapisująca do pliku
  66. * @param sName nazwa pliku
  67. * @param iValue wartość
  68. */
  69. void vfun_SaveToFile1(const string sName, int iValue) {
  70.         ofstream outFile;
  71.         outFile.open(sName, ios::app);
  72.         outFile << iValue << ", ";
  73.         outFile.close();
  74. }
  75.  
  76. /**
  77. * Funkcja sprawdzająca czy liczba krawędzi jest poprawna
  78. * @param fsFile plik z danymi
  79. * @param iEdgeNumber ilość krawędzi
  80. */
  81. void vfun_CheckNumberEdges(ifstream &fsFile, const int &iEdgeNumber) {
  82.         if (iEdgeNumber < 0) {
  83.                 cout << "!";
  84.                 exit(EXIT_FAILURE);
  85.         }
  86. }
  87.  
  88. /**
  89. * Sprawdzanie liczy wierzchołków
  90. * @param fsFile plik z danymi
  91. * @param iEdgeNumber liczba krawędzi
  92. * @return iMax liczba wierzchołków
  93. */
  94. int ifun_CheckNumberVertices(ifstream &fsFile, int iEdgeNumber) {
  95.         int iTemporary;
  96.         int iMax = 0;
  97.  
  98.         while (fsFile.eof() == false) {
  99.                 fsFile >> iTemporary;
  100.  
  101.                 if (iTemporary > iMax) {
  102.                         iMax = iTemporary;
  103.                 }
  104.         }
  105.  
  106.         return iMax;
  107. }
  108.  
  109. void vfun_MakeIncidentList(vector<Lista> &vIncidentList, ifstream &fsFile, const int &iEdgeNumber, string sName) {
  110.         int iFirst = 0, iSecond = 0, iTemporary = 0;
  111.         fsFile.close();
  112.         bfun_OpenFile(sName, fsFile);
  113.         fsFile >> iTemporary;
  114.  
  115.         for (int i = 0; i < iEdgeNumber; i++)
  116.         {
  117.                 fsFile >> iFirst;
  118.                 fsFile >> iSecond;
  119.  
  120.                 vIncidentList[iFirst - 1].AddElement(iSecond);
  121.                 vIncidentList[iSecond - 1].AddElement(iFirst);
  122.         }
  123. }
  124.  
  125. void vfun_SaveToFile2(vector<Lista> &vIncidentList, const int &iVerticesNumber) {
  126.         ofstream outFile;
  127.         outFile.open("Wyniki.txt", ios::app);
  128.  
  129.         for (int i = 0; i < iVerticesNumber; i++) {
  130.                 vfun_SaveToFile1("Wyniki.txt", i + 1);
  131.                 outFile << vIncidentList[i];
  132.         }
  133.  
  134.         for (int i = 0; i < iVerticesNumber; i++) {
  135.                 vfun_SaveToFile1("Wyniki.txt", i + 1);
  136.                 outFile << vIncidentList[i].Size();
  137.                 outFile << endl;
  138.         }
  139.  
  140.         outFile.close();
  141. }