Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Козлов Иван Сергеевич Лабораторная работа №4. Перегрузка функций. Шаблоны.. Вариант 1.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра программного обеспечения вычислительной техники
и автоматизированных систем
Отчет по лабораторной работе № 4
по дисциплине: ” Основы алгоритмизации и программирования ”
на тему: ” Перегрузка функций. Шаблоны. ”
Вариант 1
Выполнил: ст.гр.107221
Козлов Иван Сергеевич
Приняла: ст. пр. И. М. Желакович
Минск 2012
Цель работы: Научиться создавать перегруженные функции и шаблоны функций.
Напишите перегружаемую функцию summa, которая возвращает сумму целых, вещественных, либо комплексных чисел.
Комплексные числа представлены в виде структуры из двух вещественных чисел.
Аргументов у функции summa может быть 2 или 3.
Продемонстрируйте работу функции для всех вариантов данных.
// Лабораторная работа № 4. Перегрузка функций. Шаблоны.
// Задание 1
// Вариант 1
// Студент группы 107221 Козлова Ивана Сергеевича
#include <iostream.h>
struct complex
{
double deyst;
double mnim;
};
int summ (int a, int b);
double summ (double a, double b);
double summ (double a, double b, double c);
int summ (int a,int b, int c);
complex summ (complex a, complex b);
complex summ (complex a, complex b, complex c);
void main ()
{
int i1=4, i2=6, i3=12;
cout << "summa 2 celyh schisel: " << summ (i1, i2) << endl;
cout << "summa 3 celyh schisel: " << summ (i1, i2, i3) << endl;
float f1=4.67, f2=3.16, f3=7.56;
cout << "summa 2 vestchestvennyh schisel:" << summ (f1, f2) << endl;
cout << "summa 3 vestchestvennyh schisel:" << summ (f1, f2, f3) << endl;
complex c1={3.5, 2.7}, c2={4.2, 3.7}, c3={4.2, 3.8}, rez;
rez=summ(c1, c2);
cout << "summa 2 complexnyh schisel: " << rez.deyst<< "+"<< rez.mnim << "i"<< endl;
rez=summ(c1, c2, c3);
cout << "summa 3 complexnyh schisel: " << rez.deyst<< "+"<< rez.mnim << "i"<< endl;
}
int summ (int a, int b)
{
return a+b;
}
double summ (double a, double b)
{
return a+b;
}
double summ (double a, double b, double c)
{
return a+b+c;
}
int summ (int a,int b, int c)
{
return a+b+c;
}
complex summ (complex a, complex b)
{
complex c;
c.deyst=a.deyst+b.deyst;
c.mnim=a.mnim+b.mnim;
return c;
}
complex summ (complex a, complex b, complex c)
{
complex d;
d.deyst=a.deyst+b.deyst+c.deyst;
d.mnim=a.mnim+b.mnim+c.mnim;
return d;
}
Напишите перегружаемую функцию, которая выводит на экран строку, двумерный массив или структуру из лабораторной работы №2. Предусмотрите соответствующее пояснение при выводе.
Продемонстрируйте работу функции для всех вариантов данных.
// Лабораторная работа № 4. Перегрузка функций. Шаблоны.
// Задание 2
// Вариант 1
// Студент группы 107221 Козлова Ивана Сергеевича
#include <iostream.h>
struct note
{
char fam[30];
char name[20];
char ntel [10];
int rozhd[3];
unsigned int oklad;
};
void vivod (char* ch);
void vivod (int *a, int size);
void vivod (double *a, int size);
void vivod(note* pmas);
int m[10][10] = { 16, 78, 99, 6, -29, 19, -52, 65, -88, 51,
-79, -22, 32, -25, -62, -69, -2, -59, -75, 89,
-87, 95, -22, 85, -49, -75, 76, 73, -59, -52,
30, 49, -28, -48, 0, 57, -6, -85, 0, -18,
-97, -21, -95, 64, 22, -2, 69, -84, -1, -71,
-25, 47, 72, 43, 15, -44, 44, 61, 4, 74,
88, -61, 0, -64, -83, 97, 0, 90, 15, 8,
-54, 19, 73, 35, -67, -87, 85, -99, -70, 10,
98, 58, -10, -29, 95, 62, 77, 89, 36, -32,
78, 60, -79, -18, 30, -13, -34, -92, 1, -38};
double m2[2][3]={43.6, 43.5, 13.5, 76.454, 27.4, 643.5};
char str []="0 error(s)";
note n1={"kozlov", "ivan", "2435617", 4, 9, 1993, 0};
void main ()
{
vivod (&n1);
vivod ( &m[0][0], 100);
vivod (str);
vivod ( &m2[0][0], 6);
}
void vivod(note* pmas)
{
cout << "structura note:" << endl;
cout << "familija: ";
cout << pmas->fam << endl;
cout << "imja: ";
cout << pmas->name << endl;
cout << "telehon: ";
cout << pmas->ntel << endl;
cout << "data rozhdenija: ";
cout << pmas->rozhd[0] << "." << pmas->rozhd[1] << "." << pmas->rozhd[2] << endl;
cout << "oklad: " << pmas->oklad << endl;
cout << endl;
}
void vivod (char* ch)
{
cout << "stroka: " << ch << endl << endl;
}
void vivod (int *a, int size)
{
int *pa=a;
cout << "dvumernyj massiv int: ";
for (int i=0; i<size;i++)
{
cout << *pa << " ";
pa++;
}
cout << endl << endl;
}
void vivod (double *a, int size)
{
double *pa=a;
cout << "dvumernyj massiv double: ";
for (int i=0; i<size;i++)
{
cout << *pa << " ";
pa++;
}
cout << endl << endl;
}
Задание 3.
Написать программу, которая определяет максимальный элемент в одномерных массивах различных арифметических типов. Используйте шаблон функции.
// Лабораторная работа № 4. Перегрузка функций. Шаблоны.
// Задание 3
// Вариант 1
// Студент группы 107221 Козлова Ивана Сергеевича#include <iostream.h>
template <class t>
void max (t *a, int size)
{
t max=a[0];
for (int i=0;i<size;i++)
{
if (a[i]>max)
max=a[i];
}
cout << max;
}
int mass1[]={12, 25, 67, 34, 17, 68, 42, 96};
double mass2[]={35.8, 41.54, 456.78, 45.78, 45.24, 56.6};
void main ()
{
cout << "maximalnyj element v massive tipa int: ";
max (mass1, sizeof(mass1)/sizeof(mass1[0]));
cout << endl;
cout << "maximalnyj element v massive tipa double: ";
max (mass2, sizeof(mass2)/sizeof(mass2[0]));
cout << endl;
}
Вывод:
Мы ознакомились с шаблонами функции и перегрузкой функций, написали программу с использованием перегружаемых функций и шаблонов функций. Перегрузка функций применяется, когда несколько функций должны выполнять схожие действия. Шаблоны функций применяются, когда функции должны производить одни и те же операции с разними типами данных.