Программирование / Заочники / Инфорамтика и программирование / Методичка (1 сем) / Урок 8 - Массивы
.pdf
Урок 8: Массивы.
Основная цель урока.
1.Изучить основные принципы работы с массивами.
2.Продолжить изучение работы с циклами.
3.Продолжить изучение методов, функций и процедур.
.
Краткая справка.
Массив – именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. Нумерация массивов всегда начинается с нулевого элемента.
Синтаксис объявления одномерного массива:
ИмяТипа[] ИмяПеременной;
Установка размера массива:
ИмяПеременной = new ИмяТипа[Размер];
Изменение элемента массива:
ИмяПеременной[ИндексЭлемента] = НовоеЗначение;
Пример.
int[] a;
a = new int[3]; a[0] = 10; a[1] = 5;
a[2] = -3;
a[3] = 7;//ОШИБКА! элемент с индексом 3 не существует
Список основных методов и свойств массивов.
Свойство Описание
Length Длина (размер) массива. Свойство предназначено только для
чтения.
Метод Описание
|
Max |
|
Возвращает элемент с максимальным значением |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Min |
|
Возвращает элемент с минимальным значением |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
||
|
Sum |
|
Возвращает сумму всех элементов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
||
|
Average |
|
Возвращает среднее значение всех элементов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
||
|
Clone |
|
Создаёт копию заданного массива |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
||
|
GetLength |
|
Возвращает размер заданного измерения массива |
|
|
|
|
|
|
|
|
|
|
|
Статическая инициализация массива.
Статическая инициализация массива в коде выглядит следующим образом:
int[] A = {1, -3, 7, 33, 2, 3, 47, -1};
Размер массива в этом случае определяется автоматически по количеству создаваемых элементов. В данном примере размер массива равен 8 (т.е. свойство
Length равно 8). Если необходимо создать массив, размер которого не определён заранее, можно воспользоваться следующим приёмом:
int n = Convert.ToInt32(Console.ReadLine());
double[] A = new double[n];
Здесь создаётся массив А, состоящий из n элементов, число n задаётся пользователем. Если после создания массива заданного размера возникла необходимость переопределить его размер, например добавить несколько новых элементов – можно воспользоваться методом Resize класса Array.
Array.Resize(ref A,n+5);
Здесь мы переопределяем размер массива А, его новый размер n+5. Если n+5
будет меньше старого размера массива, часть элементов массива будет удалена.
Если n+5, больше старого размера массива будут добавлены новые нулевые элементы (или пустые строки для string-массива). Так можно переопределять только одномерные массивы.
Двумерные массивы.
Для решения некоторых задач удобнее использовать двумерные (трёхмерые и.т.д.) массивы. Массивы, которые имеют не один индекс, а несколько являются
многомерными. Визуально одномерные массивы можно представить в виде вектора. Двумерные массивы – в виде прямоугольной таблицы. Трехмерные массивы – в виде трехмерного куба (или прямоугольного параллелепипеда).
Пример двумерного массива 2x2.
|
0 |
1 |
|
|
|
|
|
|
|
|
|
0 |
11 |
22 |
|
|
|
|
|
|
1 |
33 |
44 |
|
|
|
|
|
|
int[,] A = new int[2,2]; A[0, 0] = 11;
A[0, 1] = 22;
A[1, 0] = 33;
A[1, 1] = 44;
Типизированные списки (класс List).
Класс List позволяет создавать списки содержащие набор переменных заданного типа. Такой список можно сравнить с одномерным массивом.
List<double> lst = new List<double>(); lst.Add(10); //10
lst.Add(100);//10, 100 lst.Add(300);//10, 100,300
lst.Remove(100);//10, 300
Console.WriteLine(lst[1]); //вывести 2-ой элемент, т.е. 300
Иногда удобнее использовать списки, благодаря |
простым операциям |
добавления/ удаления элементов.
Цикл foreach для перебора коллекций.
Существует особый тип цикла foreach, он используется для прибора всех значений в списке/массиве. Например, задан массив А.
int[] A = { 3, 4, 7, 33, 2, 3, 47 };
Для вывода в консоль всех элементов массива можно воспользоваться обычным циклом for.
for (int i = 0; i < A.Length; i++)
{
Console.WriteLine(A[i]);
}
Или же циклом foreach.
foreach (var n in A)
{
Console.WriteLine(n); //т.е. n здесь имеет такое же значение, // что и A[i] в предыдущем цикле
}
Переменную n внутри цикла foreach менять нельзя, т.е. этот цикл позволяет перебрать все элементы массива\списка, но не позволяет изменить их.
Учебное задание 1.10.
Создать приложение для вычисления максимального и среднего арифметического значения из списка чисел вводимых пользователем.
.
Технология выполнения учебного задания 1.10.
Шаг 1. Создайте новый проект консольного приложения, назовите его Lab1_10.
Шаг 2. Создадим (объявим) массив и инициализируем его. При инициализации мы должны указать количество элементов равное 0, т.к. пользователь пока ещё не ввёл ни одного числа. Несмотря на то, что при такой инициализации массив не будет содержать ни одного элемента, он будет инициализирован и его размер можно будет переопределить с помощью метода Array.Resize (листинг 1).
static void Main(string[] args)
{
//объявляем массив Numbers int[] Numbers;
//инициализируем массив
Numbers = new int[0];
}
Листинг 1.
Шаг 3. Следующий шаг – заполнение массива пользователем. Размер массива заранее не известен, поэтому после ввода нового числа мы будем переопределять размер массива (листинг 2).
static void Main(string[] args)
{
//объявляем массив Numbers int[] Numbers;
//инициализируем массив
Numbers = new int[0];
do
{ // начало цикла
Console.WriteLine("Введите число или q для завершения:"); string userInput = Console.ReadLine();
// если введено q - звершаем цикл if (userInput == "q") break;
int userNum = Convert.ToInt32(userInput); // увеличиваем размер массива на 1
Array.Resize(ref Numbers, Numbers.Length + 1);
//последнему элементу массива
//присваеваем userNum Numbers[Numbers.Length - 1] = userNum;
}while (true); // конец цикла
}
Листинг 2.
Шаг 4. Теперь нужно найти максимальный элемент в массиве. Для нахождения максимального элемента не будем использовать вспомогательные методы, т.к. в
других языках программирования их может не оказаться.
Чтобы найти максимальный элемент массива объявим вспомогательную переменную (MaxElement), которая будет хранить текущий максимальный элемент.
Т.к. максимальный элемент нам не известен, то сначала будем считать, что максимальный элемент – это нулевой элемент массива. Далее, в цикле перебираем все оставшиеся элементы [1; Numbers.Length). Если оказывается, что текущий i-ый элемент массива больше MaxElement-а, присваиваем переменой MaxElement новое максимальное значение. (листинг 2).
} while (true); // конец цикла
//пусть 0-ой элемент считается максимальным int MaxElement = Numbers[0];
//перебираем все элементы массива с первого элемента по последний for (int i = 1; i < Numbers.Length; i++)
{
//если текущий элемент массива больше MaxElement
if (Numbers[i] > MaxElement)
{
// заменяем MaxElement новым максимальным элементом
MaxElement = Numbers[i];
}
}
Console.WriteLine("Вы ввели " + Numbers.Length.ToString() + " чисел.");
Console.WriteLine("Максимальный элемент массива равен " + MaxElement.ToString());
Console.ReadKey();
}
Листинг 3.
Шаг 5. Запустите программу, нажав клавишу F5. Проверьте работоспособность
прогарммы.
Контрольные вопросы.
1.Что такое массив?
2.Чем отличается одномерный массив от двумерного?
3.Как можно перечислить все элементы массива?
4.Как можно определить размер массива?
5.Каким образом можно объявить одномерный целочисленный массив из 10 элементов?
6.Как можно переопределить размер массива ?
Самостоятельное задание 1.10.
Усовершенствовать учебное задание следующим образом:
∙Добавить вывод минимального значения
∙Добавить вывод среднего арифметического значения
∙Если пользователь не ввёл ни одного значения (сразу же нажал q),
программа должна завершать свою работу без ошибки.
