Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
The Intel sign-in experience has changed to support enhanced security controls. If you sign in, click here for more information.
27789 Discussions

Fortran Error: The number of subscripts is incorrect

Beginner
659 Views

Hi! I'm a complete beginner in programming and Fortran. This subroutine is part of a mastermind game where the computer guesses my 4 digit color code (6 colors to chose from) . After the computer guesses a random code the user can input the number of  black sticks (if colors are on the right spot and the right color) and the number of white sticks (if the colors are right but not on the right spot). After compiling this subroutine called 'solve' I got many errors about the matrix where i want to store 0 and 1 (for possible and not possible colour codes). Can anybody help my how to define this matrix and what my errors mean?

Thanks a lot in advance.

Subroutine SOLVE(n, sN, wN, field)
IMPLICIT NONE

INTEGER :: sN, wN, aus, l, k, j, i, n, sB(n), wB(n)
INTEGER, DIMENSION (10,4) :: field

aus = 0          !at the beginning there are 0 eliminated combinations

! this loop goes through every possible colour combination (6x6x6x6)
DO l = 1, 6, 1
DO k = 1, 6, 1
DO j = 1, 6, 1
DO i = 1, 6, 1
IF (n == 1) THEN  !in the first round n of the game every combination is         still possible therefore the matrix A should be set to 0
A(l,k,j,i)="0"
ELSE
A(l,k,j,i)="0" !after the second round another program called         "bewertung" (in german this means "evaluation") checks if the user input matches the codes

CALL Bewertung (spielfeld(n),l,k,j,i,sB(n),wB(n))
IF ((sN(n)==sB(n)) .and. (wN(n)==wB(n))) THEN !if they match then the numbers should stay the same and the entries in the matrix should stay the same too
field(n+1,1)= l
field(n+1,2)= k
field(n+1,3)= j
field(n+1,4)= i
ELSE
A(l,k,j,i)= "1"
aus = aus + 1
ENDIF
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO

END SUBROUTINE

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

Here are the errors I got:

loesen.f(17): error #6410: This name has not been declared as an array or a function. [A]
A(l,k,j,i)="0"
--------------------^
loesen.f(19): error #6410: This name has not been declared as an array or a function. [A]
A(l,k,j,i)="0" !ab der zweiten Runde wird geschaut, ob die Kombiantionen von der eingabe des Nutzers übereinstimmen mit den noch möglichen Kombis in der Matrix
----------------^
loesen.f(20): error #6351: The number of subscripts is incorrect. [SPIELFELD]
CALL Bewertung (spielfeld(n),l,k,j,i,sB(n),wB(n))
-------------------------------------^
loesen.f(27): error #6410: This name has not been declared as an array or a function. [A]
A(l,k,j,i)= 1
-----------------------^
compilation aborted for loesen.f (code 1)

1 Solution
Black Belt
633 Views

Error messages from a failed compilation are often hard to understand, but in this case they are very clear. The two variables Spielfeld and A have not been declared as arrays. Apparently (I am guessing), you want Spielfeld to be a 1-dimensional array and A to be a 4-dimensional array.

There is also an ambiguity in the statement

CALL Bewertung (spielfeld(n),l,k,j,i,sB(n),wB(n))

The first argument, SPIELFELD(n), in the absence of a declaration for SPIELFELD as an array, would be treated as the value of a REAL-valued function that takes a single integer argument, n. Similarly, A could have been intended to be a CHARACTER or REAL-valued function of four integer arguments.

2 Replies
Black Belt
634 Views

Error messages from a failed compilation are often hard to understand, but in this case they are very clear. The two variables Spielfeld and A have not been declared as arrays. Apparently (I am guessing), you want Spielfeld to be a 1-dimensional array and A to be a 4-dimensional array.

There is also an ambiguity in the statement

CALL Bewertung (spielfeld(n),l,k,j,i,sB(n),wB(n))

The first argument, SPIELFELD(n), in the absence of a declaration for SPIELFELD as an array, would be treated as the value of a REAL-valued function that takes a single integer argument, n. Similarly, A could have been intended to be a CHARACTER or REAL-valued function of four integer arguments.

Beginner
600 Views

Thanks a lot for the reply! It works now.