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

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

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

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

12.11.2009, 08:40. Просмотров 1967. Ответов 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]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2009, 08:40     Пятимерный массив
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
12.11.2009, 08:54     Пятимерный массив #2
используй proxy-классы
valeriikozlov
Эксперт C++
4669 / 2495 / 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]);
Все работает прекрасно
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) где такой стек взять?
экономнее надо товарищь
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
12.11.2009, 10:55     Пятимерный массив #5
а если использовать calloc?
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) где такой стек взять?
экономнее надо товарищь
так как в таком случае создавать подобные массивы? и почему он попадает в стек?
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 млн. элементов...... представь сколько будет длиться их элементарная обработка...........
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, но... не лучше ли сократить запросы? не факт что кучи хватит. возможно следует использовать для хранения данных файлы.
для чего тебе столько памяти? какая задача?
nill
9 / 9 / 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]++;
и потом в цикле определил бы элементы массива которые больше нуля и сразу бы узнал количество повторений
А как сделать это же по другому пока не додумался.

ЗЫ Строки конечно заранее не известны я тут просто упростил
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, то с этой строкой сравнивать не надо. ! и не забудь обнулить все ячейки в которые будешь маркер писать
valeriikozlov
Эксперт C++
4669 / 2495 / 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;
 
 }
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
12.11.2009, 14:08     Пятимерный массив #12
а если сделать динамический массив??? в нём будут ограничения???
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.11.2009, 14:24     Пятимерный массив #13
Цитата Сообщение от cristaloleg Посмотреть сообщение
а если сделать динамический массив??? в нём будут ограничения???
конечно.
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
12.11.2009, 14:26     Пятимерный массив #14
в плане что можно указать любой размер???

C++
1
int *p = new int[100000000000000000000000000]
работать будет???
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,624
12.11.2009, 14:48     Пятимерный массив #15
Цитата Сообщение от nill Посмотреть сообщение
есть 50 строк
в каждой по 5 переменных
что то я не догнал а как получился пятимерный массив, из за того что сказано 5 переменных, ну хорошо что про 50 не подумал
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
12.11.2009, 16:56     Пятимерный массив #16
Цитата Сообщение от cristaloleg Посмотреть сообщение
в плане что можно указать любой размер???

C++
1
int *p = new int[100000000000000000000000000]
работать будет???
По идее размер объекта должен в size_t помещаться. Для массива переменных типа int
C
1
2
3
4
5
6
7
#include <stdio.h>
#include <limits.h>
 
int main(){
    printf("Maximum elements of int array is: %d\n", SIZE_MAX / sizeof(int));
    return 0;
}
то есть 1073741823
Но могу и ошибаться...

Добавлено через 52 минуты
К слову, 1073741823 элементов типа int - это 4 гига памяти...
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
12.11.2009, 16:57     Пятимерный массив #17
эт всего или ток на одну плоскость?
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
12.11.2009, 17:27     Пятимерный массив #18
Цитата Сообщение от cristaloleg Посмотреть сообщение
эт всего или ток на одну плоскость?
В каком смысле "на одну плоскость"?
Тип size_t - базовый беззнаковый целочисленный тип языка Си/Си++. Является результатом выполнения оператора sizeof. Размер типа выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива. Например, на 32-битной системе size_t будет занимать 32-бита, на 64-битной - 64-бита. Другими словами в переменную типа size_t может быть безопасно помещен указатель.
То есть максимальное количество элементов в массиве равно SIZE_MAX / размер одного элемента.
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
15.11.2009, 10:56     Пятимерный массив #19
одномерные массивы(плоские), следовательно одна полоскость
двумерные массивы(объёмные(кубик)), следовательно одна 2 плоскости..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2009, 11:30     Пятимерный массив
Еще ссылки по теме:

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

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

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


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
15.11.2009, 11:30     Пятимерный массив #20
Цитата Сообщение от cristaloleg Посмотреть сообщение
одномерные массивы(плоские), следовательно одна полоскость
двумерные массивы(объёмные(кубик)), следовательно одна 2 плоскости..
А... Ну двухмерные - это скорее квадратик, трёхмерные - кубик Но это всё условности. Для компьютера это длинная последовательность элементов, а как их обрабатывать - как (к примеру) строку из 100 элементов, или 10 строк по 10 столбцов - уже дело десятое. Максимальное адресуемое пространство для 32-битных систем - 4 гигабайта.
Yandex
Объявления
15.11.2009, 11:30     Пятимерный массив
Ответ Создать тему
Опции темы

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