СуперМодулятор
133 / 133 / 48
Регистрация: 03.11.2012
Сообщений: 974
1

Как создать динамический трехмерный массив и заполнить его случайными значениями?

01.12.2014, 10:57. Показов 1496. Ответов 6
Метки нет (Все метки)

Я больше по Java, но сейчас надо сделать пару задачек по плюсам. Одна из них звучит как-то так:

Введя значения m,n,r, определить трехмерный массив P = размерами i,j,k, где i=1,n;j=1,m;k=1,r. Значения элементов которого определяются случайно.
Во-первых, меня смущает тот момент, что преподаватель не знает, что в плюсах массив считается с нуля... И надо таки с единицы.
С malloc/free не работал в плюсах (учитывая, что это вообще в сях больше используется), а тем более с трехмерными массивами, так что понятия не имею, как это делается. Объявляется как-то вроде
C++
1
int ***P = new int**[r];
, но что дальше и как заполнить этот массив, а потом вывести?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2014, 10:57
Ответы с готовыми решениями:

Создать массив целых чисел и заполнить его случайными значениями
Создать массив целых чисел и заполнить его случайными значениями. Размер массива 200 и диапозон...

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

Создать динамический массив и заполнить его элементы определёнными значениями
Здравствуйте! Подскажите пожалуйста в чём может крыться ошибка (суть задачи состоит в том, чтобы...

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

6
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
01.12.2014, 11:11 2
примерно так
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
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
int main()
{
 
int r,size,h;
cin>>r>>size>>h;
int ***p = new int**[r];
for(int i=0;i<r;i++)
    {
    p[i]=new int*[size];
    for(int j=0;j<size;j++)
        {
        p[i][j]=new int[h];
        for(int z=0;z<h;z++)
            {
            p[i][j][z]=rand()%9;
            cout<<setw(3)<<p[i][j][z];
            }
        cout<<endl;
        }
    cout<<endl;
    }
}
Добавлено через 5 минут
Цитата Сообщение от Bringoff Посмотреть сообщение
Во-первых, меня смущает тот момент, что преподаватель не знает, что в плюсах массив считается с нуля... И надо таки с единицы.
хм...как вариант - принести ему любую книгу по С++...А мб по заданию так надо сделать, вообщем ну просто тогда 0ые эелементы не инициилизировать, не выделять под них память, ну и не обращаться к ним, ничего от этого страшного не будет, ну только "грязный" p[0]
1
СуперМодулятор
133 / 133 / 48
Регистрация: 03.11.2012
Сообщений: 974
01.12.2014, 11:20  [ТС] 3
dzrkot, спасибо, но вспомнил, что надо использовать malloc/free
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
01.12.2014, 11:22 4
Цитата Сообщение от Bringoff Посмотреть сообщение
dzrkot, спасибо, но вспомнил, что надо использовать malloc/free
честно с ходу не напишу, но там похожий смысл - выделяем память фиксированного размера по такому-то адресу
0
СуперМодулятор
133 / 133 / 48
Регистрация: 03.11.2012
Сообщений: 974
01.12.2014, 11:52  [ТС] 5
dzrkot, спасибо, записал так:
C++
1
(int***) malloc(sizeof(int**) * 3);
0
Заблокирован
01.12.2014, 13:44 6
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int ***Create3Array (int N, int M, int R)
{
    int i,j,k;
    int ***A = (int***) malloc (N*sizeof(int**));
    for (i = 0; i<N; i++)
    {   
        A[i] = (int**) malloc (M*sizeof(int*));
        for (j = 0; j<M; j++)
            A[i][j] = (int*) malloc (R*sizeof(int));
    }
 
    for (i = 0; i<N; i++)
        for (j = 0; j<M; j++)
            for (k = 0; k<R; k++)
                A[i][j][k] = rand()%10;
 
    return A;
}
 
void Destroy3Array (int ***A, int N, int M)
{
    int i,j;
    for (i = 0; i<N; i++)
    {   
        for (j = 0; j<M; j++)
            free (A[i][j]);
        free (A[i]);
    }
    free (A);
}
 
void Show3Array (int ***A, int N, int M, int R)
{
    int i,j,k;
    for (i = 0; i<N; i++)
    {   for (j = 0; j<M; j++)
        {   
            for (k = 0; k<R; k++)
                printf ("%5d", A[i][j][k]);
            printf ("\n");
        }
        printf ("\n\n");
    }
}
 
 
int main()
{   
    srand((unsigned int) time (NULL));
    int N = 2, M = 4, R = 3;
 
    int ***A = Create3Array (N, M, R);
    Show3Array (A, N, M, R);
    Destroy3Array (A, N, M);
 
    getchar();
    return 0;   
}
1
Форумчанин
Эксперт CЭксперт С++
8193 / 5043 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
01.12.2014, 15:29 7
Цитата Сообщение от Bringoff Посмотреть сообщение
Во-первых, меня смущает тот момент, что преподаватель не знает, что в плюсах массив считается с нуля... И надо таки с единицы.
Возможно, постановка проблемы чисто математическая, а там таки нумеруют с единицы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2014, 15:29
Помогаю со студенческими работами здесь

Создать динамический двумерный массив, заполнить его случайными цифрами, затем распечатать
???

Создать динамический массив, размер которого пользователь вводит с клавиатуры.Заполнить его случайными числами
Кто знает, как на С++: создать динамический массив, размер которого пользователь вводит с...

Объявить массив из 20 элементов и заполнить его случайными значениями от -6 до 15
Этап 1: Объявить массив из 20 элементов и заполнить его случайными значениями от -6 до 15....

Как заполнить трехмерный массив случайными числами
Добрый день, товарищи! Подскажите как заполнить трёхмерный массив случайными числами имеется...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru