Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создание шаблонной функции для работы с массивами разных типов данных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Параллельное программирование, MPI. Подсчитать количество вхождений в массив символа "А" http://www.cyberforum.ru/cpp-beginners/thread1127842.html
Ребята, очень нужна помощь! Никогда не сталкивалась с MPI. Помогите пожалуйста с решение задания! Задание 1 - выполняется первым процессом, задача 2 - вторым. Элементы массивов генерируются...
C++ Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу Нужно написать "Матрица". Перегрузить операторы сложения, вычитания, умножения. Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу. Вот что... http://www.cyberforum.ru/cpp-beginners/thread1127828.html
C++ В каждой строке матрицы элемент, лежащий на главной диагонали, заменить суммой ранее расположению элементов
в каждой строке матрицы F(k,k) элемент ,лежащий на главной диагонали, если это простое число заменить суммой ранее расположению элементов
Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр C++
Помогите пожалуйста, очень нужно! Разработать программу на языке программирования С++. Дан массив из N целых чисел, где N<=16, каждое число в диапазоне от –32000 до 32000. Удалить из массива...
C++ Вставить после каждого непростого числа его наибольший делитель http://www.cyberforum.ru/cpp-beginners/thread1127786.html
Дан массив из N целых чисел, где N<=16, каждое число в диапазоне от –32000 до 32000. Вставить после каждого непростого числа его наибольший делитель. Использовать функции.1 Примечание: ...
C++ Вывод структуры в файл. Исправить ошибки в коде Здравствуйте. Пишу программу с структурой и вводом в файл. Выдает ошибку что не определены переменные: v, s, t, at. Помогите, пожалуйста, исправить эту ошибку. Эти данные вводятся с клавиатуры. ... подробнее

Показать сообщение отдельно
xWhoAmIx
14 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 33

Создание шаблонной функции для работы с массивами разных типов данных - C++

23.03.2014, 22:25. Просмотров 396. Ответов 3
Метки (Все метки)

Здравствуйте. Столкнулся со следующей проблемой: не могу написать шаблонную функцию подсчета суммы элементов в массиве между первым и последним отрицательными элементами. Нужно, чтобы функция умела работать с массивами разных типов данных: int, float, double(считала сумму чисел между первым отрицательным и последним отрицательным элементами). Программа должна быть модульной.
код соотвествующих файлов:
Main.cpp
Кликните здесь для просмотра всего текста
Код
// Main.cpp: определяет точку входа для консольного приложения.
//
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "Text.h"
#include <iostream>

void main()
{
	setlocale(LC_ALL, "Russian");
	int k=1;
	int size=0;
	int tmp;
	int *arr=new int[2];
	float *arr2=new float[2];
	double *arr3=new double[2];
	while (k!=4)
	{
				printf("\n\n\t\tМеню:\n\n");
				printf("\t1. Заполнить массив\n\n");
				printf("\t2. Вычислить сумму элементов с нечетными номерами..\n\n");
				printf("\t3. Вычислить сумму элементов, расположенных между \n\t\t первым и последним отрицательными элементами... \n\n");
				printf("\t4. Выход\n\n");
				printf("\tВведите номер пункта: \n");
				scanf("%d", &k); 

			switch (k)
			{
				case 1:
				{
					tmp = 0;
					printf("\n\n\t\tПодменю:\n");
					printf("\t1. Массив int\n");
					printf("\t2. Массив float\n");
					printf("\t3. Массив double\n");
					printf("\tВведите номер пункта: \n");
					scanf("%d", &tmp);
									
					if (tmp == 1)
						size=sozdanie(arr);
					if (tmp == 2)
						size=sozdanie(arr2);

					if (tmp == 3)
						size=sozdanie(arr3);
					
				} break;
				
				case 2:
				{ 
					tmp = 0;
					printf("\n\n\t\tПодменю:\n\n");
					printf("\t1. Для массива int\n\n");
					printf("\t2. Для массива float\n\n");
					printf("\t3. Для массива float\n\n");
					printf("\tВведите номер пункта: \n");
					scanf("%d", &tmp);
					if (tmp == 1)
					{
						printf("Сумма нечетных чисел:\t%d\n\n", summnechet(size, arr));
					}

					if (tmp == 2)
					{
					printf("Сумма нечетных чисел:\t%4.3f\n\n", summnechet(size, arr2));
					}

					if (tmp == 3)
					{
					printf("Сумма нечетных чисел:\t%4.6f\n\n", summnechet(size, arr3));
					}
				}
				break;

				case 3: 
				{
					tmp = 0;
					printf("\n\n\t\tПодменю:\n");
					printf("\t1. Массив int\n");
					printf("\t2. Массив float\n");
					printf("\t3. Массив double\n");
					printf("\tВведите номер пункта: \n");
					scanf("%d", &tmp);
									
					if (tmp == 1)
					{
						int d=0;
						d=summbtwotr(size, arr);
						

					}

					if (tmp == 2)
					{
					break;
					}

					if (tmp == 3)
					{
					break;
					}
				} break;
		
			}		
	}
	delete []arr;
	delete []arr2;
	delete []arr3;
	return;
}

Text.h
Кликните здесь для просмотра всего текста
Код
//директива предпроцессору, чтобв если в основном файле инклюд прописан несколько раз - файл подключился только 1 раз
#pragma once

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <algorithm>

int sozdanie(int* &arr);
int sozdanie(float* &arr2);
int sozdanie (double* &arr3);
////////////////////////////////////////////////
int summnechet(int size, int* &arr);
float summnechet(int size, float* &arr2);
double summnechet(int size, double* &arr3);
///////////////////////////////////////////////
template <typedef Summ>
Summ summbtwotr(int size, Summ *array);

Text.cpp
Кликните здесь для просмотра всего текста
Код
#define _CRT_SECURE_NO_WARNINGS

#include "Text.h"
#include "algorithm"

int sozdanie (int* &arr)
{
	int size;
	setlocale(LC_ALL, "Russian");
	srand(time(NULL));
	printf("\tВведите число элементов массива:");
	scanf("%d", &size);
	printf("\n\n");
	delete [] arr;
	arr=new int[size];
	for (int i=0; i<size; i++)
		{
			arr[i] =rand() %9-5;
			printf("%d\t", arr[i]);
		}
	printf("\n");
	return size;
}
int sozdanie (float* &arr2)
{   
	int size;
	setlocale(LC_ALL, "Russian");
	srand(time(NULL));
	printf("\tВведите число элементов массива:");
	scanf("%d", &size);
	printf("\n\n");
	delete [] arr2;
	arr2=new float[size];
	for (int i=0; i<size; i++)
		{
			arr2[i] =(rand() % 10 -6) / float((rand() % 10 + 1));
			printf("%3.3f\t", arr2[i]);
		}
	printf("\n");
	return size;
}
int sozdanie (double* &arr3)
{   
	int size;
	setlocale(LC_ALL, "Russian");
	srand(time(NULL));
	printf("\tВведите число элементов массива:");
	scanf("%d", &size);
	printf("\n\n");
	delete [] arr3;
	arr3=new double[size];
	for (int i=0; i<size; i++)
		{
			arr3[i] =(rand() % 10 -6) / double((rand() % 10+5));
			printf("%3.6f\t", arr3[i]);
		}
	printf("\n");
	return size;
}
/////////////////////////////////////////////////////
int summnechet(int size, int* &arr)
{
	int summ=0;
	for(int i=0; i<size; i++)
	{
		summ+=arr[i];
		i++;
	}
	return summ;
}
float summnechet(int size, float* &arr2)
{
	float summ=0;
	for(int i=0; i<size; i++)
	{
		summ+=arr2[i];
		i++;
	}
	return summ;
}
double summnechet(int size, double* &arr3)
{
	double summ=0;
	for(int i=0; i<size; i++)
	{
		summ+=arr3[i];
		i++;
	}
	return summ;
}
/////////////////////////////////////////////////////
template <typedef Summ>
Summ summbtwotr(int size, Summ *array)
{
	int otric[2];
	int i;
	Summ S;
	for(i=0; i<size; i++)
	{
		if(array[i]<0)
		{
			otric[0]=i;
			break;
		}
	}
	for(i=(size-1); i>=0; i--)
	{
		if(array[i]<0)
		{
			otric[1]=i;
			break;
		}
	}
	for(i=otric[0]; i<=otric[1]; i++)
		S+=array[i];
	return S;
}


При попытке запустить сие творение - получаю кучу ошибок с необьявленными итендификаторами(хотя при убирании всего, что связано с шаблоном и новой функцией - все работает нормально) плюс основная проблема - получаю сообщения в main.cpp на 89 строке:
"template <int Summ> <error-type> summbtwotr(int size, <error-type> *array)
Error: отсутвуют экзампляры шаблон функции summbtwotr, соответствующие типу аргументов: (int, int*)"

Подскажите, пжолуйста, где я косячу с описанием шаблона? Просто побовал некоторые варианты, что находил в интернете, но получаю постоянно различные ошибки. Плюс я не совсем понимаю, как использовать шаблон в таком случае - почти все примеры идут для программ, написанных в одном файле, правильно ли я обьявляю шаблон при модульной программе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.