Контрольная работа - Лабораторные работы
ЛАБОРАТОРНЫЕ РАБОТЫ ЛАБОРАТОРНАЯ РАБОТА 1. ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В ЭВМ И ОПЕРАЦИИ НАД НИМИ В ЯЗЫКЕ C# Цель: изучение возможностей MS Visual Studio для создания консольного приложения и программирования на объектноориентированном языке C#.
Задание
1. Согласно варианту выбрать из табл. 1.6 целые числа I1, I2, I3 и I4.
2. Составить программу на языке С#, которая выполняет действия, описанные в п. а) – ж). Результаты каждого действия выводить на консоль в десятеричном и шестнадцатеричном формате:
а) объявить переменные byte1 типа byte и byte2 типа sbyte и инициализировать их значениями I1 и I2 соответственно;
б) объявить переменные word1 и word2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата байта в формат слова, и выполнить операции присваивания word1 = byte1 и word2 = byte2;
в) инициализировать переменные word1 и word2 значениями I3 и I4 соответственно;
г) объявить переменные dword1 и dword2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата слова в формат двойного слова, и выполнить операции присваивания dword1 = word1 и dword2 = word2;
д) выполнить операции присваивания byte1 = word1 и byte2 = dword1; объяснить полученные результаты;
е) объявить переменную типа char и инициализировать ее значением С из табл. 1.6;
ж) с использованием неявного преобразования типов получить код символа С; использовать ранее объявленную переменную формата слова.
3. Отладить программу, получить и проанализировать результаты ее выполнения. Убедиться в корректности представления чисел в шестнадцатеричном формате.
4. Сделать выводы по лабораторной работе
Контрольные вопросы и задания
1. Какие языки программирования поддерживает Microsoft Visual Studio?
2. Как создать проект в MS Visual Studio?
3. Что такое консольное приложение?
4. Что такое пространство имен?
5. Каково назначение метода Main()?
6. Перечислить стандартные классы, задействованные в программе, а также их методы.
7. Пояснить смысл предложения C#: System.Console.WriteLine(…)
8. Как при помощи среды откомпилировать и выполнить проект?
9. В чем отличие явного и неявного преобразования типов?
Контрольные вопросы и задания
1. Какие виды операторов предусмотрены в языке C#?
2. В чем принципиальные отличия тринарного условного оператора от оператора if…else? 3
. Как работает оператор обработки исключений?
4. Какие классы исключений поддерживает язык C#?
5. Какие исключения выбрасываются при выполнеии арифметических и логических операций?
6. В каких случаях следует выполнять обработку исключений?
7. Предложите несколько способов вычисления выражения 1/x 4 . Какие исключения могут быть при этом обработаны?
ЛАБОРАТОРНАЯ РАБОТА 3.
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ
Цель: изучение возможностей C# для программирования алгоритмов циклической структуры.
Задание
Составить программу на языке C#, реализующую операции вычисления функции в соответствии с индивидуальным заданием из табл. 3.2.
1. Вычисления в цикле заданного вида значений заданной функции y выполнить для переменной x, изменяющейся в заданном интервале [x1, x2] с заданным шагом x, обрабатывая при этом возможные исключительные ситуации, как в предыдущей лабораторной работе.
2. В теле цикла организовать поиск максимального y_max и минимального y_min значений функции y, а также номеров шагов n_max и n_min, на которых достигаются эти значения.
3. Вычисленные значения вывести на консоль в виде таблицы такого формата: | № шага | x | y | y_min | n_min | y_max | n_max |
4. Выполнить ручной просчет для значения аргумента на третьем шаге и сравнить его с результатами выполнения программы.
5. Сделать вывод.
Контрольные вопросы и задания
1. Опишите структуру оператора ветвления.
2. Каков синтаксис условного оператора?
3. Какова структура оператора множественного выбора?
4. Назовите ограничения на использование оператора множественного выбора.
5. Перечислите преимущества и недостатки оператора множественного выбора.
6. Назовите виды циклов, отличия и особенности использования.
7. Что такое логическое выражение?
8. Перечислите правила составления сложных логических выражений.
9. Как работает оператор ветвления?
10. Как работает оператор множественного выбора?
11. Что такое тело цикла?
12. Что такое параметрический цикл?
13. Какова структура заголовка параметрического цикла?
14. Что такое итерация?
15. Назовите оператор досрочного выхода из цикла. В чем особенности его использования?
Контрольные вопросы и задания
1. Что такое массив?
2. Как выполняется объявление массива в С#?
3. Опишите процедуру создания массива.
4. Какими значениями по умолчанию инициализируются элементы вновь созданного массива?
5. Назовите правила обращения к элементам массива.
6. Назовите способы инициализации элементов массива.
7. Опишите структуру инициализации элементов массива с использованием параметрического цикла.
8. Опишите структуру цикла foreach, его назначение и отличия от параметрического цикла for.
9. Назовите отличительные особенности обработки массивов в циклах for и foreach.
10. Как в языке С# осуществить генерацию случайного целого числа в диапазоне [a, b]?
11. Как в языке С# произвести инициализацию целочисленной переменной значением, введенным с клавиатуры?
12. Как выполнить поиск максимального по модулю элемента массива?
13. Как определить количество четных элементов массива?
14. Как определить количество четных элементов массива?
ЛАБОРАТОРНАЯ РАБОТА 5.
АЛГОРИТМИЗАЦИЯ ОБРАБОТКИ СИМВОЛЬНЫХ СТРОК. ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ
Цель: освоение принципов составления и тестирования алгоритмов и программ обработки символьных строк с использованием регулярных выражений и функций пользователя.
Задание
1. Проанализировать индивидуальное задание из табл. 5.8 и определить сигнатуру функции для решения заданной задачи (идентификатор функции, идентификаторы и типы данных аргументов, тип возвращаемых данных).
2. Разработать код тела функции на языке C#, которая реализует заданную задачу по обработке строк, выводит результат обработки на консоль и возвращает требуемые результаты. Решить задачу с использованием и без использования регулярных выражений. Обеспечить контроль исключительных ситуаций.
3. Разработать код метода Main(), который содержит: вывод инструкций для консольного ввода исходных данных для заданной задачи; ввод исходных данных с клавиатуры; вызов разработанной пользовательской функции; вывод результата решения задачи.
4. Протестировать обработку контролируемых исключений.
5. Выполнить ручной просчет.
Варианты индивидуальных заданий по обработке строк Номер варианта Задание 1 Заданная строка состоит из строчных букв и включает несколько предложений, заканчивающихся точкой. Первые буквы предложений, начиная с n-го, сделать прописными. В основную программу вернуть количество преобразованных предложений. Если в строке нет n-го предложения (возвращенное значение – 0), то вывести соответствующее сообщение 2 Выделить из строки заданное количество слов, начиная со слова с номером n. В основную программу вернуть количество выделенных слов. Если в строке нет n-го слова (возвращенное значение – 0), то вывести соответствующее сообщение 3 Исходная строка содержит список русских фамилий мужского рода (не более 10) через запятую. Преобразовать список таким 77 Номер варианта Задание образом, чтобы вначале шли все фамилии с окончанием -ев, затем фамилии с окончанием -ин, затем фамилии с окончанием -ов и далее все остальные фамилии. Относительная последовательность фамилий в каждой группе должна быть та же, что и в исходном списке. В основную программу вернуть четырехзначное натуральное число, каждый разряд которого равен количеству фамилий в соответствующей группе 4 Перевернуть в строке все слова. (Например: «Жили были дед и баба» – «илиЖ илиб дед и абаб»). В основную программу вернуть количество слов в строке 5 Определить длину n-го слова и все слова, которые длиннее nго слова, преобразовать в верхний регистр. Если n-е слово самое длинное, то вывести сообщение. В основную программу вернуть длину n-го слова. Если в строке нет n-го слова (возвращенное значение – 0), то вывести сообщение 6 Ввести текст, содержащий только символы латинского алфавита и знаки препинания (: ; , .). Подсчитать статистику употребления в тексте следующих символов: “a, b, c, d, e, f, g”. Вывести на экран диаграмму, отображающую статистику по каждой из заданных букв. Например: A| aaaaaaaaa B| bb C| D|ddddd … В основную программу вернуть количество обнаруженных в строке знаков препинания 7 Найти в строке первый символ, который не входит в другую заданную строку, и вывести его на консоль. В основную программу вернуть позицию этого символа 8 В каждом слове строки заданную букву в нечетной позиции удалить, а в четной позиции заменить символом подчеркивания _. В основную программу вернуть разность количеств сделанных удалений и замен 9 Заменить в строке заданный символ на символ * n раз, начиная с заданной позиции. В основную программу вернуть фактическое количество замен 10 Удалить из строки n-е слово. В основную программу вернуть длину удаленного слова либо 0, если n-е слово не найдено 78 Номер варианта Задание 11 Разбить строку на две части: до и после первого вхождения заданного символа. В основную программу вернуть позицию заданного символа либо 0, если такой символ не найден 12 Найти в строке два одинаковых фрагмента (не включающих в себя пробелы) длиной более 5 символов и возвратить индекс начала первого из них (т.е. для «aaaaaabcdefgxxxxxxbcdefgwwwww» вернуть n = 6 – индекс начала «bcdefg») 13 Переписать символы строки в обратном порядке. В итоговой строке удалить все слова, начинающиеся с буквы А 14 Переписать строку. Если в строке обнаруживается число, то вместо него переписать в выходную строку соответствующее по счету слово из входной строки (например, «aaa bb1bb cc2cc» преобразуется в «aaa bbaaabb ccbb1bbcc») 15 Переписать в выходную строку слова из входной строки в порядке возрастания их длины 16 Заменить в строке все множественные вхождения заданного символа одним 17 Нечетные слова в строке заменить наборами звездочек соответствующей длины 18 Заменить в строке все целые числа соответствующим повторением следующего за ними символа (например, «abc5xacb15y» – «abcxxxxxacbyyyyyyyyyyyyyyy») 19 Удалить из строки все буквы А независимо от регистра, а также знаки препинания 20 Выделить из заданной строки подстроку заданной длины, начиная с заданной буквы (символа). Если такого символа нет, то выводить сообщение 21 Оставить в строке фрагменты, симметричные центрального символа, длиной более 5 символов (например, «dcbabcd»), остальные символы заменить на пробелы 22 Довести длину строки до заданной, вставляя пробелы между словами 23 В списке URL найти такие, которые относятся не к российскому сегменту Интернета и исключить их из списка 24 В пофамильном списке работников сделать первые буквы всех фамилий прописными. Вернуть число фамилий, начинающихся с заданной буквы, введенной с клавиатуры 25 Разредить строку пробелами на заданную с клавиатуры ширину
ЛАБОРАТОРНАЯ РАБОТА 6.
РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ
Цель: изучение и освоение способов использования текстовых файлов для длительного хранения данных; закрепление навыков составления и тестирования алгоритмов и программ, использующих потоки файлового ввода-вывода.
Задание 1. Создать текстовый документ и ввести в него несколько строк (не менее 5), соответствующих решению индивидуальной задачи по обработке строк из лабораторной работы 5 (табл. 5.8). Файл сохранить в формате UTF-8 с заданным именем и расширением (табл. 6.1). 2. Модифицировать программу, разработанную при выполнении лабораторной работы 5, так, чтобы исходные строки для обработки считывались из текстового файла исходных данных, созданного при выполнении п. 1 этого задания, а результаты обработки выводились в текстовый файл результатов с заданным именем и расширением (см. табл. 6.1). При этом должны иметь место следующие особенности: чтение исходных данных из файла выполнять в методе Main(); запись результатов обработки в файл выполнять в пользовательской функции; при выводе в файл следовать инструкции (см. табл. 6.1); осуществлять контроль исключительных ситуаций при работе с файлами. 3. Протестировать обработку контролируемых исключений.
Варианты индивидуальных заданий к лабораторной работе 6 Номер варианта Файл исходных данных Файл результатов Инструкция по выводу результатов в файл 1 data.dat lab6.txt В конец файла с новой строки добавить общее количество преобразованных предложений 2 lab6.dat lab6.res В начале файла в отдельной строке вывести заданный номер слова n В конец файла результатов с новой строки добавить общее количество выделенных слов 3 lab6.in lab6.out В файле результатов четырехзначное натуральное число выводить с новой 89 Номер варианта Файл исходных данных Файл результатов Инструкция по выводу результатов в файл строки, списки отделить друг от друга пустой строкой 4 lab6.d1 lab6.d2 В конец файла с новой строки добавить общее количество слов 5 lab6_in.txt lab6_out.txt В начале файла в отдельной строке вывести заданный номер слова n Обработанные строки выводить сплошным текстом (без перехода на новую строку), разделяя их рассчитанным числовым показателем 6 lab6_d.txt lab6_r.txt Диаграммы в файле результатов пронумеровать в соответствии с порядковыми номерами строк исходного файла. Номер выводить в отдельной строке перед диаграммой в следующем формате: Диаграмма для предложения # 7 lab6.str lab6.lft Обнаруженные символы выводить сплошным текстом, разделяя их соответствующим номером позиции 8 lab6.str lab6.rgh В файле результатов в конце каждой обработанной строки добавить найденную разность количеств сделанных удалений и замен 9 lab6_1.txt lab6_2.txt В начале файла в отдельной строке вывести заданный параметр n В конец файла с новой строки добавить общее фактическое количество замен 10 lab6.s1 lab6.s2 В начале файла в отдельной строке вывести заданный параметр n Обработанные строки выводить сплошным текстом (без перехода на новую строку), разделяя их рассчитанным числовым показателем 11 lab6d.s1 lab6r.s2 В файле результатов выделенные части строки разделить символом табуляции \t. В начале файла в отдельной строке вывести заданный символ 90 Номер варианта Файл исходных данных Файл результатов Инструкция по выводу результатов в файл 12 data.dat lab6.txt В файле результатов после каждой обработанной строки выводить в отдельной строке найденный индекс 13 lab6.dat lab6.res В файле результатов выводить исходную и обработанную строку, разделенную символом наклонной черты 14 lab6.in lab6.out В файле результатов выводить исходную и обработанную строки в двойных кавычках, разделенные символом «минус» 15 lab6.str lab6.rgh В файле результатов в конце каждой результатной строки через пробел вывести число перестановок слов 16 lab6_1.txt lab6_2.txt В файле результатов в конце каждой результатной строки через пробел вывести суммарное число удаленных символов 17 lab6d.s1 lab6r.s2 В файле результатов в конце каждой результатной строки через пробел вывести суммарное число звездочек, после этого через пробел выводить следующую строку 18 lab6.in lab6.out Перед каждой результатной строкой выводить количество замененных чисел 19 lab6.d1 lab6.d2 В файле результатов после каждой результатной строки выводить с новой строки число удаленных букв и число удаленных знаков препинания, разделенных символом косой черты 20 lab6_in.txt lab6_out.txt В начале файла в отдельной строке вывести через пробел заданную длину и заданный символ 21 lab6_d.txt lab6_r.txt В конце каждой результатной строки вывести число введенных пробелов 22 lab6.str lab6.rgh В начале каждой результатной строки вывести число введенных пробелов 91 Номер варианта Файл исходных данных Файл результатов Инструкция по выводу результатов в файл 23 lab6.in lab61.out lab62.out Сформировать 2 файла: 1) строки с исключенными URL; 2) исключенные URL, печатать с новой строки 24 data.txt lab6.res Каждую фамилию печатать с новой строки, в конце вывести найденное число фамилий 25 lab6_1.txt lab6_2.txt В начале файла вывести заданную ширину; в начале каждой строки вывести число добавленных пробелов
ЛАБОРАТОРНАЯ РАБОТА 7.
СТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
Цель: освоение навыков составления и тестирования алгоритмов и программ, содержащих простые запросы действий пользователя и выполняющих управление данными с использованием статических структур.
Задание 1. Составить программу на языке C# для обработки данных с помощью статических структур. В программе предусмотреть: создание структурного типа PData для хранения заданного набора данных (табл. 7.1) и объявление структурной переменной типа PData; создание файла данных с расширением .txt, имя которого следует предварительно запросить с клавиатуры; создание пользовательской функции static PData InputData() для инициализации структурной переменной данными, введенными с клавиатуры (перед вводом очищать консоль); создание пользовательской функции static void SaveData(PData s, StreamWriter fs) для добавления записи s в файл, представленный потоком fs; (NB: Запись должна выводиться в одну строку в виде значений полей (без подписей), разделенных пробелами или символами табуляции.) организацию цикла для выполнения заданного запроса действий пользователя (табл. 7.1), а также ввода новой записи
(вызов функции InputData) и сохранения ее в файл (вызов функции SaveData); вывод сообщения о полном имени файла с данными и о количестве сохраненных в него записей; на всех этапах обработки обеспечить контроль исключительных ситуаций при работе с файлами. 2. Разработать модульный тест для ручного тестирования функции SaveData с сохранением результатов проверки корректности работы функции в файл test.log. Код теста оформить в виде пользовательской функции UnitTest(PData s, string source_file_name). В теле функции UnitTest сохранять только одну переданную запись PData s, затем считывать последнюю строку из файла данных и сравнивать с PData s. Результаты сравнения выводить в файл test.log
Варианты индивидуальных заданий к лабораторной работе 7 Номер варианта Набор данных Запрос действий пользователя 1 Каждая запись по штатному расписанию предприятия содержит следующие данные: номер цеха, фамилию и инициалы, профессию, разряд, стаж работы Для ввода следующей записи нажмите + 2 Сводки о выполнении плана содержат шифр продукции, наименование продукции, единицы измерения, план, фактическое выполнение Чтобы завершить ввод сводок, нажмите Escape 3 Экзаменационная сводная ведомость содержит номер зачетной книжки, фамилию и инициалы, оценку по четырем дисциплинам Для ввода следующей ведомости нажмите пробел 4 Записи о работающих с почасовой формой оплаты: номер цеха, табельный номер, фамилия и инициалы, размер ставки за час, количество отработанных часов Для добавления следующей записи нажмите Enter 99 Номер варианта Набор данных Запрос действий пользователя 5 Сведения о пациентах больницы: фамилия, имя, отчество, год рождения, пол, дата поступления, диагноз, номер палаты, дата выписки Чтобы прекратить ввод, нажмите пробел, иначе – любая клавиша 6 Сведения о сотрудниках вуза: фамилия, имя, отчество, факультет, кафедра, ученая степень, ученое звание, занимаемая должность, год рождения, пол, домашний адрес Чтобы добавить данные о новом сотруднике, введите 1 7 Сведения об арендаторах квартир: фамилия, имя, отчество, полный адрес, площадь квартиры (полная и полезная), количество комнат, количество проживающих в квартире человек Для завершения ввода данных об арендаторах введите 0 8 Сведения об автомобилях включают следующие данные: странаизготовитель, марка, мощность, год выпуска, первоначальная цена Если хотите добавить сведения об автомобиле, то нажмите Enter 9 Сведения о книгах: наименование книги, автор, год издания, количество страниц, издательство, цена Чтобы ввести данные об очередной книге, нажмите пробел 10 Сведения о товарах, поступивших на склад, включающие: шифр, наименование товара, наименование поставщика, единицы измерения, стоимость одной единицы без НДС, количество Чтобы завершить приходование товаров, нажмите Escape 11 Обмен валют: ФИО клиента, валюты обмена, обменный курс, суммы обмена, табельный номер кассира Чтобы добавить данные о новой операции, введите A 12 Сведения о приеме врача: ФИО врача, ФИО пациента, возраст пациента, жалоба, диагноз (код МКБ) Для завершения ввода данных о приемах введите E 13 Сведения о ездках грузовиков: дата, модель грузовика, госномер, ФИО водителя, номер рейса, время выезда с базы, время возврата на базу, расход топлива Если хотите добавить сведения о новой ездке, то нажмите Enter 100 Номер варианта Набор данных Запрос действий пользователя 14 Журнал регистрации проживающих в гостинице: ФИО клиента, паспортные данные, номер и класс номера вселения, дата заезда, дата выезда, ранний заезд, поздний выезд, сумма оплаты Чтобы ввести данные об очередном клиенте, нажмите клавишу «звездочка» 15 Сведения о меню столовой: название блюда, время приготовления, вес, цена, калорийность, признаки: вегетарианское, безлактозное, детское Чтобы завершить ввод меню, нажмите клавишу End
Контрольные вопросы и задания
1. Что такое статическая структура данных?
2. В чем отличия структуры данных от класса?
3. Как создать структуру и обработать её данные в программе?
4. Как можно инициализировать поля структуры?
5. Поясните принцип работы написанного модульного теста.
ЛАБОРАТОРНАЯ РАБОТА 8.
ИСПОЛЬЗОВАНИЕ КЛАССОВ
Цель: изучение понятия класса, конструктора, деструктора и метода, а также особенностей организации программы с использованием классов.
Задание 1. Изучить понятие классов, объектов и области их эффективного использования; возможности языка программирования С# для работы с классами. 2. На основе индивидуального задания к лабораторной работе 4 (табл. 4.2) разработать класс, описывающий динамический одномерный массив и операции с ним. 3. Класс должен содержать такие закрытые члены: длина массива; ссылка на массив; а также следующие открытые методы: конструктор без параметров, содержащий инициализатор массива нулевыми элементами; конструктор с параметрами, инициализирующий массив длины, вводимой с клавиатуры, случайными числами в заданном диапазоне;
копирующий конструктор, создающий копию объекта с исходным массивом; деструктор, уничтожающий массив; метод модификации элемента массива, заданного его индексом; метод, реализующий заданную обработку массива; метод вывода элементов массива на консоль. При программировании методов обрабатывать необходимые исключения (обращение к элементам массива, арифметика). Конструкторы и деструктор должны выводить сообщение о своем срабатывании. 4. Составить программу на языке программирования С#, в которой предусмотреть: создание массива ar0 заданной длины с нулевыми элементами; создание массива ar1 с длиной, вводимой с клавиатуры; инициализацию массива ar1 случайными числами в заданном диапазоне; копирование массива ar1 в новый массив arN; модификацию произвольных элементов массива ar1; выполнение обработки массива arN; вывод массивов на всех стадиях вычислений; обработку необходимых исключений (ввод данных, обращение к элементам массива, арифметика). Конструкторы и деструктор должны выводить сообщения о своем выполнении.
Контрольные вопросы и задания 1. Что такое класс? 2. Опишите синтаксис объявления класса. 3. Перечислите члены класса и опишите порядок их размещения в теле класса. 4. Что такое метод класса? Какие бывают методы? 5. Какие существуют модификаторы прав доступа к членам класса? 6. Назовите особенности применения статических членов класса. 7. Какие аргументы могут быть у метода класса? 8. Что такое передача параметра по значению? 9. Что такое передача параметра по ссылке? Каковы отличия от передачи по назначению? 10. Что такое объект? Где расположен объект при выполнении программы? 11. Охарактеризуйте способы создания объектов. 12. Что такое конструктор класса? Охарактеризуйте назначение и виды конструкторов класса. 13. Что такое инициализатор? Приведите пример. 14. Что такое копирующий конструктор? Каковы его отличия от конструктора с параметрами? 15. Каково назначение ключевого слова this? 16. Что такое деструктор? Как и когда вызывается деструктор? 17. В каком порядке происходит уничтожение объектов?
ЛАБОРАТОРНАЯ РАБОТА 9.
БАЗОВЫЙ МЕХАНИЗМ НАСЛЕДОВАНИЯ. РАБОТА С МАТРИЦАМИ
Цель: изучение концепции наследования и его применение для организации работы с матрицами, освоить технологию перегрузки операторов.
Задание 1. Изучить понятие наследования классов, а также возможности языка программирования С# для работы с наследованием классов. 2. На основе класса Array, реализованного в лабораторной работе 8, и согласно индивидуальному заданию (табл. 9.1) создать производный от него класс Matrix. 3. Дочерний класс должен содержать: 1) закрытые члены: высота матрицы; ссылка на массив векторов базового класса; 2) открытые методы: конструктор без параметров, создающий нулевую матрицу фиксированного размера; размер задается константами; конструктор с параметрами, создающий и инициализирующий матрицу случайных чисел в заданном диапазоне; размер задается с использованием параметров; метод вывода элементов матрицы на консоль; метод, реализующий вычисление заданного показателя P, для которого предусмотреть свойство в классе Matrix; метод, реализующий заданное преобразование матрицы посредством перегрузки заданного оператора; метод, реализующий заданную сортировку матрицы (нечетные варианты – по столбцам, четные варианты – по строкам). Конструкторы должны выводить сообщение о своем срабатывании. При программировании методов выполнять обработку необходимых исключений (ввод данных, работа с элементами массива, арифметика). 4. Составить тестовую программу, демонстрирующую реализацию указанных методов, в том числе обработку исключений. 5. Сделать выводы по работе.
Варианты заданий к лабораторной работе 9 Номер варианта Массив и длина Интервал генерации Показатель Р Алгоритм обработки Оператор Сортировка 1 А(10, 8) [-10, 25] Сумма произведений элементов строки и столбца матрицы, на пересечении которых находится наибольший по абсолютной величине элемент матрицы Все отрицательные элементы, расположенные по периметру матрицы, заменить абсолютными значениями Унарный + Вставкой 2 Х(5, 10) [-15, 10] Количество элементов матрицы, превышающих ее среднее арифметическое значение Все положительные элементы матрицы умножить на ее среднее арифметическое значение * Обменом 3 Y(10, 12) [-20, 10] Сумма элементов матрицы, для которых i + j = k, где k – введенное с клавиатуры значение. Проверить, что значение k позволяет найти решение для каждой из матриц Все элементы матрицы, превышающие ее среднее арифметическое значение, разделить на максимальный элемент / Выбором 4 Z(10, 7) [-30, 40] Сумма положительных элементов столбца, содержащего максимальный элемент матрицы Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение Унарный – Быстрая (рекурсивная) 5 В(6, 11) [-20, 25] Разность между максимальным и минимальным значениями элементов массива Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы * Шейкерная 6 С(8, 12) [-15, 75] Сумма элементов, расположенных по периметру матрицы Столбцы матрицы упорядочить по возрастанию ++ Вставкой 123 Номер варианта Массив и длина Интервал генерации Показатель Р Алгоритм обработки Оператор Сортировка значений их элементов, минимальные элементы в столбцах увеличить на 1 7 А(10, 9) [-30, 100] Среднее геометрическое элементов матрицы N N P Xi 1 Все элементы матрицы уменьшить на ее максимальное значение Бинарный – Обменом 8 Х(9, 12) [-40, 20] Отношение среднего арифметического значения к минимальному элементу матрицы Строки матрицы упорядочить по убыванию значений их элементов, максимальные элементы в строках декрементировать –– Выбором 9 Y(10, 10) [-50, 60] Произведение ненулевых элементов строки матрицы, на которой расположен максимальный элемент Все элементы матрицы увеличить на ее среднее арифметическое значение Бинарный + Быстрая (рекурсивная) 10 Z(7, 9) [-25, 15] Сумма значений элементов матрицы, меньших ее среднего арифметического значения Все положительные элементы строки, содержащей максимальный элемент, разделить на ее среднее арифметическое значение / Шейкерная 11 T(5, 14) [-10, 5] Разность между суммой значений элементов четных и нечетных строк Элементы строк, у которых минимальные элементы положительные, увеличить на значения этих элементов Бинарный + Вставкой 12 A(8, 8) [-5, 10] Отношение суммы ненулевых элементов к сумме Элементы столбцов, у которых среднее * Обменом 124 Номер варианта Массив и длина Интервал генерации Показатель Р Алгоритм обработки Оператор Сортировка положительных элементов матрицы арифметическое значение отрицательно, умножить на эти средние значения 13 N(12, 6) [-20, 10] Абсолютное значение произведения ненулевых элементов, принадлежащих интервалу [-2, 2] Все элементы матрицы, превышающие ее среднее арифметическое значение, возвести в степень P ^ Выбором 14 B(11, 11) [-30, 0] Количество отрицательных элементов матрицы Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение Бинарный – Быстрая (рекурсивная) 15 M(10, 5) [-20, 25] Сумма элементов матрицы, больших ее среднего значения Элементы столбцов матрицы циклически сдвинуть влево на число положительных элементов в них << Шейкерная 16 R(5, 12) [-15, 75] Минимальный по абсолютной величине элемент матрицы Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы * Вставкой 17 C(10, 10) [-30, 100] Отношение сумм элементов, лежащих выше и ниже главной диагонали матрицы У элементов строк матрицы, начинающихся с положительных значений, сменить знак Унарный – Обменом 18 F(7, 7) [-40, 20] Отношение произведения ненулевых элементов к сумме положительных элементов матрицы Транспонировать матрицу ! Выбором 125 Номер варианта Массив и длина Интервал генерации Показатель Р Алгоритм обработки Оператор Сортировка 19 S(10, 4) [-40, 60] Отношение максимального и минимального элементов матрицы Все элементы матрицы уменьшить, меньше среднего арифметического, уменьшить на 1 –– Быстрая (рекурсивная) 20 U(6, 15) [-15, 15] Сумма элементов столбца, в котором расположен максимальный элемент матрицы Элементы строк, у которых минимальные элементы положительные, увеличить на 1 ++ Шейкерная 21 V(11, 5) [-20, 5] Разность модуля суммы отрицательных элементов и суммы положительных элементов Все элементы матрицы увеличить на ее максимальное значение Бинарный + Вставкой 22 D(9, 9) [-15, 10] Произведение ненулевых элементов, лежащих выше главной диагонали матрицы Элементы столбцов, у которых среднее арифметическое значение отрицательно, умножить на эти средние значения * Обменом 23 L(5, 11) [-20, 20] Количество элементов матрицы, больших ее среднего значения Все положительные элементы строки, содержащей максимальный элемент, разделить на ее среднее арифметическое значение / Выбором 24 G(8, 8) [-30, 20] Произведение элементов строк с положительными средними значениями для матрицы Элементы столбцов матрицы, у которых среднее арифметическое значение >0, упорядочить по возрастанию > Быстрая (рекурсивная) 25 K(6, 5) [-10, 55] Сумма элементов строк с нечетными индексами, не превышающих Элементы столбцов матрицы, у которых среднее < Шейкерная 126 Номер варианта Массив и длина Интервал генерации Показатель Р Алгоритм обработки Оператор Сортировка среднее значение по матрице арифметическое значение <0, упорядочить по убыванию 26 Q(7, 7) [0, 99] Число нулевых младших разрядов элементов матрицы Логически сдвинуть элементы строк вправо на P позиций >> Вставкой 27 Y(10, 10) [-50, 60] Максимальный из старших разрядов элементов, лежащих выше главной диагонали Логически сдвинуть элементы столбцов влево на P позиций << Обменом 28 Z(7, 9) [0, 12] Число простых чисел в матрице Возвести элементы строки, содержащей максимальный элемент, в степень P ^ Выбором 29 T(5, 14) [-10, 5] Сумма разностей элементов столбцов с максимальным и минимальным по модулю элементами Совпадающие столбцы матрицы обнулить == Быстрая (рекурсивная) 30 A(8, 8) [0, 10] Разность сумм элементов главной и побочной диагоналей Циклически сдвинуть элементы столбцов на P позиций >> Шейкерная
Контрольные вопросы и задания
1. Что такое наследование?
Какие есть виды наследования и в чем их различия?
2. Опишите преимущества механизма наследования классов.
3. Какие ограничения существуют на наследования классов?
4. В чем заключается перегрузка операций?
5. Какие операторы C# не могут быть перегружены и почему?
7. Как организовать текстовое меню для выбора действий программы пользователем?
ЛАБОРАТОРНАЯ РАБОТА 11.
ПРИНУДИТЕЛЬНОЕ НАСЛЕДОВАНИЕ. АБСТРАКТНЫЕ КЛАССЫ И АБСТРАКТНЫЕ МЕТОДЫ В C#
Цель: изучение принципов реализации базового принципа ООП «Наследование» на языке C# с применением абстрактных классов, освоение техники применения абстрактных классов для частичной реализации базовых классов при использовании принудительного наследования.
Задание 1. Изучить механизм применения абстрактных классов в языке C#. 2. Создать абстрактный класс Array, содержащий такие члены: N – число элементов в массиве; Arr – указатель на массив; Init() – метод инициализации элементов массива случайными числами в заданном диапазоне; Calc() – абстрактный метод подсчета числового показателя на основе данных массива; PrintArray() – абстрактный метод вывода массива на экран; Processing() – абстрактный метод, выполняющий обработку массива. Данные для реализации методов Init() выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы 4 (табл. 4.2) согласно номеру своего варианта. 3. Создать производный класс Vector, реализующий заданную обработку и вывод на экран одномерного массива. 3.1. Вывод элементов массива должен осуществляться в одну строку через символ табуляции. 3.2. Задание на расчет показателя и обработку массива выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы 4 (табл. 4.2) согласно номеру варианта. 4. Создать производный класс Matrix, реализующий заданную обработку и вывод на экран двумерного массива. 4.1. Вывод элементов матрицы должен осуществляться в прямоугольной форме, элементы строк должны печататься через символ табуляции.
4.2. Задание на расчет показателя и обработку массива выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы 9 (табл. 9.1) согласно номеру своего варианта. 5. При реализации методов Calc() и Processing() реализовать обработку необходимых исключений. 6. Разработать метод Main() для организации работы с одномерными и двумерными массивами. Число элементов N и границы диапазона генерации значений элементов массивов вводить с клавиатуры. Реализовать обработку необходимых исключений. 7. Разработать класс Test для модульного тестирования реализаций методов Calc, в том числе возникновения исключений. Для создания тестовых массивов в классах Vector и Matrix реализовать конструктор, инициализирующий массив заданной размерности константными значениями.
Контрольные вопросы и задания
1. В чем заключается принцип наследования?
2. Как реализовать наследование классов на языке C#?
3. Какие модификаторы прав доступа используются при наследовании и для чего? 4. Что такое родительский класс? 5. Что такое абстрактный класс? 6. Сколько потомков может быть у родительского класса? 7. Сколько родительских классов может наследовать класс-потомок? 8. Что такое включение? Какого вида бывают включения? 9. В чем состоит идея принудительного наследования? 10. Раскрыть механизм наследования классов на конкретном примере. 11. Что такое модульное тестирование? 12. На каком этапе жизненного цикла ПО выполняется модульное тестирование? 13. Какие классы C# используются для реализации модульного тестирования? 14. Какими инструментами можно протестировать соответствие фактического и ожидаемого значений?
ЛАБОРАТОРНАЯ РАБОТА 12.
НАСЛЕДОВАНИЕ ТИПА «ВКЛЮЧЕНИЕ – ДЕЛЕГИРОВАНИЕ». КЛАССЫ-КОЛЛЕКЦИИ
Цель: освоение навыков составления и тестирования алгоритмов и объектно-ориентированных программ, использующих абстрактные структуры данных и абстрактные классы по принципу «включение – делегирование».
Задание 1. Составить программу на языке C# для обработки структурированных данных с помощью классов-коллекций. В программе согласно индивидуальному заданию (табл. 12.2): определить базовый класс как абстрактный; ввести в абстрактный класс дополнительные абстрактные методы для изменения значений полей класса; в производных классах переопределить наследуемый метод для специализированной операции изменения полей класса (операции выбрать самостоятельно). 2. Создать класс по принципу «включение – делегирование», содержащий коллекцию производных от базового абстрактного класса объектов. Для реализации выбрать один из предложенных в табл. 12.2 производных классов. Описать следующие методы: добавление в коллекцию новых объектов; изменение свойств и полей имеющихся объектов по номеру объекта в коллекции; удаление из коллекции объекта по его номеру; вывод информации об имеющихся в коллекции объектах. 3. Продемонстрировать работу класса, построенного по принципу «включение – делегирование». Для этого в методе Main реализовать текстовое меню для выбора одного из возможных действий: добавить в коллекцию объект (производного класса); внести изменения в характеристики объекта коллекции; удалить объект из коллекции; вывести сведения по имеющимся в коллекции объектам; выйти из программы. Реализация текстового меню рассмотрена в разделе «Организация пользовательского интерфейса». 4. Разработать модульный тест для проверки работоспособности заданного метода обработки данных, в том числе для контроля исключений. Результаты тестирования сохранить в файле test.log
Варианты индивидуальных заданий к лабораторной работе 12 Номер варианта Классколлекция Базовый абстрактный класс Производные классы (дополнительные атрибуты) Метод для тестирования 1 Книжный магазин Печатное издание (издательство, число страниц) Книга (авторы, isbn), журнал (периодичность издания, issn) Добавление 2 Магазин Товар (количество, стоимость) Продуктовые товары (калорийность), бытовая химия (срок годности), одежда (размер, фасон) Изменение 3 Парк ЭВМ Компьютер (тактовая частота, объем оперативной памяти) Десктоп (тип корпуса), ноутбук (время работы батареи), планшет (операционная система) Удаление 4 Транспортная компания Транспортное средство (год выпуска, дата последнего ремонта) Автомобиль (число осей), поезд (число вагонов), судно (водоизмещение) Добавление 5 Зоопарк Животное (номер, возраст, кличка) Млекопитающие (наличие когтей, наличие рогов), птицы (размах крыльев, осёдлость), насекомые (наличие крыльев) Изменение 6 Порт Судно (имя, водоизмещение) Военный корабль (число орудий), танкер (вместимость), катер (число пассажирских мест) Удаление 7 Автопарк Автомобиль (модель, год выпуска, число мест, госномер) Грузовой автомобиль (грузоподъемность), Рейсовый автобус (номер рейса), заказной автобус (номер заказа) Добавление 172 Номер варианта Классколлекция Базовый абстрактный класс Производные классы (дополнительные атрибуты) Метод для тестирования 8 Студенческая группа Студент (фамилия, имя, курс и идентификационный номер) Студент-практикант (вид практики, наименование предприятия), студент-дипломник (тема ВКР, ФИО руководителя) Изменение 9 Магазин «Соки-Воды» Напиток (производитель, цена) Сок (ингредиенты), минеральная вода (показатель ph), газированный напиток (степень газированности) Удаление 10 Парк самолетов Самолет (модель, максимальная дальность полета) Военный самолет, пассажирский самолёт, спортивный самолет Добавление 11 Библиотека программ для ЭВМ Компьютерная программа (название, объем кода, язык программирования) Служебная программа (версия программы, дата обновления), прикладная программа (назначение, категория пользователей) Изменение 12 Кафедра в вузе Преподаватель вуза (ФИО, должность, ученая степень, дата прохождения медосмотра) Свободный преподаватель (объем почасовой работы); преподаватель, работающий в администрации вуза (административная должность) Удаление 13 Жилой массив Здание (число этажей, материал стен, адрес) Жилое здание (число подъездов, число квартир на этаже), промышленное здание (число и дата заправки огнетушителей) Добавление 173 Номер варианта Классколлекция Базовый абстрактный класс Производные классы (дополнительные атрибуты) Метод для тестирования 14 Салон мобильной связи Мобильный телефон (производитель, время работы батареи) Кнопочный телефон (число кнопок, наличие/отсутствие камеры), смартфон (версия ОС, дата обновления ПО) Изменение 15 Университет Учащийся (ФИО, дата рождения) Бакалавр (ФИО тьютора), магистрант (ФИО научного руководителя), аспирант (научная специальность) Удаление 16 Больница Медицинский работник (ФИО, пол, возраст, стаж) Медсестра (медицинская специализация), врач (медицинская специальность, категория, дата повышения квалификации), заведующий отделением (число подчиненных) Добавление 17 Департамент Работник (ФИО, общий стаж) Штатный работник (дополнительные обязанности), внутренний совместитель (департамент штатной работы), внешний совместитель (основное место работы), руководитель (дата повышения квалификации по менеджменту) Изменение 18 Фотомагазин Фотоаппарат (модель, Пленочный (наличие вспышки, тип Удаление 174 Номер варианта Классколлекция Базовый абстрактный класс Производные классы (дополнительные атрибуты) Метод для тестирования стоимость, вес) пленки), зеркальный фотоаппарат (тип резьбы объектива) 19 Энергосистема страны Электростанция (дата ввода в эксплуатацию, проектная мощность) АЭС (число и тип реакторов), ГЭС (число и мощность турбин), ТЭС (вид топлива, КПД) Добавление 20 Химический кабинет Жидкие реактивы (название, плотность, цвет, запах) Кислотные (концентрация), летучие (скорость испарения) Изменение
Контрольные вопросы и задания
1. Что такое включение?
2. Какого вида бывают включения?
3. Что такое делегирование?
4. Что такое класс-коллекция?
5. Какими способами можно реализовать механизм включения – делегирования?
6. Раскройте механизм включения – делегирования на конкретном примере.
7. Перечислите и прокомментируйте основные методы класса List.
ЛАБОРАТОРНАЯ РАБОТА 13.
ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСОВ И ДЕЛЕГАТОВ
Цель: освоение навыков составления и тестирования алгоритмов и объектно-ориентированных программ, использующих стандартные интерфейсы и делегаты.
Задание 1. На примере одного из классов-потомков (выбрать самостоятельно из классов, реализованных при выполнении лабораторной работы 12) реализовать интерфейсы ICloneable, IComparable и IComparer. Реализовать поверхностное и глубокое копирование объектов, вывод отсортированного списка объектов класса по произвольному полю. 2. С помощью делегатов создать метод сортировки заданным методом списка объектов класса-коллекции. Обеспечить возможность проведения сортировки объектов по полям разных типов данных. Делегат должен передавать информацию о функции сравнения двух объектов классаколлекции. 3. С помощью лямбда-выражений реализовать операции поиска данных по нескольким заданным критериям и вывод найденных записей на консоль.
4. Протестировать модульными тестами работу делегатов и обработку контролируемых исключений
Контрольные вопросы и задания 1. Опишите особенности интерфейса и сравните его абстрактным классом. 2. Приведите пример реализации интерфейсов. 3. Приведите пример реализации доступа через интерфейсные ссылки. 4. Приведите пример частичных реализаций. 5. Приведите пример переменных в интерфейсах. 6. Приведите пример расширения интерфейсов. 7. Что такое делегат? 8. Как организуется вызов методов посредством делегатов? 9. Какие исключения могут быть выброшены при работе с делегатами? 10. Что такое лямбда-выражения и для чего они применяются?