Ошибка при выполнении рекурсивной процедуры. Фортран 90.

Компьютеры программирование программы fortran

Проблема.
Программа пишется для определения положений начала и конца скобок, и того, из какой скобки был совершен заход.

вот код. язык - фортран 90.
происходит обработка строковой переменной посимвольно.



recursive subroutine BraZ(posi,last,numBr,curBr)

use Bank

implicit none

integer, intent(in) :: posi
integer, intent(out) :: last,curBr
integer, intent(inout) :: numBr
integer :: k,cur

k=posi
1 k=k+1
cur=ichar(cpformula(k:k))
if (cur.EQ.40) then
numBr=numBr+1
bras(1,numBr)=curBr
bras(2,numBr)=k
write (*,100) posi,curBr,numBr
call braZ(k,last,numBr,curBr)
bras(3,numBr)=last
k=last
goto 1
endif
if (cur.EQ.41) then
write (*,101)
curBr=numBr-1
endif

100 format ('Come in at ',i2,' after ',i2,' bracket for ',i2,' bracket.')
101 format ('Out from ',i2,' bracket, to ',i2,' bracket.')

return
end subroutine BraZ

ошибка

forrtl: severe (157): Program Exception - access violation
Image PC Routine Line Source
ChemCalc.exe 004031A4 BRAZ 16 braZ.f90
ChemCalc.exe 00401A6F CHEMCALC 103 ChemCalc.f90
ChemCalc.exe 0042E9C9 Unknown Unknown Unknown
ChemCalc.exe 00425D14 Unknown Unknown Unknown
kernel32.dll 7C816D4F Unknown Unknown Unknown

Примечание:
работоспособность программы пока не обсуждается. мне не понятно почему в строке

numBr=numBr+1

происходит access violation.

Примечание:
вопрос закрыт.
все написал.
отпишитесь в вопросе, чтобы закрыть.

Примечание:
Антон Витальевич (Антон Дьячук),

в данном случае было удобно.

я стараюсь избегать многих вещей.
Ответы:
постарайтесь в будущем не использовать рекурсию


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.