Advertisement
FVictor

Untitled

Nov 18th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define NMAX 1000
  5. #define NMAX2 15
  6.  
  7. void macroboard(char v[][NMAX2], long p, long q, long n_lin_col,
  8. double contor[NMAX]) {
  9. long i, j, n, k;
  10. char x;
  11. n = n_lin_col;
  12. contor[1] = 0;
  13. contor[2] = 0;
  14. // varificare pe linii
  15. for (i = p; i < p + n; i++) {
  16. k = 0;
  17. for (j = q; j < q + n - 1; j++) {
  18. if (v[i][q] == 'X' || v[i][q] == '0')
  19. x = v[i][q];
  20. else
  21. x = 'H';
  22. if (v[i][j + 1] == x)
  23. k++;
  24. if (k == (n - 1)) {
  25. if (x == 'X')
  26. contor[1]++;
  27. if (x == '0')
  28. contor[2]++;
  29. }
  30.  
  31. }
  32. }
  33. // verificare pe coloane
  34. for (j = q; j < q + n; j++) {
  35. k = 0;
  36. for (i = p; i < p + n - 1; i++) {
  37. if (v[p][j] == 'X' || v[p][j] == '0')
  38. x = v[p][j];
  39. else
  40. x = 'H';
  41. if (v[i + 1][j] == x)
  42. k++;
  43. if (k == (n - 1)) {
  44. if (x == 'X')
  45. contor[1]++;
  46. if (x == '0')
  47. contor[2]++;
  48. }
  49. }
  50. }
  51. // verificare diagonala principala
  52. k = 0;
  53. if (v[p][q] == 'X' || v[p][q] == '0') {
  54. x = v[p][q];
  55. } else {
  56. x = 'H';
  57. }
  58. for (i = 0; i < n; i++) {
  59. if (v[p + i][q + i] == x)
  60. k++;
  61. if (k == n) {
  62. if (x == 'X')
  63. contor[1]++;
  64. if (x == '0')
  65. contor[2]++;
  66. }
  67. }
  68. // verificare diagonala secundara
  69. k = 0;
  70. if (v[p][q + n - 1] == 'X' || v[p][q + n - 1] == '0')
  71. x = v[p][q + n - 1];
  72. else
  73. x = 'H';
  74. for (i = 0; i < n; i++) {
  75. if (x == v[p + i][q + n - 1 - i]) {
  76. k++;
  77. }
  78. if (k == n) {
  79. if (x == 'X')
  80. contor[1]++;
  81. if (x == '0')
  82. contor[2]++;
  83. }
  84. }
  85. }
  86.  
  87. char castigator(char matrice[][NMAX], long p, long q, long n_lin_col) {
  88. long i, j, n, k;
  89. char x;
  90. n = n_lin_col;
  91. // varificare pe linii
  92. for (i = p; i < p + n; i++) {
  93. k = 0;
  94. for (j = q; j < q + n - 1; j++) {
  95. if (matrice[i][q] == 'X' || matrice[i][q] == '0')
  96. x = matrice[i][q];
  97. else
  98. x = 'H';
  99. if (matrice[i][j + 1] == x)
  100. k++;
  101. if (k == (n - 1))
  102. return x;
  103. }
  104. }
  105. // verificare pe coloane
  106. for (j = q; j < q + n; j++) {
  107. k = 0;
  108. for (i = p; i < p + n - 1; i++) {
  109. if (matrice[p][j] == 'X' || matrice[p][j] == '0')
  110. x = matrice[p][j];
  111. else
  112. x = 'H';
  113. if (matrice[i + 1][j] == x)
  114. k++;
  115. if (k == (n - 1))
  116. return x;
  117. }
  118. }
  119. // verificare diagonala principala
  120. k = 0;
  121. if (matrice[p][q] == 'X' || matrice[p][q] == '0') {
  122. x = matrice[p][q];
  123. } else {
  124. x = 'H';
  125. }
  126. for (i = 0; i < n; i++) {
  127. if (matrice[p + i][q + i] == x)
  128. k++;
  129. if (k == n)
  130. return x;
  131. }
  132. // verificare diagonala secundara
  133. k = 0;
  134. if (matrice[p][q + n - 1] == 'X' || matrice[p][q + n - 1] == '0')
  135. x = matrice[p][q + n - 1];
  136. else
  137. x = 'H';
  138. for (i = 0; i < n; i++) {
  139. if (x == matrice[p + i][q + n - 1 - i]) {
  140. k++;
  141. }
  142. if (k == n)
  143. return x;
  144. }
  145. return '-';
  146. }
  147.  
  148. void
  149. afisare_mini_matrice(char matrice[][NMAX], long p, long q, long n_lin_col) {
  150. long i, j, n;
  151. n = n_lin_col;
  152. for (i = p; i < p + n; i++) {
  153. for (j = q; j < q + n; j++) {
  154. printf(" %c", matrice[i][j]);
  155. }
  156. printf("\n");
  157. }
  158. }
  159.  
  160. void
  161. minimatrice(char matrice[][NMAX], long n_lin_col, char v[NMAX2][NMAX2], int ok,
  162. double contor[NMAX]) {
  163. long p, q, n, k;
  164. p = 0;
  165. q = 0;
  166. n = n_lin_col;
  167. k = 0;
  168. while (p < (n * n - n + 1)) {
  169. if (v[p / n][q / n] == '-') {
  170. v[p / n][q / n] = castigator(matrice, p, q, n);
  171. if (ok == 1) {
  172. if (castigator(matrice, p, q, n) == 'X') {
  173. contor[7]++;
  174. }
  175. if (castigator(matrice, p, q, n) == '0') {
  176. contor[8]++;
  177. }
  178. }
  179. }
  180. q = q + n;
  181. if (q > (n * n - n + 1)) {
  182. q = 0;
  183. p = p + n;
  184. }
  185. }
  186. }
  187.  
  188. void verificare(char matrice[][NMAX], long n_lin_col) {
  189. long i, j, p = 0, q = 0, n, eror = 0;
  190. n = n_lin_col;
  191. for (i = p; i < (p + n); i++) {
  192. for (j = q; j < (q + n); j++) {
  193. printf("%c ", matrice[i][j]);
  194. if (j == n * n - 1)
  195. eror = 1;
  196. }
  197. printf("\n");
  198. if (i == (p + n - 1) && eror == 0) {
  199. q = q + n;
  200. i = p;
  201. }
  202. if (i == (p + n - 1) && eror == 1) {
  203. p = p + n;
  204. i = p;
  205. q = 0;
  206. eror = 0;
  207. }
  208. if (i == (n * n - 1) && eror == 1)
  209. break;
  210.  
  211. }
  212. }
  213.  
  214. void robin(char matrice[][NMAX], char jucator, long n_lin_col) {
  215. long i, control = 0, k;
  216. for (i = 0; i < n_lin_col; i++) {
  217. if ((matrice[i][i] != 'X') && matrice[i][i] != '0') {
  218. matrice[i][i] = jucator;
  219. control = 1;
  220. break;
  221. }
  222. }
  223. k = 1;
  224. while (control == 0) {
  225. for (i = 0; i < n_lin_col - k; i++) {
  226. if ((matrice[i][i + k] != 'X') && matrice[i][i + k] != '0') {
  227. matrice[i][i + k] = jucator;
  228. control = 1;
  229. break;
  230. }
  231. }
  232. if (control != 1) {
  233. for (i = 0; i < n_lin_col - k; i++) {
  234. if ((matrice[i + k][i] != 'X') && matrice[i + k][i] != '0') {
  235. matrice[i + k][i] = jucator;
  236. control = 1;
  237. break;
  238. }
  239. }
  240. }
  241. k++;
  242. }
  243. }
  244.  
  245. void incarcare_matrice(char matrice[][NMAX], long n_lin_col) {
  246. long i, j;
  247. for (i = 0; i < pow(n_lin_col, 2); i++)
  248. for (j = 0; j < pow(n_lin_col, 2); j++)
  249. matrice[i][j] = '*';
  250. }
  251.  
  252. void afisare_matrice(char matrice[][NMAX], long n_lin_col) {
  253. long i, j;
  254. for (i = 0; i < pow(n_lin_col, 2); i++) {
  255. for (j = 0; j < pow(n_lin_col, 2); j++) {
  256. printf("%c ", matrice[i][j]);
  257. }
  258. printf("\n");
  259. }
  260. }
  261.  
  262. void mutari(char matrice[][NMAX], long numar_mutari, long n_lin_col,
  263. char v[NMAX2][NMAX2], double contor[NMAX]) {
  264. long n = n_lin_col * n_lin_col, fullboard = 0;
  265. long i, x, y, erorr, k = 1;
  266. char jucator;
  267. int ok;
  268. for (i = 1; i <= numar_mutari; i++) {
  269. ok = 0;
  270. if (contor[3] + contor[4] == n * n) {
  271. scanf(" %c %ld %ld", &jucator, &x, &y);
  272. if (x < 0 || x >= n)
  273. fullboard = 2;
  274. else
  275. fullboard = 1;
  276. } else {
  277. erorr = 0;
  278. scanf(" %c %ld %ld", &jucator, &x, &y);
  279. k++;
  280. if (i % 2 == 1 && jucator == 'X') {
  281. if (x >= 0 && x < n && y >= 0 && y < n) {
  282. if (matrice[x][y] == 'X' || matrice[x][y] == '0') {
  283. printf("NOT AN EMPTY CELL\n");
  284. robin(matrice, jucator, n);
  285. contor[3]++;
  286. } else {
  287. matrice[x][y] = 'X';
  288. contor[3]++;
  289. ok = 1;
  290. }
  291.  
  292. } else {
  293. printf("INVALID INDEX\n");
  294. robin(matrice, jucator, n);
  295. contor[3]++;
  296. }
  297. }
  298. if (i % 2 == 1 && jucator != 'X') {
  299. printf("NOT YOUR TURN\n");
  300. erorr = 1;
  301. }
  302. if (i % 2 == 0 && jucator == '0') {
  303. if (x >= 0 && x < n && y >= 0 && y < n) {
  304. if (matrice[x][y] == 'X' || matrice[x][y] == '0') {
  305. printf("NOT AN EMPTY CELL\n");
  306. robin(matrice, jucator, n);
  307. contor[4]++;
  308. } else {
  309. matrice[x][y] = '0';
  310. contor[4]++;
  311. ok = 1;
  312. }
  313.  
  314. } else {
  315. printf("INVALID INDEX\n");
  316. robin(matrice, jucator, n);
  317. contor[4]++;
  318. }
  319. }
  320. if (i % 2 == 0 && jucator != '0') {
  321. printf("NOT YOUR TURN\n");
  322. erorr = 1;
  323. }
  324. if (erorr == 1) {
  325. i++;
  326. numar_mutari++;
  327. }
  328. if (erorr == 0)
  329. minimatrice(matrice, n_lin_col, v, ok, contor);
  330. }
  331. }
  332. if (fullboard == 1) {
  333. printf("NOT AN EMPTY CELL\n");
  334. printf("FULL BOARD\n");
  335. }
  336. if (fullboard == 2) {
  337. printf("INVALID INDEX\n");
  338. printf("FULL BOARD\n");
  339. }
  340. }
  341.  
  342. int main() {
  343. double contor[NMAX] = {0, 0, 0, 0, 0, 0, 0, 0};
  344. char c[NMAX][NMAX];
  345. long n, m, k, fullboard = 0;
  346. scanf("%ld", &n);
  347. char v[NMAX2][NMAX2];
  348. scanf("%ld", &m);
  349. for (k = 0; k < n; k++) {
  350. for (long z = 0; z < n; z++) {
  351. v[k][z] = '-';
  352. }
  353. }
  354. incarcare_matrice(c, n);
  355. mutari(c, m, n, v, contor);
  356.  
  357. for (k = 0; k < n; k++) {
  358. for (long z = 0; z < n; z++) {
  359. printf("%c", v[k][z]);
  360. if (v[k][z] == 'X') {
  361. contor[5]++;
  362. }
  363. if (v[k][z] == '0') {
  364. contor[6]++;
  365. }
  366. }
  367. printf("\n");
  368. }
  369. macroboard(v, 0, 0, n, contor);
  370. if (contor[1] > contor[2]) {
  371. printf("X won\n");
  372. }
  373. if (contor[2] > contor[1]) {
  374. printf("0 won\n");
  375. }
  376. long chr = 39;
  377. if (contor[1] == contor[2])
  378. printf("Draw again! Let%cs play darts!\n", chr);
  379. if (contor[3] == 0.0)
  380. printf("X N/A\n");
  381. else
  382. printf("X %.10lf\n", contor[7] / contor[3]);
  383. if (contor[4] == 0.0)
  384. printf("0 N/A\n");
  385. else
  386. printf("0 %.10lf\n", contor[8] / contor[4]);
  387.  
  388. return 0;
  389. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement