Тольяттинский государственный университет (Росдистант), ТГУ
Практикум по программированию на C# 1
Практические задания 1–6. Решения
Проверяемые задания
Практическое задание 1Тема 1. Введение в .NET Framework
Цель работы:
Сформировать навыки создания на языке программирования C# в среде Visual Studio приложений .NET Framework, познакомиться с типами и шаблонами проектов Visual Studio, научиться документировать приложение и выполнять отладку кода исходного документа.
Задание
Разработать консольное приложение для чтения небольшого набора входных данных, форматирования этих данных удобным для чтения образом и отображения отформатированных результатов. Данные представляют собой текст, содержащий пары чисел, представляющие х и у – координаты местоположения объекта. Каждая строка текста содержит один набор координат. Следующий пример демонстрирует типичный набор данных.
23.8976,12.3218
25.76,11.9463
24.8293,12.2
В отформатированном виде данные могут выглядеть следующим образом:
X: 23,8976 Y: 12,3218
X: 25,76 Y: 11,9463
X: 24,8293 Y: 12,2
Перенаправить ввод для запуска приложения с помощью текстового файла, содержащего данные, которые нужно отформатировать.
Реализовать простое консольное или WPF-приложение, обеспечивающее описанные выше функциональные возможности. Предусмотреть возможность введения данных пользователем путем предоставления поля.
Перенаправить ввод для запуска приложения с помощью данных из файла. Создать дополнительные тестовые данные и использовать их в качестве входных данных для тестирования приложения.
Использовать Visual Studio отладчик для пошагового выполнения кода и изучения работы приложения.
Практическое задание 2
Тема 2. Основные программные конструкции C#
Цель работы:
Сформировать практические навыки применения операторов выбора и цикла, основываясь на функциональности, которую необходимо реализовать, а также создавать, инициализировать массивы и работать с ними, используя общие свойства и методы, которые они предоставляют.
Задание 1
Разработать тип, позволяющий вычислять корень n-ой степени из числа методом Ньютона с заданной точностью.
Предусмотреть в нем возможность сравнения полученного результата со значением, рассчитываемым с помощью метода Math.Pow библиотеки классов .NET Framework.
Обязательно должны быть «приглашения для ввода» и отображение результата – так, чтобы пользователю было понятно, что отображается.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Задание 2
Разработать тип, позволяющий конвертировать неотрицательное десятичное значение целого числа в строку, содержащую двоичное представление этого значения.
Нужно реализовать два варианта:
использовать стандартные классы и методы для конвертирования;
реализовать свой алгоритм конвертирования.
Обязательно должны быть «приглашения для ввода» и отображение результата – так, чтобы пользователю было понятно, что отображается.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Тема 3. Определение и вызов методов
Цель работы:
Сформировать навыки создавать и вызывать методы, перегруженные методы, а также методы, принимающие переменное число параметров, и использовать необязательные параметры, именованные аргументы и выходные параметры.
Задание
Разработать тип, реализующий алгоритм Евклида для вычисления НОД двух целых чисел (http://en.wikipedia.org/wiki/Euclidean_algorithm).
Добавить к разработанному типу дополнительную функциональность в виде перегруженных методов вычисления НОД для трех, четырех или пяти целых чисел.
Добавить к разработанному типу метод, реализующий алгоритм Стейна (бинарный алгоритм Евклида) для расчета НОД двух целых чисел (http://en.wikipedia.org/wiki/Binary_GCD_algorithm).
Сделать «обертку для метода», которая принимает выходной параметр, содержащий значение времени, необходимое для выполнения расчетов.
Сделать «метод-обёртку» для метода, реализующего алгоритм Евклида вычисления НОД двух параметров, добавив аналогичную функциональность.
Создать unit-тесты для тестирования разработанных методов.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Практическое задание 4
Тема 4. Создание новых типов в С#
Цель работы:
Сформировать навыки создавать и использовать перечисления, структуры и классы.
Задание
Разработать класс «треугольник» для работы с треугольником, заданным на плоскости сторонами a, b, c.
Предусмотреть возможность проверки существования треугольника, реализовать функции подсчета его площади и периметра.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Создать unit-тесты для тестирования методов разработанного типа.
Практическое задание 5
Тема 5. Инкапсуляция данных и методов
Цель работы:
Сформировать навыки управлять видимостью членов типа, использовать свойства и индексаторы и создавать статические поля и методы, а также методы расширения.
Задание «Вектор»
Разработать класс «вектор» для работы с трехмерными векторами.
Перегрузить для класса операции, допустимые для работы с трехмерными векторами.
Создать unit-тесты для тестирования разработанных методов.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Задание «Многочлен»
Разработать класс «многочлен» для работы с многочленами от одной переменной.
Перегрузить для класса операции, допустимые для работы с многочленами.
Создать unit-тесты для тестирования разработанных методов.
В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
Рекомендации по выполнению задания
Важно (!):
Вектор задаётся одной точкой, то есть он с началом в начале координат.
Нельзя изменять координаты вектора после создания «вектора».
Тип «вектор» не должен ничего выводить на «экран» и ничего считывать с «экрана».
Тип «вектор» должен корректно переопределить метод для формирования строкового представления «вектора».
Обязательно должны быть «приглашения для ввода» и отображение результата – так, чтобы пользователю было понятно, что отображается.
Убрать подключение пространств имён, которые не используются в коде.
Практическое задание 6
Тема 6. Наследование. Интерфейсы и абстрактные классы
Цель работы:
Сформировать понимание концепции наследования и навыки определять и реализовывать интерфейсы, абстрактные классы и абстрактные методы.
Задание 1
Определить интерфейс IConvertible, указывающий, что реализующий его класс может конвертировать блок кода в С# или VB-код. В интерфейсе определить два метода ConvertToCSharp и ConvertToVB, каждый из которых принимает и возвращает строку.
Создать класс ProgramHelper, реализующий интерфейс IConvertible. При написании методов вместо преобразования строки использовать простые строковые сообщения для имитации преобразования.
Создать новый интерфейс ICodeChecker, определив в нем метод CheckCodeSyntax, принимающий две строки: строка для проверки и используемый язык. Метод должен возвращать тип bool. Добавить в класс ProgramHelper функциональность нового интерфейса IСodeChecker.
Создать класс ProgramConverter, реализующий интерфейс IConvertible. Изменить класс ProgramHelper, наследуя его от класса ProgramConverter и интерфейса ICodeChecker.
Протестировать класс, создав массив объектов ProgramConverter, одни из которых имеют тип ProgramConverter, а другие – тип ProgramHelper. Для каждого элемента массива проверить, что он реализует интерфейс IСodeChecker (или нет). Если реализует интерфейс IСodeChecker, то вызвать метод проверки кода и соответствующий метод преобразования. Если не реализует интерфейс IСodeChecker, то вызвать два метода преобразования кода.
Добавьте в проект диаграмму классов с использованием средств Visual Studio. Задайте диаграмме понятное имя.
Задание 2
Написать программу, которая декорирует класс Stream и показывает, какая часть файла была прочитана, используя полосу прокрутки.
При выполнении нужно применить шаблон проектирования Декоратор.
Задание 3
Напишите программу, которая декорирует класс Stream и спрашивает пароль, прежде чем позволяет продолжить чтение.
При выполнении нужно применить шаблон проектирования Декоратор.