Using Integer Expressions in an If Statement: Help Needed!

Click For Summary

Discussion Overview

The discussion revolves around the use of integer expressions in an if statement within a programming context, specifically addressing syntax issues and logical comparisons in a code snippet. Participants are exploring how to properly structure conditional statements in a programming language, likely Fortran, while dealing with integer arrays and logical operators.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant presents a code snippet using an if statement with logical comparisons involving an integer array, encountering errors related to the use of logical operators.
  • Another participant suggests that the use of chained comparisons like "1 <= sum(i,j) <= 2" is not valid in programming and proposes a corrected version using ".and." for logical conjunctions.
  • Concerns are raised about the distinctness of the conditional cases, particularly when the sum equals 2, which could lead to ambiguity in the logic.
  • A suggestion is made to improve variable naming for clarity, especially since "sum()" is an intrinsic function in Fortran, which could lead to confusion.
  • A further recommendation is provided to use conservative syntax with explicit logical comparisons and to be cautious with parentheses to avoid errors propagating through the code.

Areas of Agreement / Disagreement

Participants express differing views on the appropriate syntax for logical comparisons, with some advocating for traditional syntax and others suggesting modern alternatives. There is no consensus on the best approach to resolve the initial errors presented.

Contextual Notes

Participants note potential limitations in the clarity of variable names and the importance of distinguishing between programming syntax and mathematical notation. The discussion also highlights the need for careful attention to error messages and their origins in the code.

Lukejambo
Messages
13
Reaction score
0
Hi, so I'm trying to use the following if statement:

Fortran:
if (sum(i,j) <=1.0 ) then
  sidash=(si)*(Death)
  else if (1 <= sum(i,j) <= 2) then
  sidash=(si)*((sqrt(2.0)+1.0)*(2.0-sum(i,j))*(Death)+(sum(i,j)-1.0)*(Survive)) 
else if (sum(i,j)<=3 .and. sum(i,j)=>2) then
  sidash=(si)*((sqrt(2.0)+1.0)*(3.0-sum(i,j))*(Survive)+(sum(i,j)-2.0)*(Birth))
  else if (sum(i,j)<=4 .and. sum(i,j)=>3) then
  sidash=(si)*((sqrt(2.0)+1.0)*(4.0-sum(i,j))*(Birth)+(sum(i,j)-3.0)*(Death))
else
  sidash=(si)*(Death)
end if

Where sum(i,j) is an integer array and so is death, survive, birthm si and sidash.

However I get errors saying that I cannot use <= and .and. logical statements comparing integer expressions.

I need to compare sum(i,j) in these regions of numbers so can anyone help me out with this?
 
Last edited by a moderator:
Technology news on Phys.org
Lukejambo said:
Hi, so I'm trying to use the following if statement:

if (sum(i,j) <=1.0 ) then
sidash=(si)*(Death)
else if (1 <= sum(i,j) <= 2) then
sidash=(si)*((sqrt(2.0)+1.0)*(2.0-sum(i,j))*(Death)+(sum(i,j)-1.0)*(Survive))
else if (sum(i,j)<=3 .and. sum(i,j)=>2) then
sidash=(si)*((sqrt(2.0)+1.0)*(3.0-sum(i,j))*(Survive)+(sum(i,j)-2.0)*(Birth))
else if (sum(i,j)<=4 .and. sum(i,j)=>3) then
sidash=(si)*((sqrt(2.0)+1.0)*(4.0-sum(i,j))*(Birth)+(sum(i,j)-3.0)*(Death))
else
sidash=(si)*(Death)
end if

Where sum(i,j) is an integer array and so is death, survive, birthm si and sidash.

However I get errors saying that I cannot use <= and .and. logical statements comparing integer expressions.

I need to compare sum(i,j) in these regions of numbers so can anyone help me out with this?

I don't believe this is legal:
Code:
else if (1 <= sum(i,j) <= 2) then
That's more of a mathematical notation than one used in programming.
It should be like this:
Code:
else if (1 <= sum(i,j) .and. sum(i, j) <= 2) then

BTW, your separate cases are not distinct. If sum(i, j) == 2, then you will have a match in the first else if clause and in the second else if clause.

A better way would be like this:
Code:
else if (1 <= sum(i,j) .and. sum(i, j) < 2) then
 
It would be nice if your "sum" array was named more clearly to indicate the sum of what; you should develop a better variable naming style...clearer but not too verbose. Not to mention that "sum()" is an intrinsic function from Fortran90 and up.
 
Going back to the early, most conservative FORTRAN syntax, try something like ((sum(i,j) .le. 4 ).and. (sum(i,j) .ge. 3)). Don't be cheap with your parentheses, they don't cost anything. Also, try to make note of which line of code the first error statement comes from. The first error often dominoes to make other false error statements in later code. So try to solve the first one and the others might disappear.

Once you get the old syntax working, you can test more modern syntax, step-by-step.
 

Similar threads

  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
6
Views
4K
  • · Replies 12 ·
Replies
12
Views
4K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 6 ·
Replies
6
Views
3K