!
! =====> Program - P102.F90
!
!
! CLASS LIST PROGRAM
! FIND SOME STUDENT GRADES
! USING A LINEAR SEARCH BY NAME
!
! DECLARE ARRAYS FOR FILE
!
CHARACTER (LEN=25) :: NAME(100),KEY
INTEGER ID(100),MARKS(100,7)
COMMON /COUNTS/ NCOMP
!
PRINT *, 'This is Program >> P102 = Linear Search in sorted data'
!
! Tell program where data for READ is coming from
OPEN(UNIT=5, FILE='P102.DAT') ! UNIT=5 is the default input
!
NC=0
!
!==== READ IN FILE AND STORE IN MAIN MEMORY
!
L1: DO J=1,100
READ 15,ID(J),NAME(J),(MARKS(J,I),I=1,7)
Print 15,ID(J),NAME(J),(MARKS(J,I),I=1,7)
15 FORMAT(I7,1X,A25,7I3)
IF(ID(J) == 0) GO TO 101
END DO L1
PRINT 16
16 FORMAT(/'TOO MUCH DATA FOR DEFINED ARRAYS'/ &
'INCREASE ARRAY SIZE AND RERUN'//)
STOP
!
!==== READ AND PROCESS NAMES REQUESTED
!
101 NREC=J-1
PRINT 102,NREC
102 FORMAT(/'CLASS LIST PROGRAM - RETRIEVAL BY NAME'/ &
I5,' RECORDS ON FILE')
L2: DO J=1,NREC
READ 202,KEY
202 FORMAT(A25)
IF(KEY == 'Done') THEN
NREQ=J-1
PRINT 203,NREQ
203 FORMAT(/ I5,' REQUESTS PROCESSED'/)
APROBE=NC/NREQ
PRINT 204,APROBE
204 FORMAT(/'AVERAGE NUMBER OF PROBES =',F6.1)
STOP
ELSE
CALL SCAN2(NAME,NREC,KEY,KPOS)
NC=NC+NCOMP
IF(KPOS <= 0) THEN
PRINT 205,KEY
205 FORMAT(/ A25,' NOT ON FILE - CHECK SPELLING'/)
ELSE
PRINT 206,ID(KPOS),KEY,(MARKS(KPOS,I),I=1,7)
206 FORMAT(I9,3X,A25,7I5)
END IF
END IF
END DO L2
END
!
SUBROUTINE SCAN2(LIST,N,KEY,KPOS)
CHARACTER (LEN=25) :: LIST(N),KEY
COMMON/COUNTS/NCOMP
NCOMP=0
!
!==== LINEAR SEARCH ASSUMING SORTED DATA
!
L1: DO I=1,N
NCOMP=NCOMP+1
IF(KEY > LIST(I)) CYCLE
IF(KEY == LIST(I)) GO TO 100
KPOS=0
RETURN
END DO L1
KPOS=0
RETURN
100 KPOS=I
RETURN
END
DATA:
9414154 Binkley Mike 15 16 16 17 17 39 76
9613986 Bloom Milo 16 17 16 18 17 41 79
9412978 Cat Bill the 13 12 11 13 14 31 64
9613693 Dallas Steven 18 18 19 17 19 41 82
9515010 John Cutter 15 16 15 15 15 38 77
9510633 Jones Oliver W 17 17 18 17 17 42 80
9513221 Opus 19 19 19 18 19 45 91
0000000 Dummy 0 0 0 0 0 0 0
Jones
John Cutter
Bloom Milo
Opuus
Done
OUTPUT:
Program entered
This is Program >> P102 = Linear Search in sorted data
9414154 Binkley Mike 15 16 16 17 17 39 76
9613986 Bloom Milo 16 17 16 18 17 41 79
9412978 Cat Bill the 13 12 11 13 14 31 64
9613693 Dallas Steven 18 18 19 17 19 41 82
9515010 John Cutter 15 16 15 15 15 38 77
9510633 Jones Oliver W 17 17 18 17 17 42 80
9513221 Opus 19 19 19 18 19 45 91
0 Dummy 0 0 0 0 0 0 0
CLASS LIST PROGRAM - RETRIEVAL BY NAME
7 RECORDS ON FILE
Jones NOT ON FILE - CHECK SPELLING
9515010 John Cutter 15 16 15 15 15 38 77
9613986 Bloom Milo 16 17 16 18 17 41 79
Opuus NOT ON FILE - CHECK SPELLING
4 REQUESTS PROCESSED
AVERAGE NUMBER OF PROBES = 5.0
Fortran-90 STOP
Page builder: Charles Boivin
Last modified: 11/07/95