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

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

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

Показать сообщение отдельно
Андрей0792
 Аватар для Андрей0792
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 16
25.12.2012, 07:49     Что-то в шаблоне не так
Сделал несколько шаблонных функций для одномерных массивов. Далее код. Всё работает, всё хорошо. Но...

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;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru