Adding/Subtracting arrays in F77

  • Thread starter Thread starter PCSL
  • Start date Start date
  • Tags Tags
    Arrays
AI Thread Summary
The discussion centers on a user's inquiry about adding specific elements of an array in Fortran, particularly when the array is defined as character strings. The user initially struggles with performing operations like x(2) + x(3) and seeks clarification on whether specific elements can be added. Responses emphasize the importance of understanding data types in Fortran, noting that character strings cannot be added in the same way as numerical values. Instead, concatenation can be achieved using the '//' operator. The user later clarifies that they intended to work with numerical values and shares a corrected code snippet where the array is defined as REAL instead of CHARACTER. This change allows for successful addition of elements, illustrating the significance of proper data type declaration in Fortran programming.
PCSL
Messages
146
Reaction score
0
Hey, I'm new to fortran and I don't know how to add arrays. I opened a data file and assigned a different array to each number but if I type something like x(2)+x(3) it will not yield a result. This is probably a stupid question but thanks for any help you can offer.
 
Technology news on Phys.org
Please post your code. Can't help without seeing what the code is doing...can't take your word for it...sorry.
 
I just have a very simple code as follows:

Code:
        program test
        integer i,j
        character*14 x(10,7)
        open (unit=3, file='dstest')
        open (unit=8, file='dstestnew.data')
        read (3,*) ((x(i,j), i=1,10), j=1,7)
cccc [operation]
        close(unit=3)
        close(unit=8)
        end

My question is can i add specific arrays i.e. x(1,3)+x(4,4) or can you only use an array to perform operations on x(i,j). I have the dstestnew.data file open so I can write whatever I calculate to that file if that wasn't obvious.. thanks!
 
Last edited:
Short answer: Yes, you can do x(1,3)+x(4,4)

Long answer: You say that you are trying to see what operations you can do...why waste your time? How about you do a little bit of reading on fortran arrays? And find out for sure what it is that you can and cannot do? Please do not attempt to learn to program cluelessly by trial an error; sure, when something is not too clear, you can try variations of what they seem to be saying until you get it right and understand it.
 
gsal said:
Short answer: Yes, you can do x(1,3)+x(4,4)

Long answer: You say that you are trying to see what operations you can do...why waste your time? How about you do a little bit of reading on fortran arrays? And find out for sure what it is that you can and cannot do? Please do not attempt to learn to program cluelessly by trial an error; sure, when something is not too clear, you can try variations of what they seem to be saying until you get it right and understand it.

The reason I posted here is because I finished a schaum's outline on fortran and a book on F77 by Etter and neither addressed my question in the section on arrays. Googling did not help me figure out how to add specific arrays either. I tried variations using do-loops and could not successfully add them together. Also I tried assigning a variable to each array but that did not work either. I posted here because I was out of ideas, not because I didn't make an effort to figure it out on my own.

edit: I have no idea why I wrote trying to figure out specific operations in my code... all I care about is the operation addressed in my question.
 
PCSL said:
I just have a very simple code as follows:

Code:
        program test
        integer i,j
        character*14 x(10,7)
        open (unit=3, file='dstest')
        open (unit=8, file='dstestnew.data')
        read (3,*) ((x(i,j), i=1,10), j=1,7)
cccc [operation]
        close(unit=3)
        close(unit=8)
        end

My question is can i add specific arrays i.e. x(1,3)+x(4,4) or can you only use an array to perform operations on x(i,j). I have the dstestnew.data file open so I can write whatever I calculate to that file if that wasn't obvious.. thanks!

Sorry to butt in, but could you please clarify something? Are you trying to add element x(1,3) to element x(4,4)? Looking at the data type for x, are you reading a 14 character string into each element? If so, does FORTRAN perform automatic type conversion to some data type that supports addition? Or is the '+' operator overloaded to (say) concatenate strings?

Or ... from the wording of your question ("add specific arrays") you seem to imply that x(1,3) and x(4,4) are themselves arrays? Is this so or did you mean elements?
 
NemoReally said:
are you trying to add element x(1,3) to element x(4,4)
^ Yes.

You're right, I used poor vocab. I should have asked how to add specific elements of an array . Thanks for clarifying that. I understand that this is a fairly basic question but I don't think it is bad to seek help after I spent a few hours working on it.

NemoReally said:
Looking at the data type for x, are you reading a 14 character string into each element? If so, does FORTRAN perform automatic type conversion to some data type that supports addition? Or is the '+' operator overloaded to (say) concatenate strings?
Yes to the first question. I don't know the answer to the last two.
 
Last edited:
Sorry, but I still don't understand what you want to do.

If you show us some code you wrote that doesn't work, and a few lines of your data file, that mgiht help us work out what your problem is.

Just saying
Code:
cccc [operation]
doesn't give us many clues!
 
Your array contains character strings. You can't "add" character strings like you do numbers, in Fortran.

Do you want to concatenate the strings together, that is, combine e.g. 'abcde' and 'fghij' to produce 'abcdefghij'? In that case, you would use something like

result = x(1,3) // x(4,4)

Or do the strings contain a character-string representation of numbers (integers or reals)? In that case, you should have declared the array as INTEGER or REAL and read the numbers that way. There's no simple way to add numbers that are stored as digits in character strings.
 
  • #10
jtbell said:
Your array contains character strings. You can't "add" character strings like you do numbers, in Fortran.

Do you want to concatenate the strings together, that is, combine e.g. 'abcde' and 'fghij' to produce 'abcdefghij'? In that case, you would use something like

result = x(1,3) // x(4,4)

Or do the strings contain a character-string representation of numbers (integers or reals)? In that case, you should have declared the array as INTEGER or REAL and read the numbers that way. There's no simple way to add numbers that are stored as digits in character strings.

...I don't know what to say. I swear I did that before and it did not work but this time there was no problem. There must have been an error somewhere else in my code that I misdiagnosed.

Here's the operation I was trying to explain if any of you are curious and thanks for helping:
Code:
	program test
	integer i,j
	real x(10,7)
	open (unit=3, file='dstest')
	open (unit=8, file='dstestnew.data')
	read (3,*) ((x(i,j), i=1,10), j=1,7) 
	sum=x(1,1)+x(2,2)
	write (8,*), 'x(2,2)=',x(2,2)
	write (8,*), 'x(1,1)=',x(1,1)
	write (8,*), 'x(1,1)+x(2,2)=',sum
	close(unit=3)
	close(unit=8)
	end
 
  • #11
Well...this time, you have declared your matrix x as a REAL, as opposed to CHARACTER*14!
 
Back
Top