Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Параллельное программирование, MPI. Подсчитать количество вхождений в массив символа "А" http://www.cyberforum.ru/cpp-beginners/thread1127842.html
Ребята, очень нужна помощь! Никогда не сталкивалась с MPI. Помогите пожалуйста с решение задания! Задание 1 - выполняется первым процессом, задача 2 - вторым. Элементы массивов генерируются случайным образом. 1. Создать символьный массив данных на 100 элементов. Подсчитать количество вхождений в массив символа "А".
C++ Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу Нужно написать "Матрица". Перегрузить операторы сложения, вычитания, умножения. Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу. Вот что получилось пока. Почему не работает множественное присваивание c = a = a; и c = a * b; Помогите исправить ошибки! Проблемные строки я отметил ниже. #include <iostream> class matrix { 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. Помогите, пожалуйста, исправить эту ошибку. Эти данные вводятся с клавиатуры. #include<stdio.h> #include<conio.h> #include<string.h> struct seller { char FIO; float t, at; подробнее

Показать сообщение отдельно
xWhoAmIx
14 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 26
23.03.2014, 22:25     Создание шаблонной функции для работы с массивами разных типов данных
Здравствуйте. Столкнулся со следующей проблемой: не могу написать шаблонную функцию подсчета суммы элементов в массиве между первым и последним отрицательными элементами. Нужно, чтобы функция умела работать с массивами разных типов данных: 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*)"

Подскажите, пжолуйста, где я косячу с описанием шаблона? Просто побовал некоторые варианты, что находил в интернете, но получаю постоянно различные ошибки. Плюс я не совсем понимаю, как использовать шаблон в таком случае - почти все примеры идут для программ, написанных в одном файле, правильно ли я обьявляю шаблон при модульной программе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru