P103.F90

Linear search w/ integer


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

Come back to the previous page

Page builder: Charles Boivin

Last modified: 11/07/95