Question

Je travaille actuellement sur un programme Fortran qui consiste à lire un fichier d'entrée.Une fois la lecture du fichier d'entrée, la première ligne du fichier contient un entier représentant la quantité de matrices dans le fichier.La deuxième ligne contient le nombre de lignes et de colonnes chaque matrice.Les autres lignes contiennent les matrices elles-mêmes.Le programme va lire dans chaque matrice et l'écrire dans un fichier de sortie et calculer la somme de toutes les matrices.Lors de la lecture dans les données matricielles, je continue à recevoir ces deux erreurs

Code: Lire (1, *, Fin= 99) (Dimensions (I), I= 1,2)

Erreur: les constantes et les expressions sont invalides dans les listes d'E / S en lecture seule.

ERROR2: Cette étiquette est indéfinie [99]

Mon code est:

  *START OF CODE
  PROGRAM MAIN

  *DECLARATIONS
  INTEGER EXISTS, DONE, NUM, DIMENSIONS*2, USED
  INTEGER I,J, TEMPMAT(10,10), SUM(10,10),OVER
  CHARACTER INNAME*30, OUTNAME*30
  *INITIALIZATIONS
  INNAME='NULL.DOC'
  EXISTS=0
  DONE=0
  I=0
  J=0
  OVER=0
  USED=0
  NUM=1
  *FORMATS
  5     FORMAT(' ','SUM OF 'I2,X,'MATRICIES')
  *MAIN CODE
  *DO (0)

  *DO WHILE(1) INPUT NAME !EXIST AND != QUIT
   DO WHILE(EXISTS.EQ.0.OR.INNAME.EQ.'QUIT'.OR.INNAME.EQ.'Q')
  *PROMPT FOR NAME OF FILE AND INPUT
  PRINT *,'PLEASE INPUT A FILE NAME INCLUDING AN EXTENSION'
  PRINT *,'ENTER QUIT OR Q TO EXIT'
  READ (*,*) INNAME

  *TEST FOR FILE
  INQUIRE(FILE=INNAME, EXIST=EXISTS)
  PRINT *, 'INPUT FILE EXSISTS'
  *IF EXIST=FALSE, DISPLAY MESSAGE 
  IF(.NOT.EXISTS) THEN
  PRINT *,'FILE DOES NOT EXIST, PLEASE TRY AGAIN'

  *ELSE EXIST=TRUE, OPEN (UNIT=1)
  ELSE 
  OPEN(UNIT=1, FILE=INNAME, STATUS='OLD')
  END IF
  *END DO(1)      
  END DO
  *ASK CHOICES FOR OUTPUT
  PRINT *,'PLEASE ENTER A NAME FOR AN OUTPUT FILE W/ EXTENSION'
  PRINT *,'ENTER QUIT OR Q TO EXIT'
  READ(*,*)OUTNAME

  IF(OUTNAME.EQ.'Q'.OR.OUTNAME.EQ.'QUIT')THEN
    DONE=1
  END IF
  *CHECK IF DONE (IF 1)
  IF(DONE.EQ.0)THEN
  *OPEN THE OUTPUT FILE DO(2)
        DO WHILE(USED.EQ.0)
            INQUIRE(FILE=OUTNAME,EXIST=EXISTS)
            PRINT *, 'OUTPUT FILE EXSITS'
  *OPEN IF FOR IF FILE ALREADY EXISTS
            IF(EXISTS.EQ.1)THEN
                DO WHILE(OVER.LT.1.OR.OVER.GT.2)
                PRINT *,'FILE ALREADY EXISTS. DO YOU WANT TO OVERWRITE?'
                PRINT *,'SELECT 1 FOR YES OR 2 FOR NO'
                SELECT CASE(OVER)
                CASE(1)
                    OPEN(UNIT=2,FILE=OUTNAME,STATUS='OLD')
                    USED=1            
                CASE(2)
  *DO NOTHING  
                CASE DEFAULT
                    PRINT *, 'THAT WAS NOT EVEN AN VALID INPUT, TRY AGAIN'
  *END SELECT
                END SELECT 
  *END IF FOR IF FILE ALREADY EXISTS AMD OPEN IF DID NOT EXIST, END DO(2)
                END DO
            END IF
            OPEN(UNIT=2,FILE=OUTNAME,STATUS='NEW')                   
  *READ IN 1 INTEGER (MAXIMUM VALUE OF 10) FOR # OF MATRICIES IN FILE
            READ(1,*) NUM
            PRINT *, 'THE NUMBER OF MATRICIES: ', NUM
  *READ IN 2 INTEGERS, 1=ROWS, 2=COLUMNS MAX OF 10 FOR EACH
            READ(1,*,END=99)(DIMENSIONS(I), I=1,2)
  *DO WHILE MORE MATRICIES EXIST DO(3)
            DO WHILE(NUM.GT.0)
  *READ THE MATRIX IN DO(4)
                DO J=1,DIMENSIONS(1)
                    READ(1,*,END=99)(TEMPMAT(J,I),I=1,DIMENSIONS(2))
  *END DO (4)
                END DO   
  *ADD MATRIX TO SUM MATRIX
  *DO(5)(6)
                DO J=1,10
                    DO I=1,10
                        SUM(J,I)=SUM(J,I)+TEMPMAT(J,I)
  *END DO(5)(6) 
                    END DO
                END DO
  *PRINT CURRENT MATRIX TO FILE W/ HEADER 'MATRIX X'
  *DO(6)
                DO J=1,DIMENSIONS(1)
                    WRITE(2,*)(TEMPMAT(J,I),I=1,DIMENSIONS(2))
  *END DO(6)
                END DO  
  *WRITE HEADING 'SUM OF ALL N MATRICES'
                WRITE(2,*)5,NUM
                NUM=NUM-1
  *END DO(3)
            END DO
  *END DO(0)
  END DO
  *PRINT SUM OF MATRICES
  *DO(7)
  DO J=1,10
    WRITE(2,*)(SUM(J,I),I=1,10)
  *END DO(7)
  END DO 
  END IF
  *STOP
  STOP
  *END
  END

Était-ce utile?

La solution

Les dimensions sont déclarées de manière particulière.Essayez des dimensions (2).Peut-être que cela a quelque chose à voir avec elle puisque la ligne avec le message d'erreur est la première à utiliser des dimensions.

Autres conseils

euh, je pense qu'il veut aller à la ligne "99" sur EOF.

Et vous n'avez pas encore défini une ligne 99, avez-vous?

Suggestion: essayez de mettre en ligne "99 Continuer".

Ce lien pourrait également aider:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top