! ! =====> Program - P105.F90 ! ! ! CLASS LIST RETRIEVAL PROGRAM ! FIND SOME STUDENT GRADES ! USING A HASHING SCHEME WITH THE ID AS THE KEY ! ! DECLARE ARRAYS FOR FILE ! CHARACTER (LEN=25) NAMES(100),NAME INTEGER ID(100),MARKS(100,7),GRADES(7) ! PRINT *, 'This is Program >> P105 = Hashing' ! ! Tell program where data for READ is coming from OPEN(UNIT=5, FILE='P105.DAT') ! UNIT=5 is the default input ! ! !===== ZERO OUT ALL ID'S FOR STARTERS ! L1: DO J=1,100 ID(J)=0 END DO L1 ! !==== READ IN FILE AND STORE IN MAIN MEMORY ! L2: DO J=1,100 READ 15,KD,NAME,GRADES 15 FORMAT(I7,1X,A25,7I3) IF(KD == 0) GO TO 101 Print 15,KD,NAME,GRADES CALL HASH(KD,NR) 31 IF(ID(NR) == 0) THEN ! STORE AWAY THE DATA IN ANY EMPTY SLOT ID(NR)=KD NAMES(NR)=NAME L3: DO K=1,7 MARKS(NR,K)=GRADES(K) END DO L3 ! !=== HERE WE DEAL WITH THE CASE OF A USED SLOT ! TRY THE NEXT OVER, BUT WATCH FOR END OF THE FILE ! ELSE NR=NR+1 ! IF AT END - START AT BEGINNING IF(NR > 100) NR=1 GO TO 31 END IF END DO L2 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') NREQ=0 L4: DO J=1,NREC READ 202,KID 202 FORMAT(I7) IF(KID == 0) THEN PRINT 203,NREQ 203 FORMAT(I5,' REQUESTS PROCESSED'/) STOP ELSE NREQ=NREQ+1 CALL HASH(KID,NR) 231 IF(ID(NR) == 0) THEN PRINT 205,KID 205 FORMAT(I9,' NOT ON FILE - CHECK SPELLING') ELSE IF(KID == ID(NR)) THEN PRINT 206,KID,NAMES(NR),(MARKS(NR,I),I=1,7) 206 FORMAT(I9,3X,A25,7I5) ELSE NR=NR+1 IF(NR > 100) NR=1 GO TO 231 END IF END IF END IF END DO L4 END ! SUBROUTINE HASH(ID,NR) INTEGER, PARAMETER :: NPRIME=97 NR=MOD(ID,NPRIME)+1 RETURN END DATA: 9611684 Opus 15 16 16 17 17 39 76 9613986 Bloom Milo 16 17 16 18 17 41 79 9412978 Dallas Steven 13 12 11 13 14 31 64 9613693 Cat Bill the 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 Mike Binkley 19 19 19 18 19 45 91 0000000 Dummy 0 0 0 0 0 0 0 9611684 9613693 9511522 9513221 0000000 OUTPUT: Program entered This is Program >> P105 = Hashing 9611684 Opus 1 51 61 61 71 73 97 6 9613986 Bloom Milo 1 61 71 61 81 74 17 9 9412978 Dallas Steven 1 31 21 11 31 43 16 4 9613693 Cat Bill the 1 81 81 91 71 94 18 2 9515010 John Cutter 1 51 61 51 51 53 87 7 9510633 Jones Oliver W 1 71 71 81 71 74 28 0 9513221 Mike Binkley 1 91 91 91 81 94 59 1 CLASS LIST PROGRAM - RETRIEVAL BY NAME 7 RECORDS ON FILE 9611684 Opus 1 51 61 61 71 73 97 6 9613693 Cat Bill the 1 81 81 91 71 94 18 2 9511522 NOT ON FILE - CHECK SPELLING 9513221 Mike Binkley 1 91 91 91 81 94 59 1 4 REQUESTS PROCESSED Fortran-90 STOP
Page builder: Charles Boivin
Last modified: 11/07/95