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

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

Войти
Регистрация
Восстановить пароль
 
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
#1

Объявление struct в элемент массива. - C++

22.04.2012, 12:32. Просмотров 840. Ответов 8
Метки нет (Все метки)

Доброго дня!
Нужно реализовать следующую задачу...
Есть массив :
C++
1
int map[x][y];
Теперь мы перебираем каждый элемент массива, и присваиваем ему значение :
C++
1
2
3
4
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
             map[x][y] = 0;
    }}
Все хорошо работает. Но каждый элемент массива у нас равен нулю, то есть одному значению, а мне требуется, чтобы в каждом элементе хранилось >2 значений. Пробовал двумя способами :
C++
1
2
3
4
5
grass[2] = {1,0};
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
               map[x][y] = grass;
    }}
И :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct typeground{
    int proh;
    int vozv;
 
};
 
int main(){
typeground grass = {1,0};
int map[10][10];
 
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
    map[x][y] = grass;
    }}
    
}
Оба способа не работают, прошу вас реализовать данную задачу любым способом, главное чтобы в каждом элементе массива хранилось два значения : проходимость(равная "1"), и возвышенность(равная "0")
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление struct в элемент массива. (C++):

корректен ли код void f (struct x *this);? (объявление функции) - C++
...На солидном ресурсе встретил большой код, но я его конечно упростил до минимума. struct x { int y; }; //Вот на эту...

Объявление класса и элемент-функции - C++
Здравствуйте! Имеется следующий исходный код: // определить класс GradeBook с элемент-функцией displayMessage; // создать обхект...

Не получается задать произвольный размер массива в struct - C++
Добрый вечер. Возникла проблема с лабараторной в универе. Не могу задать произвольный размер массива, т.е. чтобы его мог вводить...

Объявление массива - C++
Есть два файла первый с функцией main() main.cpp #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;first.cpp&quot; using namespace std;...

Объявление массива - C++
Всем добрый день, очень нужна помощь. Вопрос собственно такой: Объявляется объект class MainClass { MainClass(); ...

объявление массива - C++
int N = 10; int mas = {5,8,2,0,6,3,8,2,7,9}; По чему так нельзя, подчеркивает masN]?

8
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
22.04.2012, 12:56 #2
C++
1
2
3
4
5
grass[2] = {1,0};
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
               map[x][y] = grass;
    }}
тип массива - int, а ты(если я не ошибаюсь) элементу присваиваешь еще один массив

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct typeground{
    int proh;
    int vozv;
 
};
 
int main(){
typeground grass = {1,0};
int map[10][10];
 
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
    map[x][y] = grass;
    }}
    
}
тут тоже массив типа int, а ты присваиваешь элементу переменную типа typeground

как вариант, можно сделать не двумерный массив, а трехмерный, т.е
C++
1
2
3
4
5
6
int map[x][y][2];
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
               map[x][y][0] = 0;
               map[x][y][1] = 0;
    }}
второй вариант - выбрать тип массива не int, а typeground. тогда примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct typeground{
    int proh;
    int vozv;
 
};
 
int main(){
typeground grass = {1,0};
typeground  map[10][10];
 
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
    map[x][y] = grass;
    }}
    
}
1
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
22.04.2012, 13:33  [ТС] #3
Тогда в последнем примере массив будет являться членом структуры?

Добавлено через 11 минут
Просто элементы массива будут равняться не только грасс,но и другим,например блоку с водой,который будет иметь совершенно другой набор свойств. Поэтому мне нужен удобный способ для объявления элемента массива.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.04.2012, 13:52 #4
tomaticus, если нужно хранить всего 2 элемента, и их типы известны - std::pair.

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

Можно еще std::vector + boost::variant.
1
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
22.04.2012, 14:17  [ТС] #5
soon, для меня это очень загнуто, я мало что понял.
0
bz_
6 / 6 / 1
Регистрация: 10.04.2012
Сообщений: 31
22.04.2012, 14:28 #6
Цитата Сообщение от tomaticus Посмотреть сообщение
soon, для меня это очень загнуто, я мало что понял.
Введи в Google Search "структуры C++" и почитай об этом. Насколько я помню, структуры мне дались очень легко.
1
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
22.04.2012, 14:43  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include "iostream"
using namespace std;
 
int main(){
int map[10][10];
int grass[2] = {1,"grass.jpg"};  // grass[1] = проходимость , grass[2] = путь до картинки
 
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
    map[x][y] = grass; 
    if(map[x][y] == grass)
{
BitMap(grass[2],x*32,x*32); // псевдокод, я не знаю как вставить картинку в C++
}
    }}
 
}
В данном коде у нас объявляется блок карты размером 32х32 травой, и потом рисуется по координатам.
Мне надо реализовать тоже самое, только в рабочем варианте, так как этот код не рабочий, из-за того что я не знаю как объявить каждый элемент массива другим массивом, и не знаю как вставить картинку по координатам. Откликнувшимся, спасибо!
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.04.2012, 15:53 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef /*class for work with images*/ IMG;
typedef bool T_passable;
typedef std::pair<T_passable, IMG> T_cell;
 
T_cell map[10][10];
T_cell grass(true, "grass.jpg");  // grass[1] = проходимость , grass[2] = путь до картинки
 
for(int x = 0;x<10;x++){
    for(int y = 0;y<10;y++){
        map[x][y] = grass; 
        if(map[x][y] == grass)
        {
            //работаете с изображением.
        }
    }
}
Весьма смутно понял, что вы хотели.
Работа с изображением будет зависеть от используемой библиотеки.
0
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
22.04.2012, 16:20  [ТС] #9
На счет изображения можно пока не париться, у меня первая часть кода не работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 16:20
Привет! Вот еще темы с ответами:

Объявление большого массива в C++ - C++
Здравствуйте. Не могу разрешить такую задачу: нужен массив int a;, при выполнении выдается Stack Overflow, я понимаю что скорее...

Объявление двумерного массива - C++
Здравствуйте! Как объявить двумерный массив как public , я имею ввиду что например класс или одномерный массив можно объявить вот так: ...

Написать программу:функция что возвращает элемент массива,и удаляет этот элемент з массива - C++
Написать программу:функция что возвращает элемент массива,и удаляет этот элемент з массива помогите написать!!

Объявление динамического одномерного массива. - C++
БИЛЕТ №14 3. Составьте программу, в которой объявляется динамический одномерный массив заполненный числами типа int. Причем первыми...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
22.04.2012, 16:20
Ответ Создать тему
Опции темы

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