Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.42 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Lab5
  8. {
  9. class Program
  10. {
  11. //ограничения для размера массива (длина массива, число строк, число столбцов)
  12. const int MIN_LENGTH = 1;
  13. const int MAX_LENGTH = 100;
  14. //ограничения для элементов массива
  15. const int MIN_VALUE = -100;
  16. const int MAX_VALUE = 100;
  17.  
  18. static int ReadIntNumber(string message, int left, int right) // ввод целого числа
  19. {
  20. bool ok = false;
  21. int number = MIN_VALUE;
  22. do
  23. {
  24. Console.WriteLine(message);
  25. try
  26. {
  27. string buf = Console.ReadLine();
  28. number = Convert.ToInt32(buf);// могут возникнуть исключения типа FormatException, OverflowException
  29. if (number >= left && number < right)
  30. {
  31. ok = true;
  32. }
  33. else
  34. {
  35. Console.ForegroundColor = ConsoleColor.Red;
  36. Console.WriteLine("Ошибка! Повторите ввод.");
  37. Console.ResetColor();
  38. ok = false;
  39. }
  40. }
  41. catch (FormatException)
  42. {
  43. Console.ForegroundColor = ConsoleColor.Red;
  44. Console.WriteLine("Ошибка! Повторите ввод.");
  45. Console.ResetColor();
  46. ok = false;
  47. }
  48. catch (OverflowException)
  49. {
  50. Console.ForegroundColor = ConsoleColor.Red;
  51. Console.WriteLine("Ошибка! Повторите ввод.");
  52. Console.ResetColor();
  53. ok = false;
  54. }
  55. } while (!ok);
  56. return number;
  57. }
  58. static void MainMenu()
  59. {
  60. int answer, size = 0, strings = 0, columns = 0;
  61. int[] arr = new int[size];
  62. int[,] matr = new int[strings, columns];
  63. int[][] ragg_arr = new int[strings][];
  64. do
  65. {
  66. Console.WriteLine("Выберите:");
  67. answer = ReadIntNumber("\n1.\t Работа с одномерными массивами. \n2.\t Работа с двумерными массивами. \n3.\t Работа с рваными массивами. \n4.\t Выход. ", 1, 5);
  68. switch (answer)
  69. {
  70. case 1:
  71. {
  72. MenuForArray(size, arr);
  73. break;
  74. }
  75. case 2:
  76. {
  77. MenuForMatr(strings, columns, matr);
  78. break;
  79. }
  80. case 3:
  81. {
  82. MenuForRaggedArray(strings, ragg_arr);
  83. break;
  84. }
  85. }
  86. } while (answer != 4);
  87.  
  88.  
  89. }
  90.  
  91.  
  92. //___________________________________________Одномерный массив________________________________________________________
  93.  
  94. static int[] MakeArray(int size) //для формирования массива двумя способами
  95. {
  96. int[] arr = null;
  97. int check = 0;
  98. Console.WriteLine("Выберите способ задания массива:");
  99. Console.WriteLine("\n1.\t Задать массив с помощью ДСЧ. \n2.\t Задать массив самостоятельно. \n3.\t Назад.");
  100. check = ReadIntNumber(" ", 1, 3);
  101. switch (check)
  102. {
  103. case 1:
  104. {
  105. arr = GetRandomArray(size);
  106. break;
  107. }
  108. case 2:
  109. {
  110. arr = GetArrayFromUser(size);
  111. break;
  112. }
  113. case 3:
  114. {
  115. MenuForArray(size, arr);
  116. break;
  117. }
  118. }
  119. Console.WriteLine();
  120. return arr;
  121. }
  122. static int[] GetRandomArray(int size) // массив задается с помощью ДСЧ
  123. {
  124. int[] arr = new int[size];
  125. Random rand = new Random();
  126. for (int i = 0; i < size; i++)
  127. {
  128. arr[i] = rand.Next(-100, 100);
  129. }
  130. return arr;
  131. }
  132. static int[] GetArrayFromUser(int size) // массив задаётся пользователем
  133. {
  134. int j = 0;
  135. bool OK;
  136. int[] arr = new int[size];
  137. for (int i = 0; i < size; i++)
  138. {
  139. do
  140. {
  141. Console.WriteLine("Введите элемент массива № {0} ", i + 1);
  142. OK = int.TryParse(Console.ReadLine(), out arr[i]);
  143. if (arr[i] == 0) j++;
  144. if (j == size)
  145. {
  146. Console.ForegroundColor = ConsoleColor.Red;
  147. Console.WriteLine("Внимание!\nВы создали нулевой массив");
  148. Console.ResetColor();
  149. }
  150.  
  151. if (!OK)
  152. {
  153. Console.ForegroundColor = ConsoleColor.Red;
  154. Console.WriteLine("Ошибка ввода. Повторите ввод");
  155. Console.ResetColor();
  156. }
  157. } while (!OK);
  158. }
  159. return arr;
  160. }
  161. static void PrintArray(int size, int[] arr) //вывод массива на экран
  162. {
  163. Console.ForegroundColor = ConsoleColor.Cyan;
  164. for (int i = 0; i < size; i++)
  165. Console.Write(arr[i] + " ");
  166. Console.ResetColor();
  167. Console.WriteLine();
  168. }
  169.  
  170. static void ADDK(ref int size, ref int[] arr)
  171. {
  172. int k;
  173. k = ReadIntNumber("Введите количество элементов, которое хотите добавить", MIN_VALUE, MAX_VALUE);
  174. size = size + k;
  175. int[] arrK = new int[size];
  176. int[] arrK2 = new int[size + k];
  177.  
  178. for (int i = 0; i < k; i++)
  179. {
  180. arrK[i] = ReadIntNumber("Введите элемент", MIN_VALUE, MAX_VALUE);
  181. }
  182.  
  183. for (int i = k; i < size; i++)
  184. {
  185. arrK[i] = arr[i - k];
  186. }
  187.  
  188.  
  189. for (int i = 0; i < size; i++)
  190. {
  191. arrK2[i] = arrK[i];
  192. }
  193. arr = arrK2;
  194. size = size + k;
  195. return;
  196.  
  197. }
  198.  
  199. static void MenuForArray(int size, int[] arr) // выбор способа задания массива
  200. {
  201. int answer;
  202. do
  203. {
  204. Console.WriteLine("Выберите действие:");
  205. answer = ReadIntNumber("\n1.\t Создать одномерный массив. \n2.\t Добавить k элементов в начало и конец массива. \n3.\t Назад. ", 1, 4);
  206. switch (answer)
  207. {
  208. case 1:
  209. {
  210. size = ReadIntNumber("Введите колличество элементов массива:", MIN_LENGTH, MAX_LENGTH);
  211. arr = MakeArray(size);
  212. PrintArray(size, arr);
  213. break;
  214. }
  215. case 2:
  216. {
  217. ADDK(ref size, ref arr);
  218. PrintArray(size, arr);
  219. break;
  220. }
  221. case 3:
  222. {
  223. MainMenu();
  224. break;
  225. }
  226. }
  227. } while (answer < 4);
  228.  
  229. }
  230.  
  231. //___________________________________________Двумерный массив________________________________________________________
  232.  
  233. static int[,] GetRandomMatr(int strings, int columns) //создание 2мерного массива
  234. {
  235.  
  236. Random rand = new Random();
  237. int[,] matr = new int[strings, columns];
  238. for (int i = 0; i < strings; i++)
  239. {
  240. for (int j = 0; j < columns; j++)
  241. {
  242. matr[i, j] = rand.Next(-100, 100);
  243. }
  244. }
  245.  
  246. return matr;
  247. }
  248. static int[,] GetMatrFromUser(int strings, int columns) // двумерный массив создается пользователем
  249. {
  250. int el, count = 0;
  251. Random rand = new Random();
  252. int[,] matr = new int[strings, columns];
  253. for (int i = 0; i < strings; i++)
  254. {
  255. for (int j = 0; j < columns; j++)
  256. {
  257. el = ReadIntNumber("Введите элемент", MIN_VALUE, MAX_VALUE);
  258. matr[i, j] = el;
  259. if (el == 0) count++;
  260. }
  261. }
  262. if (count == strings * columns)
  263. {
  264. Console.ForegroundColor = ConsoleColor.Red;
  265. Console.WriteLine("Вы создали нулевой массив\n Задайте его снова");
  266. Console.ResetColor();
  267. }
  268. return matr;
  269. }
  270. static int[,] MakeMatr(int strings, int columns) // 2 способа создания массива
  271. {
  272. int[,] matr = null;
  273. int check = 0;
  274. Console.WriteLine("Выберите способ задания массива:");
  275. Console.WriteLine("\n1.\t Задать массив с помощью ДСЧ. \n2.\t Задать массив самостоятельно. \n3.\t Назад.");
  276. check = ReadIntNumber(" ", 1, 3);
  277. switch (check)
  278. {
  279. case 1:
  280. {
  281. matr = GetRandomMatr(strings, columns);
  282. PrintMatr(matr, strings, columns);
  283. break;
  284. }
  285. case 2:
  286. {
  287. matr = GetMatrFromUser(strings, columns);
  288. PrintMatr(matr, strings, columns);
  289. break;
  290. }
  291. case 3:
  292. {
  293. MenuForMatr(strings, columns, matr);
  294. break;
  295. }
  296. }
  297. return matr;
  298. }
  299.  
  300. static void DeleteZeroColumns(ref int[,] matr, ref int strings, ref int columns) // удаление столбцов, содержащих 0
  301. {
  302. int zero = 0, j, el = 0, count = 0;
  303. int[,] matr2 = new int[strings, columns];
  304. for (int i = 0; i < strings; i++)
  305. {
  306. for (j = 0; j < columns; j++)
  307. {
  308. matr[i, j] = el;
  309. if (el == 0) count++;
  310. }
  311. {
  312. Console.WriteLine("В массиве нет нулей!");
  313. return;
  314. }
  315. }
  316. columns = count;
  317. int[,] temp = new int[strings, columns];
  318. for (int i = 0; i < strings; i++)
  319. {
  320. temp[i, columns] = matr2[i, columns];
  321.  
  322. }
  323. matr = temp;
  324. }
  325. static void PrintMatr(int[,] matr, int strings, int columns) // распечатать двумерный массив
  326. {
  327. for (int i = 0; i < strings; i++)
  328. {
  329. for (int j = 0; j < columns; j++)
  330. {
  331. Console.ForegroundColor = ConsoleColor.Yellow;
  332. Console.Write(" " + matr[i, j]);
  333. Console.ResetColor();
  334. }
  335. Console.WriteLine();
  336. }
  337. }
  338. static void MenuForMatr(int strings, int columns, int[,] matr) // меню
  339. {
  340. int answer;
  341. do
  342. {
  343. Console.WriteLine("Выберите действие:");
  344. answer = ReadIntNumber("\n1.\t Создать двумерный массив. \n2.\t Удалить все столбцы, в которых есть хотя бы один нулевой элемент. \n3.\t Назад. ", 1, 4);
  345. switch (answer)
  346. {
  347. case 1:
  348. {
  349. strings = ReadIntNumber("Введите количество строк: ", MIN_LENGTH, MAX_LENGTH);
  350. columns = ReadIntNumber("Введите количество столбцов: ", MIN_LENGTH, MAX_LENGTH);
  351. matr = MakeMatr(strings, columns);
  352. break;
  353. }
  354. case 2:
  355. {
  356. DeleteZeroColumns(ref matr, ref strings, ref columns);
  357. PrintMatr(matr, strings, columns);
  358. break;
  359. }
  360. case 3:
  361. {
  362. MainMenu();
  363. break;
  364. }
  365. }
  366. } while (answer < 4);
  367. }
  368.  
  369. //___________________________________________Рваный массив________________________________________________________
  370.  
  371. static int[][] GetRandomRaggedArray(int strings) // с помощью ДСЧ
  372. {
  373. int[][] ragged_array = new int[strings][]; //выделить память под массив
  374. int i, j;
  375. int columns;
  376. Random rnd = new Random();
  377.  
  378. for (i = 0; i < strings; i++)
  379. {
  380. columns = ReadIntNumber("Введите колличество столбцов в " + (i + 1) + "-й строке (длину " + (i + 1) + "-й строки):", MIN_LENGTH, MAX_LENGTH);
  381. ragged_array[i] = new int[columns];
  382. for (j = 0; j < columns; j++)
  383. ragged_array[i][j] = rnd.Next(-100, 100);
  384. }
  385.  
  386.  
  387. return ragged_array;
  388. }
  389. static int[][] GetRaggedArrayFromUser(int strings) // пользователь вводит
  390. {
  391. int[][] ragged_array = new int[strings][]; //выделить память под массив
  392. int i, j;
  393. int columns;
  394. for (i = 0; i < strings; i++)
  395. {
  396. columns = ReadIntNumber("Введите колличество столбцов в " + (i + 1) + "-й строке (длину " + (i + 1) + "-й строки):", MIN_LENGTH, MAX_LENGTH);
  397. ragged_array[i] = new int[columns];
  398. for (j = 0; j < columns; j++)
  399. ragged_array[i][j] = ReadIntNumber("Введите" + " " + (j + 1) + "-й элемент строки из диапазона от -100 до 100", MIN_VALUE, MAX_VALUE);
  400. }
  401.  
  402.  
  403. return ragged_array;
  404. }
  405. static int[][] MakeRaggedArray(int strings) // 2 способа задания массива
  406. {
  407. int[][] ragg_arr = null;
  408. int answer = 0;
  409. Console.WriteLine("Выберите способ задания массива:");
  410. Console.WriteLine("\n1.\t Задать массив с помощью ДСЧ. \n2.\t Задать массив самостоятельно. \n3.\t Назад.");
  411. answer = ReadIntNumber(" ", 1, 3);
  412. switch (answer)
  413. {
  414. case 1:
  415. {
  416. ragg_arr = GetRandomRaggedArray(strings);
  417. PrintRaggedArray(strings, ragg_arr);
  418. break;
  419. }
  420. case 2:
  421. {
  422. ragg_arr = GetRaggedArrayFromUser(strings);
  423. PrintRaggedArray(strings, ragg_arr);
  424. break;
  425. }
  426. case 3:
  427. {
  428. MenuForRaggedArray(strings, ragg_arr);
  429. break;
  430. }
  431. }
  432. return ragg_arr;
  433. }
  434. static void PrintRaggedArray(int strings, int[][] ragg_arr) // распечатать рваный массив
  435. {
  436. for (int i = 0; i < strings; i++)
  437. {
  438. foreach (int el in ragg_arr[i])
  439. {
  440. Console.ForegroundColor = ConsoleColor.Magenta;
  441. Console.Write(" " + el);
  442. Console.ResetColor();
  443. }
  444.  
  445. Console.WriteLine();
  446. }
  447. }
  448.  
  449.  
  450. static void AddString2(ref int[][] ragg_arr, ref int strings)
  451. {
  452. int element, columns, stringtoadd, ncolumns;
  453. int[][] ragg_arr2 = new int[strings][];
  454.  
  455. stringtoadd = ReadIntNumber("Выберите строку", 1, strings);
  456.  
  457. ncolumns = ReadIntNumber("Введите кол-во элементов", MIN_LENGTH, MAX_LENGTH);
  458.  
  459. int count = 0;
  460. ragg_arr2[stringtoadd] = new int[ncolumns];
  461.  
  462. for (int j = 0; j < ncolumns; j++)
  463. {
  464. element = ReadIntNumber("Введите элемент, чтобы добавить его в строку рваного массива", MIN_VALUE, MAX_VALUE);
  465. ragg_arr2[stringtoadd][j] = element;
  466. if (element == 0) count++;
  467. }
  468. if (count == ncolumns)
  469. {
  470. Console.WriteLine("Внимание! Добавлена нулевая строка. Она выведена не будет ");
  471. }
  472. else
  473. {
  474. for (int i = 0; i < strings; i++)
  475. {
  476. ragg_arr2[i] = ragg_arr[i];
  477. }
  478.  
  479. }
  480. ragg_arr2 = ragg_arr;
  481. }
  482. static void MenuForRaggedArray(int strings, int[][] ragg_arr)
  483. {
  484. int answer;
  485. do
  486. {
  487. Console.WriteLine("Выберите действие:");
  488. answer = ReadIntNumber("\n1.\t Создать рваный массив. \n2.\t Добавить строку с заданным номером. \n3.\t Назад. ", 1, 4);
  489. switch (answer)
  490. {
  491. case 1:
  492. {
  493. strings = ReadIntNumber("Введите количество строк: ", MIN_LENGTH, MAX_LENGTH);
  494. ragg_arr = MakeRaggedArray(strings);
  495. break;
  496. }
  497. case 2:
  498.  
  499. {
  500. //AddString(ragg_arr, strings);
  501. AddString2(ref ragg_arr, ref strings);
  502. PrintRaggedArray(strings, ragg_arr);
  503. break;
  504. }
  505. case 3:
  506. {
  507. MainMenu();
  508. break;
  509. }
  510. }
  511. } while (answer < 4);
  512. }
  513.  
  514. static void Main(string[] args)
  515. {
  516. MainMenu();
  517.  
  518. }
  519.  
  520. }
  521. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement