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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2012, 12:45   #1
MrRifleman
Пользователь
 
Регистрация: 24.03.2012
Сообщений: 13
Вопрос Шаблоны функций. Есть ошибки.

Помогите исправить ошибки!

Код:
#include <iostream>
#include <math.h>
using namespace std;

template <class T>
T myfind(T* arr, int n)
{
	int i,j,maxelem,minelem;
	T summ;

	for (maxelem = minelem = i = summ = 0; i < n; i++){
		if (arr[i] > 0) summ += arr[i]; // Сумма положительных элементов
		if (fabs(arr[i]) > fabs(arr[maxelem])) maxelem = i; // Определение номера максимального по модулю элемента
		if (fabs(arr[i]) < fabs(arr[minelem])) minelem = i; // И минимального
	}

	return summ;
}

template <class B>
B myfind_1(B* arr, int n)
{
	int i,j,maxelem,minelem;
	B temp;
	if (abs(maxelem - minelem) > 1){ // Если между максимальным и минимальным по модулю элементами
		// есть элементы
		int stelem = (maxelem < minelem ? maxelem : minelem); // Определяем какой из максимального и минимального элементов
		int endelem = (maxelem < minelem ? minelem : maxelem); // имеет меньший номер
		for (i = stelem + 1,temp = 1; i < endelem; i++)
			temp *= arr[i]; // Произведение промежуточных элементов
	}

return temp;
}


int main(){
	int n,i,j,
		maxelem, minelem; // Номера максимального и минимального элементов
	float summ = 0, // Сумма положительных элементов
		temp;
	cout << "Enter n: "; // Ввод количества элементов массива
	cin >> n;
	float *arr = new float [n]; // Создание массива
	for (i = 0; i < n; i++){
		cout << "Enter element number " << i + 1 << " : "; // Ввод элементов массива
		cin >> arr[i];
	}
	maxelem = minelem = 0;

	cout << "Summ = " << myfind(arr, n) << endl; // Вывод суммы положительных елементов
	
			
		cout << "Pro = " << myfind_1(arr, n)  << endl; // Вывод полученного произведения
	}
	else
		cout << "No elements";
	cout << "Source array:\n[";
	for (i = 0; i < n; i++) // Вывод исходного массива
		cout << arr[i] << (i < n-1 ? ", " : "]\n"); //
	// Сортировка массива методом сравнения:
	for (int i = 0; i < n-1; i++) // Проход всего массива кроме последнего элемента
		for (int j = i + 1; j <= n-1; j++) // Проход оставшейся части массива
			if (arr[i] < arr[j]){ // Сравнение текущего элемента с элементом из оставшейся части.
				temp = arr[i]; // Обмен значений элементов если они стоят в неправильном порядке
				arr[i] = arr[j];
				arr[j] = temp;
			}

	cout << "Array sorted:\n[";
	for (i = 0; i < n; i++) // Вывод отсортированного массива
		cout << arr[i] << (i < n-1 ? ", " : "]\n"); //
	delete [] arr;
	cin.get(),cin.get();
	return 0;
}
Программа не запускается выдает различные ошибки, типо: temp: неиспользованная локальная переменная, j: неиспользованная локальная переменная, синтаксическая ошибка: else, синтаксическая ошибка: отсутствие ";" перед "<<", отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию, синтаксическая ошибка: for и др.
MrRifleman вне форума Ответить с цитированием
Старый 03.06.2012, 13:56   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Это потому, что ты через заднее место фигурные скобочки натыкал, и сам запутался, где у тебя начинается блок, а где заканчивается.

Смотри, что у тебя рисуется:

Код:
int main(){
        ...
	for (i = 0; i < n; i++){
        ...
	}
        ...
	}     //вот эта фигурная скобочка к чему тут?
              //У тебя здесь что, функция main уже закончилась, или как?
	else
        ...  //а вот этот блок вообще без скобочек начинается.
             //и фик пойми, где должен заканчивается неработающий код.
Причина: неумения держать стиль кода и контролировать его читабельность.
Лекарство: Принять одну единую форму записи фигурный скобок

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

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны функций. Исправьте ошибки. MrRifleman Общие вопросы C/C++ 6 01.06.2012 22:30
Шаблоны функций masashama Visual C++ 7 05.10.2011 01:46
Шаблоны функций optimator Общие вопросы Delphi 0 13.11.2010 17:29
Шаблоны функций. (*_*) Общие вопросы C/C++ 2 05.06.2009 20:21
шаблоны функций с++6.0 tanya Общие вопросы C/C++ 18 20.12.2008 19:39