! ! =====> Program - P103.F90 ! ! ! CLASS LIST UPDATE PROGRAM ! USING A LINEAR SEARCH BY ID - NOT SORTED ! ADDITIONS AT END OF FILE ! ! DECLARE ARRAYS FOR FILE ! CHARACTER (LEN=25) :: NAMES(100),NAME INTEGER ID(100),MARKS(100,7),GRADES(7) ! PRINT *, 'This is Program >> P103 = Update with Linear Search' ! ! Tell program where data for READ is coming from OPEN(UNIT=5, FILE='P103.DAT') ! UNIT=5 is the default input ! ! !==== READ IN FILE AND STORE IN MAIN MEMORY ! L1: DO J=1,100 READ 15,ID(J),NAMES(J),(MARKS(J,I),I=1,7) 15 FORMAT(I7,1X,A25,7I3) IF(ID(J) == 0) GO TO 101 Print 15,ID(J),NAMES(J),(MARKS(J,I),I=1,7) END DO L1 16 FORMAT(/'TOO MUCH DATA FOR DEFINED ARRAYS'/ & 'INCREASE ARRAY SIZE AND RERUN'//) STOP ! !==== READ AND PROCESS UPDATE CARDS ! 101 NREC=J-1 PRINT 102,NREC 102 FORMAT(/'CLASS LIST UPDATE PROGRAM '/ & I5,' RECORDS ON FILE') L2: DO J=1,100 READ 15,KID,NAME,GRADES IF(KID == 0) THEN NUPD=J-1 PRINT 203,NUPD 203 FORMAT(/I5,' UPDATES PROCESSED'/ & / 'UPDATED CLASS LIST'//) ! L3: DO K=1,NREC PRINT 211,ID(K),NAMES(K),(MARKS(K,I),I=1,7) 211 FORMAT(I10,2X,A25,7I5) ! !=== LEAVE A BLANK LINE EVERY 5 ! IF(MOD(K,5) == 0) PRINT * ! Nothing = a blank line END DO L3 STOP ELSE CALL SCANID(ID,NREC,KID,KPOS) IF(KPOS <= 0) THEN ! !==== GOODIE! WE HAVE A NEW MEMBER OF THE CLASS ! ADD AT THE END ! NREC=NREC+1 IF(NREC > 100) THEN PRINT 220,KID,NAME 220 FORMAT(/'ARRAYS FULL - UNABLE TO ADD',I10,2X,A25) STOP ENDIF ! !==== DO ACTUAL UPDATE ! ID(NREC)=KID NAMES(NREC)=NAME L4: DO I=1,7 MARKS(NREC,I)=GRADES(I) END DO L4 ELSE ! !==== THIS STUDENT IS ON FILE - UPDATE ANY NONZERO ENTRY IN GRADES ! INTO THE ARRAY MARKS ! L5: DO I=1,7 IF(GRADES(I) /= 0) THEN ! grades(i) not zero MARKS(KPOS,I)=GRADES(I) END IF END DO L5 ENDIF ENDIF END DO L2 STOP END ! SUBROUTINE SCANID(LIST,N,KEY,KPOS) INTEGER LIST(N),KEY ! !==== LINEAR SEARCH ! L1: DO I=1,N IF(KEY == LIST(I)) GO TO 100 END DO L1 KPOS=0 RETURN 100 KPOS=I RETURN END DATA: 9414154 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 9712526 Snoopy 0 0 0 0 0 48 0 9973522 Charlie Brown 0 0 0 0 0 0 95 9613986 Linus Van Pelt 0 0 0 0 0 0 80 9515010 Woodstock 0 0 0 0 19 0 0 0000000 OUTPUT: Program entered This is Program >> P103 = Update with Linear Search 9414154 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 UPDATE PROGRAM 7 RECORDS ON FILE 4 UPDATES PROCESSED UPDATED CLASS LIST 9414154 Opus 1 51 61 61 71 73 97 6 9613986 Bloom Milo 1 61 71 61 81 74 8 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 1 9 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 9712526 Snoopy 0 0 0 0 4 8 0 9973522 Charlie Brown 0 0 0 0 0 9 5 Fortran-90 STOP
Page builder: Charles Boivin
Last modified: 11/07/95