Обобщенное программирование, шаблоны

Разработка шаблонной функции 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.