Fortran: Search value in array

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

  1. The problem statement, all variables and given/known data:

read data set, and search for array value to get avegare

  1. Relevant commands, code, scripts, algorithms:

fortran code

hi i have two data sets one(data1) containing

3
8 2 1 5 7 9
9 2 2 5 7 7
10 3 6 6 6 6

and other(data2) containing

5 
1 10
5 20
7 30 
6 40
9 50

now i want my program to search the values 1 5 7 9 from (data1) in data 2 column 1 and then take the average of the corresoinding values in column 2, for example for first line of data1 the avg of (1 5 7 9) will be

(10+20+30+50)/4=27.5

then write

8 2 27.5

and so on...

  1. The attempts at a solution (include all code and scripts):

till now i have written the following program,

program test
implicit none
integer :: pn,en
integer :: i 
real ,allocatable, dimension (:,:) :: y
integer,allocatable,dimension (:,:) :: ix
REAL ,DIMENSION (:) :: avg(10000000)
open (11, file='data1.dat')
read (11,*) pn
allocate (y(pn,2)) 
do i=1,pn
read(11,*) y(i,:)
enddo
close(11)
 
c *************************
open(12,file='data2.dat')
read (12,*) en
allocate (ix(en,6))
do i=1,en
read(12,*) ix(i,:)
enddo
close(12)
 
c *************************
do i=1,en 
avg(i)=(y(ix(i,3),2)+y(ix(i,4),2)+y(ix(i,5),2)+
& y(ix(i,6),2))/4
end do 
do i=1,en
write(*,*) ix(i,1:2),avg(i)
 
enddo
end program

this gives me output

8 2 15
9 2 17.5
10 3 0

which is wrong. instead of searching for value it searches for line number .... so what to change in it to search for value not line number

  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

University of engineering and technology taxila, Taxila, Pakistan, Engr Ahmed, ME919

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

I suppose your goal is to learn FORTRAN, not the task of developing an algorithm for such a simple program. Here is a task how to do it, you can write the program directly from it.

Read the file 2 into a 2-dimensional array as initialisation

Then read data1 line by line. For every line you break the line up into lookup values for the array and use the values you look for (the first column of data2) as index. Remove any lookup value found that way from the line, then total the corresponding values (the column 2 of data2) in a sum. Increment a counter for every value found that way.

At the end of the line divide the total by the counter, output the remaining line and the average and reset both these counters to zero.

I hope this helps.

bakunin

i got little confused... how to " For every line you break the line up into lookup values for the array " ???

You read each line of data1. For every line read that way you do:

  • break the line at the spaces to get the numbers. For instance:
8 2 1 5 7 9

-> break at space chars, you get 6 numbers:

8
2
1
5
7
9
  • loop through these numbers left to right (top to bottom), looking up the numbers as values in your first array.

If you know C, have a look at the library function strtok() . You will have to do the same in FORTRAN.

I hope this helps.

bakunin