Практическая работа №43, 44, 45
Название практической работы: создание проектов с использованием коллекций
Цель работы: 1) научиться использовать встроенные коллекции в своих проектах;
2) получить навыки использования коллекции List при написании пользовательских программ.
знания (актуализация)
· понятие коллекции;
умения:
· создавать проекты для работы с коллекциями.
Теоретический материал
В С# под коллекцией понимается некоторая группа объектов. Коллекции упрощают реализацию многих задач программирования, предлагая уже готовые решения для построения структур данных. Все коллекции разработаны на основе четко определенных интерфейсов, поэтому стандартизируют способ обработки группы объектов.
Коллекции общего назначения определены в пространстве имен System.Collection и реализуют такие структуры данных, как стеки, очереди, динамические массивы, словари (хеш-таблицы, предназначенные для хранения пар ключ/значение), отсортированный список для хранения пар ключ/значение. Коллекции общего назначения работают с данными типа object, поэтому их можно использовать для хранения данных любого типа.
Говоря об использовании коллекций, нельзя не сказать о массивах. В С# стандартные массивы имеют фиксированную длину, которая не может измениться во время выполнения программы. Класс List предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться.
Примерработы с коллекцией
Работа со списком, содержащем объекты класса сhel
Ход работы
1. Создайте проект, позволяющий решать следующие задачи с использованием коллекции List:
Необходимо реализовать простейший каталог музыкальных компакт-дисков, который позволяет: - добавлять и удалять диски; - добавлять и удалять песни; - просматривать содержимое целого каталога и каждого диска в отдельности; - осуществлять поиск всех записей заданного исполнителя по всему каталогу. | |
Есть список. Необходимо получить из него другой список (отсортировать элементы в другом порядке). Например: x(1),x(2),...,x(n) => x(1), x(n-1), x(2), x(n-2)... | |
Ввести N элементов c клавиатуры, учитывая, что максимальный (минимальный) элемент в массиве задан один раз. Вставить число «0» перед максимальным (минимальным) элементом. | |
Задать случайным образом N элементов числового списка, вставить перед последним элементом, большим К, элемент, равный среднему арифметическому элементов списка. | |
Сформировать массив из n элементов с помощью датчика случайных чисел (диапазон для случайных чисел подберите самостоятельно). Выполнить: - удаление четных элементов из массива, - добавление К элементов (также случайных числе) в массив, - перестановку элементов в массиве: элементы, кратные трем, переместить в начало массива, остальные – в конец, - поиск первого нечетного элемента массиве, кроме того: определить количество сравнений, необходимых для поиска нужного элемента, - сортировку массива методом пузырька (простым выбором). | |
Дан список A размера N и целое число K (1 ≤ K ≤ 4, K < N ). Осуществить циклический сдвиг элементов списка вправо на K позиций (при этом A1перейдет в AK+1, A2— в AK+2, . . ., AN— в AK). | |
Дан список размера N и целые числа K и L (1 ≤ K < L ≤ N ). Удалить из списка элементы с номерами от K до L включительно и вывести размер полученного списка и его содержимое. | |
Дан целочисленный список размера N. Удалить из него все одинаковые элементы, оставив их первые (последние) вхождения. | |
Дан список размера N. Перед каждым положительным элементом массива вставить элемент с нулевым значением. | |
Дан список A размера N (≤ 6). Упорядочить его по возрастанию методом сортировки простыми вставками: сравнить элементы A1 и A2 и, при необходимости меняя их местами, добиться того, чтобы они оказались упорядоченными по возрастанию; затем обратиться к элементу A3 и переместить его в левую (уже упорядоченную) часть массива, сохранив ее упорядоченность; повторить этот процесс для остальных элементов, выводя содержимое массива после обработки каждого элемента (от 2- го до N -го). | |
Дан список A размера N. Не изменяя данный список, вывести номера его элементов в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. Использовать метод «пузырьковой» сортировки, модифицировав его следующим образом: - создать вспомогательный целочисленный массив номеров I, заполнив его числами от 1 до N ; - просматривать список A, сравнивая пары элементов списка A с номерами I 1и I 2, I 2и I 3, . . . и меняя местами соответствующие элементы списка I, если левый элемент пары больше правого. Повторив описанную процедуру просмотра N − 1 раз, получим в списке I требуемую последовательность номеров. | |
Дан целочисленный список A размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии — количество этих элементов (длина серии может быть равна 1). Сформировать два новых целочисленных списка B и C одинакового размера, записав в список B длины всех серий исходного списка, а в список C — значения элементов, образующих эти серии. |
2. Ответьте на контрольные вопросы:
- Для чего нужны коллекции?
- Какие виды коллекций вы знаете?
- Назовите метод коллекции List, предназначенный для сортировки элементов массива.
- Какая сортировка используется в коллекции List?
3. Оформите и сдайте отчет преподавателю.
Практическая работа №46
Название практической работы:использование делегатов при написании программ
Цель работы: 1) ознакомиться с правилами работы с делегатами;
2) освоить приемы работы с делегатами
знания (актуализация)
· виды спецификаторов доступа;
· понятие делегата;
умения:
· создавать проекты для работы с делегатами.
Теоретический материал
Делегат — это объект, который может ссылаться на метод. Таким образом, создавая делегат, вы по сути создаете объект, который может содержать ссылку на метод. Более того, этот метод можно вызвать посредством соответствующей ссылки. Важно понимать, что во время выполнения программы один и тот же делегат можно использовать для вызова различных методов, просто заменив метод, на который ссылается этот делегат. Таким образом, метод, который будет вызван делегатом, определяется не в период компиляции программы, а во время ее работы. В этом и состоит достоинство делегата.
Общая форма объявления делегата имеет следующий вид:
delegate тип_возврата имя {список_параметров);
где тип_возврата представляет собой тип значений, возвращаемых методами, которые этот делегат будет вызывать;
имя - определяет имя делегата
список_параметров – это параметры, принимаемые методами;
Делегат может вызывать только такие методы, у которых тип возвращаемого значения и список параметров (т.е. его сигнатура) совпадают с соответствующими элементами объявления делегата.
Делегат может вызывать либо метод экземпляра класса, связанный с объектом, или статический метод, связанный с классом.
Чтобы увидеть делегат в действии, начнем со следующего простого примера:
// Простой пример использования делегата
using System;
// Объявляем делегат
delegate string strMod(string stx);
class DelegateTest {
// Метод заменяет пробелы дефисами
static string replaceSpaces(string a)
{
listBox1.Items.Add("Замена пробелов дефисами.");
return a.Replace(' ', '-') ;
}
// Метод удаляет пробелы.
static string removeSpaces(string a)
{
string temp = "";
int i;
listBox1.Items.Add ("Удаление пробелов.");
for(i=0; i < a.Length; i++)
if (a[i] != ‘ ‘) temp += a[i] ;
return temp;
}
// Метод реверсирует строку,
static string reverse(string a)
{
string temp = "";
int i, j;
listBox1.Items.Add ("Реверсирование строки.");
for(j=0, i=a.Length-l; i >= 0; i—-, j++)
temp += a[i];
return temp;
}
Public static void Main()
{
// Создание делегата
strMod strOp = new strMod(replaceSpaces);
string str;
// Вызываем методы посредством делегата
str = strОp("ЭTO простой тест.");
listBox1.Items.Add ("Результирующая строка: " + str);
listBox1.Items.Add ();
strOp = new strMod(removeSpaces);
str = strOp("Это простой тест.");
listBox1.Items.Add ("Результирующая строка: " + str);
listBox1.Items.Add ();
strOp = new strMod(reverse);
str = strOp("Это простой тест.");
listBox1.Items.Add ("Результирующая строка: " + str);
}
Ход работы
1. Введите разобранный выше код и добавьте самостоятельно хотя бы один-два метода.
2. Ответьте на контрольные вопросы:
- Что такое делегат?
- Зачем нам нужны делегаты?
- Опишите план работы с делегатами
- Опишите тонкости использования делегатов
3. Оформите отчет и сдайте преподавателю.
Практическая работа №47
Название практической работы: использование событий при написании программ
Цель работы: 1) ознакомиться с правилами работы с событиями;
2) освоить приемы работы с событиями
знания (актуализация)
· понятие делегата;
· правила работы с делегатом;
· понятие события;
умения:
· создавать проекты для работы с событиями.
Теоретический материал
На основе делегатов построено еще одно важное средство С#: событие (event). Событие — это по сути автоматическое уведомление о выполнении некоторого действия.
События работают следующим образом. Объект, которому необходима информация о некотором событии, регистрирует обработчик для этого события. Когда ожидаемое событие происходит, вызываются все зарегистрированные обработчики. Причем, обработчики событий представляются делегатами.
Наиболее распространенная форма объявления события имеет следующий вид:
event событийный_делегат объект;
где событийный_делегат означает имя делегата, используемого для поддержки объявляемого события,
объект — это имя создаваемого событийного объекта.
Пример создания и использования события.
// Демонстрация использования простейшего события
using System;
// Объявляем делегат для события
delegate void MyEventHandler();
// Объявляем класс события,
class MyEvent
{
public event MyEventHandler SomeEvent;
public void OnSomeEvent()
{
if(SomeEvent != null)
SomeEvent();
}
}
class EventDemo
{
static void handler()
{
Console.WriteLine("Произошло событие.");
}
public static void Main()
{
MyEvent evt = new MyEvent();
evt.SomeEvent += new MyEventHandler(handler);
evt.OnSomeEvent();
}
}
Ход работы
1. Введите предложенный код и разберитесь, как он работает. Снабдите программный код всеми необходимыми комментариями.
2. Создайте самостоятельно проект, подобный предложенному.
3. Ответьте на контрольные вопросы:
- Что такое событие?
- Опишите правила создания и использования событий.
4. Оформите отчет и сдайте его преподавателю.
СПИСОК ЛИТЕРАТУРЫ
Основная литература
1. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. /И.Г. Семакин, А.П. Шестаков: Учебник. – М.: ОИЦ «Академия», 2012 г. – 400 с.
Дополнительные источники:
2. Шилдт, Г. С# 4.0: полное руководство: Пер. с англ. / Г. Шилдт. – М.: ООО «И.Д. Вильямс», 2011. – 1056 с. : ил.
3. Фленов, М.Е. Библия С# / М.Е. Фленов. – СПб: БХВ - Петербург, 2011. - 560 с. : ил.
4. Абрамян, М.Э. Visual C# на примерах. / М.Э. Абрамян - СПб: БХВ - Петербург, 2012. - 496 с. : ил.
5. Культин, Н.Б. Microsoft Visual C# в задачах и примерах. / Н.Б. Культин. - СПб: БХВ - Петербург, 2011. - 320 с. : ил.
6. Павловская, Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. / Т.А. Павловская. - СПб: Питер, 2011. - 432 с. : ил.
7. Петцольд, Ч. Программирование в тональности C#. Пер. с англ. / Ч. Петцольд. – М. Издательско-торговый дом Русская редакция, 2004. - 512 с. : ил.
8. Петцольд, Ч. Программирование с использованием WindowsForms. Мастер-класс. Пер. с англ. / Ч. Петцольд. – М. Русская редакция; СПб: Питер, 2011. - 432 с. : ил.
9. Огнева, М.В. Разработка консольных приложений на языке С# / М.В. Огнева. – СПб: издательство СГУ, 2009. – 300с.
10. Абрамян, М. Э. 1000 задач по программированию. Часть I: Скалярные типы данных, управляющие операторы, процедуры и функции. / М.Э Абрамян. – Ростов н/Д: УПЛ РГУ, 2004. – 43 с.
11. Абрамян, М. Э. 1000 задач по программированию. Часть II: Минимумы и максимумы, одномерные и двумерные массивы, символы и строки, двоичные файлы. / М.Э Абрамян. – Ростов н/Д: УПЛ РГУ, 2004. – 42 с.
12. Златопольский, Д.М. Сборник задач по программированию. 2-е изд., перераб. и доп. / Д.М. Златопольский. – СПб.: БХВ-Петербург, 2007. – 240 с.: ил.
Интернет - ресурсы
13. www.ict.equ.ru/catalog - ИК Портал - Интернет – ресурсы;
14. www.intuit.ru/departament - Интернет университет - информационных технологий;
Приложение 1
Министерство образования и науки Челябинской области
Государственное бюджетное образовательное учреждение
среднего профессионального образования
(среднее специальное учебное заведение)
«Южно-Уральский государственный технический колледж»
ОТЧЕТ
по выполнению практических работ
по учебной дисциплине