На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
    > FORTRAN: необычный GO TO
      Pers_tmb Книгу не нашел, поэтому по-сути трудно давать комментарии.
      Сообщение отредактировано: NetVir -
        Решив некоторые проблемы продолжаю заниматься переводом с фортрана на Си...

        В подпрограмме подключаются глобальные массивы, объявляется ещё один большой массив и используется функция 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 году...
          Pers_tmb все описано с стандарте
          Цитата
          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.
          Т.е. изменение A(1,1,1) влечет извенение AQ(1,1,1) и наоборот.
          На счет 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.
            Так, это понятно. И всё же массив G1 содержится в памяти следом за массивом A. При изменении элемента AQ(1,1,10) изменится ли элемент G1(1,1)?
              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

              Поэтому ответ на последний ответ изменится, потому что это та же самая память
                Спасибо! :) Всё достаточно логично, но необходимо было переубедиться.

                AQ(n,m,14) используется как вспомогательный массив.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0676 ]   [ 16 queries used ]   [ Generated: 27.04.24, 02:21 GMT ]