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