Помогите разобраться с понятиями массивов, методов и процедур - C#
Формулировка задачи:
Воть хоть убей, не понимаю я массивы, методы-функции и методы-процедуры. Сессия на носу, сдавать много чего нужно.
Как можно разобраться с этими темами?Где об этом понятно, доступно написано?
Решение задачи: «Помогите разобраться с понятиями массивов, методов и процедур»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication49 { class Program { const int MIN_LENGTH = 1, MAX_LENGTH = 100, MIN_VALUE = -100, MAX_VALUE = 100;//ограничения для массива //Метод-функция для ввода целого числа+проверки границ и правильности ввода static int ReadIntNumber( string str, int left,int right) { bool ok=false; int number=MIN_VALUE; do { Console.WriteLine(str); try { number = Convert.ToInt32(Console.ReadLine()); if (number >= left && number <= right) ok = true; else { Console.WriteLine("Не верно введено число!"); ok = false; } } catch (FormatException) { Console.WriteLine("Не верно введено число!Введите целое число!"); ok = false; } catch (OverflowException) { Console.WriteLine("Не верно введено число!Переполнение!"); ok = false; } } while (!ok); return number; } //Метод-процедура для печати меню и вызова функций static void MakeMenu(int[] arr, int sizeOfArray) { int check = 0; bool sortOk = false; do { Console.WriteLine("1. Формирование массива"); Console.WriteLine("2. Печать массива"); Console.WriteLine("3. Удаление элементов из массива"); Console.WriteLine("4. Добавление элементов в массив"); Console.WriteLine("5. Перестановка элементов в массиве"); Console.WriteLine("6. Поиск элемента в массиве"); Console.WriteLine("7. Сортировка массива"); Console.WriteLine("8. Выход"); check=ReadIntNumber("",1,8); switch(check) { case 1: sizeOfArray=ReadIntNumber("Введите размер массива: ", MIN_LENGTH,MAX_LENGTH);//Вызов ф-ции для ввода целого числа+проверки границ и правильности ввода arr=MakeArray(sizeOfArray);//Выззов ф-ции для формирования массива одним из двух способов PrintArray(arr, sizeOfArray); sortOk=false;//массив не отсортирован break; case 2: PrintArray(arr, sizeOfArray);//Вызов процедуры для вывода массива на экран break; case 3: DeleteFromArray(ref arr, ref sizeOfArray);//Вызов процедуры для удаления эл-тов из массива PrintArray(arr, sizeOfArray); sortOk=false;//массив изменился break; case 4: AddToArray(ref arr, ref sizeOfArray);// Вызов процедуры для добавления элементов в массив PrintArray(arr, sizeOfArray); sortOk = false;//массив изменился break; case 5: Reverse(arr,sizeOfArray);//Вызов процедуры для перестановки эл-тов в массиве PrintArray(arr, sizeOfArray); sortOk=false;//массив изменился break; case 6: if (ExistArray(arr)) { int sr_ar = 0, index = -1, count = 0; foreach (int x in arr) { sr_ar += x; } sr_ar = sr_ar / arr.Length; Console.WriteLine("Значение искомого элемента: {0} ", sr_ar); if (!sortOk) { index = FindElem(arr, sizeOfArray, sr_ar, out count) + 1; if (index == 0) { Console.WriteLine("Элемент {0} в массиве не найден, число сравнений: {1} , \n был выполнен линейный поиск, т.к. массив не отсортирован", sr_ar, count); } else { Console.WriteLine("Элемент {0} найден в массиве на позиции {1}, число сравнений: {2} , \n был выполнен линейный поиск, т.к. массив не отсортирован", sr_ar, index, count); } } else { index = BinarySearch(arr, sizeOfArray, sr_ar, out count) + 1;//т.к. нумерация с 1 { if (index == 0) { Console.WriteLine("Элемент {0} в массиве не найден, число сравнений: {1} , \n был выполнен бинарный поиск, т.к. массив отсортирован", sr_ar, count); } else {Console.WriteLine("Элемент {0} найден в массиве на позиции {1}, число сравнений: {2} , \n был выполнен бинарный поиск, т.к. массив отсортирован", sr_ar, index, count);} } } } else Console.WriteLine("Массив пустой! Поиск невозможен!"); break; case 7: if(!sortOk) Sort(arr,sizeOfArray); sortOk=true; break; } }while(check>=1 && check<=7); } // Метод-функция для формирования массива двумя способами static int[] MakeArray(int sizeOfArray) { int[] arr = null; int check = 0; Console.WriteLine("1. С помощью ДСЧ(датчика случайных чисел)"); Console.WriteLine("2. Ввод с клавиатуры"); check = ReadIntNumber("", 1, 2); switch (check) { case 1: arr = MakeRandomArray(sizeOfArray); //Вызов ф-ции для формирования массива с помощью ДСЧ Console.WriteLine("Элементы сгенерированы"); break; case 2: arr = ReadArray(sizeOfArray);//Вызов функции для ввода массива с клавиатуры break; } Console.WriteLine("Массив сформирован"); return arr; } // Метод-функция для формирования массива с помощью ДСЧ(1 способ) static int[] MakeRandomArray(int sizeOfArray) { Random rnd = new Random(); int[] arr = new int[sizeOfArray]; for (int i = 0; i < sizeOfArray; i++) { arr[i] = rnd.Next(MIN_VALUE, MAX_VALUE); } return arr; } // Метод-функция для ввода элементов массива с клавиатуры( способ 2) static int[] ReadArray(int sizeOfArray) { int[] arr = new int[sizeOfArray]; for (int i = 0, n=1; i < sizeOfArray; i++) { Console.WriteLine("Введите элемент {0} массива из диапазона от -100 до 100", n++); arr[i] = ReadIntNumber(" ", MIN_VALUE, MAX_VALUE); } return arr; } //Метод-процедура для вывода массива на экран(печати) static void PrintArray(int[] arr, int sizeOfArr) { if (ExistArray(arr)) { foreach (int elem in arr) Console.Write(elem + " "); Console.WriteLine(); } else Console.WriteLine("Массив пустой!"); } //Метод-функция для проверки массива на пустоту static bool ExistArray(int[] arr) { if (arr == null) { return false; }//массив пустой return true;// не пустой массив } //Метод-процедура для удаления элементов с нечетными индексами static void DeleteFromArray(ref int[] arr,ref int sizeOfArr) { if (!ExistArray(arr)) { Console.WriteLine("Удаление невозможно! Массив пустой!"); return;}//Массив не меняется, можно завершить функцию if (arr.Length % 2 == 0) sizeOfArr = arr.Length / 2;// Нахождение количества элементов с четным индексом else sizeOfArr = (arr.Length + 1) / 2; int[] rez = new int[sizeOfArr]; int j = 0; for (int i = 0; j < sizeOfArr; i += 2, j++) { rez[j] = arr[i];//новый массив } arr = rez; Console.WriteLine("Удаление элементов с нечетными индексами выполнено."); } //Метод-процедура для добавления элемента с номером k в массив static void AddToArray(ref int[] arr, ref int sizeOfArr) { int indexK = ReadIntNumber("Введите индекс элемента, который желаете добавить: ",0,sizeOfArr);//Ввод индекса элемента k, проверка int elemk = ReadIntNumber("Введите значение добавляемого в массив элемента", MIN_VALUE, MAX_VALUE);//Ввод значения элемента с номером k, проверка int[] temp=new int[sizeOfArr+1];//размер увеличиваем на 1, т.к. добавляем новый элемент int counter=0; for(int i=0;i<sizeOfArr;i++) { if(i!=indexK) temp[i]=arr[counter++]; else temp[i]=elemk; } arr=temp; } //Метод-процедура для перестановки элементов в массиве(перевернуть массив) static void Reverse(int[] arr,int sizeOfArray) { if(ExistArray(arr)) { int left=0,right=sizeOfArray-1; while (left < right) { int rez = arr[left]; arr[left] = arr[right]; arr[right] = rez; left++; right--; } Console.WriteLine("Перестановка элементов выполнена.Массив перевернут."); PrintArray(arr,sizeOfArray); } else Console.WriteLine("Массив пустой! Перестановка элементов невозможна!"); } //Метод-функция для линейного поиска элемент, равного среднему арифметическому всех элементов массива static int FindElem(int[] arr, int sizeOfArray, int sr_ar, out int count) { int index = -1;// задаем начальное значение(!=индексу в массиве) count = 0; if (ExistArray(arr)) { for (int i = 0; i < sizeOfArray; i++) { count++; if (arr[i] == sr_ar) { index = i; break; } } Console.WriteLine("Поиск элемента осуществлен!=)"); } else Console.WriteLine("Массив пустой!Поиск невозможен!"); return index;//если значение по-прежнему отрицательное, то элемент в массиве не найден } //Метод-функция для бинарного поиска элемента, равного среднему арифметическому всех элементов массива static int BinarySearch(int[] arr, int sizeOfArray, int sr_ar, out int count) { int left = 0, right = sizeOfArray - 1, middle = 0; count = 0; if (ExistArray(arr)) { do { middle = (left + right) / 2; if (arr[middle] < sr_ar) left = middle + 1; else right = middle; count++; } while (left != right); Console.WriteLine("Поиск элемента осуществлен!=)"); if (sr_ar == arr[left]) return left; else return -1; } else { Console.WriteLine("Массив пустой!Поиск невозможен!"); return -1; } } //Метод-процедура для сортировки массива методом простого выбора static void Sort(int[] arr, int sizeOfArray) { if (ExistArray(arr)) { int min_elem, index_min_elem, j; for (int i = 0; i < sizeOfArray - 1; i++) { min_elem = arr[i];// поиск минимального элемента index_min_elem = i;// for (j = i + 1; j < sizeOfArray; j++) { if (arr[j] < min_elem) { min_elem = arr[j]; index_min_elem = j; } arr[index_min_elem] = arr[i];//обмен arr[i] = min_elem; } } Console.WriteLine("Сортировка выполнена: "); PrintArray(arr, sizeOfArray); } else Console.WriteLine("Сортировка не может быть выполнена! Массив пустой!"); } static void Main(string[] args) { Console.WriteLine("Программа для работы с одномерным массивом"); int sizeOfArray = 0; // int[] arr = null; MakeMenu(arr, sizeOfArray); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д