Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<conio.h>
  4. #include<string>
  5. #include<vector>
  6. using namespace std;
  7. /*
  8. funkcja tworzy tablice
  9.  
  10. @param ilosc liczb
  11. @return tablica
  12. */
  13. int *stworz_tablice(int iN)
  14. {
  15. string wyjatek = "nieprawidlowa liczba elementow";
  16. int *iT = nullptr;
  17. if (iN < 0) throw wyjatek;
  18. iT = new int[iN];
  19. return iT;
  20. }
  21. /*
  22. otwiera plik
  23. @param nazwa pliku, strumien wejsciowy
  24. */
  25. void otworz_plik(string nazwa, ifstream &plik)
  26. {
  27. plik.open(nazwa);//otwiera plik
  28. if (plik.good() == false)
  29. {
  30. cout << "nie udalo sie otworzyc pliku" << endl;
  31. _getch();
  32. exit(0);
  33. }
  34. }
  35. /*
  36. *wczytuje liczbe z pliku
  37.  
  38. @param strumień wejściowy
  39. @return liczba
  40. */
  41. int wartosc(ifstream &plik)
  42. {
  43. int iX = 0;
  44. plik >> iX;
  45. if (iX <= 0)
  46. {
  47. string wyjatek = "nieprawidlowa wartosc";
  48. throw wyjatek;//zglasza wyjatek gdy liczba zestawow jest nieprawidlowa
  49. }
  50.  
  51. return iX;
  52. }
  53. /*
  54. *zapis do pliku
  55. @param nazwa pliku, strumień wyjścia, tekst do zapisu
  56. */
  57. void stworz_plik(string nazwa, ofstream &zapis, string tekst)
  58. {
  59. zapis.open(nazwa, ios::trunc);
  60. zapis << tekst << endl;
  61. zapis.close();
  62. }
  63. /*
  64. oblicz liczbe wierzcholkow
  65.  
  66. @param tablica z numerami wierzcholkow
  67. @return liczba wierzcholkow
  68. */
  69. int ilosc_wierzcholkow(int *t_wierzcholkow, int iLiczba_krawedzi)
  70. {
  71. int max = t_wierzcholkow[0];
  72. for (int i = 1; i <= 2*iLiczba_krawedzi; i++)
  73. {
  74. if (t_wierzcholkow[i]>max) max = t_wierzcholkow[i];
  75. }
  76. return max;
  77. }
  78. /*
  79. tworzy tablice z numerami wierzcholkow
  80. t[0] poczatek krawedzi t[1] koniec krawedzi i tak dalej
  81.  
  82. @param strumień wejściowy
  83. @return tablica wierzcholkow
  84. */
  85. int *t_wierzcholkow(ifstream &plik, int iLiczba_krawedzi)
  86. {
  87. int *tablica_wierzcholkow = nullptr;
  88.  
  89. tablica_wierzcholkow = stworz_tablice(2 * iLiczba_krawedzi);// poczatek koniec poczatek koniec
  90.  
  91. for (int i = 0; i < 2 * iLiczba_krawedzi; i++)
  92. {
  93. try
  94. {
  95. tablica_wierzcholkow[i] = wartosc(plik);
  96. }
  97. catch (string w)
  98. {
  99. cout << w;
  100. _getch();
  101. exit(0);
  102. }
  103. }
  104. return tablica_wierzcholkow;
  105. }
  106. /*
  107. tworzy tablice dwuwymiarowa i wypelnia ja zerami
  108.  
  109. @param ilosc wierszy i kolumn
  110. @return tablica dwuwymiarowa
  111. */
  112. int **stworz_tablice_dwu_wymiarowa(int iW, int iK)
  113. {
  114. int **t = nullptr;
  115. t = new int *[iW];
  116.  
  117. for (int i = 0; i<iW; i++)
  118. {
  119. t[i] = new int[iK];
  120. }
  121.  
  122. for (int i = 0; i < iW; i++)
  123. {
  124.  
  125. for (int j = 0; j<iK; j++)
  126. {
  127. t[i][j] = 0;
  128. }
  129. }
  130. return t;
  131. }
  132. /*
  133. lista jednokierunkowa przechowujaca liczby
  134. */
  135. struct lista
  136. {
  137. int liczba = 0;
  138. lista *next;
  139. };
  140. /*
  141. tworzy tablice list incydencji
  142. @param tablica wierzcholkow, liczba wierzcholkow
  143. */
  144. void list(int i,int *t_wierzcholkow,int iLiczba_krawedzi,int **tablica_list)
  145. {
  146. int pom = 0;
  147. lista *head = nullptr, *nowyEl = nullptr, *a = nullptr;
  148. do
  149. {
  150.  
  151. if (i == t_wierzcholkow[pom])
  152. {
  153. nowyEl = new lista;
  154. nowyEl->next = head;
  155. nowyEl->liczba = t_wierzcholkow[pom + 1];
  156. head = nowyEl;
  157. }
  158.  
  159. pom++;
  160.  
  161. if (i == t_wierzcholkow[pom])
  162. {
  163. nowyEl = new lista;
  164. nowyEl->next = head;
  165. nowyEl->liczba = t_wierzcholkow[pom - 1];
  166. head = nowyEl;
  167.  
  168. }
  169. pom++;
  170.  
  171. } while (pom < iLiczba_krawedzi * 2);
  172. a = head;
  173. int j = 0;
  174. while (a != nullptr)
  175. {
  176. tablica_list[i - 1][j] = a->liczba;
  177. a = a->next;
  178. j++;
  179. }
  180. }
  181. int **lista_incydencji(int *t_wierzcholkow, int iLiczba_wierzcholkow, int iLiczba_krawedzi)
  182. {
  183. int pom =0, **tablica_list = nullptr,j=0;
  184.  
  185. tablica_list = stworz_tablice_dwu_wymiarowa(iLiczba_wierzcholkow, iLiczba_wierzcholkow);
  186. for (int i = 1; i <= iLiczba_wierzcholkow; i++)
  187. {
  188.  
  189. list(i, t_wierzcholkow, iLiczba_krawedzi,tablica_list);
  190.  
  191.  
  192. }
  193.  
  194.  
  195. return tablica_list;
  196. }
  197. /*
  198. szuka stopnia wierzcholka i wypisuje go
  199.  
  200. @param macierz, liczba wierzcholkow
  201. */
  202. void stopien_wierzcholka(int **macierz, int iLiczba_wierzcholkow)
  203. {
  204. int licznik = 0;
  205. for (int i = 0; i < iLiczba_wierzcholkow; i++)
  206. {
  207. for (int j = 0; j < iLiczba_wierzcholkow; j++)
  208. {
  209. if (macierz[i][j] != 0) licznik++;
  210. }
  211. cout << "Stopien " << i + 1 << " wierzcholka jest rowny " << licznik << endl;
  212. licznik = 0;
  213. }
  214.  
  215. }
  216. /*
  217. wypisuje macierz
  218. @param liczba wierzcholkow, macierz
  219. */
  220. void wypisz_tablice(int iLiczba_wierzcholkow, int **macierz)
  221. {
  222. for (int i = 0; i < iLiczba_wierzcholkow; i++)
  223. {
  224. for (int j = 0; j <iLiczba_wierzcholkow; j++)
  225. {
  226. if (macierz[i][j]!=0) cout << macierz[i][j] << " ";
  227. }
  228. cout << endl;
  229. }
  230. }
  231.  
  232. int main()
  233. {
  234. ifstream plik;
  235. otworz_plik("Pary.txt", plik);
  236.  
  237. int *t_wierzch = nullptr,iLiczba_krawedzi=0, **macierz=nullptr, iLiczba_wierzcholkow=0;
  238.  
  239. try
  240. {
  241. iLiczba_krawedzi = wartosc(plik);
  242. }
  243. catch (string w)
  244. {
  245. cout << w;
  246. _getch();
  247. exit(0);
  248. }
  249. try
  250. {
  251. t_wierzch = t_wierzcholkow(plik, iLiczba_krawedzi);
  252. }
  253. catch (string w)
  254. {
  255. cout << w;
  256. _getch();
  257. exit(0);
  258. }
  259.  
  260. iLiczba_wierzcholkow = ilosc_wierzcholkow(t_wierzch, iLiczba_krawedzi);
  261.  
  262. lista_incydencji(t_wierzch, iLiczba_wierzcholkow , iLiczba_krawedzi);
  263.  
  264.  
  265. macierz = lista_incydencji(t_wierzch, iLiczba_wierzcholkow, iLiczba_krawedzi);
  266.  
  267. wypisz_tablice(iLiczba_wierzcholkow, macierz);
  268.  
  269.  
  270. stopien_wierzcholka(macierz, iLiczba_wierzcholkow);
  271.  
  272.  
  273.  
  274. system("pause");
  275. return 0;
  276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement