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

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

Войти
Регистрация
Восстановить пароль
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

Создание 2D массива из объектов, используя указатели - C++

25.05.2012, 22:44. Просмотров 424. Ответов 8
Метки нет (Все метки)

Помогите решить простую задачу.
Нужно создать 2х мерный массив из объектов. Каждый объект это точка с координатой x and y. Массив должен создаваться с использованием указателей. Значение координат точки для каждого объекта вводится вручную.

Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 22:44     Создание 2D массива из объектов, используя указатели
Посмотрите здесь:

Составить программу обработки двухмерного массива используя указатели и функции... C++
Создание Массива Объектов класса C++
Получить первые n-минимальных элементов массива,используя указатели C++
Создание динамического массива объектов C++
Поменять местами элементы массива с четными и нечетными индексами используя указатели C++
C++ Создание массива объектов класса
C++ Просуммировать элементы массива используя указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 00:06     Создание 2D массива из объектов, используя указатели #2
какая размерность нужна? любая или конкретная. Я имею введу сколько у каждого элемента первой размерности соответствующих второй?

Добавлено через 54 минуты
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
#include<iostream>
 
class yx
{
    int x;
    int y;
public:
    yx(void);
    yx(int,int);
    ~yx(void);
    void put(void);
    void get(void);
};
 
yx::yx(void):x(0),y(0)
{}
 
yx::yx(int x,int y):x(x),y(y)
{}
 
yx::~yx(void)
{}
 
void yx::put(void)
{
    
    
    while(true)
    {
        std::cout << "Введите x : ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> x;
 
        if(std::cin.good())
        {
            std::cin.ignore(100,'\n');
            break;
        }
        
        std::cin.clear();
        std::cin.ignore(100,'\n');
        std::cerr << "Ошибка, введено не коректное значение!" << std::endl;
    }
 
    while(true)
    {
        std::cout << "Введите y : ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> y;
 
        if(std::cin.good())
        {
            std::cin.ignore(100,'\n');
            break;
        }
        
        std::cin.clear();
        std::cin.ignore(100,'\n');
        std::cerr << "Ошибка, введено не коректное значение!" << std::endl;
    }
    
}
 
void yx:: get(void)
{
    std::cout << "x = " << x << "  y = " << y << std::endl;
}
 
 
int main(void)
{
    setlocale(LC_ALL,"Russian_Russia.1251");
    const int M1 = 1 ,M2 =1, M3 = 2;
    //вариант 1
    yx** mas[M1];
 
    for(int i=0;i<M1;i++)
    {   
        mas[i] = new yx*[M3];
        for(int k = 0;k<M3;k++)
        {
            mas[i][k] = new yx;
            mas[i][k]->put();
        }
    }
    
    for(int i=0;i<M1;i++)
    {   
        
        for(int k = 0;k<M3;k++)
        {
            mas[i][k]->get();
        }
    }
 
    for(int i=0;i<M1;i++)
        delete mas[i];
 
    //вариант 2
    class yx*** yxmas = new yx**[M1];
    
    for(int i=0;i<M1;i++)
    {
        yxmas[i] = new yx*[M2];
        for(int k =0;k<M2;k++)
        { yxmas[i][k] = new yx[M3];
            for(int j =0;j<M3;j++)
               yxmas[i][k][j].put();
        }
    }
 
    for(int i = 0; i< M1 ; i++)
    {
        for(int k = 0; k < M2 ; k++)
        {
            for(int j =0;j<M3;j++)
             yxmas[i][k][j].get();
        }
    }
    
    for(int i = 0; i< M1 ; i++)
        delete yxmas[i];
 
    system("pause");
return 0;
}
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 14:04  [ТС]     Создание 2D массива из объектов, используя указатели #3
[QUOTE=stawerfar;3082012]какая размерность нужна? любая или конкретная. Я имею введу сколько у каждого элемента первой размерности соответствующих второй?

С размерностью спасибо все нормально поиграюсь с M1, M2, M3... Скажи, пожалуйста, если не сложно в трех словах чем отличается void main () от int main (void) ? заранее спасибо
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
214 / 169 / 46
Регистрация: 17.05.2012
Сообщений: 627
Записей в блоге: 4
26.05.2012, 14:11     Создание 2D массива из объектов, используя указатели #4
Цитата Сообщение от Leeto Посмотреть сообщение
чем отличается void main () от int main (void)
может это зависит какой компилятор ты используешь.
А так это главная функция с которой выполняется программа
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 14:16     Создание 2D массива из объектов, используя указатели #5
Цитата Сообщение от Leeto Посмотреть сообщение
void main () от int main (void) ?
void main - это старый синтаксис, новые компиляторы этого не поддерживают т.к. такая запись была исключена из стандарта!
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 16:44  [ТС]     Создание 2D массива из объектов, используя указатели #6
Цитата Сообщение от stawerfar Посмотреть сообщение
void main - это старый синтаксис, новые компиляторы этого не поддерживают т.к. такая запись была исключена из стандарта!
Посоветуй, пожалуйста, на твой взгляд самый удобный компилятор для новичков под виндус... что очень много подсказок было, хелпов всплывающих выбиралок (методов, функций, переменных)
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
214 / 169 / 46
Регистрация: 17.05.2012
Сообщений: 627
Записей в блоге: 4
26.05.2012, 17:00     Создание 2D массива из объектов, используя указатели #7
я пользуюсь mingw со средой Geany for win
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 17:23  [ТС]     Создание 2D массива из объектов, используя указатели #8
Цитата Сообщение от stawerfar Посмотреть сообщение
какая размерность нужна? любая или конкретная. Я имею введу сколько у каждого элемента первой размерности соответствующих второй?

Добавлено через 54 минуты
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
#include<iostream>
 
class yx
{
    int x;
    int y;
public:
    yx(void);
    yx(int,int);
    ~yx(void);
    void put(void);
    void get(void);
};
 
yx::yx(void):x(0),y(0)
{}
 
yx::yx(int x,int y):x(x),y(y)
{}
 
yx::~yx(void)
{}
 
void yx::put(void)
{
    
    
    while(true)
    {
        std::cout << "Введите x : ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> x;
 
        if(std::cin.good())
        {
            std::cin.ignore(100,'\n');
            break;
        }
        
        std::cin.clear();
        std::cin.ignore(100,'\n');
        std::cerr << "Ошибка, введено не коректное значение!" << std::endl;
    }
 
    while(true)
    {
        std::cout << "Введите y : ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> y;
 
        if(std::cin.good())
        {
            std::cin.ignore(100,'\n');
            break;
        }
        
        std::cin.clear();
        std::cin.ignore(100,'\n');
        std::cerr << "Ошибка, введено не коректное значение!" << std::endl;
    }
    
}
 
void yx:: get(void)
{
    std::cout << "x = " << x << "  y = " << y << std::endl;
}
 
 
int main(void)
{
    setlocale(LC_ALL,"Russian_Russia.1251");
    const int M1 = 1 ,M2 =1, M3 = 2;
    //вариант 1
    yx** mas[M1];
 
    for(int i=0;i<M1;i++)
    {   
        mas[i] = new yx*[M3];
        for(int k = 0;k<M3;k++)
        {
            mas[i][k] = new yx;
            mas[i][k]->put();
        }
    }
    
    for(int i=0;i<M1;i++)
    {   
        
        for(int k = 0;k<M3;k++)
        {
            mas[i][k]->get();
        }
    }
 
    for(int i=0;i<M1;i++)
        delete mas[i];
 
    //вариант 2
    class yx*** yxmas = new yx**[M1];
    
    for(int i=0;i<M1;i++)
    {
        yxmas[i] = new yx*[M2];
        for(int k =0;k<M2;k++)
        { yxmas[i][k] = new yx[M3];
            for(int j =0;j<M3;j++)
               yxmas[i][k][j].put();
        }
    }
 
    for(int i = 0; i< M1 ; i++)
    {
        for(int k = 0; k < M2 ; k++)
        {
            for(int j =0;j<M3;j++)
             yxmas[i][k][j].get();
        }
    }
    
    for(int i = 0; i< M1 ; i++)
        delete yxmas[i];
 
    system("pause");
return 0;
}
а можно тебя попросить, пожалуйста, переписать циклы while (true)
я просто совершенно не знаком с
cin.clean()
.ignore
.unsetf(std::ios::skipws)
и тд
пожалуйста, если не затруднит
Заранее спасибо

Добавлено через 19 минут
Цитата Сообщение от Leeto Посмотреть сообщение
а можно тебя попросить, пожалуйста, переписать циклы while (true)
я просто совершенно не знаком с
cin.clean()
.ignore
.unsetf(std::ios::skipws)
и тд
пожалуйста, если не затруднит
Заранее спасибо
ну или хотя бы не мог бы комментарии расставить, заранее спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 18:57     Создание 2D массива из объектов, используя указатели
Еще ссылки по теме:

В одномерном массива найти элементы кратные 3, используя указатели C++
C++ Вывести на экран элементы массива используя указатели
C++ Создание массива объектов класса
Создать меню для работы с программой заполнения массива, используя функции, указатели на сылки C++
C++ Поменять элементы массива местами используя указатели

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

Или воспользуйтесь поиском по форуму:
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 18:57     Создание 2D массива из объектов, используя указатели #9
Вариант №1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while(true) //получить значение х от пользователя с проверкой вводимого значения
    {
        std::cout << "Введите x : ";
        std::cin.unsetf(std::ios::skipws); //не игнарировать пробелы при вводе
        std::cin >> x; 
 
        if(std::cin.good()) //если пользователь ввел число а не символ
        {
            std::cin.ignore(100,'\n'); //удалить лишние символы из потока
            break; //выход из цикла т.к. данные коректы
        }
        
        std::cin.clear(); //сбросить поток
        std::cin.ignore(100,'\n'); //удалить лишние символы из потока
        //сообщить об ошибке и продолжить получение данных от пользователя
        std::cerr << "Ошибка, введено не коректное значение!" << std::endl; 
    }
Вариант №2
C++
1
2
3
    
        std::cout << "Введите х : ";
        std::cin >> х;
Для 'у' , естественно по аналогии
Yandex
Объявления
26.05.2012, 18:57     Создание 2D массива из объектов, используя указатели
Ответ Создать тему
Опции темы

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