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

Что-то в шаблоне не так - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Добавление экземпляров одного класса в другой класс http://www.cyberforum.ru/cpp-beginners/thread745074.html
Доброе утро! В программе создано 2 класса. 1-й предназначен для создания объекта под названием "студент". Он имеет различные свойства (фио, дата рождения, адрес и т.п.). 2-ой класс называется группа....
C++ Подсчитать количество слов, начинающихся с одинаковой группы символов Доброго времени суток. Необходимо написать программу, которая будет считывать текст из файла, считать количество слов, начинающихся с одинаковой группы символов, и затем выводить в выходной... http://www.cyberforum.ru/cpp-beginners/thread745068.html
Работа с памятью C++
Всем привет! Не могу разобраться, как написать код программы, которая моделирует механизм виртуальной памяти. Кто сможет реализовать хотя бы что-то по этому заданию, буду очень благодарен ;) ...
Возвращение по ссылке C++
Здравствуйте! Суть проблемы следующая. Необходимо, чтобы методы класса Pstring2 возвращали значения по ссылке, с возможностью размещения вызова функции слева от знака равно в операциях со сроками....
C++ Написать функцию без параметров, возвращающую при каждом вызове следующее простое число http://www.cyberforum.ru/cpp-beginners/thread745058.html
Написать функцию без параметров, возвращающую при каждом вызове следующее простое число (первый вызов возвращает 2, следующий – 3, третий – 5, и т. д.). Запрещено создавать темы с множеством...
C++ Написать функцию, вычисляющую число последовательностей из нулей и единиц длины n, не содержащих двух единиц подряд 1)Написать функцию, вычисляющую число последовательностей из нулей и единиц длины n, не содержащих двух единиц подряд (обозначим это число p(n)). Используйте рекурсию, то есть подумайте, как... подробнее

Показать сообщение отдельно
Андрей0792
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 16

Что-то в шаблоне не так - C++

25.12.2012, 07:49. Просмотров 276. Ответов 4
Метки (Все метки)

Сделал несколько шаблонных функций для одномерных массивов. Далее код. Всё работает, всё хорошо. Но...

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
#include <conio.h>
#include <numeric>
#include <cstdlib>
 
using namespace std;
 
template <int n, typename T> class MAS{
    private:
        T *mas;
    public:
        MAS(T *mas1){
            mas=new T[n];
            for(int i=0; i<n; i++)
                mas[i]=mas1[i];
        }
        MAS create();
        T max_zna();
        int zero1();
        int zero2();
        T Mul_inter_zer();
        void inversion();
        void print();
};
 
int main(int argc, char *argv[]){
    setlocale(LC_ALL, "Russian");
    int n=15;
    int  mas1[]={-1, 2, 0, -3, 4, 5, -6, 7, 8, -9, 0, -5, 13, 4, -15};
    float mas[]={-1.2, 2.7, 0, -3.4, 0.4, 5.5, -6.1, 7, 8, -9.9, 0, -5.4, 13.2, 4.8, -15.6};
 
    cout << endl << "*** Пример для вещественных значений ***" << endl;
    MAS <15, float> m(mas);
    m.print();
    cout << "Максимальный элемент: "                    << m.max_zna()     << endl;
    cout << "Произведение эл-ов между двумя нулевыми: " << m.Mul_inter_zer() << endl;
    m.inversion();
    m.print();
 
    cout << endl << "*** Пример для целых значений ***"<<endl;
    MAS <15, int> m1(mas1);
    m1.print();
    cout << "Максимальный элемент: "                    << m1.max_zna()     << endl;
    cout << "Произведение эл-ов между двумя нулевыми: " << m1.Mul_inter_zer() << endl;
    m1.inversion();
    m1.print();
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
template <int n, typename T> MAS<n,T> MAS<n,T>::create(){
    int nn;
    T *mas1;
    cout << "Input demention" << endl;
    do{
        cin >> nn;
    }
    while(nn<0);
 
    mas1=new T [nn];
    cout << "Input " << nn << " elements" << endl;
    for(int i=0; i<nn; i++)
        cin >> mas1[i];
    MAS m(mas1, nn);
    *this = m;
    return m;
}
 
template <int n, typename T> T MAS<n,T>::max_zna(){
    T max=0;
    for (int i=0; i<n; i++)
        if (mas[i]>max)
            max=mas[i];
    return max;
}
 
template <int n, typename T> int MAS<n,T>::zero1(){
    int zero1=0;
    for(int i=0; i<n; i++){
        if(mas[i]==0){
            zero1=i;
            break;
        }
    }
    return zero1;
}
 
template <int n, typename T> int MAS<n,T>::zero2(){
    int zero2;
   for(int i=0; i<n; i++){
        if(mas[i]==0){
            zero2=i;
        }
    }
    return zero2;
}
 
template <int n, typename T> T MAS<n,T>::Mul_inter_zer(){
    T p=1;
    for(int i=zero1()+1; i<zero2(); i++)
        p=p*mas[i];
    return p;
}
 
template <int n, typename T> void MAS<n,T>::inversion(){
    T c;
    for (int i=0; i<n/2;i++){
        c=mas[i];
        mas[i]=mas[n-i-1];
        mas[n-i-1]=c;
    }
}
 
template <int n, typename T> void MAS<n,T>::print(){
    int i;
    for(int i=0; i<n; i++)
        cout << "Эл-нт ["<< i << "] = " << mas[i] << endl;
    cout << '\n';
}


...делаю все так же для двумерного массива (матрицы), и Code::Blocks не распознает функцию MATR, говорит нет мол её. А я уже чувствую себя сумасшедшим. В чем ошибка? Далее второй код(неправильный). P.S. До того как я начал зашаблонивать, в лоб и через функции она работала.

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <stdlib.h>
#include <numeric>
#include <conio.h>
 
using namespace std;
 
template <int n, typename T> class MATR{
    private:
        T **mat;
    public:
        MATR(T **mat1, int nn){
            mat=new T *[nn];
            for(int i=0; i<nn; i++)
                mat[i]=new T[n];
            for(int i=0; i<nn; i++)
                for(int j=0; j<nn; j++)
                    mat[i][j]=mat1[i][j];
        }
        MATR create();
        void sum_negative();
        T rows_and_colums();
        void print();
};
 
int main(int argc, char **argv[]){
    setlocale(LC_ALL, "Russian");
    int n = 8;
    int mat1[8][8]={{-1 ,  2 ,  3 , -4 ,  5 ,  6 ,  7 ,   8},
                    { 2 ,  3 ,  3 ,  5 ,  9 ,  8 ,  5 ,   9},
                    { 3 ,  4 ,  5 ,  6 ,  6 ,  7 ,  4 ,  10},
                    {-4 ,  5 ,  6 ,  7 ,  8 ,  9 , 10 ,  11},
                    { 5 ,  3 ,  4 ,  8 , 10 ,  9 ,  4 ,  12},
                    { 6 ,  5 ,  2 ,  9 ,  3 ,  1 , 11 ,  13},
                    { 7 , 14 , 15 , 10 , 11 ,  3 ,  2 ,  14},
                    { 8 ,  9 , 10 , 11 , 12 , 13 , 14 , -15}};
 
    float mat[8][8]={{-1.1 , 2.1 ,  3.1 , -4.1 ,  5.1 ,  6.1 ,  7.1 ,   8.1},
                     { 2.1 , 3.2 ,  3.3 ,  5.2 ,  9.8 ,  8.5 ,  5.9 ,   9.3},
                     { 3.1 , 4.3 ,  5.4 ,  6.3 ,  6.4 ,  7.4 ,  4.1 ,  10.4},
                     {-4.1 , 5.2 ,  6.3 ,  7.4 ,  8.5 ,  9.6 , 10.7 ,  11.8},
                     { 5.1 ,   3 ,    4 ,  8.5 , 10.2 ,  9.4 ,  4.9 ,  12.5},
                     { 6.1 ,   5 ,    2 ,  9.6 ,  3.2 ,  1.2 , 11.5 ,  13.6},
                     { 7.1 ,  14 ,   15 , 10.7 , 11.2 ,  3.2 ,  2.3 ,  14.7},
                     { 8.1 , 9.3 , 10.4 , 11.8 , 12.5 , 13.6 , 14.7 , -15.8}};
 
    cout << endl << "*** Пример для вещественных значений ***"<<endl;
    MATR <8, float> m(mat);
    m.print();
    m.rows_and_colums();
    m.sum_negative();
 
    cout << endl << "*** Пример для целых значений ***"<<endl;
    MATR <8, int> m1(mat1);
    m1.print();
    m1.rows_and_colums();
    m1.sum_negative();
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
template <int n, typename T> MATR<n,T> MATR<n,T>::create(){
    int i,j;
    cout << "Input demtntion" << endl;
    do
        cin >> n;
    while(n<0);
 
    mat=new T *[n];
    for(i=0; i<n; i++)
        mat[i]=new T [n];
    cout << "Input " << n*n << " elements" << endl;
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
            cin >> mat[i][j];
    MATR m(mat);
    *this=m;
    return m;
}
 
template <int n, typename T> void MATR<n,T>::sum_negative(){
    int i,j;
    T *sum;
    sum=new T [n];
    for(i=0; i<n; i++){
        sum[i]=0;
        for(j=0; j<n; j++){
            if(mat[i][j]<0){
                sum[i]+=mat[i][j];
            }
        }
    }
    cout << "Сумма эл-ов строки с отрицательными эл-ми" << endl;
    for(i=0; i<n; i++)
        cout << sum[i] << ' ';
    cout << endl;
}
 
template <int n, typename T> T MATR<n,T>::rows_and_colums(){
    bool matches[n];
    int flag;
    int mat1[8][8];
    for(int i=0; i<=n; i++){
        matches[i] = 0;
        flag = 0;
        for(int j=0; j<=n; j++){
            if (mat1[i][j] == mat1[j][i])
                flag++;
        }
        if (flag == n)
            matches[i] = 1;
        cout << endl;
    }
    cout << endl;
    for (int i=0; i<=n; i++){
        if (matches[i])
            cout << "\nСовпадают строка и столбец под номером: " << i;
    }
    return 0;
}
 
template <int n, typename T> void MATR<n,T>::print(){
    int i,j;
    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            cout.width(5);
            cout << mat[i][j];
        }
        cout << endl;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru