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

Создать динамический массив, заполнить его и вывести - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.90
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
01.10.2011, 20:57     Создать динамический массив, заполнить его и вывести #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
#include <iostream>
using namespace std;
 
class boolArray {
 
    private:
        int size;
        bool **arr;
 
    public:
 
        boolArray(int size) {
            cout << "Now constructor is working.\n";
            arr = new bool * [size];
            for(int i = 0; i != size; i++)
                arr[i] = new bool;
        }
 
        ~boolArray(){cout << "Now destructor is working.\n";}
 
        void show () {
            for( int i = 0; i != size; i++)
                for( int j = 0; j !=0; j++)
                    cout << arr[i][j] <<"\n";
        }
        void fill () {
            for( int i = 0; i != size; i++)
                for( int j = 0; j !=0; j++) {
                    if( j % 2 == 0) arr[i][j] = 1;
                    else arr[i][j] = 0;
                }
        }
};
Повисает почему-то
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2011, 20:57     Создать динамический массив, заполнить его и вывести
Посмотрите здесь:

Создать динамический трехмерный массив и функцию ввода его элементов C++
C++ Создать динамический 2-мерный массив, заполнить его случайным образом, сортировать столбцы по возрастанию их суммы
Создать динамический массив строк, заполнить его и потом добавить строку после самой короткой строки C++
Создать динамический массив объектов, инициализировать его C++
Есть динамический массив с размерностью 5, необходимо его сделать с размерностью 6, заполнить цифрами и вывести на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
01.10.2011, 21:48     Создать динамический массив, заполнить его и вывести #2
Главная функция где?
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
01.10.2011, 23:02     Создать динамический массив, заполнить его и вывести #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как я понял вы завели двумерный массив, но указали только одно значение size. Нужно второе. Пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int n,m;//определяем переменные для хранения количества элементов массива
printf("Enter n: "); //запрашиваем n - количество строк
scanf("%i",&n); //считываем n с консоли
printf("Enter m: "); //запрашиваем m
scanf("%i",&m); //считываем m с консоли
   //заводим динамический массив
int** mass = new int *[n];
 
for(int i=0; i<n; i++)
   mass[i] = new int [m];
int k = 1;
 
// присваиваем значения элементам массива 
for(int i=0; i<n; i++){
   for(int j=0; j<m; j++){
      mass[i][j]=k;
      k++;
   }
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 01:23     Создать динамический массив, заполнить его и вывести #4
C++
1
2
3
arr = new bool * [size];
 for(int i = 0; i != size; i++)
 arr[i] = new bool;
По сути - это одномерный массив. В массиве указателей будет хранится указатели на один элемент, а не на массив.
Если вы не этого хотели, то правильно будет так:
C++
1
2
3
arr = new bool * [size];
 for(int i = 0; i != size; i++)
 arr[i] = new bool[ /*тут какой-то размер массива*/];
Так же в конструкторе вы забыли присвоить\инициализировать размер size. Переменная size, которую получает конструктор и элемент данная size класса - это две разных переменных. Они ни как между собой не связаны. И название переменной, получаемой конструктором, надо изменить, чтобы путаницы не было.
Цитата Сообщение от robert19 Посмотреть сообщение
Как я понял вы завели двумерный массив, но указали только одно значение size. Нужно второе.
То есть по вашему не может быть массива size*size?
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
02.10.2011, 02:51  [ТС]     Создать динамический массив, заполнить его и вывести #5
Мэйн
C++
1
2
3
4
    boolArray a(5);
    a.fill();
    a.show();
    return 0;
Да, спасибо, массив действительно создавал одномерный, а нужно было двумерный.
Но если передавать в конструктор переменную не size, то в функции, например, вывода ее не будет видно, как быть?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 11:37     Создать динамический массив, заполнить его и вывести #6
Вам надо сохранить значение, передаваемое конструктору, в элемент данную size.
C++
1
2
3
4
5
6
7
8
boolArray(int m_size) 
: size( m_size ) //инициализация size размером m_size
{
     cout << "Now constructor is working.\n";
     arr = new bool * [size];
     for(int i = 0; i != size; i++)
          arr[i] = new bool[ /*тут какой-то размер массива*/];
}
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
02.10.2011, 18:08  [ТС]     Создать динамический массив, заполнить его и вывести #7
Все сделал, работает.

Дальше хочу сделать метод сравнения. Допустим хочу сравнивать по общей сумме элементов.
Но как передать в метод класса другой объект этого же класса?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 18:43     Создать динамический массив, заполнить его и вывести #8
Вот так:
прототип:
C++
1
bool /*название метода*/( const boolArray  & );
Определение метода:
C++
1
2
3
4
bool /*название метода*/( const boolArray  & /*имя объекта*/)
{
    /*сравнение*/
}
Добавлено через 1 минуту
Но лучше перегрузить операцию отношения ==, т.е. сделать так, чтобы можно было сравнивать два массива так:
C++
1
2
if( mas1 == mas 2)
     ....
Добавлено через 1 минуту
Для этого надо перегрузить операцию ==. Но это уже самостоятельно читайте в нормальной книге.
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
02.10.2011, 19:08  [ТС]     Создать динамический массив, заполнить его и вывести #9
C++
1
2
3
4
boolArray:: compare ( const boolArray &b) {
        if (a.sum > b.sum)
            printf("A > B");
    };
Почему не хочет принимать?(
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 19:16     Создать динамический массив, заполнить его и вывести #10
А где возвращаемое значение?
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
02.10.2011, 19:43  [ТС]     Создать динамический массив, заполнить его и вывести #11
Я просто думаю метод лучше воид сделать и просто выводить, или 1 больше, или 2, или они равны.

Добавлено через 8 минут
Блин запутался в общем конкретно.
Нужно сделать метод сравнения в классе. Сравнивать нужно два объекта этого же класса. То есть сравнивать надо вызывая метод через объект (X.MethodName) и передать нужно в этот же метод ссылку на объект номер 2.
Вообще потерял идею и не знаю как реализовать
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 20:31     Создать динамический массив, заполнить его и вывести #12
Цитата Сообщение от cetrael Посмотреть сообщение
Я просто думаю метод лучше воид сделать и просто выводить, или 1 больше, или 2, или они равны.
Так и напиши void.
Цитата Сообщение от cetrael Посмотреть сообщение
Нужно сделать метод сравнения в классе. Сравнивать нужно два объекта этого же класса. То есть сравнивать надо вызывая метод через объект (X.MethodName) и передать нужно в этот же метод ссылку на объект номер 2.
А то что я написал - это не одно и то же?
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
02.10.2011, 21:15  [ТС]     Создать динамический массив, заполнить его и вывести #13
Я не пойму, мне нужно сделать a.sum() > b.sum, но это должно быть в самом А классе описано. Можешь показать на примере?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 22:23     Создать динамический массив, заполнить его и вывести
Еще ссылки по теме:

Создать динамический целочисленный массив, и отсортировать его методом вставок C++
C++ Как создать динамический трехмерный массив и заполнить его случайными значениями?
C++ Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 22:23     Создать динамический массив, заполнить его и вывести #14
C++
1
2
3
4
void boolArray:: compare ( const boolArray &b) {
                if (size > b.size)
                        printf("A > B");
        };
Вот и все
Yandex
Объявления
02.10.2011, 22:23     Создать динамический массив, заполнить его и вывести
Ответ Создать тему
Опции темы

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