Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 22:21   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение шаблонная функция

У меня такое задание: написать функцию-шаблон, которая переставляет эл-ты в массиве. Правильно ли я это сделал?


Код:
template <class T,int n>
void fun()
{
	int m,k,first,second;;
	T *arr = new T [n];
	for(int i=0;i<n;i++){ arr[i] =i;
	cout<<arr[i]<<endl;}cout<<" input first:"<<endl;
	cin>> first;

		for(int i=0;i<n;i++)
			if(arr[i]==first) m=i;

		cout<<" input second:"<<endl;
		cin>>second;

		for(int i=0;i<n;i++)
			if(arr[i]==second) k=i;

		system("cls");
			cout<<" changing..."<<endl;
			arr[m]=second;
			arr[k]=first;
			for(int i=0;i<n;i++)
			{
				cout<<arr[i]<<endl;;
			}
delete []arr;		
system("pause");
}
void main()
{
	fun<float,5>();			
}
zhenya.ya вне форума Ответить с цитированием
Старый 23.02.2011, 00:10   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

работает то правильно. но сделано плохо. функция не должна выполнять работу по вводу выводу.
пусть будет такой прототип
template <typename TYPE> void func (TYPE *arr, int size);

а ввод вывод снаружи
onewho вне форума Ответить с цитированием
Старый 23.02.2011, 01:03   #3
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

да,точно, так будет лучше, большое спасибо!
zhenya.ya вне форума Ответить с цитированием
Старый 23.02.2011, 09:58   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. Чему равно m, если элемента first не окажется в массиве?
2. Чему равно k, если элемента second не окажется в массиве?
Vago вне форума Ответить с цитированием
Старый 25.02.2011, 19:33   #5
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

А мне сказали нужно сделать через swap() ((
Правильно ли я попытался?

Код:
void swap( int &a, int &b )
{
    int  temp    = a;
    a = b;
    b = temp;
}
template <class T>
void fun( T *M, int n )
{
	 cout<<"\n";
  swap(M[2],M[3]);
  for(int i=0;i<n;i++) cout<<M[i]<<endl;
}
int main()
{    
	int n=5;
	char *M = new char [n];
	for( int i = 0; i < n; i++ ){ M[i]=i;cout << M[i]<<endl;}
    
    fun<char>(M,n);
	system("pause");
    return 0;
}
zhenya.ya вне форума Ответить с цитированием
Старый 25.02.2011, 19:49   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

абсолютно верно, осталось тока вывод сделать вне функции, и передачу 2 чисел которые меняем как параметров
onewho вне форума Ответить с цитированием
Старый 25.02.2011, 19:54   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ах да, вы переписали уже существующую функцию
template <class T> void swap ( T& a, T& b );
подключайте заголовок <algorithm>
и юзайте без переопределения на здоровье
onewho вне форума Ответить с цитированием
Старый 25.02.2011, 21:06   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
абсолютно верно
Ой ли?!...
110225.jpg
(M$ Visual Studio 2008 EE & Visual Studio 6).

Так бесстрашно автор переходит от int к char, а потом - к int&, а потом - опять к char... Аж завидно!..
Vago вне форума Ответить с цитированием
Старый 25.02.2011, 22:54   #9
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

Цитата:
подключайте заголовок <algorithm>
А как это может мне помочь? (Я с этим еще не знаком)

Цитата:
Ой ли?!...Так бесстрашно автор переходит от int к char, а потом - к int&, а потом - опять к char... Аж завидно!..
Запутали! И чему тут завидовать??? А как нужно было сделать?
zhenya.ya вне форума Ответить с цитированием
Старый 26.02.2011, 02:08   #10
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Ой ли?!...
Вложение 36372
(M$ Visual Studio 2008 EE & Visual Studio 6).

Так бесстрашно автор переходит от int к char, а потом - к int&, а потом - опять к char... Аж завидно!..
ну да я не обратил внимание что функция void swap( int &a, int &b )
у автора не шаблонная.
а что выдает ромбики всякие так это просто дело в записи массива M[i]=i;
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция if IRMA230 Microsoft Office Excel 12 02.06.2010 22:43
Функция MilenaR Помощь студентам 5 10.05.2010 20:43
функция gets U-S Общие вопросы C/C++ 6 14.11.2009 13:49
Функция в c++ JOFRIF Помощь студентам 1 08.05.2008 18:30
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50