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

Выделить память для трёхмерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
07.01.2010, 17:08     Выделить память для трёхмерного массива #1
Пожалуйста помогите! нужно решить 4 задания, но у меня совершенно нет времени! срочно нужно ехать к девушке...надеюсь на ваше понимание и свободное время.

1. В одномерном массиве поменять местами элементы с чётными и нечётными индексами.

2. Сформируйте квадратную матрицу по правилу: a[i][j]=3 ghb i=j, a[i][j]=-1 i<>j

3. Дан массив из 6 элементов типа целое без знака. Сформировать указатель на этот массив и обратиться ко второму элементу массива разными способами.

4. Выделить память для трёхмерного массива [6][3][4]. Изменить индексацию массива так, чтобы начальный элемент имел индексы -1,-2,-3.

Заранее спасибо...Надеюсь ктонить поможет...

Добавлено через 23 часа 12 минут
помогите, вопрос всё еще актуален!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2010, 17:08     Выделить память для трёхмерного массива
Посмотрите здесь:

выделить память для массива*[] C++
C++ Как выделить память для динамического массива?
C++ Как динамически выделить память для строкового массива?
C++ Массивы : невозможно выделить память для массива постоянного нулевого размера
C++ Как в отдельной функции выделить память для динамического массива, объявленного в main
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.01.2010, 17:29     Выделить память для трёхмерного массива #2
1.
C
1
2
3
4
5
6
int temp;
for(int i=0; i<n; i+=2)
{temp=mas[i];
mas[i]=mas[i+1];
mas[i+1]=temp;
}
Добавлено через 2 минуты
2.
C
1
2
3
4
5
6
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(i==j)
mas[i][j]=3;
else
mas[i][j]=-1;
Добавлено через 51 секунду
поверьте, на оставшиеся 2 у Вас уйдет не более 15 минут.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
10.01.2010, 20:05  [ТС]     Выделить память для трёхмерного массива #3
2 последних вопроса всё ещё актуальны! надеюсь на вашу помощь! заранее спасибо.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2010, 20:56     Выделить память для трёхмерного массива #4
07.01.2010, 17:08
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
Пожалуйста помогите! нужно решить 4 задания, но у меня совершенно нет времени! срочно нужно ехать к девушке...надеюсь на ваше понимание и свободное время.
Сегодня, 20:05
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
2 последних вопроса всё ещё актуальны! надеюсь на вашу помощь! заранее спасибо.
На трое суток залип у девушки вместо того, чтобы уроки делать?
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
11.01.2010, 18:40  [ТС]     Выделить память для трёхмерного массива #5
Цитата Сообщение от easybudda Посмотреть сообщение
07.01.2010, 17:08

Сегодня, 20:05

На трое суток залип у девушки вместо того, чтобы уроки делать?

да, именно) и тем не менее прошу вашей помощи...не судите меня строго за мою наглость.

Да и из уроков только программирование осталось, вот эти задачи и ещё одну я почти доделал уже.

Добавлено через 1 час 17 минут
Всё ещё актуально, и нужно срочно!

Добавлено через 20 часов 22 минуты
Мне всё ещё нужна помощь! Да...я что-то туплю, но как можно сделать ввод элементов одномерного массива с клавиатуры?)
ThisIsMyName
8 / 8 / 0
Регистрация: 17.11.2009
Сообщений: 36
11.01.2010, 18:52     Выделить память для трёхмерного массива #6
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
Мне всё ещё нужна помощь! Да...я что-то туплю, но как можно сделать ввод элементов одномерного массива с клавиатуры?)
C
1
2
3
4
5
printf("vvedite N:");
scanf("%d",&n);
printf("vvedite massiv:");
for (i=0;i<n;i++)
scanf("%d",&a[i]);
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
11.01.2010, 19:09  [ТС]     Выделить память для трёхмерного массива #7
Вообще уже память едет)) пора проц менять наверное =) остальные вопросы всё ещё нужны мне! Вот первая задача, набрасал пока, вот так надо? помогите исправить ошибки если что.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
main()
int n, mas[]; int temp,i;
printf("vvedite razmer: ")
scanf("%d",&n);
printf("vvedite massiv:");
for (i=0;i<n;i++)
scanf("%d",&mas[i]);
for(int i=0; i<n; i+=2)
{temp=mas[i];
mas[i]=mas[i+1];
mas[i+1]=temp;
pritf("massiv: %d", i);
}
Добавлено через 11 минут
да и ещё, во второй задаче нужно динамический массив создавать, или можно подругому? совсем уже всё позабывал...(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.01.2010, 19:18     Выделить память для трёхмерного массива #8
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
3. Дан массив из 6 элементов типа целое без знака. Сформировать указатель на этот массив и обратиться ко второму элементу массива разными способами.
C
1
2
3
4
5
unsigned arr[6];
/* если второй элемент - это тот, что с индексом 1, тогда так: */
unsigned *u;
u = arr;
printf("%d %d %d %d", arr[1], *(arr + 1), u[1], *(u + 1));
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
11.01.2010, 19:22  [ТС]     Выделить память для трёхмерного массива #9
easybudda, это один из способов? или там несколько, я думаю что один...верно?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.01.2010, 19:25     Выделить память для трёхмерного массива #10
Bloodykeeper, это как-раз четыре способа получить одно и то же случайное число...
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
11.01.2010, 19:47  [ТС]     Выделить память для трёхмерного массива #11
easybudda, спасибо большое! не можешь мне помочь ещё с первыми двумя задачами, полностью сделать их, у меня визуал студио пропала, пользуюсь wxDev но мне не нравится как ошибки описывает она, и мало что понятно, выручайте! =)

Добавлено через 17 минут
блин, не полностью сделать, а доделать) тупанул, не то написал, надо ведь и свои мозги включать потихонечку.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.01.2010, 23:19     Выделить память для трёхмерного массива #12
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <stdlib.h>
 
int main(void) /* C89 ANSI */
{
    int *p4, **p3, ***p6;
    int i, j, k;
    
    /*
    p4 = (int *) malloc(4 * sizeof *p4);
    
    p3 = (int **) malloc(3 * sizeof *p3);
    
    p6 = (int ***) malloc(6 * sizeof *p6);
    */
    
    /* все выделения памяти нужно проверять на NULL */
    
    p6 = (int ***) malloc(6 * sizeof *p6);
    
    for (i = 0; i < 6; i++) {
        
        p3 = (int **) malloc(3 * sizeof *p3);
        
        p6[i] = p3;
        
        for (j = 0; j < 3; j++) {
            
            p4 = (int *) malloc(4 * sizeof *p4);
            
            p6[i][j] = p4;
            
            for (k = 0; k < 4; k++) {
                if (i == 0 && j == 0 && k == 0) {
                    p6[0][0][0] = 10;
                    continue;
                }    
                p6[i][j][k] = k+1;
            }    
        
        }        
    
    }
    /* все выделения памяти нужно проверять на NULL */
        
    printf(
        "%d %d %d %d" "\n",
        p6[0][0][0],
        p6[0][0][1],
        p6[0][0][2],
        p6[0][0][3]
    );
    
    printf(
        "%d %d %d %d" "\n",
        p6[0][1][0],
        p6[0][1][1],
        p6[0][1][2],
        p6[0][1][3]
    );
        
    **p6 += 3;
    *p6 += 2;
    p6++;
    
    printf("%d" "\n", p6[-1][-2][-3]);
    
    p6--;
    *p6 -= 2;
    **p6 -= 3;
    
    for (i = 0; i < 6; i++) {
        for (j = 0; j < 3; j++)
            free(p6[i][j]);
        free(p6[i]);
    }
    free(p6);
        
    exit(EXIT_SUCCESS);
}
Добавлено через 53 секунды
Код
[guest@station src]$ ./test
10 2 3 4
1 2 3 4
10
[guest@station src]$
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
13.01.2010, 15:23  [ТС]     Выделить память для трёхмерного массива #13
спасибо! если у кого-нибудь есть немножко времени, пожалуйста, помогите мне соединить первые 2 задачи и проверить работоспособность, а то я в чертежах погряз по уши сейчас...(

Добавлено через 7 часов 54 минуты
Помощь ещё нужна!

Добавлено через 15 часов 47 минут
Помогите с 2мя первыми задачами! ничего не выходит(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2010, 21:59     Выделить память для трёхмерного массива
Еще ссылки по теме:

C++ Выделить динамическую память для 2-х мерного массива из N-строк
Как выделить память для двумерного массива указателей в куче? C++
C++ Выделить память для трехмерного массива и изменить индексы начального элемента массива

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.01.2010, 21:59     Выделить память для трёхмерного массива #14
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
#include <stdio.h>
#include <stdlib.h>
 
/* меняет четные и нечётные элементы массива местами */
int main(void) /* C89 ANSI */
{
    int n[] = { 0, 1, 2, 3, 4 };
    int i, size;
    
    size = sizeof n / sizeof n[0];
    
    for (i = 0; i < size; i += 2)
        if (i+1 < size) {
            int t;
            
            t = n[i];
            n[i] = n[i+1];
            n[i+1] = t;
        }    
    
    for (i = 0; i < size; i++)
        printf(" %d", n[i]);
    putchar('\n');
    
    exit(EXIT_SUCCESS);
}
Добавлено через 26 минут
объединение
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
#include <stdio.h>
#include <stdlib.h>
 
void EvenOdd(void); 
void FillMatrix(void);
 
/* меняет четные и нечётные элементы массива местами
   заполняет квадратную матрицу ij = 3, i!=j = -1 */
int main(void) /* C89 ANSI */
{
    printf("swap even and odd" "\n");
    EvenOdd();
    
    printf("fill a matrix ij = 3, i!=j = -1" "\n");
    FillMatrix();
    
    exit(EXIT_SUCCESS);
}
 
/* EvenOdd:  меняет четные и нечётные элементы массива местами */
void EvenOdd(void)
{
    int n[] = { 0, 1, 2, 3, 4 };
    int i, size;
    
    size = sizeof n / sizeof n[0];
    
    for (i = 0; i < size; i++)
        printf(" %d", n[i]);
    putchar('\n');
    
    for (i = 0; i < size; i += 2)
        if (i+1 < size) {
            int t;
            
            t = n[i];
            n[i] = n[i+1];
            n[i+1] = t;
        }    
    
    for (i = 0; i < size; i++)
        printf(" %d", n[i]);
    putchar('\n');
}
 
/* FillMatrix:  заполняет квадратную матрицу ij = 3, i!=j = -1 */
void FillMatrix(void)
{
    int n[4][4];
    int i, j;
    
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            n[i][j] = (i == j) ? 3 : -1;
    
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++)
            printf(" %d", n[i][j]);
        putchar('\n');
    }
}
Yandex
Объявления
13.01.2010, 21:59     Выделить память для трёхмерного массива
Ответ Создать тему
Опции темы

Текущее время: 14:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru