ChameL1oN

Untitled

Dec 7th, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.90 KB | None | 0 0
  1. #include <locale.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <iomanip>
  6. #include <Windows.h>
  7.  
  8. using namespace std;
  9.  
  10. void ReadF(int *mas, int n) // читаем массив из файла, выводим на экран
  11. {
  12. ifstream input; // объявление переменной input файлового типа для чтения из файла
  13. input.open("input.txt", ios::in);
  14. cout << "Исходный массив: \n";
  15. for (int i = 0; i < n; i++)
  16. {
  17. input >> mas[i]; // читаем
  18. cout << setw(3) << mas[i];
  19. }
  20. cout << "\n";
  21. }
  22.  
  23.  
  24. void WriteF(int *mas, int n) // записываем в файл
  25. {
  26. ofstream output;
  27. output.open("output.txt", ios::app);
  28. cout << "Размер массива: " << n << "\n";
  29. for (int i = 0; i < n; i++)
  30. output << setw(3) << mas[i];
  31. for (int i = 0; i < n; i++)
  32. cout << setw(3) << mas[i];
  33. output << "\n";
  34. cout << "\n";
  35. }
  36.  
  37. int DeleteOdd(int *mas, int n) // удаляем нечетные элементы
  38. {
  39. ofstream output;
  40. output.open("output.txt", ios::app); // запись в конец файла
  41. int i, j, k = 0;
  42. for (i = 0; i < n; i++){
  43. if (mas[i] % 2 != 0)
  44. {
  45. k++;
  46. for (j = i; j < n-1; j++){
  47. mas[j] = mas[j + 1];
  48. }
  49. i--;
  50. }
  51.  
  52. }
  53. cout << "\n";
  54. cout << "Количество нечетных элементов: " << k << "\n";
  55. n -= k;
  56. WriteF(mas, n);
  57. cout << "\n";
  58. return n;
  59. }
  60.  
  61. int Insert(int *mas, int n, int k) // вставка N после элементов, равных К
  62. {
  63. ofstream output;
  64. output.open("output.txt", ios::app);
  65. int i;
  66. for (i = 0; i <= n; i++)
  67. {
  68. if (mas[i] == k)
  69. {
  70. n++;
  71. for (int j = n; j > i; j--)
  72. mas[j] = mas[j - 1];
  73. mas[i + 1] = n; // вставка N
  74. i++; // обход нового элемента
  75. }
  76. }
  77. WriteF(mas, n);
  78. cout << "\n";
  79. return n;
  80. }
  81.  
  82. void Transform(int *mas, int n)
  83. {
  84. ofstream output;
  85. output.open("output.txt", ios::app);
  86. int buf, i = 0, j = n - 1;
  87. while (i <= j)
  88. {
  89. while (mas[i] >= 0) i++;
  90. while (mas[j] < 0) j--;
  91. if (i < j)
  92. {
  93. buf = mas[i];
  94. mas[i] = mas[j];
  95. mas[j] = buf;
  96. i++;
  97. j--;
  98. }
  99. }
  100. WriteF(mas, n);
  101. cout << "\n";
  102. }
  103.  
  104. void LinearSearch(int *mas, int n) // линейный последовательный поиск
  105. {
  106. ofstream output;
  107. output.open("output.txt", ios::app);
  108. int i = 1, key, sr = 0;
  109. bool k = false;
  110. cout << "Введите число, которое нужно найти в массиве: \n";
  111. cin >> key;
  112. while (k == false)
  113. {
  114. if (mas[i] == key) k = true;
  115. i++;
  116. sr++;
  117. }
  118. if (k)
  119. {
  120. cout << "Элемент " << key << " найден. Его номер = " << i - 1 << "\n";
  121. output << "Элемент " << key << " найден. Его номер = " << i - 1 << "\n";
  122. }
  123. else
  124. {
  125. cout << "Элемент не найден. \n";
  126. output << "Элемент не найден. \n";
  127. }
  128. cout << "Кол-во сравнений = " << sr << "\n";
  129. output << "Кол-во сравнений = " << sr << "\n";
  130. }
  131.  
  132. void Sort(int *mas, int n)
  133. {
  134. ofstream output;
  135. output.open("output.txt", ios::app);
  136. for (int i = 1; i <= n; i++)
  137. for (int j = n - 1; j >= i; j--)
  138. if (mas[j] < mas[j - 1])
  139. {
  140. int buf = mas[j];
  141. mas[j] = mas[j - 1];
  142. mas[j - 1] = buf;
  143. }
  144. WriteF(mas, n);
  145. cout << "\n";
  146. }
  147.  
  148. void BinarySearch(int *mas, int n) // дихотомический (бинарный) поиск
  149. {
  150. ofstream output;
  151. output.open("output.txt", ios::app);
  152. int l = 0, r = n - 1, s, sr = 0, key, nomer = 1;
  153. bool k = false;
  154. cout << "Введите число, которое нужно найти в массиве: \n";
  155. cin >> key;
  156. for (int i = 0; i <= n; i++)
  157. if (mas[i] < key) nomer++;
  158.  
  159. do
  160. {
  161. s = (l + r) / 2; // средний элемент
  162. if (mas[s] < key) l = s + 1; // перенести левую границу
  163. else r = s; // перенести правую границу
  164. sr++;
  165. } while (l != r);
  166. if (mas[l] == key)
  167. {
  168. cout << "Элемент " << key << " найден. Его номер = " << nomer - 1 << "\n";
  169. output << "Элемент " << key << " найден. Его номер = " << nomer - 1 << "\n";
  170. }
  171. else
  172. {
  173. cout << "Элемент не найден. \n";
  174. output << "Элемент не найден. \n";
  175. }
  176. cout << "Кол-во сравнений = " << sr << "\n";
  177. output << "Кол-во сравнений = " << sr << "\n";
  178. cout << "\n";
  179. }
  180.  
  181. void main()
  182. {
  183. setlocale(LC_ALL, "rus");
  184. ifstream F; // объявление переменной input файлового типа для чтения из файла
  185. ofstream f; // для записи в файл
  186. f.open("output.txt", ios::out);
  187. int a = 0, number, K;
  188.  
  189. cout << "Введите кол-во элементов в массиве: \n";
  190. cin >> number;
  191. cout << "\n";
  192.  
  193. int *array = new int[number-1]; // выделили в динамической памяти место под массив из number элементов
  194. F.open("input.txt", ios::in);
  195.  
  196. cout << "I. ЧТЕНИЕ. \n";
  197. ReadF(array, number);
  198. cout << "\n";
  199.  
  200. cout << "II. ЗАПИСЬ В ФАЙЛ. \n";
  201. WriteF(array, number);
  202. cout << "\n";
  203.  
  204. cout << "III. УДАЛЕНИЕ. ";
  205. number = DeleteOdd(array, number);
  206.  
  207. cout << "IV. ВСТАВКА. \n";
  208. cout << "Введите число, после которого нужно вставить N: \n";
  209. cin >> K;
  210. number = Insert(array, number, K);
  211.  
  212. cout << "V. ПЕРЕСТАНОВКА. \n";
  213. Transform(array, number);
  214.  
  215. cout << "VI. ПОИСК ЭЛ-ТА В НЕОТСОРТИРОВАННОМ МАССИВЕ. \n";
  216. LinearSearch(array, number);
  217. cout << "\n";
  218.  
  219. cout << "VII. ПРОСТОЙ ОБМЕН ПО ВОЗРАСТАНИЮ. \n";
  220. Sort(array, number);
  221.  
  222. cout << "VIII. ПОИСК ЭЛ-ТА В ОТСОРТИРОВАННОМ МАССИВЕ. \n";
  223. BinarySearch(array, number);
  224. cout << "\n";
  225.  
  226.  
  227. F.close();
  228. f.close();
  229. }
Advertisement
Add Comment
Please, Sign In to add comment