- •I. Написать программу, которая подсчитывает:
- •II. Написать программу, которая определяет:
- •Практическая работа № 2
- •Практическая работа № 3
- •Практическая работа № 4
- •Практическая работа № 5
- •Практическая работа № 6
- •Практическая работа № 7
- •I. Решить следующие задачи с использованием класса Stack:
- •II. Решить следующие задачи с использованием класса Queue:
- •III. Решить задачи из задания II, используя класс ArrayList. Практическая работа № 8
- •Практическая работа № 9
- •Практическая работа № 10
- •Практическая работа № 12
Практическая работа № 7
Тема: «Классы коллекций».
Цель: рассмотреть классы коллекций, позволяющие обслуживать списки элементов, убедиться, что коллекции могут предоставлять больше функциональных возможностей, чем простые массивы, научиться работать с методами классов.
Ход работы:
Используя методические пособия еще раз рассмотрите темы: «Классы коллекций», Массивы в языке С#», «Строковый тип данных string (класс String)»
Рассмотрите примеры выполнения практической работы и выполните задания, соответствующие Вашему варианту.
Теоретическая справка:
Для работы с коллекциями необходимо подключить пространство имен: using System.Collections.
Некоторые свойства классов коллекций:
Свойства класса |
Описание |
Capacity |
Получает или задает число элементов, которое может содержать класс ArrayList (4, 8, 16 и т.д.) |
Count |
Получает число элементов, которое в действительности содержится в списке ArrayList. |
Item |
Получает или задает объект с указанным индексом. |
Класс Stack (LIFO)
В классе Stack определены следующие конструкторы:
public Stack() //создает пустой стек, начальная вместимость которого равна 10
public Stack(int capacity) // создает пустой стек, начальная вместимость которого равна capacity
Методы класса Stack |
Описание |
bool Contains(object v) |
Определяет, входит ли элемент v в состав коллекции Queuet |
Void Clear() |
Устанавливает свойство Сount равным нулю, тем самым очищая стек. |
object Peek() |
Возвращает элемент, расположенный в вершине стека, но не извлекая его из стека |
object Pop() |
Возвращает элемент, расположенный в вершине стека, и извлекает его из стека |
Void Push(object v) |
Помещает объект v в стек |
object[] ToArray() |
Возвращает массив, который содержит копии элементов вызывающего стека |
Класс Queue (FIFO)
В классе Queue определены следующие конструкторы:
public Queue() //создает пустую очередь, начальная вместимость которой равна 32
public Queue (int capacity) // создает пустую очередь, начальная вместимость которой равна capacity
public Queue (int capacity, float n) //создает пустую очередь, начальная вместимость которой равна capacity, и коэффициент роста устанавливается параметром n
Методы класса Queue |
Описание |
bool Contains (object v) |
Определяет, входит ли элемент v в состав коллекции Queuet. |
Void Сlear () |
Устанавливает свойство Count равным нулю, тем самым очищая очередь |
object Dequeue () |
Возвращает объект из начала вызывающей очереди, удаляя его из очереди |
object Peek () |
Возвращает объект из начала вызывающей очереди, не удаляя его из очереди |
Void Enqueue(object v) |
Добавляет объект v в конец очереди |
object [ ] ToArrау () |
Возвращает массив, который содержит копии элементов из вызывающей очереди |
Void TrimToSize() |
Устанавливает свойство Capacity равным значению свойства Count |
Класс ArrayList
В классе ArrayList определены следующие конструкторы:
public ArrayList() //создает пустой массив с max емкостью равной 16 элементам, при текущей размерности 0
public ArrayList(int capacity) //создает массив с заданной емкостью capacity, при текущей размерности 0
Методы класса ArrayList |
Описание |
bool Contains(Object v) |
Определяет, входит ли элемент v в состав коллекции ArrayList. |
void Clear() |
Удаляет все элементы из списка ArrayList. |
int Add(Object v) |
Добавляет объект в конец списка ArrayList. |
void AddRange (ICollection с) |
Добавляет элементы из коллекции с в конец вызывающей коллекции |
void Insert(int index, Object v) |
Вставляет элемент в список ArrayList по указанному индексу |
void Remove(Object m) |
Удаляет первое вхождение указанного объекта из списка ArrayList. |
void RemoveAt(int index) |
Удаляет элемент с указанным индексом из списка ArrayList. |
void Reverse() |
Располагает элементы вызывающей коллекции в обратном порядке |
void Sort() |
Сортирует коллекцию по возрастанию |
object [ ] ToArray () |
Возвращает массив, который содержит копии элементов вызывающего объекта |
void TrimToSize() |
Устанавливает свойство Capacity равным значению свойства Count |
Пример выполнения практической работы:
Вводится математическое выражение. Проверить баланс круглых скобок в данном выражении.
public static void Main()
{
string line=Console.ReadLine();
Stack skobki=new Stack();
bool flag=true;
//проверяем баланс скобок
for ( int i=0; i<line.Length;i++)
{
//если текущий символ открывающаяся скобка, то помещаем ее в стек
if (line[i] == '(';
skobki.Push(i);
else
if (line[i] == ')'; //если текущий символ закрывающаяся скобка, то
{
//если стек пустой, то для закрывающейся скобки не хватает парной открывающейся
if (skobki.Count == 0)
{
flag = false;
Console.WriteLine("Возможно в позиции " + i + "лишняя скобка");
}
else skobki.Pop(); //иначе извлекаем парную скобку
}
}
//если после просмотра строки стек оказался пустым, то скобки сбалансированы
if (skobki.Count == 0)
{
if (flag.Console.WriteLine("скобки сбалансированы");
}
else //иначе баланс скобок нарушен
{
Console.Write("Возможно лишняя ( скобка в позиции:");
while (skobki.Count != 0)
Console.Write("{0} ", (int.skobki.Pop());
Console.WriteLine();
}
}
Дана информация о людях (фамилия, имя, отчество, возраст, вес). Вывести на экран вначале информацию о людях младше 40 лет, а затем информацию о всех остальных.
//структура для хранения данных об одном человеке
public struct one
{
public string f;
public string i;
public string o;
public int age;
public float massa;
}
public static void Main()
{
Console.WriteLine("ВВЕДИТЕ КОЛ-ВО ЛЮДЕЙ:");
int n= Convert.ToInt32(Console.ReadLine());
Queue people = new Queue();
one a;
for(int i=0; i<n; i++) //добавление данных очередь
{
Console.WriteLine("ВВЕДИТЕ ФИО:");
a.f = Console.ReadLine();
a.i = Console.ReadLine();
a.o = Console.ReadLine();
Console.WriteLine("ВВЕДИТЕ ВОЗРАСТ:");
a.age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("ВВЕДИТЕ ВЕС:");
a.massa = Convert.ToInt32(Console.ReadLine());
people.Enqueue(a);
}
Console.WriteLine("ВОЗРАСТ МЕНЕЕ 40 ЛЕТ");
int k =0;
while (people.Count != 0) //извлекаем из очереди данные
{
a = (one.people. Dequeue();
if (a.age<40)
Console.WriteLine(“Фамилия: {0} \t имя: {1} \t отчество: {2} \t возраст: {3} \t вес: {4}”,
x.f, x.i, x.o, x.age, x.massa);
else
people.Enqueue(a);
k++.
}
Console.WriteLine("ВОЗРАСТ 40 ЛЕТ И СТАРШЕ);
while (people.Count != 0) //извлекаем из очереди данные
{
a = (one.people.Dequeue();
if (a.age>=40)
Console.WriteLine(“Фамилия: {0} \t имя: {1} \t отчество: {2} \t возраст: {3} \t вес: {4}”,
x.f, x.i, x.o, x.age, x.massa);
}
}
Дана информация о людях (фамилия, имя, отчество, возраст, вес). Вывести на экран информацию о людях.
public struct one //структура для хранения данных об одном человеке
{
public string f;
public string i;
public string o;
public int age;
public float massa;
}
public class SortByAge : IComparer //реализация стандартного интерфейса
{
int IComparer.Compare(object x, object y) //переопределение метода Compare
{
one t1 = (one.x)
one t2 = (one.y)
if (t1.age > t2.age) return 1;
if (t1.age < t2.age) return -1;
return 0;
}
}
static void ArrayPrint(string s, ArrayList a) //Вывод элементов ArrayList на экран
{
Console.WriteLine(s);
foreach (one x in a)
Console.WriteLine(“Фамилия: {0} \t имя: {1} \t отчество: {2} \t возраст: {3} \t вес: {4}”,
x.f, x.i, x.o, x.age, x.massa);
}
static void Main(string[] args)
{
Console.WriteLine("ВВЕДИТЕ КОЛ-ВО ЛЮДЕЙ:");
int n= Convert.ToInt32(Console.ReadLine());
one a;
ArrayList people = new ArrayList();
for(int i=0; i<n; i++) //добавление данных
{
Console.WriteLine("ВВЕДИТЕ ФИО:");
people.f= Console.ReadLine();
people.i= Console.ReadLine();
people.o= Console.ReadLine();
Console.WriteLine("ВВЕДИТЕ ВОЗРАСТ:" );
people.age= Convert.ToInt32(Console.ReadLine());
Console.WriteLine("ВВЕДИТЕ ВЕС:" );
people.massa= Convert.ToInt32(Console.ReadLine());
people.Add(a);
}
ArrayPrint("Исходные данные: ", people);
people.Sort(new Program.SortByAge()); //вызов сортировки
ArrayPrint("Отсортированные данные: ", people);
}
Варианты заданий:
