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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Пятимерный массив - C++

12.11.2009, 08:40. Просмотров 2004. Ответов 19
Метки нет (Все метки)

Мне нужно использовать пятимерный массив в котором будут целые числа
пишу
C++
1
int mass_all[50][50][50][50][50];
и уже после этой строчки программа вылетает с ошибкой хотя компилятор не выдает ошибок
то есть такой массив нельзя даже инициализировать

а если пишу

C++
1
int mass_all[1][1][1][1][1];
то все нормально

пробовал указать тип данных long но ничего не изменилось

как всетаки можно использовать пятимерный массив mass_all[50][50][50][50][50]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2009, 08:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пятимерный массив (C++):

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию"Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Пятимерный массив - PHP
Здравствуйте! Объявить пяти мерный массив с произвольными данными (не менее 30 элементов), в этом массиве (программно!) отсортировать...

Как представить пятимерный массив? - Программирование
"Одномерный массив можно представлять себе как строку данных, двумерный массив — как таблицу данных, а трехмерный массив — как стопку...

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

19
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
12.11.2009, 08:54 #2
используй proxy-классы
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.11.2009, 08:57 #3
C
1
2
   int mass_all[2][2][2][2][2]={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};
   printf("%d\n", mass_all[0][0][0][0][1]);
Все работает прекрасно
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.11.2009, 09:04 #4
Цитата Сообщение от nill Посмотреть сообщение
Мне нужно использовать пятимерный массив в котором будут целые числа
пишу
C++
1
int mass_all[50][50][50][50][50];
и уже после этой строчки программа вылетает с ошибкой хотя компилятор не выдает ошибок
то есть такой массив нельзя даже инициализировать

а если пишу

C++
1
int mass_all[1][1][1][1][1];
то все нормально

пробовал указать тип данных long но ничего не изменилось

как всетаки можно использовать пятимерный массив mass_all[50][50][50][50][50]
ошибка типа "Unhandled exception at 0x00411687 in temp.exe: 0xC00000FD: Stack overflow." ?
ты прикинь скока ты места резервируешь 50^5*sizeof(int) где такой стек взять?
экономнее надо товарищь
0
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
12.11.2009, 10:55 #5
а если использовать calloc?
0
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
12.11.2009, 10:57 #6
Цитата Сообщение от TanT Посмотреть сообщение
ошибка типа "Unhandled exception at 0x00411687 in temp.exe: 0xC00000FD: Stack overflow." ?
ты прикинь скока ты места резервируешь 50^5*sizeof(int) где такой стек взять?
экономнее надо товарищь
так как в таком случае создавать подобные массивы? и почему он попадает в стек?
0
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
12.11.2009, 11:02 #7
C
1
2
3
4
5
unsigned size, nmemb;
long double * mass_all;
size = pow(50.,5.);
nmemb = sizeof(int); /* Определяем размер 1 элемента целого типа */
mass_all = (int*)calloc(nmemb, size);
или както так.....

Добавлено через 56 секунд
size - вроде кол-во элементов

Добавлено через 4 минуты
я вот сейчас подумал..... 50 в 5 степени - это 312,5 млн. элементов...... представь сколько будет длиться их элементарная обработка...........
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.11.2009, 11:28 #8
Цитата Сообщение от blackswan Посмотреть сообщение
так как в таком случае создавать подобные массивы? и почему он попадает в стек?
попадает в стек так как создаётся в статической памяти (ты сразу говоришь этим кодом int mass_all[50][50][50][50][50]; что у тебя железно будет использоваться стока памяти).
теоретически можно поробовать использовать кучу (heap) как сказал Iworb, но... не лучше ли сократить запросы? не факт что кучи хватит. возможно следует использовать для хранения данных файлы.
для чего тебе столько памяти? какая задача?
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
12.11.2009, 11:47  [ТС] #9
в общем понятно что это очень большой массив и надо делать как то по другому
а задача такая

есть 50 строк
в каждой по 5 переменных

надо посчитать количество повторений

то есть к примеру если бы было всего три строки
1) 1, 2, 40, 15, 16
2) 1, 2, 40, 15, 16
3) 1, 2, 40, 15, 40

в результате я хочу знать что

вариант 1, 2, 40, 15, 16 повторяется 2 раза
вариант 1, 2, 40, 15, 40 повторяется 1 раз

порядок переменных важен
то есть
1, 2, 40, 15, 16 и 1, 2, 40, 16, 15 это разные строки


я хотел написал такой код

C++
1
2
3
4
5
6
7
8
9
10
11
  
int mass_all[50][50][50][50][50]; 
 
х=1; x1=1; x2=2; x3=40; x4=16;
mass_all[x][x1][x2][x3][x4]++;
 
х=1; x1=1; x2=2; x3=40; x4=16;
mass_all[x][x1][x2][x3][x4]++;
 
х=1; x1=1; x2=2; x3=40; x4=40;
mass_all[x][x1][x2][x3][x4]++;
и потом в цикле определил бы элементы массива которые больше нуля и сразу бы узнал количество повторений
А как сделать это же по другому пока не додумался.

ЗЫ Строки конечно заранее не известны я тут просто упростил
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.11.2009, 11:51 #10
Цитата Сообщение от nill Посмотреть сообщение
есть 50 строк
в каждой по 5 переменных
тебе хватит int mass[50][5];

строки будешь сравнивать по элементно, если все элементы совпали то нашёл совпадение

можешь добаить ешё один элемент в и тоге будет int mass[50][6]; в избыточный элемент будешь пемещать количество повторений, и !ставить маркер, то есть если нашёл в середине массива строку одинаковую с рассматриваемой, то маркируешь найденную -1. таким образом будешь проверять если маркер -1, то с этой строкой сравнивать не надо. ! и не забудь обнулить все ячейки в которые будешь маркер писать
1
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.11.2009, 13:04 #11
Продолжая развитие предложения TanT, ниже приведен код, с наличием избыточного элемента в массиве.
Предполагается, что в массив уже все данные занесены (в том числе в mass[i][5]==-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
 bool fl;
 int count, i, i1, j;
 for(i=0; i<50; i++)
 {
     count=1;
     for(i1=i+1; i1<50; i1++) 
         if(mass[i1][5]==-1)
         {
             fl=false;
             for(j=0; j<5; j++)
                 if(mass[i][j]!=mass[i1][j])
                     fl=true;
            if(!fl)
            {
                mass[i1][5]=0;
                count++;
            }
 
         }
         if(mass[i][5]==-1)
            cout<<"Г‚Г*ðèГ*Г*ГІ: "<<mass[i][0]<<","<<mass[i][1]<<","<<mass[i][2]<<","<<mass[i][3]<<","<<mass[i][4]<<" ïîâòîðÿåòñÿ "<<count<<" Г°Г*Г§"<<endl;
 
 }
1
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
12.11.2009, 14:08 #12
а если сделать динамический массив??? в нём будут ограничения???
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.11.2009, 14:24 #13
Цитата Сообщение от cristaloleg Посмотреть сообщение
а если сделать динамический массив??? в нём будут ограничения???
конечно.
0
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
12.11.2009, 14:26 #14
в плане что можно указать любой размер???

C++
1
int *p = new int[100000000000000000000000000]
работать будет???
0
mamedovvms
2917 / 838 / 93
Регистрация: 30.04.2009
Сообщений: 2,627
12.11.2009, 14:48 #15
Цитата Сообщение от nill Посмотреть сообщение
есть 50 строк
в каждой по 5 переменных
что то я не догнал а как получился пятимерный массив, из за того что сказано 5 переменных, ну хорошо что про 50 не подумал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2009, 14:48
Привет! Вот еще темы с ответами:

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j&gt;3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
12.11.2009, 14:48
Ответ Создать тему
Опции темы

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