Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.94.152] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Pers_tmb Книгу не нашел, поэтому по-сути трудно давать комментарии.
|
Сообщ.
#17
,
|
|
|
Решив некоторые проблемы продолжаю заниматься переводом с фортрана на Си...
В подпрограмме подключаются глобальные массивы, объявляется ещё один большой массив и используется функция EQUIVALENCE. Если выкинуть лишнее, код представляет из себя вот что: [ code ] COMMON/CVP/A(21,21,9),G1(21,21),G2(21,21),RO(21,21),ZMU(21,21) DIMENSION AQ(21,21,14) EQUVALENCE (A(1,1,1),AQ(1,1,1)) [/ code ] Мне интересно, как связаны теперь массивы... Если мы изменим A(1,1,1) изменится также AQ(1,1,1) и наоборот при изменении AQ(1,1,1) изменится ли A(1,1,1)? И, если предыдущее предположение верно, что соответствует элементу AQ(1,1,10) - G1(1,1) или это ни с чем не связанный элемент? Добавлено Книга редкая. Наверняка издана небольшим тиражом в 1972 году... |
Сообщ.
#18
,
|
|
|
Pers_tmb все описано с стандарте
Цитата Т.е. изменение A(1,1,1) влечет извенение AQ(1,1,1) и наоборот.An EQUIVALENCE statement is used to specify the sharing of storage units by two or more entities in a program unit. This causes association of the entities that share the storage units. На счет COMMON: здесь другая ситуация - к A(21,21,9),G1(21,21),G2(21,21),RO(21,21),ZMU(21,21) можно одновременно обратиться через CVP, но изменение какого либо элемента из заданого перечисления не влечет за собой изменение всех остальных элементов из перечисления. Собсно Цитата The COMMON statement provides a means of associating entities in different program units. This allows different program units to define and reference the same data without using arguments, and to share storage units. |
Сообщ.
#19
,
|
|
|
Так, это понятно. И всё же массив G1 содержится в памяти следом за массивом A. При изменении элемента AQ(1,1,10) изменится ли элемент G1(1,1)?
|
Сообщ.
#20
,
|
|
|
COMMON в фортране кроме всего прочего гарантирует последовательное расположение своих элементов в памяти.
Поэтому (надо учесть, что в фортране быстрее всего меняются первые индексы, а в C - последние) AQ(n,m,k) соответствует A(n,m,k) для 1 <= k <= 9 AQ(n,m,10) соответствует G1(n,m) AQ(n,m,11) соответствует G2(n,m) AQ(n,m,12) соответствует R0(n,m) AQ(n,m,13) соответствует ZMU(n,m) AQ(n,m,14) ничему не соответствует, возможно ошибка при подсчете индексов или в COMMON когда-то был еще один массив везде 1 <= n, m <= 21 Поэтому ответ на последний ответ изменится, потому что это та же самая память |
Сообщ.
#21
,
|
|
|
Спасибо! Всё достаточно логично, но необходимо было переубедиться.
AQ(n,m,14) используется как вспомогательный массив. |