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

Шаблоны - C++

Восстановить пароль Регистрация
 
Kolich
 Аватар для Kolich
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 26
25.03.2010, 22:33     Шаблоны #1
Не пойму что я неправильно делаю. Как не переделывал, всё равно не получалось. Может кто сможет чем помочь. А задача следующая-надо было оформить каждый пункт этогокода в виде шаблона функций:
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
#include <cstdlib>
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    const int n=10,c=2;
    int a[n]={-3,1,7,6,-9,-1,-4,5,2,8};
    int i,count,max,proiz;
    for (count=i=max=0,proiz=1; i<n; i++){
        if (fabs(max)<fabs(a[i])) max=a[i];
        if (a[i]>c) count++;
        if (max<a[i])proiz=proiz*a[i];}
    cout<<"Kol-vo elementov bolshe C:"<<count<<endl;
    cout<<"Max modul:"<<max<<endl;
    cout<<"Proizvedenie"<<proiz<<endl;
    for (i=0; i<n-1; i++){
        int min=i;
        for (int j=i+1; j<n; j++)
        if (a[j]<a[min]) min=j;
    int b=a[i];
    a[i]=a[min];
    a[min]=b;}
    for (i=0; i<n; i++)cout<<a[i]<<' ';
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вот что получилось:

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
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <cstdlib>
#include <math.h>
 
using namespace std;
 
   /*
   В одномерном массиве, состоящем из n вещественных элементов, вычислить:
   1) количество элементов массива, больших С;
   2) произведение элементов массива, расположенных после максимального по модулю элемента.
   Преобразовать массив таким обрахом, чтобы сначала располагались все отрицательные а потом положительные.
   */
 
template<typename Type>
int counter(Type *a, int n, Type C)
{
   int kol=0;
   for (int i=0; i<n; i++)
      if (a[i] > C) kol++;
   return kol;
}
 
template<typename Type>
int proizv(Type *a, int n)
{
   int proiz=1;
   int max=1;
   for (int i=0; i<n; i++)
      if (fabs(max)<fabs(a[i])) max=i;
   for (int i=max+1; i<n; i++)
      proiz*=a[i];
}
 
template<typename Type>
void modify(Type *a, int n)
{
     int i;
    for (i=0; i<n-1; i++){
        int min=i;
        for (int j=i+1; j<n; j++)
        if (a[j]<a[min]) min=j;
    int b=a[i];
    a[i]=a[min];
    a[min]=b;}
}
 
template<typename Type>
void print(Type *a, int n)
{
     int i;
    for (i=0; i<n; i++)cout<<a[i]<<' ';
}
 
int main()
{
   const int n = 10, C=2;
   int proiz, max, i;
   int a[n] = {1,3,5,-9,6,8,-4,3,2,-6};
 
   cout << "KOl-vo: " << counter(a, n, C) << endl;
   cout << "Proizvedenie: " << proizv(a, n)<< endl;
   modify(a, n);
   print(a, n);
 
   system("pause");
   return 0;
}
Но у меня ни как не получается вычислить произведение элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2010, 22:33     Шаблоны
Посмотрите здесь:

шаблоны C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». C++
Шаблоны в C++ C++
Шаблоны C++
Шаблоны C++
C++ Шаблоны
C++ Шаблоны в C++
Шаблоны C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.03.2010, 02:01     Шаблоны #2
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
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <cstdlib>
#include <math.h>
 
using namespace std;
 
   /*
   В одномерном массиве, состоящем из n вещественных элементов, вычислить:
   1) количество элементов массива, больших С;
   2) произведение элементов массива, расположенных после максимального по модулю элемента.
   Преобразовать массив таким обрахом, чтобы сначала располагались все отрицательные а потом положительные.
   */
 
template<typename Type>
int counter(Type *a, int n, Type C)
{
   int kol=0;
   for (int i=0; i<n; i++)
      if (a[i] > C) kol++;
   return kol;
}
 
template<typename Type>
int proizv(Type *a, int n)
{
   int proiz=1;
   int max=1;
   for (int i=0; i<n; i++)
      if (fabs((float)max)<fabs((float)a[i])) max=i;
   for (int i=max+1; i<n; i++)
      proiz*=a[i];
   return proiz;
}
 
template<typename Type>
void modify(Type *a, int n)
{
     int i;
    for (i=0; i<n-1; i++){
        int min=i;
        for (int j=i+1; j<n; j++)
        if (a[j]<a[min]) min=j;
    int b=a[i];
    a[i]=a[min];
    a[min]=b;}
}
 
template<typename Type>
void print(Type *a, int n)
{
     int i;
    for (i=0; i<n; i++)cout<<a[i]<<' ';
}
 
int main()
{
   const int n = 10, C=2;
   int proiz, max, i;
   int a[n] = {1,3,5,-9,6,8,-4,3,2,-6};
 
   cout << "KOl-vo: " << counter(a, n, C) << endl;
   cout << "Proizvedenie: " << proizv(a, n)<< endl;
   modify(a, n);
   print(a, n);
 
   system("pause");
   return 0;
}
ошибки были в
C++
1
2
3
4
5
6
7
8
9
int proizv(Type *a, int n)
{
   int proiz=1;
   int max=1;
   for (int i=0; i<n; i++)
      if (fabs(max)<fabs(a[i])) max=i;
   for (int i=max+1; i<n; i++)
      proiz*=a[i];
}
ошибка №1 функция fabs работает для float а ты пихаешь int
ошибка №2 функция должна возвращать значение, а такового не происходит необходимо return proiz;
Yandex
Объявления
26.03.2010, 02:01     Шаблоны
Ответ Создать тему
Опции темы

Текущее время: 10:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru