PROGRAM SPADES C C KEEP SCORE IN SPADES C THIS PROGRAM WILL KEEP A DATA FILE OF THE PAST 30 GAMES C FOR UP TO 10 INDIVIDUALS AND PRINT UPDATED STANDINGS AFTER C EVERY GAME. WE HAVE SEVERAL PEOPLE THAT PLAY SPADES AT LUNCH. C NOT EVERYONE PLAYS EVERY DAY AND SOMETIMES THERE ARE ONLY C THREE THAT PLAY. THIS PROGRAM TRIES TO KEEP THE STANDINGS IN C A FAIR MANNER. IT IS NOT FAIR TO JUST ADD THE SCORES SINCE ON SOME C DAYS THERE ARE ONLY 3 THAT PLAY AND THERE ARE CORRESPONDINGLY HIGHER C SCORES. SOMETHING IS NEEDED TO SHOW HOW GOOD AN INDIVIDUAL IS C AGAINST THE OPPONENTS ON A GIVEN DAY. THE FINAL STANDING IS C DERIVED FROM THE 100 * (DEVIATION FROM MEAN) / (STANDARD DEVIATION). C THUS TO GET THE BEST RESULTS THE WINNER SHOULD GET THE MOST C POINTS HE CAN WHILE KEEPING THE OPPONENTS FROM GETTING VERY MANY. C THE SLIDING WINDOW LETS LOSERS EVENTUALLY DROP THEIR LOSING GAMES. C TO CREATE FOR YOUR SITE, EDIT THE DATA FILE AND DROP ALL RECORDS C EXCEPT THE NAMES. ADJUST THE NAMES TO SUIT YOUR TASTE. C YOU MIGHT TRY TO RUN THE PROGRAM FIRST TO SEE THE FLAVOR OF OUTPUT. C POSITIVE IS GOOD, NEGATIVE BAD. C INTEGER*2 SCORES(10),ISCOR(10),NUMBER(10),GAMES REAL STNDNG(10) BYTE DATE(5),NAMES(7,10),AJUNK,ADATE(5) CHARACTER*80 LINE OPEN(UNIT=1,FILE='SPADES.DAT',STATUS='UNKNOWN') OPEN(UNIT=2,FILE='SPADES.OUT',STATUS='NEW' 1,CARRIAGECONTROL='LIST') READ(1,1000)((NAMES(J,I),J=1,7),I=1,10) WRITE(5,1080) READ(5,1110)ANS IF(ANS.NE.'Y')GO TO 80 GAMES=0 10 READ(1,1070,END=20)AJUNK GAMES=GAMES+1 GO TO 10 20 CONTINUE IF(GAMES.GE.30)THEN REWIND(1) OPEN(UNIT=3,STATUS='SCRATCH') READ(1,1050)LINE WRITE(3,1050)LINE READ(1,1050)LINE !THIS ONE WILL BE THROWN AWAY 30 READ(1,1050,END=40)LINE WRITE(3,1050)LINE GO TO 30 40 CLOSE(UNIT=1,DISPOSE='DELETE') REWIND(3) OPEN(UNIT=1,FILE='SPADES.DAT',STATUS='UNKNOWN') 50 READ(3,1050,END=60)LINE WRITE(1,1050)LINE GO TO 50 60 CLOSE(UNIT=3) END IF WRITE(5,1100) READ(5,1120)(ADATE(I),I=1,5) DO 70,I=1,10 WRITE(5,1090)(NAMES(J,I),J=1,7) READ(5,*)ISCOR(I) 70 CONTINUE WRITE(1,1030)(ADATE(I),I=1,5),(ISCOR(I),I=1,10) REWIND(1) READ(1,1070)AJUNK 80 WRITE(2,1020) WRITE(2,1010)((NAMES(J,I),J=1,7),I=1,10) 90 READ(1,1030,END=130)(DATE(I),I=1,5),(SCORES(I),I=1,10) WRITE(2,1040)(DATE(I),I=1,5),(SCORES(I),I=1,10) SUM=0. NUM=0 DO 100,I=1,10 SUM=SUM+SCORES(I) IF(SCORES(I).NE.0)NUM=NUM+1 100 CONTINUE AVERAG=SUM/NUM X=0. DO 110,I=1,10 IF(SCORES(I).EQ.0)GO TO 110 X=X+(AVERAG-SCORES(I))**2 110 CONTINUE STNDEV=SQRT(X/NUM) DO 120,I=1,10 IF(SCORES(I).EQ.0)GO TO 120 STNDNG(I)=STNDNG(I)+((SCORES(I)-AVERAG)*100/STNDEV) 120 CONTINUE GO TO 90 130 CLOSE(UNIT=1) WRITE(2,1060)((STNDNG(I)),I=1,10) CLOSE(UNIT=2) WRITE(5,1130) CALL EXIT(1) 1000 FORMAT(10(7A1,1X)) 1010 FORMAT(10X,10(7A1,3X)) 1020 FORMAT(36X,'DEPARTMENTAL SPADES STANDING',//) 1030 FORMAT(5A1,1X,10(I4,1X)) 1040 FORMAT(2X,5A1,3X,10(I4,6X)) 1050 FORMAT(A) 1060 FORMAT(//,8X,10(F8.2,2X)) 1070 FORMAT(A1) 1080 FORMAT('$INPUT NEW SCORES? (Y/N)') 1090 FORMAT('$ENTER SCORE FOR ',7A1,' : ') 1100 FORMAT('$PLEASE ENTER DATE. EX:06/21 : ') 1110 FORMAT(A1) 1120 FORMAT(5A1) 1130 FORMAT(' SPADES.OUT READY FOR PRINTING (DEL)') END