Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИЧ. РАБОТЫ.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.49 Mб
Скачать

Практическая работа № 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

Пример выполнения практической работы:

  1. Вводится математическое выражение. Проверить баланс круглых скобок в данном выражении.

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();

}

}

  1. Дана информация о людях (фамилия, имя, отчество, возраст, вес). Вывести на экран вначале информацию о людях младше 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);

}

}

  1. Дана информация о людях (фамилия, имя, отчество, возраст, вес). Вывести на экран информацию о людях.

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);

}

Варианты заданий: