Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Заранее спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 22:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание 2D массива из объектов, используя указатели (C++):

Просуммировать элементы массива используя указатели - C++
III. Создайте 5 елементный статический массив переменных типа int и заполните его произвольными значениями. Затем создайте указатель,...

Вывести на экран элементы массива используя указатели - C++
здравстуйте!Создать одномерный массив состоящий из случайных целых чисел. Вывести на экран элементы массива используя указатели без прямого...

Поменять элементы массива местами используя указатели - C++
Указатель не должен менять своего значения

Получить первые n-минимальных элементов массива,используя указатели - C++
Дан массив.Получить первые n-минимальных элементов массива,используя указатели. Как лучше реальзовать? На уровне начинающего человека,...

В одномерном массива найти элементы кратные 3, используя указатели - C++
Нужно переделать программу используя указатели. #include "stdafx.h" #include <iostream> using namespace std; int main(int...

Составить программу обработки двухмерного массива используя указатели и функции... - C++
Составить программу обработки двухмерного массива используя указатели и функции, выполнив каждый пункт задания в виде функции. Все...

8
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 00:06 #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;
}
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 14:04  [ТС] #3
[QUOTE=stawerfar;3082012]какая размерность нужна? любая или конкретная. Я имею введу сколько у каждого элемента первой размерности соответствующих второй?

С размерностью спасибо все нормально поиграюсь с M1, M2, M3... Скажи, пожалуйста, если не сложно в трех словах чем отличается void main () от int main (void) ? заранее спасибо
0
Рыжий Лис
Просто Лис
352 / 277 / 81
Регистрация: 17.05.2012
Сообщений: 1,124
Записей в блоге: 4
26.05.2012, 14:11 #4
Цитата Сообщение от Leeto Посмотреть сообщение
чем отличается void main () от int main (void)
может это зависит какой компилятор ты используешь.
А так это главная функция с которой выполняется программа
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 14:16 #5
Цитата Сообщение от Leeto Посмотреть сообщение
void main () от int main (void) ?
void main - это старый синтаксис, новые компиляторы этого не поддерживают т.к. такая запись была исключена из стандарта!
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 16:44  [ТС] #6
Цитата Сообщение от stawerfar Посмотреть сообщение
void main - это старый синтаксис, новые компиляторы этого не поддерживают т.к. такая запись была исключена из стандарта!
Посоветуй, пожалуйста, на твой взгляд самый удобный компилятор для новичков под виндус... что очень много подсказок было, хелпов всплывающих выбиралок (методов, функций, переменных)
0
Рыжий Лис
Просто Лис
352 / 277 / 81
Регистрация: 17.05.2012
Сообщений: 1,124
Записей в блоге: 4
26.05.2012, 17:00 #7
я пользуюсь mingw со средой Geany for win
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.05.2012, 17:23  [ТС] #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)
и тд
пожалуйста, если не затруднит
Заранее спасибо
ну или хотя бы не мог бы комментарии расставить, заранее спасибо
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
26.05.2012, 18:57 #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 >> х;
Для 'у' , естественно по аналогии
1
26.05.2012, 18:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 18:57
Привет! Вот еще темы с ответами:

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Поменять местами элементы массива с четными и нечетными индексами используя указатели - C++
Поменять местами элементы массива с четными и нечетными индексами используя указатели Ну вот не знаю как сделать, честно... Мой...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Создать меню для работы с программой заполнения массива, используя функции, указатели на сылки - C++
Реализовать программу меню: 1. Заполнить массив нулями 2. Заполнить массив с клавиатуры 3. Заполнить массив случайными числами ...


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

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

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