Главная » Просмотр файлов » Папшев И.С., Черненький М.В., Гапанюк Ю.Е. - Методические указания к лабораторным работам

Папшев И.С., Черненький М.В., Гапанюк Ю.Е. - Методические указания к лабораторным работам (1076683), страница 3

Файл №1076683 Папшев И.С., Черненький М.В., Гапанюк Ю.Е. - Методические указания к лабораторным работам (Папшев И.С., Черненький М.В., Гапанюк Ю.Е. - Методические указания к лабораторным работам) 3 страницаПапшев И.С., Черненький М.В., Гапанюк Ю.Е. - Методические указания к лабораторным работам (1076683) страница 32018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Файл: " + ReportFileName);}}}}7.5 Лабораторная работа 57.5.1 Вычисление расстояния Левенштейна с использованием алгоритмаВагнера-ФишераusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace EditDistanceProject{public static class EditDistance{/// <summary>/// Вычисление расстояния Дамерау-Левенштейна/// </summary>public static int Distance(string str1Param, string str2Param){if ((str1Param == null) || (str2Param == null)) return -1;int str1Len = str1Param.Length;int str2Len = str2Param.Length;//Если хотя бы одна строка пустая, возвращается длина другой строкиif ((str1Len == 0) && (str2Len == 0)) return 0;if (str1Len == 0) return str2Len;if (str2Len == 0) return str1Len;//Приведение строк к верхнему региструstring str1 = str1Param.ToUpper();string str2 = str2Param.ToUpper();//Объявление матрицыint[,] matrix = new int[str1Len + 1, str2Len + 1];//Инициализация нулевой строки и нулевого столбца матрицыfor (int i = 0; i <= str1Len; i++) matrix[i, 0] = i;for (int j = 0; j <= str2Len; j++) matrix[0, j] = j;29//Вычисление расстояния Дамерау-Левенштейнаfor (int i = 1; i <= str1Len; i++){for (int j = 1; j <= str2Len; j++){//Эквивалентность символов, переменная symbEqual соответствуетm(s1[i],s2[j])int symbEqual = ((str1.Substring(i - 1, 1) == str2.Substring(j- 1, 1)) ? 0 : 1);int ins = matrix[i, j - 1] + 1; //Добавлениеint del = matrix[i - 1, j] + 1; //Удалениеint subst = matrix[i - 1, j - 1] + symbEqual; //Замена//Элемент матрицы вычисляется как минимальный из трех случаевmatrix[i, j] = Math.Min(Math.Min(ins, del), subst);//Дополнение Дамерау по перестановке соседних символовif ((i > 1) && (j > 1) &&(str1.Substring(i - 1, 1) == str2.Substring(j - 2, 1)) &&(str1.Substring(i - 2, 1) == str2.Substring(j - 1, 1))){matrix[i, j] = Math.Min(matrix[i, j], matrix[i - 2, j - 2]+ symbEqual);}}}//Возвращается нижний правый элемент матрицыreturn matrix[str1Len, str2Len];}}}7.6 Лабораторная работа 67.6.1 Фрагмент программы, реализующей работу с делегатамиusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Delegates{//Делегаты - аналог процедурного типа в Паскале.//Делегат - это не тип класса, а тип метода.//Делегат определяет сигнатуру метода (типы параметров и возвращаемогозначения).//Если создается метод типа делегата, то у него должна быть сигнатура как уделегата.//Метод типа делегата можно передать как параметр другому методу.30//Название делегата при объявлении указывается "вместо" названия методаdelegate int PlusOrMinus(int p1, int p2);class Program{//Методы, реализующие делегат (методы "типа" делегата)static int Plus(int p1, int p2) { return p1 + p2; }static int Minus(int p1, int p2) { return p1 - p2; }/// <summary>/// Использование обощенного делегата Func<>/// </summary>static void PlusOrMinusMethodFunc(string str, int i1, int i2, Func<int,int, int> PlusOrMinusParam){int Result = PlusOrMinusParam(i1, i2);Console.WriteLine(str + Result.ToString());// Func<int, string, bool> - делегат принимает параметры типа int иstring и возвращает bool// Если метод должен возвращать void, то используется делегат Action// Action<int, string> - делегат принимает параметры типа int и stringи возвращает void// Action как правило используется для разработки групповых делегатов,которые используются в событиях}/// <summary>/// Использование делегата/// </summary>static void PlusOrMinusMethod(string str, int i1, int i2, PlusOrMinusPlusOrMinusParam){int Result = PlusOrMinusParam(i1, i2);Console.WriteLine(str + Result.ToString());}static void Main(string[] args){int i1 = 3;int i2 = 2;PlusOrMinusMethod("Плюс: ", i1, i2, Plus);PlusOrMinusMethod("Минус: ", i1, i2, Minus);//Создание экземпляра делегата на основе методаPlusOrMinus pm1 = new PlusOrMinus(Plus);PlusOrMinusMethod("Создание экземпляра делегата на основе метода: ",i1, i2, pm1);//Создание экземпляра делегата на основе 'предположения' делегата//Компилятор 'пердполагает' что метод Plus типа делегатаPlusOrMinus pm2 = Plus;31PlusOrMinusMethod("Создание экземпляра делегата на основе'предположения' делегата: ", i1, i2, pm2);//Создание анонимного методаPlusOrMinus pm3 = delegate(int param1, int param2){return param1 + param2;};PlusOrMinusMethod("Создание экземпляра делегата на основе анонимногометода: ", i1, i2, pm2);PlusOrMinusMethod("Создание экземпляра делегата на основе лямбдавыражения 1: ", i1, i2,(int x, int y) =>{int z = x + y;return z;});PlusOrMinusMethod("Создание экземпляра делегата на основе лямбдавыражения 2: ", i1, i2,(x, y) =>{return x+y;});PlusOrMinusMethod("Создание экземпляра делегата на основе лямбдавыражения 3: ", i1, i2, (x, y) => x+y );////////////////////////////////////////////////////////////////Console.WriteLine("\n\nИспользование обощенного делегата Func<>");PlusOrMinusMethodFunc("Создание экземпляра делегата на основе метода:", i1, i2, Plus);string OuterString = "ВНЕШНЯЯ ПЕРЕМЕННАЯ";PlusOrMinusMethodFunc("Создание экземпляра делегата на основе лямбдавыражения 1: ", i1, i2,(int x, int y) =>{Console.WriteLine("Эта переменная объявлена вне лямбдавыражения: " + OuterString);int z = x + y;return z;});PlusOrMinusMethodFunc("Создание экземпляра делегата на основе лямбдавыражения 2: ", i1, i2,(x, y) =>{32return x + y;});PlusOrMinusMethodFunc("Создание экземпляра делегата на основе лямбдавыражения 3: ", i1, i2, (x, y) => x + y);////////////////////////////////////////////////////////////////Групповой делегат всегда возвращает значение типа voidConsole.WriteLine("Пример группового делегата");Action<int, int> a1 = (x, y) => { Console.WriteLine("{0} + {1} = {2}",x, y, x + y); };Action<int, int> a2 = (x, y) => { Console.WriteLine("{0} - {1} = {2}",x, y, x - y); };Action<int, int> group = a1 + a2;group(5, 3);Action<int, int> group2 = a1;Console.WriteLine("Добавление вызова метода к групповому делегату");group2 += a2;group2(10, 5);Console.WriteLine("Удаление вызова метода из группового делегата");group2 -= a1;group2(20, 10);Console.ReadLine();}}}7.6.2 Фрагмент программы, реализующей работу с рефлексиейusingusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;System.Reflection;namespace Reflection{class Program{/// <summary>/// Проверка, что у свойства есть атрибут заданного типа/// </summary>/// <returns>Значение атрибута</returns>public static bool GetPropertyAttribute(PropertyInfo checkType, TypeattributeType, out object attribute){bool Result = false;attribute = null;//Поиск атрибутов с заданным типомvar isAttribute = checkType.GetCustomAttributes(attributeType, false);if (isAttribute.Length > 0)33{Result = true;attribute = isAttribute[0];}return Result;}static void Main(string[] args){Type t = typeof(ForInspection);Console.WriteLine("Тип " + t.FullName + " унаследован от " +t.BaseType.FullName);Console.WriteLine("Пространство имен " + t.Namespace);Console.WriteLine("Находится в сборке " + t.AssemblyQualifiedName);Console.WriteLine("\nКонструкторы:");foreach (var x in t.GetConstructors()){Console.WriteLine(x);}Console.WriteLine("\nМетоды:");foreach (var x in t.GetMethods()){Console.WriteLine(x);}Console.WriteLine("\nСвойства:");foreach (var x in t.GetProperties()){Console.WriteLine(x);}Console.WriteLine("\nПоля данных (public):");foreach (var x in t.GetFields()){Console.WriteLine(x);}Console.WriteLine("\nСвойства, помеченные атрибутом:");foreach (var x in t.GetProperties()){object attrObj;if (GetPropertyAttribute(x, typeof(NewAttribute), out attrObj)){NewAttribute attr = attrObj as NewAttribute;Console.WriteLine(x.Name + " - " + attr.Description);}}Console.WriteLine("\nВызов метода:");//Создание объекта34//ForInspection fi = new ForInspection();//Можно создать объект через рефлексиюForInspection fi = (ForInspection)t.InvokeMember(null,BindingFlags.CreateInstance, null, null, new object[] { });//Параметры вызова методаobject[] parameters = new object[] { 3, 2 };//Вызов методаobject Result = t.InvokeMember("Plus", BindingFlags.InvokeMethod,null, fi, parameters);Console.WriteLine("Plus(3,2)={0}", Result);Console.ReadLine();}}}7.6.3 Реализация атрибутаusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Reflection{/// <summary>/// Класс атрибута/// </summary>[AttributeUsage(AttributeTargets.Property, AllowMultiple=false,Inherited=false)]public class NewAttribute : Attribute{public NewAttribute() {}public NewAttribute(string DescriptionParam){Description = DescriptionParam;}public string Description { get; set; }}}7.6.4 Пример инспектируемого классаusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Reflection{35/// <summary>/// Класс для исследования с помощью рефлексии/// </summary>public class ForInspection{public ForInspection() { }public ForInspection(int i) { }public ForInspection(string str) { }public int Plus(int x, int y) { return x + y; }public int Minus(int x, int y) { return x - y; }[NewAttribute("Описание для property1")]public string property1{get { return _property1; }set { _property1 = value; }}private string _property1;public int property2 { get; set; }[NewAttribute(Description = "Описание для property3")]public double property3 { get; private set; }public int field1;public float field2;}}8 Контрольные вопросы8.1 Лабораторная работа 11.

Каким образом реализуется консольный ввод-вывод в C#?2. Какие способы используются для преобразования строковых значенийв числовые?3. Что такое пространство имен (namespace) и для чего используютсяпространства имен?4. Какие операторы используются для организации условий?5.

Какие операторы используются для организации циклов?8.2 Лабораторная работа 21. Какие типы элементов может содержать класс в языке C#?362. В чем особенность абстрактных классов?3. Что такое интерфейс?4. В чем особенность виртуальных и абстрактных методов? Их сходства иразличия, отличия от обычных методов.5. Что такое свойство (property)?6. Что означает ключевое слово «base» при объявлении конструкторакласса?7.

От какого количества классов и интерфейсов может быть унаследованкласс в языке С#? С чем связана такая схема наследования?8.3 Лабораторная работа 31. Какие типы коллекций в языке С# Вы знаете?2. Чем отличаются обобщенные и необобщенные коллекции?3. В чем особенность использования коллекционного класса ArrayList?4.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее