! ! =====> 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