ChameL1oN

Untitled

Dec 9th, 2014
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1. /*24.11.2014 - Лабораторная работа #4. Калинина Екатерина (ФИТ-1). Вариант 11.
  2. 1. удалить элементы, совпадающие с минимальным +
  3. 2. добавить N после всех четных элементов +
  4. 3. поменять местами элементы с четными и нечетными номерами +
  5. 4. найти элемент с заданным ключом (значением) +
  6. 5. выполнить сортировку простым выбором по возрастанию +
  7. 6. найти элемент с заданным ключом (значением) -(?) */
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <locale.h>
  12.  
  13. using namespace std;
  14.  
  15. void readFile(int *mas, int n)
  16. /*функция чтения массива из файла и вывода его на экран*/
  17. {
  18. ifstream input("input.txt", ios::in);
  19. for (int i = 0; i<n; i++)
  20. {
  21. input >> mas[i];
  22. cout << mas[i] << " ";
  23. }
  24. cout << "\n";
  25. }
  26. void writeFile(int *mas, int n)
  27. /*функция записи массива в файл*/
  28. {
  29. ofstream output("output.txt", ios::app);
  30. for (int i = 0; i<n; i++) output << mas[i] << " ";
  31. output << "\n";
  32. output.close();
  33. }
  34. void delete_min(int *mas, int n)
  35. /*функция удаления минимальных элементов*/
  36. {
  37. int min, i, j, k = 0; //k-количество чисел, равных минимальному
  38. min = mas[0];
  39. for (i = 1; i<n; i++) //нахождение минимального элемента массива
  40. if (mas[i]<min) min = mas[i];
  41. for (i = 0; i<n; i++)
  42. if (mas[i] == min)
  43. {
  44. k++;
  45. for (j = i; j<(n - 1); j++) mas[j] = mas[j + 1];
  46. }
  47. n = n - k;
  48. for (i = 0; i<n; i++) cout << mas[i] << " ";
  49. cout << "\n";
  50. writeFile(mas, n);
  51. }
  52. void add_n(int *mas, int &n, int k)
  53. /*функция вставки N(изначальная размерность массива) после четных элементов*/
  54. {
  55. int i, j;
  56. for (i = -1; i<(n - 1); i++)
  57. {
  58. if ((mas[i] % 2) == 0)
  59. {
  60. n++;
  61. for (j = (n - 1); j>i; j--)
  62. mas[j] = mas[j - 1];
  63. mas[i + 1] = k; // вставка нового элемента
  64. i++; // обход нового элемента
  65. }
  66. }
  67. n--;
  68. for (i = 0; i<n; i++) cout << mas[i] << " ";
  69. cout << "\n";
  70. writeFile(mas, n);
  71. return;
  72. }
  73. void change(int *mas, int n)
  74. /*функция перестановки местами соседних элементов (с четными и нечетными номерами)*/
  75. {
  76. int a = 0;
  77. for (int i = 0; i<(n - 1); i += 2)
  78. {
  79. a = mas[i];
  80. mas[i] = mas[i + 1];
  81. mas[i + 1] = a;
  82. }
  83. for (int i = 0; i<n; i++) cout << mas[i] << " ";
  84. cout << "\n";
  85. writeFile(mas, n);
  86. }
  87. void linearSearch(int *mas, int n)
  88. /*функция поиска в неотсортированном массиве (линейный поиск)*/
  89. {
  90. ofstream output("output.txt", ios::app);
  91. int key, i = 0, s = 0;
  92. bool k = false;
  93. cout << "Введите ключ \n";
  94. cin >> key;
  95. //while (k==false)
  96. while ((k == false) && (i<n))
  97. {
  98. if (mas[i] == key)k = true;
  99. i++;
  100. s++;
  101. }
  102. if (k)
  103. {
  104. cout << "Элемент " << key << " найден под номером " << i << "\n";
  105. output << "Элемент " << key << " найден под номером " << i << "\n";
  106. }
  107. else
  108. {
  109. cout << "Элемент " << key << " не найден. \n";
  110. output << "Элемент " << key << " не найден. \n";
  111. }
  112. cout << "Для поиска использовали " << s << " сравнений. \n";
  113. output << "Для поиска использовали " << s << " сравнений. \n";
  114. }
  115. void sort(int *mas, int n)
  116. /*функция сортировки массива методом простого выбора по возрастанию*/
  117. {
  118. int min, imin;
  119. for (int i = 0; i<n; i++)
  120. {
  121. min = mas[i];
  122. imin = i;
  123. for (int j = i + 1; j<n; j++) //поиск минимального элемента массива
  124. if (mas[j]<min)
  125. {
  126. min = mas[j];
  127. imin = j;
  128. }
  129. mas[imin] = mas[i]; //меняем местами минимальный с первым неотсортированным
  130. mas[i] = min;
  131. }
  132. for (int i = 0; i<n; i++) cout << mas[i] << " ";
  133. cout << "\n";
  134. writeFile(mas, n);
  135. return;
  136. }
  137. void binarySearch(int *mas, int n)
  138. /*функция поиска в отсортированном массиве (бинарный поиск)*/
  139. {
  140. ofstream output("output.txt", ios::app);
  141. int key, left = 0, right = n, middle, s = 0;
  142. cout << "Введите ключ \n";
  143. cin >> key;
  144. while (left <= right)
  145. {
  146. s++;
  147. middle = (left + right) / 2; //средний элемент
  148. if (mas[middle]<key) left = middle + 1; //перенести левую границу
  149. else if (mas[middle] == key)
  150. {
  151. cout << "Элемент " << key << " найден под номером " << middle + 1 << "\n";
  152. output << "Элемент " << key << " найден под номером " << middle + 1 << "\n";
  153. break;
  154. }
  155. else right = middle - 1;
  156. middle = (left + right) / 2;
  157. }
  158. //if (left>right)
  159. //{
  160. // cout << "Элемент " << key << " не найден. \n";
  161. // output << "Элемент " << key << " не найден. \n";
  162. //}
  163. cout << "Для поиска использовали " << s << " сравнений. \n";
  164. output << "Для поиска использовали " << s << " сравнений. \n";
  165. output.close();
  166. }
  167. void main()
  168. {
  169. setlocale(LC_ALL, "rus");
  170. ifstream A("input.txt", ios::in);
  171. ofstream B("output.txt", ios::out);
  172. int n;
  173. cout << "Введите размерность массива: \n";
  174. cin >> n;
  175. int K = n;
  176. int *massive = new int[n]; // выделение динамической памяти под массив из n элементов
  177. A.close();
  178. cout << "Исходный массив: \n";
  179. readFile(massive, n);
  180. writeFile(massive, n);
  181. cout << "Удаление минимальных: \n";
  182. delete_min(massive, n);
  183. cout << "Добавление N после чётных: \n";
  184. add_n(massive, n, K);
  185. cout << "Перестановка соседних элементов: \n";
  186. change(massive, n);
  187. cout << "Поиск в неотсортированном массиве: \n";
  188. linearSearch(massive, n);
  189. cout << "Сортировка простым выбором (по возрастанию): \n";
  190. sort(massive, n);
  191. cout << "Поиск в отсортированном массиве: \n";
  192. binarySearch(massive, n);
  193.  
  194. }
Advertisement
Add Comment
Please, Sign In to add comment