Обобщенное программирование, шаблоны
Лабораторная работа №10
Тема: обобщенное программирование, шаблоны
Задание 1
Разработайте шаблонную функцию FindMax,
выполняющую поиск максимального элемента в массиве. В случае, если такой
элемент присутствует, то значение максимального элемента должно быть занесено в
аргумент maxValue, передаваемый по ссылке, а сама функция вернуть значение
истина. В противном случае функция должна вернуть значение ложь.
Текст программы
Program
{bool method<T>(T[] t,ref
T a)
{(t.Length == 0)
{false;
}
{= t.Max();true;
}
}
static void
Main(string[] args)
{control =
"";(control != "ex")
{.WriteLine("1 - Create
String Array *");.WriteLine("2 - Create Char Array
*");.WriteLine("3 - Create Int Array *");.WriteLine("4 -
Create Double Array *");.WriteLine("5 - Create Byte Array
*");.WriteLine("**************************");=
Console.ReadLine();.Clear();(control)
{"1":s_max_string =
"";.Write("Enter array lenght : ");len_s =
int.Parse(Console.ReadLine());[] stroki = new string[len_s];(int i = 0; i <
len_s; i++)
{[i] = Console.ReadLine();
}prov_s = method(stroki, ref
s_max_string);.Clear();.Write("Max element : " +
s_max_string);.ReadKey();.Clear();;"2":s_max_char = '
';.Write("Enter array lenght : ");len_c =
int.Parse(Console.ReadLine());[] chars = new char[len_c];(int i = 0; i <
len_c; i++)
{[i] =
char.Parse(Console.ReadLine());
}prov_c = method(chars, ref
s_max_char);.Clear();.Write("Max element : " +
s_max_char);.ReadKey();.Clear();;"3":s_max_int = 0;.Write("Enter
array lenght : ");len_i = int.Parse(Console.ReadLine());[] ints = new
int[len_i];(int i = 0; i < len_i; i++)
{[i] =
int.Parse(Console.ReadLine());
}prov_i = method(ints, ref
s_max_int);.Clear();.Write("Max element : " +
s_max_int);.ReadKey();.Clear();;"4":s_max_double =
0.0;.Write("Enter array lenght : ");len_d =
int.Parse(Console.ReadLine());[] dbs = new double[len_d];(int i = 0; i <
len_d; i++)
{[i] =
double.Parse(Console.ReadLine());
}prov_d = method(dbs, ref
s_max_double);.Clear();.Write("Max element : " +
s_max_double);.ReadKey();.Clear();;"5":s_max_byte =
0;.Write("Enter array lenght : ");len_b =
int.Parse(Console.ReadLine());[] bytes = new byte[len_b];(int i = 0; i <
len_b; i++)
{[i] =
byte.Parse(Console.ReadLine());
}prov_b = method(bytes, ref
s_max_byte);.Clear();.Write("Max element : " + s_max_byte);.ReadKey();.Clear();;
}
}
}
}
Результат выполнения программы
шаблонный функция класс интерфейс
Задание 2
Разработайте шаблонный класс CMyArray,
представляющий собой массив элементов некоторого типа T.
Массив должен предоставлять следующие
возможности:
· Возможность добавления элемента
· Возможность получения количества
элементов
· Возможность индексированного доступа
к элементам
· Возможность изменения длины массива
· Возможность опустошения массива
· Конструктор копирования
Текст программы
class MyGenericClass<T>
{[] aa;index = 0;MyGenericClass(int
q)
{= new T[q];
}MyGenericClass(MyGenericClass<T>
q)
{= q.aa;
}void ArrayAdd(T value)
{[index++] = value;
}int GetLength()
{aa.Length;
}void ArrayResize(int newSize)
{(newSize < aa.Length)
{.WriteLine("Error!!!");
}
{.Resize(ref aa, newSize);
}
}void ArrayClear()
{(int i = 0; i < aa.Length;
i++)
{[i] = default(T);
}
}void Show()
{(T item in aa)
{.WriteLine(" " +
item + " ");
}
}T GetElement(int qwe)
}
}Program
{void Main(string[] args)
{prov = "";index =
0;<string> a1 = null;<int> a2 = null;<double> a3 =
null;<char> a4 = null;control = "";(control != "ex")
{.WriteLine("1 - Create
Array *");.WriteLine("2 - Get Lenght Array
*");.WriteLine("3 - Get Element *");.WriteLine("4 - Resize
Array *");.WriteLine("5 - Clear Array *");.WriteLine("6 -
Copy Array *");.WriteLine("*************************");=
Console.ReadLine();.Clear();(control)
{"1":.WriteLine("What
array create? string,int,double,char?");s_c = Console.ReadLine();=
s_c;(s_c == "string")
{.Write("Enter array
lenght: ");= int.Parse(Console.ReadLine());= new
MyGenericClass<string>(index);(int i = 0; i < index; i++)
{.ArrayAdd(Console.ReadLine());
}
}(s_c == "int")
{.Write("Enter array
lenght: ");= int.Parse(Console.ReadLine());= new
MyGenericClass<int>(index);(int i = 0; i < index; i++)
{.ArrayAdd(int.Parse(Console.ReadLine()));
}
}(s_c == "double")
{.Write("Enter array
lenght: ");= int.Parse(Console.ReadLine());= new
MyGenericClass<double>(index);(int i = 0; i < index; i++)
{.ArrayAdd(double.Parse(Console.ReadLine()));
}
}(s_c == "char")
{.Write("Enter array
lenght: ");= int.Parse(Console.ReadLine());= new
MyGenericClass<char>(index);(int i = 0; i < index; i++)
{.ArrayAdd(char.Parse(Console.ReadLine()));
}
}.ReadKey();.Clear();;"2":(prov
== "string")
{.WriteLine(a1.GetLength());
}(prov == "int")
{.WriteLine(a2.GetLength());
}(prov == "double")
{.WriteLine(a3.GetLength());
}(prov == "char")
{.WriteLine(a4.GetLength());
}.ReadKey();.Clear();;"3":(prov
== "string")
{.Write("Enter index :
");ind_dost = int.Parse(Console.ReadLine());.WriteLine(a1.GetElement(ind_dost
- 1));
}(prov == "int")
{.Write("Enter index :
");ind_dost =
int.Parse(Console.ReadLine());.WriteLine(a2.GetElement(ind_dost - 1));
}(prov == "double")
{.Write("Enter index :
");ind_dost = int.Parse(Console.ReadLine());.WriteLine(a3.GetElement(ind_dost
- 1));
}(prov == "char")
{.Write("Enter index :
");ind_dost =
int.Parse(Console.ReadLine());.WriteLine(a4.GetElement(ind_dost - 1));
}.ReadKey();.Clear();;"4":(prov
== "string")
{.Write("Enter new size :
");new_size = int.Parse(Console.ReadLine());.ArrayResize(new_size);
}(prov == "int")
{.Write("Enter new size :
");new_size = int.Parse(Console.ReadLine());.ArrayResize(new_size);
}(prov == "double")
{.Write("Enter new size :
");new_size = int.Parse(Console.ReadLine());.ArrayResize(new_size);
}(prov == "char")
{.Write("Enter new size :
");new_size = int.Parse(Console.ReadLine());.ArrayResize(new_size);
}.ReadKey();.Clear();;"5":(prov
== "string")
{.ArrayClear();
}(prov == "int")
{.ArrayClear();
}(prov == "double")
{.ArrayClear();
}(prov == "char")
{.ArrayClear();
}.ReadKey();.Clear();;"6":(prov
== "string")
{<string> copy_a1 = new
MyGenericClass<string>(a1);_a1.Show();
}(prov == "int")
{<int> copy_a2 = new
MyGenericClass<int>(a2);_a2.Show();
}(prov == "double")
{<double> copy_a3 = new
MyGenericClass<double>(a3);_a3.Show();
}(prov == "char")
{<char> copy_a4 = new
MyGenericClass<char>(a4);_a4.Show();
}.ReadKey();.Clear();;
}
}
}
}
Результат выполнения программы
Имеется следующая иерархия классов и
интерфейсов, моделирующих иерархию объектов в обществе (человек, учитель,
ученик, студент, рабочий, аспирант):
Свойства, которыми обладают сущности данной
иерархии:
Сущность
|
Свойства
|
Человек
|
Имя Фамилия Отчество Адрес
|
Ученик
|
Название школы Класс
|
Преподаватель
|
Название предмета
|
Студент
|
Название ВУЗ-а Номер студенческого
билета
|
Аспирант
|
Тема диссертации
|
Рабочий
|
Специальность
|
Текст программы
interface IPerson
{Name { get; set; }Surname {
get; set; }Otchestvo { get; set; }Adress { get; set; }
}IPupil
{NameScholl { get; set;
}NameKlass { get; set; }
}ITeacher
{NamePredmet { get; set; }
}IStudent
{NameUniver { get; set;
}NomerStud { get; set; }
}IWorker
{Special { get; set; }
}IAdvancedStudent
{TemaDeklarazii { get; set; }
}CPupil : IPupil, IPerson
{string Name { get; set;
}string Surname { get; set; }string Otchestvo { get; set; }string Adress { get;
set; }string NameScholl { get; set; }string NameKlass { get; set; }override
string ToString()
{"PUPIL-" + "
Name: " + Name + " Surname: " + Surname + " Otchestvo:
" + Otchestvo + " Adress: " + Adress + " NameScholl: "
+ NameScholl + " NameKlass: " + NameKlass;
}
}CTeacher : ITeacher, IPerson
{string Name { get; set;
}string Surname { get; set; }string Otchestvo { get; set; }string Adress { get;
set; }string NamePredmet { get; set; }override string ToString()
{"TEACHER-" + "
Name: " + Name + " Surname: " + Surname + " Otchestvo:
" + Otchestvo + " Adress: " + Adress + " NamePredmet:
" + NamePredmet;
}
}CStudent : IStudent, IPerson
{string Name { get; set;
}string Surname { get; set; }string Otchestvo { get; set; }string Adress { get;
set; }string NameUniver { get; set; }string NomerStud { get; set; }override
string ToString()
{"STUDENT-" + "
Name: " + Name + " Surname: " + Surname + " Otchestvo:
" + Otchestvo + " Adress: " + Adress + " NameUniver: "
+ NameUniver + " NomerStud: " + NomerStud;
}
}CWorker : IWorker, IPerson
{string Name { get; set;
}string Surname { get; set; }string Otchestvo { get; set; }string Adress { get;
set; }string Special { get; set; }override string ToString()
{"WORKER-" + "
Name: " + Name + " Surname: " + Surname + " Otchestvo:
" + Otchestvo + " Adress: " + Adress + " Special: " +
Special;
}
}CAdvanceStudent :
IAdvancedStudent, IStudent, IPerson
{string Name { get; set;
}string Surname { get; set; }string Otchestvo { get; set; }string Adress { get;
set; }string NameUniver { get; set; }string NomerStud { get; set; }string
TemaDeklarazii { get; set; }override string ToString()
{"ADVANCESTUDENT-" +
" Name: " + Name + " Surname: " + Surname + "
Otchestvo: " + Otchestvo + " Adress: " + Adress + "
NameUniver: " + NameUniver + " NomerStud: " + NomerStud + "
TemaDeklarazii: " + TemaDeklarazii;
}
}List
{static List<IPerson>
spisok_chel = new List<IPerson>();
}Program
{void Main(string[] args)
{control =
"";(control != "ex")
{.WriteLine("1 - Create
Pupil *");.WriteLine("2 - Create Teacher *");.WriteLine("3
- Create AdvancedStudent *");.WriteLine("4 - Create Student
*");.WriteLine("5 - Create Worker *");.WriteLine("6 - Show
List *");.WriteLine("*****************************");=
Console.ReadLine();.Clear();(control)
{"1":cp = new
CPupil();.Write("Enter Name: ");.Name =
Console.ReadLine();.Write("Enter Surname: ");.Surname =
Console.ReadLine();.Write("Enter Otchestvo: ");.Otchestvo =
Console.ReadLine();.Write("Enter Adress: ");.Adress =
Console.ReadLine();.Write("Enter NameKlass: ");.NameKlass =
Console.ReadLine();.Write("Enter NameScholl: ");.NameScholl =
Console.ReadLine();.spisok_chel.Add(cp);.ReadKey();.Clear();;"2":ct =
new CTeacher();.Write("Enter Name: ");.Name = Console.ReadLine();.Write("Enter
Surname: ");.Surname = Console.ReadLine();.Write("Enter Otchestvo:
");.Otchestvo = Console.ReadLine();.Write("Enter Adress:
");.Adress = Console.ReadLine();.Write("Enter NamePredmet:
");.NamePredmet = Console.ReadLine();.spisok_chel.Add(ct);.ReadKey();.Clear();;"3":cas
= new CAdvanceStudent();.Write("Enter Name: ");.Name =
Console.ReadLine();.Write("Enter Surname: ");.Surname =
Console.ReadLine();.Write("Enter Otchestvo: ");.Otchestvo = Console.ReadLine();.Write("Enter
Adress: ");.Adress = Console.ReadLine();.Write("Enter NameUniver:
");.NameUniver = Console.ReadLine();.Write("Enter NomerStud:
");.NomerStud = Console.ReadLine();.Write("Enter TemaDeklarazii:
");.TemaDeklarazii = Console.ReadLine();.spisok_chel.Add(cas);.ReadKey();.Clear();;"4":cs
= new CStudent();.Write("Enter Name: ");.Name =
Console.ReadLine();.Write("Enter Surname: ");.Surname =
Console.ReadLine();.Write("Enter Otchestvo: ");.Otchestvo =
Console.ReadLine();.Write("Enter Adress: ");.Adress =
Console.ReadLine();.Write("Enter NameUniver: ");.NameUniver =
Console.ReadLine();.Write("Enter NomerStud: ");.NomerStud =
Console.ReadLine();.spisok_chel.Add(cs);.ReadKey();.Clear();;"5":cw =
new CWorker();.Write("Enter Name: ");.Name = Console.ReadLine();.Write("Enter
Surname: ");.Surname = Console.ReadLine();.Write("Enter Otchestvo:
");.Otchestvo = Console.ReadLine();.Write("Enter Adress:
");.Adress = Console.ReadLine();.Write("Enter Special:
");.Special = Console.ReadLine();.spisok_chel.Add(cw);.ReadKey();.Clear();;"6":(IPerson
item in List.spisok_chel)
{.WriteLine(item.ToString());.WriteLine("*********************************************************");
}.ReadKey();.Clear();;
}
}
}
}
Результат выполнения программы