powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Область видимости переменных в фортране
25 сообщений из 28, страница 1 из 2
Область видимости переменных в фортране
    #39453334
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Суть такова: практически впервые столкнулся с фортраном, поэтому вопрос банальный, объявил переменные в одном модуле 2 массива типа integer (модуль 1) по ходу работы модуля эти переменные получили определенные значения, затем я эти массивы применяю в другом модуле, но значения их там уже не видны, хотя я эти переменные поместил в раздел COMMON, в чем я не прав? Заранее благодарен.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453341
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

В примере пишут, что их надо объявлять common в каждом использующем модуле

Example sharing variables отсюда
http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/5-Fortran/scoping.html
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453349
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВ примере пишут, что их надо объявлять common
это в описания языка написано лет 60 назад.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453359
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лет 60 назад на счЁтах программировали
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453371
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglВ примере пишут, что их надо объявлять common
это в описания языка написано лет 60 назад.Всего лишь 40 =) Fоrtran 77 - всего лишь 1977г
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453383
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сабж. Видимость - везде 100%. Бай дефинишын, так сказать.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453464
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВсего лишь 40 =) Fоrtran 77 - всего лишь 1977г
COMMON блоки несколько раньше появились ))
Fortran II - 1957 годом датируется
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453472
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglВсего лишь 40 =) Fоrtran 77 - всего лишь 1977г
COMMON блоки несколько раньше появились ))
Fortran II - 1957 годом датируется
Да.
Коммон - ни при чём. В фортране все переменные имеют видимость. Коммон - общая память, несколько другое.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453500
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

Когда программы были маленькими, коммон был не нужен - все было в одном файле.

Вот сейчас бы поспорить про недостатки языка 1957года, йубилейпля =)
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453510
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglShSerge,

Когда программы были маленькими, коммон был не нужен - все было в одном файле.

Вот сейчас бы поспорить про недостатки языка 1957года, йубилейпля =)

О чем тут спорить? о номерах строк и метках?

На этом языке сразу и вполне приемлемо мог программировать любой инженер.
Имея в руках ясный и простой синтаксис, в комбинации с до сих пор не превзойденным оптимизирующим компилятором, инженер получал такой результат, от факта существования которого у "профессионального программиста" выбор оставался только между убиться ап стену или заняться взвешенным рассмотрением вариантов использования GOTO в фортране, с неминуемым признанием их вредными всех разом.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453524
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyО чем тут спорить? о номерах строк и метках?
о размещении двумерных массивов в памяти, например
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453528
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилboobyО чем тут спорить? о номерах строк и метках?
о размещении двумерных массивов в памяти, например
предлагается решать вопрос - какое направление обладает более убедительной святостью - на север или на восток?
Преобразование координат вращением решает этот вопрос.
И скорость просмотра непрерывного участка памяти, занимающего сплошь диапазон адресов от этого не меняется.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453736
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyО чем тут спорить? о номерах строк и метках?
На этом языке сразу и вполне приемлемо мог программировать любой инженер.
Потрясающая неразборчивость (это про "приемлемо"). Что для инженера было особенно круто - так это врождённая способность языка в результате выполнения фрагмента кода

Код: sql
1.
2.
      CALL FOO(1,2,3,4,5)
      WRITE (*,10) '1 + 1 = ', 1 + 1


получить в выводе

Код: sql
1.
1 + 1 = 4



boobyИмея в руках ясный и простой синтаксис, в комбинации с до сих пор не превзойденным оптимизирующим компилятором
А, понятно, просто тупой троллинг опять вылез за пределы заповедника.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39453750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeИзопропилпропущено...

COMMON блоки несколько раньше появились ))
Fortran II - 1957 годом датируется
Да.
Коммон - ни при чём. В фортране все переменные имеют видимость. Коммон - общая память, несколько другое.

Ну, это -- способ определения разделяемой (глобальной) памяти.

Если товарищь ТС поместил переменную в COMMON-блок, то во всех модулях нужно объявлять её именно через COmmon-блок.
Иначе это будет просто другая переменная.

COMMON-блок -- это как бы как в С глобальная переменная типа структуры, которая содержит переменные и/или массивы разных типов.
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455012
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема по-прежнему актуальна для меня, просто не могу понять этого синтаксиса фортрана, как такое вообще может быть

фрагмент 1
ku1=ku-nb
IF(KI.EQ.1) goto 13
140 IT=0
CALL NUM10

вот эдесь ku=5 и ku1=4

далее работа модуля NUM10

SUBROUTINE NUM10

COMMON NAS(20),NST(20),NBA(100),NCU(100)
COMMON KU,KV,KT,NB,E,KU1,nam
DIMENSION N202(800),KM(100)

character nam*16
DO 1 I=1,ku
1 N202(I)=0
IB=1
DO 9 I=1,ku1

а вот здесь KU и KU1 уже равны 0 почему непонятно? может знает кто?
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455019
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

COMMON блоки (в том числе неименованные) должны иметь одинаковую структуру.
имена переменных внутри блоков значения не имеют
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455031
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROGRAM REG10
IMPLICIT INTEGER*2(I-N)
DIMENSION MPP(10),nyb(800),npp(800)
COMMON /BL1/NU(800),N10(800),N20(800),N50(800),AB(800),
#N51(800),NBA(801),NCU(1600),NCB(1600),NTK(800),NT(350),NBU(20),
#NAS(801),NT1(350),NYR(800)
COMPLEX AST(4500),TK(350),U10(800),U(800),SN(800),
#BD(800),VN(800),U101(800),SG(800)
COMMON /BL2/TK,U10,U,SN,SG,NNAM(80)
COMMON KU,KV,KT,NB,E,KU1,nam

начало модуля 1

SUBROUTINE NUM10
c IMPLICIT INTEGER*2(I-N)
COMMON NAS(20),NST(20),NBA(100),NCU(100)
COMMON KU,KV,KT,NB,E,KU1,nam
DIMENSION N202(800),KM(100)
c $include : 'd.inc'
character nam*16

начало модуля 2

вроде одинаково всё - во всяком случае данная строка
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455035
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968COMMON NAS(20),NST(20),NBA(100),NCU(100)
COMMON KU,KV,KT,NB,E,KU1,nam
это единый неименованный common блок

так что разница есть

https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vn7v/index.html
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455045
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
COMMON /BL1/NU(800),N10(800),N20(800),N50(800),AB(800),
#N51(800),NBA(801),NCU(1600),NCB(1600),NTK(800),NT(350),NBU(20),
#NAS(801),NT1(350),NYR(800)
COMPLEX AST(4500),TK(350),U10(800),U(800),SN(800),
#BD(800),VN(800),U101(800),SG(800)
COMMON /BL2/TK,U10,U,SN,SG,NNAM(80)
COMMON /VR/KU,KV,KT,NB,E,KU1,nam
common /bl3/ast,nst(4500),vn,u101,bd

везде сделал так (одинаково)

теперь в модуле 2 значение вообще запредельное вместо 5 у KU - 262149 чушь какая-то
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455674
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то всё равно ничего не понятно в этом синтаксисе фортрана, вроде всё элементарно, но ошибка есть, подскажите плиз , как во всем проекте объявить кучу переменных, чтоб они были веэде видны?

COMMON /BL1/NU(800),N10(800),N20(800),N50(800),AB(800),
#N51(800),NBA(801),NCU(1600),NCB(1600),NTK(800),NT(350),NBU(20),
#NAS(801),NT1(350),NYR(800),KU,KV,KT,NB,E,KU1,nam

так верно в каждом модуле?
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455725
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968так верно в каждом модуле?
да, в каждом(COMPLEX - не опечатка?)


для начала сделайте самую простую программу из двух модулей с простым коммон блоком
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455830
В FORTRAN 90 можно вот так:

module pars_mod
real a, b, d
save
end module pars_mod

subroutine sub1
use pars_mod
! . . . . .
end

subroutine sub2
use pars_mod
! . . . . .
end
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39455875
В Open Watcom F77 всё работает

1)Модуль 1
PROGRAM REG10
IMPLICIT INTEGER*2(I-N)
DIMENSION MPP(10),nyb(800),npp(800)
COMMON /BL1/NU(800),N10(800),N20(800),N50(800),AB(800),
# N51(800),NBA(801),NCU(1600),NCB(1600),NTK(800),NT(350),NBU(20),
# NAS(801),NT1(350),NYR(800)
COMPLEX AST(4500),TK(350),U10(800),U(800),SN(800),
# BD(800),VN(800),U101(800),SG(800)
COMMON /BL2/TK,U10,U,SN,SG,NNAM(80)
COMMON KU,KV,KT,NB,E,KU1,nam

KU=5
KV=6
KT=7
WRITE(*,*)KU,KV,KT
call NUM10
END

2)Модуль 2
SUBROUTINE NUM10
IMPLICIT INTEGER*2(I-N)
COMMON /BL1/NU(800),N10(800),N20(800),N50(800),AB(800),
# N51(800),NBA(801),NCU(1600),NCB(1600),NTK(800),NT(350),NBU(20),
# NAS(801),NT1(350),NYR(800)
COMPLEX AST(4500),TK(350),U10(800),U(800),SN(800),
# BD(800),VN(800),U101(800),SG(800)
COMMON /BL2/TK,U10,U,SN,SG,NNAM(80)
COMMON KU,KV,KT,NB,E,KU1,nam
WRITE(*,*)KU,KV,KT
RETURN
END
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39456033
В этом куске кода в качестве переменной для внутреннего и внешнего цикла используется одна и та же переменная I
Код: sql
1.
2.
3.
4.
DO 1 I=1,ku
1 N202(I)=0
IB=1
DO 9 I=1,ku1
...
Рейтинг: 0 / 0
Область видимости переменных в фортране
    #39456633
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С обычными переменными вроде раэобрался, а вот массивы остаются загадкой вроде принцип один, на не видит значения массива хоть тресни, может кто поможет


Модуль 1 (главный)

PROGRAM REG10
IMPLICIT INTEGER*2(I-N)
DIMENSION MPP(10),nyb(800),npp(800)
DIMENSION MCU(1600),NU(800),MBU(20),mbb(800)
DIMENSION NAS(800),NST(800), NBA(100) ,NCU(100),NCB(100)
COMMON /BL1/NAS(800),NST(800), NBA(100) ,NCU(100),NCB(100)
COMMON /BL2/NU1(800),
#MBA(801),MCB(1600),NTK(800),NT(350),NBU(20),
#NT1(350),NYR(800)
COMPLEX AST(4500),AB(1600),TK(350),U10(800),U(800),SN(800),
#BD(800),VN(800),U101(800),SG(800)
COMMON /BL3/TK,U10,U,SN,SG,NNAM(80)
INTEGER KU,KV,KT,NB,E,KU1
COMMON /BL4/KU,KV,KT,NB,E,KU1,ab,nam
DIMENSION N10(100),N20(100),N30(100),N50(100),N51(100)
COMMON /BL5/N10(100),N20(100),N30(100),N50(100),N51(100)
common/bl3/ ast,vn,u101,bd
character nam*16

...
CALL SC10

... Вот здесь значение массива NBA 1,2,3,4,5


CALL NUM10


________________________________________________________
SUBROUTINE SC10(KI,iso,kust)
IMPLICIT INTEGER *2(I-N)
DIMENSION MCU(1600),NU(800),MBU(20),mbb(800)
DIMENSION NAS(800),NST(800),NBA(100),NCU(100),NCB(100)
COMMON /BL1/NAS(800),NST(800),NBA(100),NCU(100),NCB(100)
COMMON /BL2/NU1(800),
#MBA(801),MCB(1600),NTK(800),NT(350),NBU(20),
#NT1(350),NYR(800)
COMPLEX AST(4500),AB(1600),TK(350),U10(800),U(800),SN(800),
#BD(800),VN(800),U101(800),SG(800)
COMMON /BL3/TK,U10,U,SN,SG,NNAM(80)
INTEGER KU,KV,KT,NB,E,KU1
COMMON /BL4/KU,KV,KT,NB,E,KU1,ab,nam
DIMENSION N10(100),N20(100),N30(100),N50(100),N51(100)
COMMON /BL5/N10(100),N20(100),N30(100),N50(100),N51(100)
common/bl3/ ast,vn,u101,bd
Character nam*16
...

...
Вот здесь значение массива NBA 1,2,3,4,5


----------------------------------------------------------

SUBROUTINE NUM10
c DIMENSION MCU(1600),NU(800),MBU(20),mbb(800)

DIMENSION NAS(800),NST(800),NBA(100),NCU(100),NCB(100)
COMMON /BL1/NAS(800),NST(800),NBA(100),NCU(100),NCB(100)
COMMON /BL2/NU1(800),
#MBA(801),MCB(1600),NTK(800),NT(350),NBU(20),
#NT1(350),NYR(800)
COMPLEX AST(4500),AB(1600),TK(350),U10(800),U(800),SN(800),
#BD(800),VN(800),U101(800),SG(800)
COMMON /BL3/TK,U10,U,SN,SG,NNAM(80)
INTEGER KU,KV,KT,NB,E,KU1
COMMON /BL4/KU,KV,KT,NB,E,KU1,ab,nam
DIMENSION N10(100),N20(100),N30(100),N50(100),N51(100)
COMMON /BL5/N10(100),N20(100),N30(100),N50(100),N51(100)
common/bl3/ ast,vn,u101,bd
DIMENSION N202(800),KM(100)
////

а вот здесь значения NBA 0,0,0,0,0,0,0....
просто ничего не понимаю
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Область видимости переменных в фортране
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]