PROGRAM UNO C C KEEP SCORE IN UNO 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 UNO AT LUNCH. C THIS IS USUALLY PLAYED WHEN THERE ARE MORE THAN 4 PEOPLE C FOR CARDS. (SEE SPADES) THIS PROGRAM TRIES TO KEEP THE STANDINGS IN C A FAIR MANNER. 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 -100 * (DEVIATION FROM MEAN) / (STANDARD DEVIATION). C THUS TO GET THE BEST RESULTS THE WINNER SHOULD GET THE LEAST C POINTS HE CAN WHILE LOADING UP THE OPPONENTS. 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) OPEN(UNIT=1,FILE='UNO.DAT',STATUS='UNKNOWN') OPEN(UNIT=2,FILE='UNO.OUT',STATUS='NEW' 1,CARRIAGECONTROL='LIST') READ(1,300)((NAMES(J,I),J=1,7),I=1,10) WRITE(5,501) READ(5,504)ANS IF(ANS.NE.'Y')GO TO 80 GAMES=0 10 READ(1,500,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='UNO.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,503) READ(5,505)(ADATE(I),I=1,5) DO 70,I=1,10 WRITE(5,502)(NAMES(J,I),J=1,7) READ(5,*)ISCOR(I) 70 CONTINUE WRITE(1,200)(ADATE(I),I=1,5),(ISCOR(I),I=1,10) REWIND(1) READ(1,500)AJUNK 80 WRITE(2,302) WRITE(2,301)((NAMES(J,I),J=1,7),I=1,10) 90 READ(1,200,END=130)(DATE(I),I=1,5),(SCORES(I),I=1,10) WRITE(2,201)(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)+((AVERAG-SCORES(I))*100/STNDEV) 120 CONTINUE GO TO 90 130 CLOSE(UNIT=1) WRITE(2,400)((STNDNG(I)),I=1,10) CLOSE(UNIT=2) WRITE(5,401) CALL EXIT(1) 300 FORMAT(10(7A1,1X)) 301 FORMAT(10X,10(7A1,3X)) 302 FORMAT(36X,'DEPARTMENTAL UNO STANDING',//) 200 FORMAT(5A1,1X,10(I4,1X)) 201 FORMAT(2X,5A1,3X,10(I4,6X)) 400 FORMAT(//,9X,10(F7.2,3X)) 401 FORMAT(' UNO.OUT READY FOR PRINTING (DEL)') 500 FORMAT(A1) 501 FORMAT('$INPUT NEW SCORES? (Y/N)') 502 FORMAT('$ENTER SCORE FOR ',7A1,' : ') 503 FORMAT('$PLEASE ENTER DATE. EX:06/21 : ') 504 FORMAT(A1) 505 FORMAT(5A1) 1050 FORMAT(A) END