Слайд 1Лекция 16.
Массивы и коллекции
дисциплина «Программирование»
Козьминых Н.М.
Слайд 2Хранение группы связанных элементов данных
Козьминых Н.М.
Хранение группы связанных элементов данных
является основным требованием большинства программных приложений
Существуют два основных способа:
Массивы
Коллекции
Слайд 3Массивы
Козьминых Н.М.
Массив - структура данных, позволяющая хранить под одним именем
совокупность данных любого, но только одного какого-то типа
Удобно использовать для
создания и работы с фиксированным числом строго типизированных объектов
Требования:
все объекты одного типа;
размер массива должен быть указан при его создании;
каждый элемент массива доступен по числовому индексу.
Слайд 4Коллекции, на примере списка (List)
Козьминых Н.М.
Коллекция:
представляет собой совокупность объектов
позволяет динамическое
изменение размера
обеспечивает более быструю работу, по сравнению с массивами, например,
добавление нового элемента в начало списка и в середину, удаление элемента
Слайд 5Методы класса List
Козьминых Н.М.
Слайд 6Пример
Козьминых Н.М.
Реализовать приложение, демонстрирующее выполнение заданий при помощи массивов и
коллекций.
Задания:
Удалить последний положительный элемент
Переставить все положительные элементы в начало
Удалить все
элементы с минимальным значением
Слайд 7Форма во время проектирования
Козьминых Н.М.
Слайд 8Объявление массива и коллекции
Козьминых Н.М.
int[] arr;
List coll = new List();
Слайд 9Инициализация массива и коллекции
Козьминых Н.М.
private void btnCreate_Click(object sender, EventArgs
e) {
int t;
Random rand = new Random();
int n = Convert.ToInt32(txtN.Text);
arr = new int [n];
coll.Clear();
for (int i = 0; i < n; i++) {
t = rand.Next(-10, 10);
arr[i] = t;
coll.Add(t);
}
outputArray(grvArray1);
outputList(grvList1);
}
Слайд 10Методы вывода
Козьминых Н.М.
private void outputArray(DataGridView grv) {
grv.Rows.Clear();
grv.RowCount = 1;
grv.ColumnCount = arr.Length;
for (int i = 0; i < arr.Length; i++) {
grv.Columns[i].Name = (i + 1).ToString();
grv.Columns[i].Width = 30;
grv.Rows[0].Cells[i].Value = (arr[i]).ToString();
}
}
private void outputList(DataGridView grv) {
grv.Rows.Clear();
grv.RowCount = 1;
grv.ColumnCount = coll.Count;
for (int i = 0; i < coll.Count; i++) {
grv.Columns[i].Name = (i + 1).ToString();
grv.Columns[i].Width = 30;
grv.Rows[0].Cells[i].Value = (coll[i]).ToString();
}
}
Слайд 11Вызов решения заданий
Козьминых Н.М.
private void mnuTask1_Click(object sender, EventArgs e)
{
task1Array();
task1List();
lblTextTask.Text = "Удалить последний положительный элемент";
}
private void mnuTask2_Click(object sender, EventArgs e) {
task2Array();
task2List();
lblTextTask.Text = "Переставить все положительные элементы в начало";
}
private void mnuTast3_Click(object sender, EventArgs e) {
task3Array();
task3List();
lblTextTask.Text = "Удалить все элементы с минимальным значением";
}
Слайд 12Решение задания №1
Козьминых Н.М.
private void task1Array() {
for (int i = arr.Length -
1; i >= 0; i--)
if (arr[i] > 0) {
for (int j = i; j < arr.Length - 1; j++)
arr[j] = arr[j + 1];
Array.Resize(ref arr, arr.Length - 1);
break;
}
outputArray(grvArray2);
}
private void task1List() {
for (int i = coll.Count - 1; i >= 0; i--)
if (coll[i] > 0) {
coll.RemoveAt(i);
break;
}
outputList(grvList2);
}
Слайд 13Решение задания №1
Козьминых Н.М.
Слайд 14Решение задания №2
Козьминых Н.М.
private void task2Array() {
int p, m = 0;
for (int i = 0; i < arr.Length; i++)
if (arr[i] > 0) {
p = arr[i];
for (int j = i; j > m; j--)
arr[j] = arr[j - 1];
arr[m] = p;
m++;
}
outputArray(grvArray2);
}
private void task2List() {
int p, m = 0;
for (int i = 0; i < coll.Count; i++)
if (coll[i] > 0) {
p = coll[i];
coll.RemoveAt(i);
coll.Insert(m, p);
m++;
}
outputList(grvList2);
}
Слайд 15Решение задания №2
Козьминых Н.М.
Слайд 16Решение задания №3
Козьминых Н.М.
private void task3Array() {
int min = arr[0];
for (int i = 0; i < arr.Length; i++)
if (arr[i] < min)
min = arr[i];
for(int i = 0; i < arr.Length; i++)
if(arr[i] == min) {
for (int j = i; j < arr.Length - 1; j++)
arr[j] = arr[j + 1];
i--;
Array.Resize(ref arr, arr.Length - 1);
}
outputArray(grvArray2);
}
private void task3List() {
int p = coll.Min();
while(coll.IndexOf(p) >= 0)
coll.Remove(p);
outputList(grvList2);
}
Слайд 17Решение задания №3
Козьминых Н.М.
Слайд 18Решение задания №4
Козьминых Н.М.
private void mnuTask5_Click(object
sender, EventArgs e) {
task5Array(); task5List();
lblTextTask.Text = "Удалить последний нулевой элемент";
}
private void task5Array() {
for (int i = arr.Length - 1; i >= 0 ; i--)
if (arr[i] == 0) {
for (int j = i; j < arr.Length - 1; j++)
arr[j] = arr[j + 1];
Array.Resize(ref arr, arr.Length - 1);
break;
}
outputArray(grvArray2);
}
private void task5List() {
coll.RemoveAt(coll.LastIndexOf(0));
outputList(grvList2);
}
Слайд 19Решение задания №5
Козьминых Н.М.
private void mnuTask8_Click(object sender, EventArgs e)
{
task8Array(); task8List();
lblTextTask.Text = "Значение количества нулевых элементов вставить после максимального элемента";
}
private void task8Array() {
int k = 0;
for (int i = 0; i < arr.Length; i++)
if (arr[i] == 0)
k++;
int imax = 0;
for (int i = 0; i < arr.Length; i++)
if(arr[i] > arr[imax])
imax = i;
Array.Resize(ref arr, arr.Length + 1);
for (int j = arr.Length - 1; j > imax + 1; j--)
arr[j] = arr[j - 1];
arr[imax + 1] = k;
outputArray(grvArray2);
}
private void task8List() {
int k = 0;
int i = coll.IndexOf(0);
while (i >= 0) {
k++;
i = coll.IndexOf(0, i + 1);
}
coll.Insert(coll.IndexOf(coll.Max()) + 1, k);
outputList(grvList2);
}
Слайд 20Вопросы…
Спасибо за внимание
Козьминых Н.М.