Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2011, 14:41   #1
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию Массив в массиве

Добрый день!

Может вопрос не совсем корректный. Подскажите можно ли создать в С++ массив в массиве? Допустим в одномерном массиве 10 двухмерных массивов. Если да, то подскажите как, или дайте пожалуйста ссылку на литературу.

Заранее благодарю, за помощь новичку в изучении С++.
Corvette вне форума Ответить с цитированием
Старый 03.08.2011, 15:22   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Да Примерно так.

Код:
#include <iostream>

int main()
{
int mas[10][10][10];
return 0;
}
P.S.
А вообще можно хоть сколько индексов пихать и чудить неральные конструкции типа "одномерный массив с двумерным массивом внутри, содержащим по массиву на массив"

P.P.S.

чтобы всё это дело вводить необходимо сделать что-то вроде этого:
Код:
...
for(int i = 0; i < 10; i++)
     for(int j = 0; j < 10; j++)
          for(int k = 0; k < 0; k++)
               cin >> a[i][j][k];
...
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 03.08.2011 в 15:36.
MooNDeaR вне форума Ответить с цитированием
Старый 04.08.2011, 00:17   #3
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Спасибо MooNDeaR!

Подскажите как в массиве вывести две матрицы размером 2х2. Пожалуйста. Буду очень благодарен!
Написал код (я только учусь), но как я понимаю он выводит 4 строки:
1 строка: 1 1;
2 строка: 1 1;
3 строка: 0 0;
4 строка: 0 0;
мне надо 1 и 2 строку объединить, что бы она считалась элементом массива с индексом 0 и 3 с 4 объединить чтобы на считалась элементом массива с индексом 1.
Первая матрица будет: 1 1
1 1
Вторая матрица: 0 0
0 0

Цитата:
#include <iostream>
#include <conio.h>

using namespace std;

int main ()
{

int x, y;

int h [4][2]={
{1, 1},
{1, 1},
{0, 0},
{0, 0}};

for (x=0; x<4; x++) {
for (y=0; y<2; y++){
cout << h [x][y] << " ";
}
cout << " \n" << " \n" ;
}


getch ();
return 0;
}
Очень буду благодарен за помощь!!!!
Corvette вне форума Ответить с цитированием
Старый 04.08.2011, 02:14   #4
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Сообщение от Corvette Посмотреть сообщение
...
мне надо 1 и 2 строку объединить, что бы она считалась элементом массива с индексом 0 и 3 с 4 объединить чтобы на считалась элементом массива с индексом 1.
...
Боже мой, ставьте запятые пожалуйста Я пока разобрал, что вы хотите, чуть мозг не сломал.

Вот, в принципе, решение вашей задачи:

Код:
//подключаем заголовочные файлы
#include <iostream> 
#include <iomanip>   //для setw(4)
#include <clocale>
#include <cstdlib>

using namespace std;

int main(void)
{
	//  Блок переменных и констант.

	const int MtxCol = 2; //кол-во матриц в массиве :D 
	const int NRow = 2;	  //кол-во строк
	const int NCol = 2;   //кол-во столбцов
	int MtxMas[MtxCol][NRow][NCol] = {{{1,1},{1,1}},{{0,0},{0,0}}};

	//  Конец блока

	setlocale(LC_ALL,"Russian"); //включаю русский язык

	for(int i = 0; i < MtxCol; i++)
	{
		cout << "Вывожу " << i+1 << "-ю матрицу:" << endl << endl; 
		for(int j = 0; j < NRow; j++)
		{
			for(int k = 0; k < NCol; k++)
				cout << setw(4) << MtxMas[i][j][k];
			cout << endl << endl;
		}
		cout << endl;
	}
	system("PAUSE"); //тот же getch() в конце.
	return 0;
}
Единственное что я хочу у вас спросить: на кой ляд оно вам надо?
Ведь гораздо проще создать два двухмерных массива? Чем париться вот с такой заморочкой Я мозг себе вывернул
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 04.08.2011 в 02:17.
MooNDeaR вне форума Ответить с цитированием
Старый 04.08.2011, 12:30   #5
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Спасибо большое MooNDeaR!!!!!!!!!!!!!!!!!!!!!!! Без Вашей помощи я бы не справился.

PS: запятые в дальнейшем обещаю ставить!
А программу пытаюсь написать для одного из математических алгоритмов построения матриц!
Corvette вне форума Ответить с цитированием
Старый 04.08.2011, 16:52   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,603
По умолчанию

Цитата:
Подскажите можно ли создать в С++ массив в массиве? Допустим в одномерном массиве 10 двухмерных массивов.
Примерно так:
Код:
int ***a;
теперь нужно одним из двух способов выделить память
1 способ - функция malloc
2 способ - оператор new
Приучайтесь работать с динамическими массивами
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 04.08.2011, 17:22   #7
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Спасибо! Сейчас как раз читаю 6 главу (указатели) Шилдта Базовый курс С++.
Corvette вне форума Ответить с цитированием
Старый 04.08.2011, 19:07   #8
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Примерно так:

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

Вообще сделать эт можно так:

Код:
...
        cin.tie(&out);//привязали поток вывода, к потоку ввода. Не обязательно.
	int n1,n2,n3;    //переменнтые под размерность

	//ввод размерностей

	cout << "Введите первую размерность: ";
	cin >> n1;
	cout << endl << "Введите вторую размерность: ";
	cin >> n2;
	cout << endl << "Введите третью размерность: ";
	cin >> n3;

	//выделение памяти под массив

	int ***a = new int **[n1]; //теперь тройной указатель ссылается на начало массива с двойными указателями

	for(int i = 0; i < n1; i++)
		a[i] = new int *[n2];  //каждому элементу массива двойных указателей, присваиваем по массиву указателей
	for(int i = 0; i < n1; i++)
		for(int j = 0; j < n2; j++)
			a[i][j] = new int [n3]; //каждому элементу массива указателей присваиваем начало массива.

	for(int i = 0; i < n1; i++)
	{
		cout << "Вывожу " << i+1 << "-ю матрицу" << endl << endl; 
		for(int j = 0; j < n2; j++)
		{
			for(int k = 0; k < n3; k++)
			{	
				a[i][j][k] = i+1;
				cout << setw(4) << a[i][j][k];
			}
			cout << endl << endl;
		}
		cout << endl;
	}
	system("PAUSE");
И у меня настолько хорошее настроение, что я даже не поленился нарисовать принцип всей этой ахинеи в комментариях

E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 04.08.2011, 21:09   #9
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Спасибо MooNDeaR! Я честно говоря с динамическими массивами еще не очень дружу, только общие представление имею! Начал вот книжки читать!

PS: отдельное спасибо за наглядность!!!

PS: Кто то сталкивался с написанием конкатенация массивов (объединения)? Я в интернет посмотрел там паскаль, матлаб и др., а C++ нету? Для объединения массивов в один массив, что лучше использовать цикл или указатели?

Последний раз редактировалось Corvette; 04.08.2011 в 21:42.
Corvette вне форума Ответить с цитированием
Старый 04.08.2011, 22:02   #10
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Вообще тут смотря для чего тебе эт надо Так-то, если подумать в STL (Стандартная библиотека шаблонов) есть контейнер vector

Это если ты хочешь, чтобы через знак сложения было. Что-то вроде:

массив + массив

А если ты хочешь это через функцию, то я её позже напишу. Ща времени нет
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 04.08.2011 в 22:05.
MooNDeaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
4. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве. Иван_lk Помощь студентам 0 31.05.2011 20:46
массив в массиве rowlin Общие вопросы C/C++ 2 17.05.2011 00:50
Найти палиндромы в массиве элементов, записать их в другой массив! Lodyr Помощь студентам 1 19.02.2010 21:11
В двухмерном массиве все отрицательные элеметны заменить на их модули. А новый массив вывести на экран JulLy Паскаль, Turbo Pascal, PascalABC.NET 11 28.04.2009 08:13
необходимо сравнить массив С1-С50 на совпадение в массиве А1-А267 Бэн ай нид хелп Microsoft Office Excel 1 10.09.2007 20:10