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