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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
.: TAPAKAH :.
Мега Таракан
110 / 11 / 1
Регистрация: 24.05.2010
Сообщений: 227
#1

Работа с шаблонами - C++

25.02.2012, 21:00. Просмотров 912. Ответов 8
Метки нет (Все метки)

Доброго вечера! Сейчас решаю задачку на использование шаблонов, и вот с чем столкнулся: при вводе значений в массив, выдает ошибку (она на скрине)
Задача так выглядит:

Для работы с двумерными массивами арифметических типов данных
разработать шаблоны ввода и вывода массива,
а также шаблон для решения основной задачи:

Подсчитать среднее арифметическое элементов,
расположенных выше главной диагонали

Код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <cstdlib>
 
//-----------------------------------------------------------
template <class T, unsigned int n1, unsigned int n2>
void InArray(T (&t)[n1][n2])
{
  for(unsigned int i = 0; i < n1; i++)
  {
    for(unsigned int j = 0; j < n2; j++)
    {
      std::cout << "Array[" << i <<"]["<< j << "]-> ";
      std::cin >> t[i][j];
    }
  }
}
 
//-----------------------------------------------------------
template <class T, unsigned int n1, unsigned int n2>
void OutArray(T (&t)[n1][n2])
{
  for(unsigned int i = 0; i < n1; i++)
  {
    for(unsigned int j = 0; j < n2; j++)
    {
      std::cout << "Array[" << i << "][" << j << "]-> ";
      std::cout << t[i][j];
      std::cout << std::endl;
    }
  }
}
 
//-----------------------------------------------------------
template <class T, unsigned int n1, unsigned int n2>
void Average(T (&t)[n1][n2])
{
  T tmp = 0;
  for(unsigned int i = 1; i < n1; i++)
    for(unsigned int j = 0; j < n2; j++)
      if(i >= j) tmp += t[i][j];
}
 
 
int main(int argc, char * argv[])
{
  const int N = 5;
  float A[N][N];
  std::cout << "------------ input array ------------" << std::endl;
  InArray(A);
  std::cout << "------------ output array ------------" << std::endl;
  OutArray(A);
  std::cout << "------------ average value ------------" << std::endl;
  Average(A);  
  system("PAUSE");
  return 0;
}

Подробности ошибки
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: conhost.exe
Версия приложения: 6.1.7601.17641
Отметка времени приложения: 4e03f6d7
Имя модуля с ошибкой: conhost.exe
Версия модуля с ошибкой: 6.1.7601.17641
Отметка времени модуля с ошибкой: 4e03f6d7
Код исключения: c0000005
Смещение исключения: 00001990
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
C:\Windows\system32\ru-RU\erofflps.txt

Если не сложно, укажите ошибкудумаю она очевидная, просто я в С++ не оч. шарю...
Заранее всем премного благодарен
0
Миниатюры
Работа с шаблонами   Работа с шаблонами  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 21:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с шаблонами (C++):

Работа с шаблонами с++ - C++
Добрый вечер. Опять возник вопрос( Нужно создать шаблон списка. Для этого нужно создать структуру, где будут храниться указатели на...

Работа с шаблонами С++ - C++
Задача следующая: реализовать пирамидальную сортировку с итерфейсом таким - подаем класс итератор на наши данные и сласс сравнения в класс...

Работа с двунаправленным списком и с шаблонами в С++ - C++
Здравствуйте Поомогите решить такую задачу: &quot;Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным...

Композиционная связь между шаблонами. работа дестракторов - C++
Есть например такой проект. Вопросы в следующем. Как происходит процесс работы дестрактора между этими классами ? Правильно ли...

Работа с шаблонами и ошибка "Undefined reference" - C++
только приступил к изучению шаблонов и сразу куча вопросов и проблем прошу объяснить мне на пальцах почему не работает matrix.h ...

Обращение с шаблонами классов. - C++
У меня классическая задача для начинающих - класс определяющий координаты точки. Использую класс без шаблонов - всё работает. Для того...

8
Devochka
31 / 19 / 1
Регистрация: 07.10.2011
Сообщений: 98
25.02.2012, 21:50 #2
Либо так
C++
1
2
template <class T>
void InArray(T *Array, unsigned int n1, unsigned int n2)
Либо так (48)
C++
1
InArray(A, n, n);
Уж очень шаблон мудренный...
1
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
25.02.2012, 22:02 #3
Шаблонные функции, вроде, работают нормально, если не учитывать, что функция Average никак не обрабатывает результат.
У меня все работает, как должно. Каким образом воспроизвести ошибку?
1
.: TAPAKAH :.
Мега Таракан
110 / 11 / 1
Регистрация: 24.05.2010
Сообщений: 227
25.02.2012, 22:12  [ТС] #4
Devochka ща проверю и напишу результат)

lemegeton попробую добавить после 40 строки std::cout << "Average-> " << tmp;

Добавлено через 3 минуты
Devochka что то не получается воспользоваться твоим советом
выложи исправленный код пжлст
0
Devochka
31 / 19 / 1
Регистрация: 07.10.2011
Сообщений: 98
25.02.2012, 22:42 #5
Где-то так, но заполнение рандомно, одномерный массив, без std:: Думаю, принцип понятен и сделаешь под себя.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <ctime>
using namespace std;
 
template <typename T, typename K>
K InArray (K Arr[], T Size)
{
    srand (time(0));
    for (int i = 0; i < Size; i++)
    {
        Arr [i] = rand() % 51 - 20;
    }
    return 0;
}
 
template <typename T, typename K>
K OutArray (K Arr[], T Size)
{
    for (int i = 0; i < Size; i++)
    {
        cout << Arr [i] << '\t';
    }
    cout << endl;
    return 0;
}
 
int main()
{
    const unsigned int size = 5;
    int Array [size];
    InArray (Array, size);
    OutArray (Array, size);
    return 0;
}
1
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
25.02.2012, 22:54 #6
Цитата Сообщение от .: TAPAKAH :. Посмотреть сообщение
lemegeton попробую добавить после 40 строки std::cout << "Average-> " << tmp;
Это все?
Я говорю, что код работает нормально. Как воспроизвести ошибку?
1
Devochka
31 / 19 / 1
Регистрация: 07.10.2011
Сообщений: 98
25.02.2012, 23:01 #7
Цитата Сообщение от Devochka Посмотреть сообщение
template <typename T, typename K> K OutArray (K Arr[], T Size)
Здесь можно даже лучше:
C++
1
2
template <typename T, typename K>
void OutArray (K Arr[], T Size)
Написать void вместо K в типе функции.
1
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
25.02.2012, 23:10 #8
Цитата Сообщение от .: TAPAKAH :. Посмотреть сообщение
template <class T, unsigned int n1, unsigned int n2>
void InArray(T (&t)[n1][n2])
Кстати, смысл такого "замысловатого" шаблона именно в том, чтобы не передавать размеры массива в функцию. Естественно, это не сработает с выделенной памятью.
1
.: TAPAKAH :.
Мега Таракан
110 / 11 / 1
Регистрация: 24.05.2010
Сообщений: 227
26.02.2012, 14:27  [ТС] #9
Короче, я понял корень всех моих бед - это компилятор MinGW
Измученный после танцов с бубном, я открыл RAD Studio и запустил код, который не работал в MinGW(такие же ошибки, что и в первом посте) и он без проблем заработал))

Рабочий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
 
template <typename X>
void InputArray(X * a,int n1, int n2)
{
  for(int i = 0; i < n1; i++, std::cout << std::endl)
    for(int j = 0; j < n2; j++)
    {
      std::cout << "Array[" << i << "][" << j << "]-> ";
      std::cin >> a[i][j];
    }
}
 
template <typename X>
void OutputArray(X * a,int n1, int n2)
{
  for(int i = 0; i < n1; i++, std::cout << std::endl)
    for(int j = 0; j < n2; j++)
      std::cout << "a[" << i << "][" << j << "]-> " << a[i][j] << "\n";
}
 
template <typename X>
void Average(X * a, int n1, int n2)
{
  float summa = 0;
  int count = 0;
  for(int i = 0; i < n1; i++)
    for(int j = 0; j < n2; j++)
      if (i >= j)
      {
        summa += a[i][j];
        count++;
      }
  std::cout << "Average value-> " << summa/count << std::endl;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  const int N = 4;
  float A[N][N];
  system("color 0a");
  std::cout << "------------ Input array ------------" << std::endl;
  InputArray(A, N, N);
  std::cout << "------------ Output array ------------" << std::endl;
  OutputArray(A, N, N);
  std::cout << "------------ Average value ------------" << std::endl;
  Average(A, N, N);
  system("PAUSE");
  return 0;
}
0
26.02.2012, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 14:27
Привет! Вот еще темы с ответами:

Как работать с шаблонами - C++
Простенькая програмка, но не компилируеться. Не могу я понять как работать с шаблонами, сколько уже перечитал, все-равно не въеду что не...

Реализация стека с шаблонами - C++
Вообщем, реализую стек известная проблема, не могу понять почему не компилирует, хотя 20 раз все проверил #include &lt;iostream&gt; ...

Почему не компилируется с шаблонами? - C++
Точнее, компилируется, но не линкуется. Ошибка &quot;undefined reference&quot; в 9-й строке main.cpp. Никак не пойму, как же надо было написать? ...

Задача с шаблонами и наследованием - C++
Ребята, есть такая проблема.. Предположим, что у нас есть класс Image (не шаблонный). И есть класс ImageExt&lt;T1,T2&gt; (шаблонный),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru