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

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

Войти
Регистрация
Восстановить пароль
 
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
#1

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? - C++

12.09.2010, 18:57. Просмотров 597. Ответов 5
Метки нет (Все метки)

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
( что только я не пробывал: то переменные перекрываются, то нарушается область видимости n и 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class matrix
{ 
private:
        int i,j,m,n;
        int **matrica;
public: 
        matrix();
        ~matrix(); 
        int get(int ,int);
        void print();
};
 
matrix::matrix()
{  
        matrica=new int*[n];
       for ( i = 0; i < n; i++)
                matrica[i] = new int[m];
 
        for ( i = 0; i < n; i++)
               for ( j = 0; j < m; j++)
                        matrica[i][j] = rand() % 10;
 }
void matrix::print()
{
     for( i = 0; i < n; i++)
     {
         for(j = 0; j < m; j++)
               cout<<matrica[i][j]<<' ';
         cout<<"\n";
     }
 
}
 matrix::~matrix()
{
            for (i = 0; i < n; i++)
        free(matrica[i]);
 
free(matrica);
}
int matrix::get(int i,int j)
{
         if(i>=n||j>=m)
            return 0;
         cout<<matrica[i][j]<<'\n';
}
 
int main ()
{  
        system("cls");
        matrix object;
        object.print();
        int i, j;
         cout<<" get (i.j):"<<endl;
        cout<<"Enter i: ";
        cin>>i;
        cout<<"Enter j: ";
        cin>>j;
        if(object.get(i,j)==0)
           cout<<"i or j more or equal than n or m!\n";
        system("PAUSE");
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 18:57     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Посмотрите здесь:

Создать функции ввода/вывод для бинарных деревьев C++
Программа для ввода переменных пользователем C++
C++ Как закончить ввод в итератор ввода для потока
C++ Как переделать с public на private и создать методы для закрытых полей?
Как переопределить дружественную функцию ввода для класса наследника C++
Цикл для ввода строк. Как отловить '\n'? C++
Как добавить количество попыток для ввода логина и пароля? C++
C++ Как правильно зациклить программу для фильтрации ввода?
Как узнать, что есть данные для ввода, которые можно забрать std::cin C++
C++ Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout
Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout C++
В C++ для ввода можно поставить любой язык? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.09.2010, 19:02     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? #2
zhenya.ya,
C++
1
 void setSize();
в классе
Вне класса:
C++
1
2
3
4
5
6
7
8
9
10
11
void matrix::setSize()
{
    int first;
    int second;
    std::cout<<"Enter first size: ";
    std::cin>>first;
    std::cout<<"Enter second size: ";
    std::cin>>second;
    n=first;
    m=second;
}
Можно так же сделать чтобы размер вводился в main. А в setSize подавать уже данные значения. Тогда прототип меняется на
C++
1
void setSize(int, int);
а определение на:
C++
1
2
3
4
5
void matrix::setSize(int a, int b)
{
    n=a;
    m=b;
}
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 19:51     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? #3
Цитата Сообщение от Lavroff Посмотреть сообщение
а определение на:
еще бы неплохо в этом методе перераспределение памяти устроить
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.09.2010, 19:55     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? #4
fasked, Да. Точно)

C++
1
2
3
4
5
6
7
8
9
10
11
void matrix::setSize(int a, int b)
{
    for(int i=0; i<n; ++i)
        delete[] matrica[i];
    delete[]matrica;
    n=a;
    m=b;
    matrica=new int*[n];
    for(int i=0; i<n; ++i)
        matrica[i]=new int[m];
}
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
12.09.2010, 20:13  [ТС]     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? #5
Попробовал Ваши методы (оба). Но опять не все в порядке. Код "ложится" , а т.е. выскакивает
MSC++ debug library. Как с этим бороться?

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
class matrix
{ 
private:
        int i,j,m,n;
        int **matrica;
public: 
        matrix();
        ~matrix(); 
        int get(int ,int);
        void print();
        void setSize();
};
 void matrix::setSize()
{
    int first;
    int second;
    std::cout<<"Enter first size: ";
    std::cin>>first;
    std::cout<<"Enter second size: ";
    std::cin>>second;
    n=first;
    m=second;
 }
 
matrix::matrix()
{  
        matrica=new int*[n];
       for ( i = 0; i < n; i++)
                matrica[i] = new int[m];
 
        for ( i = 0; i < n; i++)
               for ( j = 0; j < m; j++)
                        matrica[i][j] = rand() % 10;
 }
void matrix::print()
{
     for( i = 0; i < n; i++)
     {
         for(j = 0; j < m; j++)
               cout<<matrica[i][j]<<' ';
         cout<<"\n";
     }
 
}
 matrix::~matrix()
{
     for (i = 0; i < n; i++)
     free(matrica[i]);
free(matrica);
}
int matrix::get(int i,int j)
{
         if(i>=n||j>=m)
            return 0;
         cout<<matrica[i][j]<<'\n';
}
 
int main ()
{  
        system("cls");
        matrix object;
        object.setSize();
        object.print();
        int i, j;
        cout<<" get (i.j):"<<endl;
        cout<<"Enter i: ";
        cin>>i;
        cout<<"Enter j: ";
        cin>>j;
        if(object.get(i,j)==0)
           cout<<"i or j more or equal than n or m!\n";
        system("PAUSE");
        return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.09.2010, 20:23     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? #6
Оригинально. А ничего что в n и m мусор?

C++
1
2
3
4
5
6
7
8
9
10
matrix::matrix()
{  
        matrica=new int*[n];
       for ( i = 0; i < n; i++)
                matrica[i] = new int[m];
 
        for ( i = 0; i < n; i++)
               for ( j = 0; j < m; j++)
                        matrica[i][j] = rand() % 10;
 }
А вот так все работает. Функция setSize вызывается в конструкторе.

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
#include <iostream>
 
using namespace std;
 
class matrix
{ 
private:
        int i,j,m,n;
        int **matrica;
public: 
        matrix();
        ~matrix(); 
        int get(int ,int);
        void print();
                void setSize();
};
 void matrix::setSize()
{
    int first;
    int second;
    std::cout<<"Enter first size: ";
    std::cin>>first;
    std::cout<<"Enter second size: ";
    std::cin>>second;
    n=first;
    m=second;
 }
 
matrix::matrix()
{  
       setSize();
       matrica=new int*[n];
       for ( i = 0; i < n; i++)
                matrica[i] = new int[m];
 
        for ( i = 0; i < n; i++)
               for ( j = 0; j < m; j++)
                        matrica[i][j] = rand() % 10;
 }
void matrix::print()
{
     for( i = 0; i < n; i++)
     {
         for(j = 0; j < m; j++)
               cout<<matrica[i][j]<<' ';
         cout<<"\n";
     }
 
}
 matrix::~matrix()
{
     for (i = 0; i < n; i++)
     free(matrica[i]);
free(matrica);
}
int matrix::get(int i,int j)
{
         if(i>=n||j>=m)
            return 0;
         cout<<matrica[i][j]<<'\n';
}
 
int main ()
{  
        system("cls");
        matrix object;
        object.print();
        int i, j;
        cout<<" get (i.j):"<<endl;
        cout<<"Enter i: ";
        cin>>i;
        cout<<"Enter j: ";
        cin>>j;
        if(object.get(i,j)==0)
           cout<<"i or j more or equal than n or m!\n";
        system("PAUSE");
        return 0;
}
Yandex
Объявления
12.09.2010, 20:23     Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Ответ Создать тему
Опции темы

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