Результаты тестирования.




Цели работы

- Изучить понятие "функция", способы обмена информацией с функциями. Научиться объявлять, определять, вызывать функции.

- Изучить понятия перегрузки и шаблонов функций и научиться работать с перегруженными и шаблонными функциями.

Краткая теоретическая часть.

Функция определяется именем, типом результата, числом формальных параметров (их типами) и составным оператором (блоком, описывающим выполнение функцией действия).

Различают объявление функции, определение функции и вызов функции.

Объявление (declaration) – задает имя функции, тип возвращаемого значения, число и тип аргументов, которые должны присутствовать при вызове функции.

К функции нельзя обратиться, если она не была предварительно объявлена.

Тип void в качестве типа возвращаемого значения означает, что функция не возвращает значения.

Каждая функция, вызываемая в программе, должна быть где-то определена (definition) и только один раз.

Определением функции является объявление функции, в котором присутствует тело функции

Суть перегрузки функций заключается в том, что транслятор различает функции не только по именам, но и по типу и количеству аргументов. При этом в некоторых из них даже не требуется явно указывать, что функции являются перегружаемыми, а просто описывают необходимое количество функций с одинаковым именем, но с разным набором параметров. Условие применения разных наборов параметров является обязательным.

Шаблоны функций предоставляют в наше распоряжение механизм, с помощью которого можно сохранить семантику определений и вызовов функций (инкапсуляция фрагмента кода в одном месте программы и гарантированно однократное вычисление аргументов), не принося в жертву сильную типизацию языка C++, как в случае применения макросов.

Постановка задачи

 

Задание 1.

Написать функцию вычисления суммы числовой последовательности.

Задание 2.

Написать функции, реализующие комплексную арифметику, используя все способы обмена информацией между функциями. Написать код, демонстрирующий работоспособность функций.

Задание 3.

Организовать 2 перегружаемые функции для сортировки числового и символьного массива, предусмотрев параметр заданный по умолчанию. По умолчанию порядок сортировки от минимального к максимальному элементу.

 


Листинг программы

Задание 1

#include "stdafx.h"

#include <iostream>

using namespace std;

int count(int *arr, int nArr);

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"Russian");

const int nArr=6;// nArr - длинна числовой последовательности

cout<<"Длинна числовой последовательности: "; cout << nArr<<endl;

int arr[nArr];

cout <<"Числовая последовательность заполняется случайными числами: \n";

for(int i=0;i<nArr;i++)

{

arr[i]=rand()%9+1;

cout<< arr[i]<<" ";

}

cout <<"\nСумма числовой последовательности = "<<count(arr,nArr);

cin.get();

return 0;

}

int count(int *arr, int nArr) // функция вычисляющая сумму элементов числового ряда

{

int count = 0;

for (int i=0;i<nArr;i++) count+=arr[i];

return count;

}

 

Задание 2

#include "stdafx.h"

#include <iostream>

using namespace std;

int plus(int fx,int fy);

void minus(int *fx, int *fy, int *fresult);

void umnozhenie(int &fx, int &fy, int &fresult);

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"Russian");

int x,y,result;

char operation;

cout << "Введите значение X: ";cin>>x;

cout << "\nВведите знак операции (+ - *): ";cin>>operation;

cout << "\nВведите значение Y: ";cin>>y;

switch (operation)

{

case '+': // создание локальных x,y

result = plus(x,y);

cout <<"\nX + Y = " <<result;

break;

case '-': // передача указателей

minus(&x,&y,&result);

cout<< "\nX - Y = "<<result;

break;

case '*': //передача по ссылке

umnozhenie(x,y,result);

cout<<"\nX * Y = "<< result;;

break;

}

cin.sync();

cin.get();

return 0;

}

int plus(int fx, int fy)

{

return fx+fy;

}

void minus(int *fx, int *fy, int *fresult)

{

*fresult=*fx-*fy;

}

void umnozhenie(int &fx, int &fy, int &fresult)

{

fresult=fx*fy;

}

 

Задание 3

#include "stdafx.h"

#include "iostream"

#include <string>

using namespace std;

void sort(int *arr, int size, bool inverse=0);

void inputArray(int *arr, int size);

void outputArray(int *arr, int size);

void inputArray(char *arr, int size);

void outputArray(char *arr, int size);

void sort(char *arr, int size, bool inverse=0);

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"Russian");

bool typeArray;

bool inverse;

cout << "Введите тип сортируемого массива(0 если int, 1 если char): ";

cin>>typeArray;

cout << "Сортировка от максимального к минимальному? (1 если да, 0 если нет): ";

cin>>inverse;

int n;

cout << "Введите число сортируемых элементов: ";

cin >> n;

int *masInt= new int[];

char *masChar = new char[];

switch(typeArray)

{

case 0:

inputArray(masInt,n);

outputArray(masInt,n);

sort(masInt,n,inverse);

outputArray(masInt,n);

break;

case 1:

inputArray(masChar,n);

outputArray(masChar,n);

sort(masChar,n,inverse);

outputArray(masChar,n);

break;

}

 

cin.sync();

cin.get();

return 0;

}

void sort(int *arr, int size, bool inverse)

{

int t;

int i,j;

for (i=0;i<size;i++)

{

for (j=0;j<size-1;j++)

{

if (!inverse)

{

if (arr[i]<arr[j])

{

t=arr[i];

arr[i]=arr[j];

arr[j]=t;

}

}

else if(inverse)

{

if (arr[i]>arr[j])

{

t=arr[i];

arr[i]=arr[j];

arr[j]=t;

}

}

}

}

}

void inputArray(int *arr, int size)

{

for (int i=0;i<size;i++)

{

cout<<"\nЭлемент # "<<i+1<<": ";

cin >> arr[i];

}

}

void outputArray(int *arr, int size)

{

cout<<"\nВывод массива: ";

for (int i=0;i<size;i++)

{

cout<<arr[i]<<" ";

}

}

void inputArray(char *arr, int size)

{

for (int i=0;i<size;i++)

{

cout<<"\nЭлемент # "<<i+1<<": ";

cin >> arr[i];

}

}

void outputArray(char *arr, int size)

{

cout<<"\nВывод массива: ";

for (int i=0;i<size;i++)

{

cout<<arr[i]<<" ";

}

}

void sort(char *arr, int size, bool inverse)

{

char t;

int i,j;

for (i=0;i<size;i++)

{

for (j=0;j<size-1;j++)

{

if (!inverse)

{

if (arr[i]<arr[j])

{

t=arr[i];

arr[i]=arr[j];

arr[j]=t;

}

}

else if(inverse)

{

if (arr[i]>arr[j])

{

t=arr[i];

arr[i]=arr[j];

arr[j]=t;

}

}

}

}

}

 

 

Результаты тестирования.

 

Задание 1

Задание 2

Задание 3

Вывод

Имена функций могут быть перегружены путём изменения количества или типа параметров. Компилятор находит нужную функцию на основе списка параметров.

Для создания параметра по умолчанию его достаточно присвоить в прототипе функции. Параметры по умолчанию задаются только справа налево.

Параметры в функцию могут передаваться как значения, как ссылки или указатели. При передаче параметров как значений, в функции создаются локальные копии переменных.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: