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

Небольшая прога по методам доступа к элементам массива - C++

Восстановить пароль Регистрация
 
yukas
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 56
15.02.2011, 19:54     Небольшая прога по методам доступа к элементам массива #1
Смысл такой, имеется трехмерный массив A[50][50][50]. Данные считываются с файла(тут все верно). Хотелось бы обращаться к элементам данного массива по индексам, начинающимся не с нуля как обычно, а задать самому интервалы индексирования(A[l1...h1][l2...h2][l3...h3]).
Видимо чего-то недопонел: программа не работает. Код полностью:
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
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
 
void main()
{
int A[50][50][50],
        l1,
      l2,
      l3,
      h1,
      h2,
      h3,
      D1,
      D2,
      D3 = 1,
      i,
      j,
      k,
      Index,
      Sum=0;
 
FILE *f;
 
cout << "Index: \n";
cin >> l1 >> h1 >> l2 >> h2 >> l3 >> h3;
D2 = (h3 - l3 + 1) * D3;
D1 = (h2 - l2 + 1) * D2;
 
//Zapolnenie dannih
f = fopen("Data.txt", "r");
for(i = 0; i < h1 - l1 + 1; i++)
for(j = 0; j < h2 - l2 + 1; j++)
for(k = 0; k < h3 - l3 + 1; k++)
    fscanf(f, "%d", &A[i][j][k]);
fclose(f);
 
Index = (0 - l1) * D1 + (0 - l2) * D2 + (0 - l3) * D3;
 
int ***B;
 
**B = &**A[-Index];
for(i = l1; i <= h1; i++)
for(j = l2; j <= h2; j++)
for(k = l3; k <= h3; k++)
{
cout << "B[" << i << "," << j << "," << k << "]= " << *(*(*(B + i) + j) + k) << endl;
Sum = Sum + *(*(*(B + i) + j) + k);
}
cout << "Summa= " << Sum << endl;
getch();
}
Добавлено через 1 минуту
Доступ к элементам необходимо организовать именно используя данные формулы(D1,D2,D3,Index). Может, кто сталкивался с подобным?
Теорию не смог найти, как ни гуглил-(
Кто выручит хотя бы с теорией, уже буду благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2011, 01:02     Небольшая прога по методам доступа к элементам массива #2
Отрицательные индексы элементов массива.
yukas
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 56
16.02.2011, 20:55  [ТС]     Небольшая прога по методам доступа к элементам массива #3
Одномерный случай - это просто, мне бы с трехмерным разобраться, но все равно спасибо.

Добавлено через 11 часов 32 минуты
Может кто-то еще помочь сможет?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2011, 21:14     Небольшая прога по методам доступа к элементам массива #4
Имя одномерного массива, является указателем, имя двумерного массива, является указателем на указатель, имя 3-х мерного массива, является указателем на указатель который указывает на указатель. А дальше робота примерная по ссылке выше.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.02.2011, 22:21     Небольшая прога по методам доступа к элементам массива #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
имя двумерного массива, является указателем на указатель, имя 3-х мерного массива, является указателем на указатель который указывает на указатель
Это не так. Имя двумерного массива указывает на начало памяти, в которой последовательно расположены несколько одномерных массивов, т.е. для компилятора двумерный массив является одномерным. Именно поэтому при передаче в функцию именно двумерного массива (а не указателя на указатель) необходимо указывать второе измерение - это нужно компилятору, чтобы вычислять смещение по строкам.
Аналогично для массивов любой размерности, большей 1.
Yandex
Объявления
16.02.2011, 22:21     Небольшая прога по методам доступа к элементам массива
Ответ Создать тему
Опции темы

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