2012-04-03 16 views
5

Solo quería modificar una pequeña parte de un programa muy antiguo y no puedo por mi propia vida descubrir qué he hecho para enojar a los dioses de Fortran.Error de sintaxis, encontrado .and. y .or.

El código original tiene la siguiente línea:

if (r.gt.rstep) xappad = xappad*fakm 

que he modificado para:

if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
: .and. r.lt.2.92*rstep) xappad = xappad*fakm 

Lo que me da los errores:

sp-co-2- MODIFIED.for (785): error # 5082: error de sintaxis, encontrado '.OR' cuando se espera uno de: BLOCK BLOCKDATA módulo de programa tipo complejo BYTE doble carácter DOUBLECOMPLEX ...

 if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
-------------------------------------------------------------------------^ 

sp-co-2-MODIFIED.for (786): error # 6090: Una matriz-valorado operando es requerido en este contexto.

 : .and. r.lt.2.92*rstep) xappad = xappad*fakm 
------^ 

sp-co-2-MODIFIED.for (786): error # 6087: Se requiere una instrucción de asignación array en este contexto.

 : .and. r.lt.2.92*rstep) xappad = xappad*fakm 
-------------------------------------------^ 
+4

no he codificado en FORTRAN para casi 25 años, pero si lo recuerdo correctamente, necesitas un par de paréntesis alrededor de toda la expresión condicional. – dasblinkenlight

Respuesta

15

Realmente no sé mucho FORTRAN, pero me parece que se está perdiendo un par de paréntesis alrededor de la condicional:

if ((r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep .and. r.lt.2.92*rstep)) xappad = xappad*fakm 
+0

AH, sabía que estaba siendo un gran idiota. Eso parece haberlo hecho, gracias. –

Cuestiones relacionadas