Guest User

FOR NATASHA

a guest
Apr 19th, 2019
123
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Задані дві послідовності цілих i дійсних чисел. Побудувати однозв’язний список, у якому числа послідовностей чергуються.
  2. Якщо останнім елементом списку є ціле число, перенести його на початок списку. Надрукувати списки до та після зміни. */
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <stdbool.h>
  6.  
  7. struct list
  8. {
  9. float data; //поле даних
  10. struct list *ptr; //вказівник на наступний елемент
  11. };
  12.  
  13. struct list first_step(float a) //а - значення першого вузла списку
  14. {
  15. struct list *lst;
  16. lst = (struct list*)malloc(sizeof(struct list)); //виділення пам'яті під корінь списку
  17. lst->data = a;
  18. lst->ptr = NULL; //останній вузол списку
  19. return *lst;
  20. }
  21.  
  22. void print_list(struct list *lst, int summ);
  23.  
  24. struct list add(struct list *lst, float number)
  25. {
  26. struct list *temp, *p;
  27. temp = (struct list*)malloc(sizeof(struct list));
  28.  
  29. p = lst->ptr; //збереження покажчика на наступний вузол
  30. lst->ptr = temp; //попередній вузол вказує на той, що створюється
  31. temp->data = number;
  32. temp->ptr = p; //створений вузол вказує на наступний елемент
  33. return *temp;
  34. }
  35. struct list * deletelem(struct list *lst, struct list *root, int summ)
  36. {
  37. struct list *temp;
  38. temp = root;
  39. lst->ptr = root; // переставляем указатель
  40. // освобождаем память удаляемого узла
  41. return(lst);
  42. }
  43.  
  44. //
  45. //void insert(struct list* lst, int index, int data)
  46. //{
  47. // if (index == 0) add(lst, data);
  48. // else
  49. // {
  50. // struct list *current = lst;
  51. // int i;
  52. // for (i = 0; i < index; i++)
  53. // {
  54. // current = current->ptr;
  55. // }
  56. // add(current, data);
  57. // }
  58. //}
  59.  
  60. void Push(struct list** lst, int data)
  61. {
  62. struct list *newNode = (struct list*)malloc(sizeof(struct list));
  63. newNode->data = data;
  64. newNode->ptr = *lst;
  65. *lst = newNode;
  66. }
  67.  
  68. void print(struct list *lst, int summ)
  69. {
  70. struct list *p;
  71. //struct list *h;
  72. //h = lst;
  73. //p = lst;
  74.  
  75. //for (int i = 0; i < summ; i++)
  76. //{ //if (i == summ - 1)
  77. // //{
  78. // h = h->ptr;
  79. // //int b = (int)p->data;
  80. // if (i == summ - 2)
  81. // {
  82. // lst = deletelem(h, lst, summ);
  83. // }
  84. // //}
  85. //}
  86. p = lst;
  87. for (int i = 0; i < summ; i++)
  88. {
  89. if (i == summ)
  90. {
  91. int b = (int)p->data;
  92. if ((double)b != p->data)
  93. {
  94. Push(&lst, p->data);
  95. }
  96. }
  97. p = p->ptr; // переход к следующему узлу
  98. }
  99. print_list(lst, summ);
  100.  
  101. }
  102.  
  103. void print_list(struct list *lst, int summ)
  104. {
  105. struct list *p;
  106. p = (struct list*)malloc(sizeof(struct list));
  107. p = lst;
  108.  
  109. for (int i = 0; i < summ; i++)
  110. {
  111. printf("%5.2lf", p->data); // вывод значения элемента p
  112. p = p->ptr; // переход к следующему узлу
  113. }
  114. printf("\n");
  115. }
  116.  
  117. void keyboard()
  118. {
  119. struct list *lst = (struct list*)malloc(sizeof(struct list));
  120. int answer, answer2, summ;
  121. float *nums, *nums2;
  122. bool checked = false, checked2 = false;
  123.  
  124. printf("How many numbers do you want to enter in integer array?: "); scanf("%d", &answer);
  125. nums = (float*)malloc(answer * sizeof(float));
  126.  
  127. printf("\nInput integer array: \n");
  128. for (int i = 0; i < answer; i++)
  129. {
  130. printf("array[%d] = ", i);
  131. scanf("%f", &nums[i]);
  132. }
  133.  
  134. printf("\nYour integer array: \n");
  135. for (int i = 0; i < answer; i++)
  136. {
  137. printf("array[%d] = %3f\n", i, nums[i]);
  138. }
  139.  
  140. printf("How many numbers do you want to enter in float array?: "); scanf("%d", &answer2);
  141. nums2 = (float*)malloc(answer2 * sizeof(float));
  142.  
  143. printf("\nInput float array: \n");
  144. for (int i = 0; i < answer2; i++)
  145. {
  146. printf("array[%d] = ", i);
  147. scanf("%f", &nums2[i]);
  148. }
  149.  
  150. printf("\nYour array: \n");
  151. for (int i = 0; i < answer2; i++)
  152. {
  153. printf("array[%d] = %6.3f\n", i, nums2[i]);
  154. }
  155.  
  156. summ = answer + answer2;
  157. int j = 0, k = 0, counter = 0;
  158. for (int i = 0; i < summ; i++)
  159. {
  160. if (i == 0)
  161. {
  162. lst[i] = first_step(nums2[k]);
  163. k++;
  164. }
  165. else {
  166. if (i % 2 == 0)
  167. {
  168. if (k > answer2 - 1) {
  169. lst[i] = add(lst, nums[j]);
  170. j++;
  171. }
  172. else {
  173. printf("%f\n", nums2[k]);
  174. lst[i] = add(lst, nums2[k]);
  175. k++;
  176. }
  177.  
  178. }
  179. else
  180. {
  181. if (j > answer - 1) {
  182. printf("%f\n", nums2[k]);
  183. lst[i] = add(lst, nums2[k]);
  184. k++;
  185. }
  186. else {
  187. lst[i] = add(lst, nums[j]);
  188. j++;
  189. }
  190. }
  191. }
  192. }
  193. for (int i = 0; i < summ; i++) {
  194. printf("%f ", lst[i].data);
  195. }
  196. printf("Your list: \n");
  197. print(lst, summ);
  198.  
  199. system("pause");
  200. }
  201.  
  202. int main()
  203. {
  204. start:
  205. system("cls");
  206. printf("Nataliia Byshovets, IS-81, lab 6\n\n");
  207. int answer;
  208.  
  209. printf("1 - input numbers.\n");
  210. printf("2 - print lists.\n");
  211. printf("3 - exit.\n\n");
  212.  
  213. printf("What do you want to do?: "); scanf("%d", &answer);
  214.  
  215. switch (answer)
  216. {
  217. case 1:
  218. {
  219. keyboard(); //робота з числами, введеними з клавіатури
  220. goto start;
  221. break;
  222. }
  223. case 2:
  224. {
  225. //output(); //виведення чисел з файлу
  226. goto start;
  227. break;
  228. }
  229. default:
  230. {
  231. break;
  232. }
  233. }
  234.  
  235. system("pause");
  236. return 0;
  237. }
RAW Paste Data