Advertisement
Guest User

Ukraina

a guest
Jan 20th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. struct Point {
  6. int x, y;
  7. };
  8.  
  9. struct Figura {
  10. unsigned short size;
  11. Point** p;
  12. };
  13.  
  14. void inicjacja(Figura** figura, int ilosc) {
  15.  
  16. *figura = (Figura*)malloc(ilosc * sizeof(Figura));
  17.  
  18. for (int i = 0; i < ilosc; i++) {
  19. (*figura)[i].p = (Point**)malloc(ilosc * sizeof(Point*));
  20.  
  21. for (int j = 0; j < ilosc; j++) {
  22. (*figura)[i].p[j] = (Point*)malloc(sizeof(Point));
  23. }
  24. }
  25. }
  26.  
  27. void stworz_baze(Figura* figura, int ilosc) {
  28. for (int i = 0; i < ilosc; i++) {
  29. figura[i].size = ilosc;
  30.  
  31. for (int j = 0; j < ilosc; j++) {
  32. figura[i].p[j]->x = rand() % 20;
  33. figura[i].p[j]->y = rand() % 20;
  34. }
  35. }
  36. }
  37.  
  38.  
  39. void dodaj_figure(Figura** figura, int* ilosc) {
  40.  
  41. Figura* temp;
  42.  
  43. *ilosc = *ilosc + 1;
  44.  
  45. temp = (Figura*)malloc(*ilosc * sizeof(Figura));
  46.  
  47. for (int i = 0; i < (*ilosc - 1); i++) {
  48. temp[i] = (*figura)[i];
  49. }
  50.  
  51. temp[*ilosc - 1].size = 2;
  52. temp[*ilosc - 1].p = (Point**)malloc(temp[*ilosc - 1].size * sizeof(Point*));
  53. for (int j = 0; j < temp[*ilosc - 1].size; j++) {
  54. temp[*ilosc - 1].p[j] = (Point*)malloc(sizeof(Point));
  55. }
  56.  
  57. for (int j = 0; j < temp[*ilosc - 1].size; j++) {
  58. temp[*ilosc - 1].p[j]->x = rand() % 20;
  59. temp[*ilosc - 1].p[j]->y = rand() % 20;
  60. }
  61.  
  62. free(*figura);
  63. *figura = temp;
  64. }
  65.  
  66. void usun_figure(Figura** figura, int* ilosc) {
  67.  
  68. *ilosc = *ilosc - 1;
  69.  
  70. Figura* temp;
  71. int los;
  72.  
  73. los = rand() % (*ilosc);
  74.  
  75. temp = (Figura*)malloc(*ilosc * sizeof(Figura));
  76. for (int i = 0; i < los; i++) {
  77. temp[i] = (*figura)[i];
  78. }
  79. for (int i = los; i < *ilosc; i++) {
  80. temp[i] = (*figura)[i + 1];
  81. }
  82.  
  83. free(*figura);
  84. *figura = temp;
  85. }
  86.  
  87. void dodaj_punkt(Figura** figura, int ilosc) {
  88.  
  89. Point** temp;
  90.  
  91. int los = rand() % ilosc;
  92.  
  93. (*figura)[los].size = (*figura)[los].size + 1;
  94.  
  95.  
  96. temp = (Point**)malloc((*figura)[los].size * sizeof(Point*));
  97. for (int i = 0; i < (*figura)[los].size; i++) {
  98. temp[i] = (Point*)malloc(sizeof(Point));
  99. }
  100.  
  101. for (int i = 0; i < ((*figura)[los].size - 1); i++) {
  102. temp[i][0] = (*figura)[los].p[i][0];
  103. }
  104.  
  105. temp[(*figura)[los].size - 1]->x = rand() % 20;
  106. temp[(*figura)[los].size - 1]->y = rand() % 20;
  107.  
  108.  
  109. for (int i = 0; i < (*figura)[los].size - 1; i++) {
  110. free((*figura)[los].p[i]);
  111. }
  112. free((*figura)[los].p);
  113.  
  114. (*figura)[los].p = temp;
  115. }
  116.  
  117. void usun_punkt(Figura** figura, int ilosc) {
  118.  
  119. int los = rand() % ilosc;
  120.  
  121. Point** temp;
  122.  
  123. (*figura)[los].size = (*figura)[los].size - 1;
  124.  
  125. temp = (Point**)malloc((*figura)[los].size * sizeof(Point*));
  126. for (int i = 0; i < (*figura)[los].size; i++) {
  127. temp[i] = (Point*)malloc(sizeof(Point));
  128. }
  129.  
  130. for (int i = 0; i < los; i++) {
  131. temp[i][0] = (*figura)[los].p[i][0];
  132. }
  133. for (int i = los; i < (*figura)[los].size; i++) {
  134. temp[i][0] = (*figura)[los].p[i + 1][0];
  135. }
  136.  
  137. for (int i = 0; i < (*figura)[los].size + 1; i++) {
  138. free((*figura)[los].p[i]);
  139. }
  140. free((*figura)[los].p);
  141.  
  142. (*figura)[los].p = temp;
  143. }
  144.  
  145. void pokaz(Figura* figura, int ilosc) {
  146. for (int i = 0; i < ilosc; i++) {
  147. printf("FIGURA %d:", i);
  148. for (int j = 0; j < figura[i].size; j++) {
  149. printf("(%d,%d)\t", j, figura[i].p[j]->x, figura[i].p[j]->y);
  150. }
  151. printf("\n");
  152. if (figura[i].size == 1)printf("FIGURA JEST PUNKTEM");
  153. else if (figura[i].size == 2)printf("FIGURA JEST PROSTA");
  154. else printf("FIGURA JEST %d-KATEM", figura[i].size);
  155. printf("\n\n");
  156. }
  157. }
  158.  
  159. int main() {
  160. srand(time(NULL));
  161. Figura* figura;
  162. int wybor;
  163. int ilosc = 2;
  164. char ch;
  165.  
  166. inicjacja(&figura, ilosc);
  167.  
  168. do {
  169. printf("Menu\n\n");
  170. printf("1. Stworz baze figur \n");
  171. printf("2. Dodaj figure \n");
  172. printf("3. Usun figure \n");
  173. printf("4. Dodaj punkt do figury \n");
  174. printf("5. Usun punkt figury \n");
  175. printf("6. Pokaz figury \n");
  176. printf("0. Exit\n");
  177. printf("Wybierz opcje: \n");
  178.  
  179. scanf_s("%d", &wybor);
  180. ch = getchar();
  181. system("cls");
  182.  
  183. switch (wybor) {
  184. case 1:
  185. stworz_baze(figura, ilosc);
  186. break;
  187. case 2:
  188. dodaj_figure(&figura, &ilosc);
  189. break;
  190. case 3:
  191. usun_figure(&figura, &ilosc);
  192. break;
  193. case 4:
  194. dodaj_punkt(&figura, ilosc);
  195. break;
  196. case 5:
  197. usun_punkt(&figura, ilosc);
  198. break;
  199. case 6:
  200. pokaz(figura, ilosc);
  201. break;
  202. case 0:
  203. break;
  204. default:
  205. printf("Blad");
  206. }
  207. while ((ch = getchar()) != '\n');
  208. system("cls");
  209. } while (wybor != 0);
  210.  
  211. return 0;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement