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

Шаблоны функций как исправить код? - C++

Восстановить пароль Регистрация
 
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
28.02.2014, 22:50     Шаблоны функций как исправить код? #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
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
template <typename X>
X **creatarray(int &n, int &m)
{
    cin >> n >> m;
    
    X **mas = new int *[n];
    for (int i = 0; i<n; i++)
        mas[i] = new int[m];
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        cin >>mas[i][j];
    return mas;
}
 
template <typename X>
void printArray(char *name, X **mas, int n, int m)
{
    cout << name;
    for(int i = 0; i < n; i++,cout<<endl)
    for (int j = 0; j < n; j++)
        cout << mas[i][j] << "\t";
    cout << endl;
}
 
template <typename X>
void **f(X **mas, int &n, int &m)
{
    
    for (int i = 0; i<n; i++)
    for (int j = m - 1; j >= 0; j--)
        cout<< mas[i][j];
    
}
 
    int main()
    {
        int n, m;
 
        
        int **a = creatarray<int>(n, m);
        printArray("ArrayA:",a, n, m);
        f(a, n, m);
 
        double **b = creatarray<double>(n, m);
         printArray("ArrayB:", b, n, m);
         f(b, n, m);
 
        system("pause");
        return 0;
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2014, 22:50     Шаблоны функций как исправить код?
Посмотрите здесь:

C++ Шаблоны функций
C++ Шаблоны функций
C++ шаблоны функций на С++
C++ Шаблоны функций
C++ Шаблоны функций c++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
28.02.2014, 23:12     Шаблоны функций как исправить код? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Что делает функция f? Я не понял этого. Там вывод массива в консоль, как и printArray.
Затем тут
C++
1
2
3
X **mas = new int *[n];
for (int i = 0; i<n; i++)
mas[i] = new int[m];
Массив типа Х, а память выделяется под тип int. Нужно так
C++
1
2
3
X **mas = new X*[n];
for (int i = 0; i<n; i++)
mas[i] = new X[m];
Подкорректировал.
Кликните здесь для просмотра всего текста
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
#include <iostream>
using namespace std;
 
template <typename X>
X **creatarray(int &n, int &m)
{
    cin >> n >> m;
    X **mas = new X *[n];
    for (int i = 0; i<n; i++)
        mas[i] = new X[m];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> mas[i][j];
    return mas;
}
 
template <typename X>
void printArray(char *name, X **mas, int n, int m)
{
    cout << name << endl;
    for (int i = 0; i < n; i++, cout << endl)
        for (int j = 0; j < n; j++)
            cout << mas[i][j] << ' ';
    cout << endl;
}
 
int main()
{
    int n, m;
    int **a = creatarray<int>(n, m);
    printArray("ArrayA:", a, n, m);
 
    double **b = creatarray<double>(n, m);
    printArray("ArrayB:", b, n, m);
 
    system("pause");
    return 0;
}
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
01.03.2014, 15:24  [ТС]     Шаблоны функций как исправить код? #3
моя функция f меняет местами 1 с последним столбцом и т.д.
А то, что вы написала для вещественных у меня тоже не работает(
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
01.03.2014, 15:35     Шаблоны функций как исправить код? #4
В PrintArray опечатка: не n, а m:
for (int j = 0; j < m; j++)
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
01.03.2014, 15:37  [ТС]     Шаблоны функций как исправить код? #5
да это я исправила.. там не работают именно вещественные числа
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
01.03.2014, 15:56     Шаблоны функций как исправить код? #6
Цитата Сообщение от nasty1996 Посмотреть сообщение
там не работают именно вещественные числа
Работает.
Может Вы вводите запятую вместо точки перед дробной частью?
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
01.03.2014, 16:06  [ТС]     Шаблоны функций как исправить код? #7
2 2 // n m
1.1 2.2 3.3 4.4//элементы массива
// это выводит
ArrayA:
1 -842150451
-842150451 -842150451

ArrayB:
-6.27744e+066 -6.27744e+066
-6.27744e+066 -6.27744e+066
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
01.03.2014, 16:35     Шаблоны функций как исправить код? #8
У меня все работает.
Если взять полностью приведенный код, то сначала вводим целый массив,
потом действительный.
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
01.03.2014, 16:40  [ТС]     Шаблоны функций как исправить код? #9
всёё работает.. а я по отдельности вводила эти массивы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2014, 16:51     Шаблоны функций как исправить код?
Еще ссылки по теме:

C++ Шаблоны функций.
шаблоны функций C++
Шаблоны функций в с++ C++

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

Или воспользуйтесь поиском по форуму:
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
01.03.2014, 16:51     Шаблоны функций как исправить код? #10
Цитата Сообщение от nasty1996 Посмотреть сообщение
// это выводит
ArrayA:
1 -842150451
-842150451 -842150451
Причина этого в том, что возникает ошибка при вводе целых чисел - строка int **a = creatarray<int>(n, m); функции main().
Цитата Сообщение от nasty1996 Посмотреть сообщение
2 2 // n m
1.1 2.2 3.3 4.4//элементы массива
При чтении целых чисел из строки
1.1 2.2 3.3 4.4
первое число будет 1, а затем возникает ошибка, т.к. целое число не может начинаться с точки
Попробуйте такой вариант creatarray().
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
X **creatarray(int &n, int &m)
{
    cin >> n >> m;
    
    X **mas = new X *[n];
    //X **mas = new int *[n];
 
    for (int i = 0; i<n; i++)
        mas[i] = new X[m];
        //mas[i] = new int[m];
        
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            cin >>mas[i][j];
            if( cin ) 
            {
                cout << " ok: " << mas[i][j] << " ";
            }
            else
            {
                cout << "  error  ";
                cin.clear();
            }
        }
    return mas;
}
Yandex
Объявления
01.03.2014, 16:51     Шаблоны функций как исправить код?
Ответ Создать тему
Опции темы

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