Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. #define p 127
  7. #define q 31
  8. #define c1 2
  9. #define c2 5
  10.  
  11. const int M = 5003;
  12.  
  13. int generator_retezce (char *pole);
  14. void uvodni_okno();
  15.  
  16. int main()
  17. {
  18. int i, j, k, l, m;
  19. int linearni_pokusy = 0, kvadraticke_pokusy = 0, dvoji_pokusy = 0;
  20. int procenta[3];
  21.  
  22. procenta[0] = 0.50 * M;
  23. procenta[1] = 0.75 * M;
  24. procenta[2] = 0.90 * M;
  25. procenta[3] = 0.95 * M;
  26.  
  27. char retezec[21], q1, q2, qe;
  28. char *pole_linearni[M], *pole_kvadraticke[M], *pole_dvoji[M];
  29.  
  30. double linearni[4], kvadraticke[4], dvoji[4];
  31.  
  32. srand(time(0));
  33.  
  34. //uvodni_okno();
  35.  
  36. for (i = 0; i < 4; i++)
  37. {
  38. linearni[i] = 0;
  39. kvadraticke[i] = 0;
  40. dvoji[i] = 0;
  41. }
  42.  
  43. for (j = 0; j < M; j++)
  44. {
  45. pole_linearni[j] = NULL;
  46. pole_kvadraticke[j] = NULL;
  47. pole_dvoji[j] = NULL;
  48. }
  49.  
  50. for (k = 0; k < M; k++)
  51. {
  52. l = generator_retezce(retezec);
  53. q1 = retezec[0];
  54. q2 = retezec[1];
  55. qe = retezec[l-1];
  56.  
  57. if (k == procenta[0])
  58. {
  59. linearni[0] = linearni_pokusy;
  60. kvadraticke[0] = kvadraticke_pokusy;
  61. dvoji[0] = dvoji_pokusy;
  62. }
  63.  
  64. else if (k == procenta[1])
  65. {
  66. linearni[1] = linearni_pokusy;
  67. kvadraticke[1] = kvadraticke_pokusy;
  68. dvoji[1] = dvoji_pokusy;
  69. }
  70.  
  71. else if (k == procenta[2])
  72. {
  73. linearni[2] = linearni_pokusy;
  74. kvadraticke[2] = kvadraticke_pokusy;
  75. dvoji[2] = dvoji_pokusy;
  76. }
  77.  
  78. else
  79. {
  80. linearni[3] = linearni_pokusy;
  81. kvadraticke[3] = kvadraticke_pokusy;
  82. dvoji[3] = dvoji_pokusy;
  83. }
  84.  
  85. unsigned cz = (p * q1 + q * q2 + qe + l);
  86.  
  87.  
  88. // Lineární funkce
  89.  
  90. int zaplneno = 1;
  91. int kolize = 0;
  92.  
  93. while (zaplneno == 1)
  94. {
  95. unsigned h = ((cz % M) + kolize) % M;
  96.  
  97. linearni_pokusy++;
  98.  
  99. if (pole_linearni[h] != NULL)
  100. {
  101. kolize++;
  102. }
  103.  
  104. else
  105. {
  106. pole_linearni[h] = strdup(retezec);
  107. zaplneno = 0;
  108. }
  109. }
  110.  
  111. // Kvadraticka funkce
  112.  
  113. zaplneno = 1;
  114. kolize = 0;
  115.  
  116. while (zaplneno == 1)
  117. {
  118. unsigned h = ((cz % M) + (c1 * kolize) + c2 * (kolize * kolize)) % M;
  119.  
  120. kvadraticke_pokusy++;
  121.  
  122. if (pole_kvadraticke[h] != NULL)
  123. {
  124. kolize++;
  125. }
  126.  
  127. else
  128. {
  129. pole_kvadraticke[h] = strdup(retezec);
  130. zaplneno = 0;
  131. }
  132. }
  133.  
  134. // Dvoji funkce
  135.  
  136. zaplneno = 1;
  137. kolize = 0;
  138.  
  139. while (zaplneno == 1)
  140. {
  141. unsigned h = ((cz % M) + kolize * (1 + cz % (M-1))) % M;
  142.  
  143. dvoji_pokusy++;
  144.  
  145. if (pole_dvoji[h] != NULL)
  146. {
  147. kolize++;
  148. }
  149.  
  150. else
  151. {
  152. pole_dvoji[h] = strdup(retezec);
  153. zaplneno = 0;
  154. }
  155. }
  156. }
  157.  
  158. printf("\t Prumerny pocet pokusu k nalezeni volne pozice pro ulozeni: \n");
  159. printf("\t ----------------------------------------------------------\n\n");
  160. printf("-------------------------------------------------------------------------------\n");
  161. printf("| Obsazeni (v %%) | Linearni hledani | Kvadraticke hledani | Dvoji hledani |\n");
  162. printf("-------------------------------------------------------------------------------\n");
  163.  
  164. for(m = 0; m < 4; m++)
  165. {
  166. if (m == 0)
  167. {
  168. printf("| 50 | %2.2f | %.2f | %.2f |\n", linearni[m]/ procenta[m], kvadraticke[m]/ procenta[m], dvoji[m]/ procenta[m]);
  169. printf("-------------------------------------------------------------------------------\n");
  170. }
  171.  
  172. else if (m == 1)
  173. {
  174. printf("| 75 | %2.2f | %.2f | %.2f |\n", linearni[m]/ procenta[m], kvadraticke[m]/ procenta[m], dvoji[m]/ procenta[m]);
  175. printf("-------------------------------------------------------------------------------\n");
  176. }
  177.  
  178.  
  179. else if (m == 2)
  180. {
  181. printf("| 90 | %2.2f | %.2f | %.2f |\n", linearni[m]/ procenta[m], kvadraticke[m]/ procenta[m], dvoji[m]/ procenta[m]);
  182. printf("-------------------------------------------------------------------------------\n");
  183. }
  184.  
  185.  
  186. else if (m == 3)
  187. {
  188. printf("| 95 | %2.2f | %.2f | %.2f |\n", linearni[m]/ procenta[m], kvadraticke[m]/ procenta[m], dvoji[m]/ procenta[m]);
  189. printf("-------------------------------------------------------------------------------\n");
  190. }
  191. }
  192.  
  193.  
  194. return 0;
  195. }
  196.  
  197. int generator_retezce (char *pole)
  198. {
  199. int i, cislo;
  200. int delka_retezce = 3 + (rand() % 18);
  201.  
  202. for (i = 0; i < delka_retezce; i++)
  203. {
  204. cislo = 97 + (rand() % 25);
  205. pole[i] = cislo;
  206. }
  207.  
  208. pole[delka_retezce] = '\0';
  209.  
  210. return delka_retezce - 1;
  211. }
  212.  
  213. void uvodni_okno()
  214. {
  215. system("cls");
  216. printf("|------------------------------------------------------------------------------|");
  217. printf("| ********* * ******** ******** ******* ******* ********* |");
  218. printf("| * * * * * * * * * * |");
  219. printf("| * * * * * * * * * * |");
  220. printf("| * * * * * * * * * * |");
  221. printf("| * * * ******** * * * ***** * |");
  222. printf("| * *********** * * * * * * |");
  223. printf("| * * * * * * * * * |");
  224. printf("| * * * * * * * * * |");
  225. printf("| ********* * * * ******** ******* ******* * |");
  226. printf("| ----------|");
  227. printf("| * * ******** * * * ********* / ********* |");
  228. printf("| * * * * ** ** * * * | * |");
  229. printf("| * * * * * * * * * * * | * |");
  230. printf("| * * * * *** * * * * * * * * | ***** |");
  231. printf("| ********* * * * * * * ********* * | * |");
  232. printf("| * * * * * * * * * * | * |");
  233. printf("| * * ******** ******** * * * * * | ********* |");
  234. printf("|------------------------------------------------------------------------------|");
  235. printf("| |");
  236. printf("| Uloha:\tHashovaci tabulky |");
  237. printf("| Autor:\tTomas Lehar |");
  238. printf("| Verze:\t1.0 |");
  239. printf("|------------------------------------------------------------------------------|");
  240. system("pause");
  241. system("cls");
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement