Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
zhenya.ya
1 / 1 / 2
Регистрация: 29.11.2009
Сообщений: 305
1

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

12.09.2010, 18:57. Просмотров 664. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 18:57
Ответы с готовыми решениями:

Программа для ввода переменных пользователем
Помогите пожалуйста , написать программу, что бы переменные вводились с...

Как создать проект для ввода и вывода данных из одного файла?
Доброго всем дня! Учу сейчас ввод/вывод данных. Подскажите , пожалуйста, чтобы...

Как узнать, что есть данные для ввода, которые можно забрать std::cin
Всем здравствуйте! У меня есть параллельный поток, в котором нужно собирать...

Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ.
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать...

Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout
Расчитать значения переменных y и z по заданным формулам (табл. 1). Для...

5
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.09.2010, 19:02 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;
}
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.09.2010, 19:51 3
Цитата Сообщение от Lavroff Посмотреть сообщение
а определение на:
еще бы неплохо в этом методе перераспределение памяти устроить
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.09.2010, 19:55 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];
}
0
zhenya.ya
1 / 1 / 2
Регистрация: 29.11.2009
Сообщений: 305
12.09.2010, 20:13  [ТС] 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;
}
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.09.2010, 20:23 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;
}
1
12.09.2010, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2010, 20:23

Расчитать значения переменных y и z по заданным формулам, используя для ввода/вывода cin и cout
Расчитать значения переменных y и z по заданным формулам . Для ввода/вывод...

В C++ для ввода можно поставить любой язык?
Всем добрый день, первый мой пост на этом форуме. Начал изучать с++ и задали...

Создать функции ввода/вывод для бинарных деревьев
Не могу создать функции ввода/вывод для бинаных деревьев. очень срочно нужно!...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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