Помогите разобраться с понятиями массивов, методов и процедур - 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);
 
 
 
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы