Форум программистов, компьютерный форум, киберфорум
Fortran
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.04.2016
Сообщений: 7
1

Fortran: вызов массива из подпрограммы

11.04.2016, 19:28. Показов 1694. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток! Мне нужно дописать старую программу для расчета некоторых величин. Программа состоит из 4х подпрограмм. В одной из них определяются члены массива PB(1000,1000), после определения его членов мне нужно приравнять его члены к членам массива РВ1(1000,1000) и использовать их в цикле другой подпрограммы в расчетной формуле. Проблема в том, что имея норм значения (0, 10, 20... и т.д.) в первой подпрограмме, во второй все члены массива равны нулю!!! Я неправильно задаю что-то в коде, или упускаю что-то важное? (честно, с фортраном знакома всего две недели)
первая подпрограмма я дописываю массив

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DIMENSION PB1(1000,1000)  
!далее, внутри цикла, где определаются значения массива РВ(I,J) пишу
PB1(I,J)=PB(I,J)  
!для проверки вывожу их значения  
WRITE(*,*)PB1(I,J)             
WRITE(*,*)'PB1(I,J)'            
 на этом с первой подпрограммой заканчиваю.
Вторая подпрограмма:
в COMMON /POL/PB1(1000,1000)  !прописывается последовательно на своем месте среди запрашиваемых массивов
!и далее в программе вставка формулы для расчета:
    DO 906 I=1,NS
    DO 907 J=1,NS
        PIZ1=RG/3.14 
    PIZ22(I)=PRR(I)/PIZ 
    PIZ2(I)=SQRT(PIZ22(I))
    IF (I.NE.J) THEN
    PIZ3(I,J)=PIZ2(I)*PB1(I,J) !Здесь PB1(I,J)=0 на всем цикле и все решение уходит в бесконечность((
    PIZ4(I,J)=1.12/PIZ3(I,J)
    PIZ5(I,J)=SQRT(PIZ4(I,J))
    PB(I,J)=PIZ1*PIZ5(I,J)
    WRITE(*,*) PB(I,J)
    END IF
907   CONTINUE 
906   CONTINUE
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 19:28
Ответы с готовыми решениями:

вызов подпрограммы
у меня задание написать программу вычисления обьема цилиндра. простая программа будет выглядеть...

Вызов подпрограммы
Вечер добрый. Я совсем плохо соображаю в Fortran и програмировании вообще, поэтому строго не...

Вызов dll из подпрограммы
Я сделал dll и вызов функции из мейна основной программы Я хочю, в мейне загрузить саму dll а...

Вызов подпрограммы по ее адресу
Здравствуйте! Возможно ли вызвать подпрограмму по ее физическому адресу? Нужно написать программу,...

4
6930 / 4969 / 2098
Регистрация: 02.02.2014
Сообщений: 13,210
11.04.2016, 19:49 2
Цитата Сообщение от Puma Посмотреть сообщение
COMMON /POL/PB1(1000,1000)
это должно быть в обеих подпрограммах
1
0 / 0 / 0
Регистрация: 11.04.2016
Сообщений: 7
12.04.2016, 04:38  [ТС] 3
Цитата Сообщение от Krasme Посмотреть сообщение
это должно быть в обеих подпрограммах
Я тоже придерживалась такого мнения, но при отладке программа ругается.
Грешу на задание типа массива, но вроде бы выбран верно членами являются действительные числа. Задавала следующим образом:
Fortran
1
2
DIMENSION PB1(1000,1000)
COMMON /POL/PB1(1000,1000)
0
6930 / 4969 / 2098
Регистрация: 02.02.2014
Сообщений: 13,210
12.04.2016, 06:23 4
Лучший ответ Сообщение было отмечено Puma как решение

Решение

ваша конструкция дважды объявляет, что PB1 массив...

либо
Fortran
1
COMMON /POL/PB1(1000,1000)
либо
Fortran
1
2
DIMENSION PB1(1000,1000)
COMMON /POL/PB1
1
0 / 0 / 0
Регистрация: 11.04.2016
Сообщений: 7
12.04.2016, 18:33  [ТС] 5
Про второй вариант записи не знала, спасибо! попробую завтра проверить!
0
12.04.2016, 18:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2016, 18:33
Помогаю со студенческими работами здесь

Вызов подпрограммы для C
Возник вопрос ! Как вызвать код как подпрограмму на Си. .386 .model flat, stdcall option...

Вызов подпрограммы SYSTEM
Добрый день, уважаемые пользователи форума. Мой вопрос заключается в следующем: при вызове...

Вызов подпрограммы из другого .bat
Здравствуйте. В общем мне нужно вызвать :loop из 1.bat в 2.bat. Как реализовать это?

Вызов подпрограммы по срабатыванию таймера
помогите пожалуйста, вроде правильно, но выбивает ошибку syntax error in expression в HWND DWORD ?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru