2013-09-21 6 views
1

Это может быть сложно объяснить. Мне нужно «перевести» старую программу BASIC на python.программа для расчета дней недели

программы называется буднями:

10 PRINT TAB(32);"WEEKDAY" 
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 
30 PRINT:PRINT:PRINT 
100 PRINT "WEEKDAY IS A COMPUTER DEMONSTRATION THAT" 
110 PRINT"GIVES FACTS ABOUT A DATE OF INTEREST TO YOU." 
120 PRINT 
130 PRINT "ENTER TODAY'S DATE IN THE FORM: 3,24,1979 "; 
140 INPUT M1,D1,Y1 
150 REM THIS PROGRAM DETERMINES THE DAY OF THE WEEK 
160 REM FOR A DATE AFTER 1582 
170 DEF FNA(A)=INT(A/4) 
180 DIM T(12) 
190 DEF FNB(A)=INT(A/7) 
200 REM SPACE OUTPUT AND READ IN INITIAL VALUES FOR MONTHS. 
210 FOR I= 1 TO 12 
220 READ T(I) 
230 NEXT I 
240 PRINT"ENTER DAY OF BIRTH (OR OTHER DAY OF INTEREST)"; 
250 INPUT M,D,Y 
260 PRINT 
270 LET I1 = INT((Y-1500)/100) 
280 REM TEST FOR DATE BEFORE CURRENT CALENDAR. 
290 IF Y-1582 <0 THEN 1300 
300 LET A = I1*5+(I1+3)/4 
310 LET I2=INT(A-FNB(A)*7) 
320 LET Y2=INT(Y/100) 
330 LET Y3 =INT(Y-Y2*100) 
340 LET A =Y3/4+Y3+D+T(M)+I2 
350 LET B=INT(A-FNB(A)*7)+1 
360 IF M > 2 THEN 470 
370 IF Y3 = 0 THEN 440 
380 LET T1=INT(Y-FNA(Y)*4) 
390 IF T1 <> 0 THEN 470 
400 IF B<>0 THEN 420 
410 LET B=6 
420 LET B = B-1 
430 GOTO 470 
440 LET A = I1-1 
450 LET T1=INT(A-FNA(A)*4) 
460 IF T1 = 0 THEN 400 
470 IF B <>0 THEN 490 
480 LET B = 7 
490 IF (Y1*12+M1)*31+D1<(Y*12+M)*31+D THEN 550 
500 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 530 
510 PRINT M;"/";D;"/";Y;" WAS A "; 
520 GOTO 570 
530 PRINT M;"/";D;"/";Y;" IS A "; 
540 GOTO 570 
550 PRINT M;"/";D;"/";Y;" WILL BE A "; 
560 REM PRINT THE DAY OF THE WEEK THE DATE FALLS ON. 
570 IF B <>1 THEN 590 
580 PRINT "SUNDAY." 
590 IF B<>2 THEN 610 
600 PRINT "MONDAY." 
610 IF B<>3 THEN 630 
620 PRINT "TUESDAY." 
630 IF B<>4 THEN 650 
640 PRINT "WEDNESDAY." 
650 IF B<>5 THEN 670 
660 PRINT "THURSDAY." 
670 IF B<>6 THEN 690 
680 GOTO 1250 
690 IF B<>7 THEN 710 
700 PRINT "SATURDAY." 
710 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 1120 
720 LET I5=Y1-Y 
730 PRINT 
740 LET I6=M1-M 
750 LET I7=D1-D 
760 IF I7>=0 THEN 790 
770 LET I6= I6-1 
780 LET I7=I7+30 
790 IF I6>=0 THEN 820 
800 LET I5=I5-1 
810 LET I6=I6+12 
820 IF I5<0 THEN 1310 
830 IF I7 <> 0 THEN 850 
835 IF I6 <> 0 THEN 850 
840 PRINT"***HAPPY BIRTHDAY***" 
850 PRINT " "," ","YEARS","MONTHS","DAYS" 
855 PRINT " "," ","-----","------","----" 
860 PRINT "YOUR AGE (IF BIRTHDATE) ",I5,I6,I7 
870 LET A8 = (I5*365)+(I6*30)+I7+INT(I6/2) 
880 LET K5 = I5 
890 LET K6 = I6 
900 LET K7 = I7 
910 REM CALCULATE RETIREMENT DATE. 
920 LET E = Y+65 
930 REM CALCULATE TIME SPENT IN THE FOLLOWING FUNCTIONS. 
940 LET F = .35 
950 PRINT "YOU HAVE SLEPT ", 
960 GOSUB 1370 
970 LET F = .17 
980 PRINT "YOU HAVE EATEN ", 
990 GOSUB 1370 
1000 LET F = .23 
1010 IF K5 > 3 THEN 1040 
1020 PRINT "YOU HAVE PLAYED", 
1030 GOTO 1080 
1040 IF K5 > 9 THEN 1070 
1050 PRINT "YOU HAVE PLAYED/STUDIED", 
1060 GOTO 1080 
1070 PRINT "YOU HAVE WORKED/PLAYED", 
1080 GOSUB 1370 
1085 GOTO 1530 
1090 PRINT "YOU HAVE RELAXED ",K5,K6,K7 
1100 PRINT 
1110 PRINT TAB(16);"*** YOU MAY RETIRE IN";E;" ***" 
1120 PRINT 
1140 PRINT 
1200 PRINT 
1210 PRINT 
1220 PRINT 
1230 PRINT 
1240 END 
1250 IF D=13 THEN 1280 
1260 PRINT "FRIDAY." 
1270 GOTO 710 
1280 PRINT "FRIDAY THE THIRTEENTH---BEWARE!" 
1290 GOTO 710 
1300 PRINT "NOT PREPARED TO GIVE DAY OF WEEK PRIOR TO MDLXXXII. " 
1310 GOTO 1140 
1320 REM TABLE OF VALUES FOR THE MONTHS TO BE USED IN CALCULATIONS. 
1330 DATA 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 
1340 REM THIS IS THE CURRENT DATE USED IN THE CALCULATIONS. 
1350 REM THIS IS THE DATE TO BE CALCULATED ON. 
1360 REM CALCULATE TIME IN YEARS, MONTHS, AND DAYS 
1370 LET K1=INT(F*A8) 
1380 LET I5 = INT(K1/365) 
1390 LET K1 = K1- (I5*365) 
1400 LET I6 = INT(K1/30) 
1410 LET I7 = K1 -(I6*30) 
1420 LET K5 = K5-I5 
1430 LET K6 =K6-I6 
1440 LET K7 = K7-I7 
1450 IF K7>=0 THEN 1480 
1460 LET K7=K7+30 
1470 LET K6=K6-1 
1480 IF K6>0 THEN 1510 
1490 LET K6=K6+12 
1500 LET K5=K5-1 
1510 PRINT I5,I6,I7 
1520 RETURN 
1530 IF K6=12 THEN 1550 
1540 GOTO 1090 
1550 LET K5=K5+1 
1560 LET K6=0 
1570 GOTO 1090 
1580 REM 
1590 END 

эта программа будет принимать текущую дату и дату рождения и вернуть некоторые статистические данные, например, как долго у вас есть жизнь, сколько дней вы спали.

Для части задания я должен объяснить, что означает каждая переменная в программе OLD BASIC. В старые времена, имя переменной может быть только вещи, как A1, B3 и т.д. ...

В этой программе Существует множество вызовов

DATA = [0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5] 

Есть 12 номеров в этом массиве. Я понял, что программа будет читать каждый номер и матч с января по декабрь, и я также узнаю, что это касается расчета того, что это такое, например, понедельник. Вторник.

Я так много нашел, но кто-нибудь может объяснить мне, что означают те цифры в массиве DATA.

спасибо.

+0

Можете ли вы предоставить немного больше контекста в вопросе? Ссылки на сайт намного меньше, чем идеалы. – tacaswell

+0

Цифры в массиве DATA кажутся смещениями в течение первого дня каждого месяца. Например, если 1 января - понедельник, то 1 апреля будет компенсировано на 6 дней, поэтому 1 апреля выпадет на воскресенье. – amitparikh

+0

спасибо! Только после того, как я отправляю глупый вопрос я узнал http://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Months_table это дата, начиная с месяца табл. Спасибо за помощь !!! –

ответ

1

Без вытягивать весь код обособленно, это похоже, что это смещение для начала недели в течение данного месяца ...

Предположим, 1 января является вторник (как 2013) ...

Jan  0 Tuesday 
Feb  3 Friday (Tuesday + 3) 
Mar  3 Friday (Tuesday + 3) 
Apr  6 Monday (Tuesday + 6) 
etc... 

Предполагается, что это не високосный год, иначе число с марта должно быть уменьшено на 1, чтобы обеспечить дополнительный день.

+0

Спасибо! Я разобрал его и узнал, что это таблица за месяц http://en.wikipedia.org/wiki/Calculating_the_day_of_the_week#Months_table –

+0

Не стоит беспокоиться. Для записи переменные не назывались «плохо» тогда ... Они просто были (мне когда-то пришлось отлаживать что-то, где имена переменных были греческими и римскими богами - «LET ZEUS = HERA-ATHENA/3' ugh !). Кроме того, если это ответили на ваш вопрос, подумайте о том, чтобы принять ответ, щелкнув галочку в левой части. Добро пожаловать в SO и надеюсь увидеть вас – Basic

Смежные вопросы