Нужна помощь с выводом звездочек и индексов с использованием массивов - PullRequest
1 голос
/ 13 апреля 2011

Вывод этой программы на фортране 95 отображает звездочки вместо цифр.Также я не могу заставить Эксперимент # печатать так, как задумано;Эксперимент 1, Эксперимент 2, Эксперимент 3 и так далее.Вместо этого он печатает следующим образом;Эксперимент 1, Эксперимент 1, Эксперимент 1.

Есть идеи, как мне решить эту проблему?Ниже приводится моя программа в полном объеме.

Спасибо за ваше время.

PROGRAM numbersgen
    IMPLICIT NONE

        !Variable declaration
        INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
        INTEGER, DIMENSION(:),ALLOCATABLE::temparray
        INTEGER:: numrolls, numexps
        INTEGER:: i=0, j=0
        REAL:: avg=0, sdv=0, variance=0, sum=0
        INTEGER:: k, min, pos, temp

        .............
        ------

        REAL, INTENT(IN):: sum
        REAL, INTENT(IN):: avg, variance, sdv

        PRINT*, " "
        PRINT*, "Sum: ",sum
        PRINT '(1X,A,F5.3)', "Average: ",avg
        PRINT '(1X,A,F5.3)', "Variance: ",variance
        PRINT '(1X,A,F5.3)', "Standard Deviation: ",sdv

        END SUBROUTINE

END PROGRAM

Ответы [ 2 ]

5 голосов
/ 13 апреля 2011

Формат F5.3 требует, чтобы значение было в диапазоне от 0 до 9,999.Если среднее значение больше или отрицательное, вместо этого оно всплывает.Чтобы найти разумную спецификацию формата, временно измените форматы на F15.3, чтобы вы могли хотя бы увидеть значения.

Я не понимаю, почему номер эксперимента не увеличивается. Ой!Является ли область действия i из основной программы используемой в подпрограммах ?!Локальных деклараций о них нет, и действует implicit none, поэтому я склонен думать, что это проблема.Простой эксперимент для подтверждения - изменить имя i в основной программе на что-то совершенно другое, например expidx, и посмотреть, есть ли ошибки компиляции.(Есть четыре места, которые нужно изменить.)

3 голосов
/ 13 апреля 2011

Поместив свои подпрограммы в оператор содержимого в программе, вы предоставляете им доступ к данным, объявленным в вашей программе.Таким образом, подпрограммы, использующие i и j, фактически изменяют свои значения внутри самой программы.Не делайте этого!

«Правильный» способ - поместить ваши подпрограммы в отдельные программные блоки или в модуль и использовать их внутри основной программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...