Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:012

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:012 [2022-10-01 22:17]
GreyWolf [Задача 14.2]
msx:basic_dialogue_programming_language:012 [2023-02-19 16:24] (текущий)
GreyWolf
Строка 6: Строка 6:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Программированию нельзя научить при помощи выполняемых под команду массовых вольных упражнений… В нем нужно упражняться индивидуально,​ как в хождении на лыжах и вождении автомобиля. Программированию нельзя научить при помощи выполняемых под команду массовых вольных упражнений… В нем нужно упражняться индивидуально,​ как в хождении на лыжах и вождении автомобиля.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 329: Строка 329:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Аналогичный случай был… Аналогичный случай был…
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 353: Строка 353:
 70 NEXT I 70 NEXT I
 80 FOR I=1 TO M-1:FOR J=I+1 TO M 80 FOR I=1 TO M-1:FOR J=I+1 TO M
-90 IF B(I)<​=B(J) THEN NEXT J:​PRINT"​Число,​удовлетворяющее условию:"​B(I) ELSE NEXT I:​PRINT"​Число,​удовлетворяющее условию:"​B(J)+90 IF B(I)<​=B(J) THEN NEXT J:​PRINT"​Число,​удовлетворяющее условию:"​B(I) ​ 
 +   ELSE NEXT I:​PRINT"​Число,​удовлетворяющее условию:"​B(J)
 </​code>​ </​code>​
  
Строка 378: Строка 379:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Совершенные числа красивы. Но известно,​ что красивые вещи редки и немногочисленны,​ безобразные же встречаются в изобилии. Совершенные числа красивы. Но известно,​ что красивые вещи редки и немногочисленны,​ безобразные же встречаются в изобилии.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 436: Строка 437:
 40 FOR K=1 TO 0 STEP 1:GOSUB 100 40 FOR K=1 TO 0 STEP 1:GOSUB 100
 50 FOR T=1 TO LEN(V$) STEP 2 50 FOR T=1 TO LEN(V$) STEP 2
-60 IF (MID$(V$,​T,​2)="​1*"​ OR MID$(V$,​T,​2)="​2*"​) OR (MID$(V$,​T,​2)="​3*"​ OR MID$(V$,​T,​2)="​5*"​) THEN H$="​good"​ ELSE H$="​not":​T=LEN(V$)+1+60 IF (MID$(V$,​T,​2)="​1*"​ OR MID$(V$,​T,​2)="​2*"​) OR (MID$(V$,​T,​2)="​3*"​ OR MID$(V$,​T,​2)="​5*"​) ​ 
 +   THEN H$="​good"​ ELSE H$="​not":​T=LEN(V$)+1
 70 NEXT T:IF H$="​good"​ THEN PRINT I;​SPC(2);​MID$(STR$(N),​2);"​=";​LEFT$(V$,​LEN(V$)-1):​I=I+1 70 NEXT T:IF H$="​good"​ THEN PRINT I;​SPC(2);​MID$(STR$(N),​2);"​=";​LEFT$(V$,​LEN(V$)-1):​I=I+1
 80 N=N+1:​K=(I<​=1000):​NEXT K 80 N=N+1:​K=(I<​=1000):​NEXT K
Строка 463: Строка 465:
 Ok Ok
 5  '​Автор программы:​ Поляков Сергей (9 класс),​ 02.01.90 5  '​Автор программы:​ Поляков Сергей (9 класс),​ 02.01.90
-10 WIDTH80:​CLS:​INPUT"​Введите число монет(продолжение сообщений по нажатию клавиши '​Пробел'​)";​N:​IF N/​2=FIX(N/​2) THEN DIM A(N):​X=RND(-TIME) ELSE CLS:RUN 10+10 WIDTH80:​CLS:​INPUT"​Введите число монет(продолжение сообщений по нажатию ​ 
 +                     клавиши '​Пробел'​)";​N:​ 
 +   IF N/​2=FIX(N/​2) THEN DIM A(N):​X=RND(-TIME) ELSE CLS:RUN 10
 20       PRINT "В Вашем кошельке хранятся следующие монеты:"​ 20       PRINT "В Вашем кошельке хранятся следующие монеты:"​
 30       ​PRINT"​────────────────────────────────────────────────"​ 30       ​PRINT"​────────────────────────────────────────────────"​
 40   FOR I=1 TO N:​A(I)=INT(100*RND(1)+1):​PRINT A(I);:​NEXT:​R1=A(1) 40   FOR I=1 TO N:​A(I)=INT(100*RND(1)+1):​PRINT A(I);:​NEXT:​R1=A(1)
-50 PRINT:​PRINT"​────────────────────────────────────────────────":​H$=INPUT$(1)+50 PRINT:​PRINT"​────────────────────────────────────────────────":​ 
 +   H$=INPUT$(1)
 60   FOR I=1 TO N-1 STEP 2 60   FOR I=1 TO N-1 STEP 2
 70       IF A(I)<​A(I+1) THEN R=A(I):​D=A(I+1) ELSE R=A(I+1):​D=A(I) 70       IF A(I)<​A(I+1) THEN R=A(I):​D=A(I+1) ELSE R=A(I+1):​D=A(I)
 80       ​G=G+1:​PRINT" ​ Итак, ​          "​G"​-ОЕ ВЗВEШИВАНИЕ":​PRINT 80       ​G=G+1:​PRINT" ​ Итак, ​          "​G"​-ОЕ ВЗВEШИВАНИЕ":​PRINT
-90       ​PRINT"​ Вес "​I"​-й монеты ​  ​-"​A(I)"​ граммов ​    "​I+1"​-й монеты- ​  "​A(I+1)"​ граммов ":​PRINT+90       ​PRINT"​ Вес "​I"​-й монеты ​  ​-"​A(I)"​ граммов ​    "​I+1"​-й монеты- ​  "​A(I+1) 
 +         " граммов ":​PRINT
 100      PRINT" Самая меньшая по весу из предыдущих монет -"​R1"​ граммов":​PRINT 100      PRINT" Самая меньшая по весу из предыдущих монет -"​R1"​ граммов":​PRINT
 110      G=G+1:IF R<R1 THEN R1=R 110      G=G+1:IF R<R1 THEN R1=R
-120      PRINT" Меньшая из 2 только что взятых монет-"​R"​граммов;​ после сравнения этих монет ОСТАЕТСЯ монета весом "​R1"​граммов":​PRINT+120      PRINT" Меньшая из 2 только что взятых монет-"​R"​граммов;​ после сравнения 
 +                ​этих монет ОСТАЕТСЯ монета весом "​R1"​граммов":​PRINT
 125 PRINT " ​       ("​G"​-Е ВЗВЕШИВАНИЕ)":​PRINT 125 PRINT " ​       ("​G"​-Е ВЗВЕШИВАНИЕ)":​PRINT
 130      PRINT" Самая большая по весу из предыдущих монет -"​D1"​ граммов":​PRINT 130      PRINT" Самая большая по весу из предыдущих монет -"​D1"​ граммов":​PRINT
 140      G=G+1:IF D>D1 THEN D1=D 140      G=G+1:IF D>D1 THEN D1=D
-150      PRINT" Большая из 2 только что взятых монет-"​D"​граммов;​ после сравнения этих монет ОСТАЕТСЯ монета весом "​D1"​ граммов":​PRINT+150      PRINT" Большая из 2 только что взятых монет-"​D"​граммов;​ после сравнения 
 +                ​этих монет ОСТАЕТСЯ монета весом "​D1"​ граммов":​PRINT
 155 PRINT " ​       ("​G"​-E ВЗВЕШИВАНИЕ)":​PRINT 155 PRINT " ​       ("​G"​-E ВЗВЕШИВАНИЕ)":​PRINT
 160                    H$=INPUT$(1):​GOSUB 200 160                    H$=INPUT$(1):​GOSUB 200
 170  C=C+3:NEXT I 170  C=C+3:NEXT I
-180        PRINT:​PRINT"​После долгих стараний:​ ("​C"​ взвешиваний) мы нашли,​что наибольший вес:":​PRINT D1"​граммов":​PRINT+180        PRINT:​PRINT"​После долгих стараний:​ ("​C"​ взвешиваний) мы нашли,​что 
 +                       наибольший вес:":​PRINT D1"​граммов":​PRINT
 190        PRINT" ​ Mинимальный вес:"​R1"​граммов":​END 190        PRINT" ​ Mинимальный вес:"​R1"​граммов":​END
 200 LOCATE 0,4:FOR F=1 TO 17:FOR J=1 TO 80:​PRINT"​ ";:​NEXT:​NEXT:​LOCATE 0,4:RETURN 200 LOCATE 0,4:FOR F=1 TO 17:FOR J=1 TO 80:​PRINT"​ ";:​NEXT:​NEXT:​LOCATE 0,4:RETURN
Строка 560: Строка 569:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Каждая истинная работа имеет свою красоту. Каждая истинная работа имеет свою красоту.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 660: Строка 669:
 15 IF X$=""​ OR Y$=""​ THEN PRINT "​Нет":​GOTO 10 15 IF X$=""​ OR Y$=""​ THEN PRINT "​Нет":​GOTO 10
 20 FOR I=1 TO LEN(Y$):FOR J=1 TO LEN(X$) 20 FOR I=1 TO LEN(Y$):FOR J=1 TO LEN(X$)
-30 IF MID$(Y$,​I,​1)=MID$(X$,​J,​1) THEN X$=LEFT$(X$,​J-1)+RIGHT$(X$,​LEN(X$)-J):​A$="​Да":​NEXT I ELSE A$="​Нет":​NEXT J+30 IF MID$(Y$,​I,​1)=MID$(X$,​J,​1) THEN X$=LEFT$(X$,​J-1)+RIGHT$(X$,​LEN(X$)-J):​A$="​Да":​ 
 +   NEXT I ELSE A$="​Нет":​NEXT J
 50 PRINT A$:END 50 PRINT A$:END
 run              А затем… ​  ​Ok ​           Подумайте,​почему run              А затем… ​  ​Ok ​           Подумайте,​почему
Строка 679: Строка 689:
 40 INPUT"​Чему равны A,​B,​C";​A,​B,​C 40 INPUT"​Чему равны A,​B,​C";​A,​B,​C
 50 A1=A:​B1=B:​C1=C 50 A1=A:​B1=B:​C1=C
-60 '​Нам нужно найти число M такое, которое в 5 раз больше числа цифр в максимальном по модулю из чисел A, B, C (строки 60-80)+60 '​Нам нужно найти число M такое, которое в 5 раз больше числа цифр в  
 +    ​максимальном по модулю из чисел A, B, C (строки 60-80)
 70 CJ=ABS(A):​IF ABS(B)>​CJ THEN CJ=ABS(B) 70 CJ=ABS(A):​IF ABS(B)>​CJ THEN CJ=ABS(B)
 80 IF ABS(C)>​CJ THEN CJ=ABS(C) 80 IF ABS(C)>​CJ THEN CJ=ABS(C)
Строка 689: Строка 700:
 140 N=I:​Q[I]=FIX(S/​R):​D=R:​R=S-R*Q[I]:​S=D 140 N=I:​Q[I]=FIX(S/​R):​D=R:​R=S-R*Q[I]:​S=D
 150 I=I+1:​W=R<>​0:​NEXT W             '​∗∗∗∗ WEND ∗∗∗∗ 150 I=I+1:​W=R<>​0:​NEXT W             '​∗∗∗∗ WEND ∗∗∗∗
-160 IF D=0 THEN:::IF C=0 THEN PRINT "​Неопределенность":​END ELSE PRINT"​Нет решения":​END:::​ELSE+160 IF D=0 THEN:::IF C=0 THEN PRINT "​Неопределенность":​END ​ 
 +    ​ELSE PRINT"​Нет решения":​END:::​ELSE
 170 IF FIX(C/​D)*D<>​C THEN PRINT "​Нет решения":​END 170 IF FIX(C/​D)*D<>​C THEN PRINT "​Нет решения":​END
 180 A=A/​D:​B=B/​D:​C=C/​D 'A и B сделаем взаимно простыми 180 A=A/​D:​B=B/​D:​C=C/​D 'A и B сделаем взаимно простыми
-190 IF N=0 THEN V=0:U=1 ELSE V=1:​U=0:::​FOR I=N-1 TO 1 STEP -1:​S=V:​V=U-V*Q[I]:​U=S:​NEXT I+190 IF N=0 THEN V=0:U=1 ELSE V=1:​U=0:::​FOR I=N-1 TO 1 STEP -1: 
 +                                       S=V:​V=U-V*Q[I]:​U=S:​NEXT I
 200 X=C*U*SGN(A):​Y=C*V*SGN(B):​C=FIX(X/​B):​X=X-C*B:​Y=Y+C*A'​Частные решения 200 X=C*U*SGN(A):​Y=C*V*SGN(B):​C=FIX(X/​B):​X=X-C*B:​Y=Y+C*A'​Частные решения
-210 PRINT "​Получено частное решение":​PRINT "​уравнения:​ (";​STR$(A1);"​)*x+(";​STR$(B1);"​)*y=";​C1+210 PRINT "​Получено частное решение":​PRINT "​уравнения:​ (";​STR$(A1);"​)*x+ 
 +          ​(";​STR$(B1);"​)*y=";​C1
 220 PRINT "​X0=";​STR$(X);​SPC(2);"​Y0=";​STR$(Y) 220 PRINT "​X0=";​STR$(X);​SPC(2);"​Y0=";​STR$(Y)
-230 PRINT "​Общее решение:":​PRINT "​Xi=";​STR$(X);"​+i*(";​STR$(B1);"​) и Yi=";​STR$(Y);"​-i*(";​STR$(A1);"​),"​+230 PRINT "​Общее решение:":​PRINT "​Xi=";​STR$(X);"​+i*(";​STR$(B1);"​) и Yi=";​STR$(Y);​ 
 +          ​"​-i*(";​STR$(A1);"​),"​
 240 PRINT "​где i- целое число."​ 240 PRINT "​где i- целое число."​
 250 ' ​   Таблица тестовых примеров 250 ' ​   Таблица тестовых примеров
Строка 716: Строка 731:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 А вы, друзья,​ как ни садитесь,​\\ А вы, друзья,​ как ни садитесь,​\\
 Всё в музыканты не годитесь. Всё в музыканты не годитесь.
Строка 863: Строка 878:
 30 PRINT"​100 50 25 10 5  3  1" 30 PRINT"​100 50 25 10 5  3  1"
 40 PRINT"​─────────────────────"​ 40 PRINT"​─────────────────────"​
-50 FOR A=0 TO N\100:FOR B=0 TO N\50:FOR C=0 TO N\25:FOR D=0 TO N\10:FOR F=0 TO N\5:FOR I=0 TO N\3:FOR J=0 TO N+50 FOR A=0 TO N\100:FOR B=0 TO N\50:FOR C=0 TO N\25:FOR D=0 TO N\10: 
 +   FOR F=0 TO N\5:FOR I=0 TO N\3:FOR J=0 TO N
 60 IF 100*A+50*B+25*C+10*D+5*F+3*I+J=N THEN L=L+1:PRINT A;​B;​C;​D;​F;​I;​J 60 IF 100*A+50*B+25*C+10*D+5*F+3*I+J=N THEN L=L+1:PRINT A;​B;​C;​D;​F;​I;​J
 70 NEXT J,​I,​F,​D,​C,​B,​A 70 NEXT J,​I,​F,​D,​C,​B,​A
Строка 910: Строка 926:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Вся шахматная партия — это один замаскированный ход конём. Вся шахматная партия — это один замаскированный ход конём.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 919: Строка 935:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Трава не растёт там, где ступил мой конь. Трава не растёт там, где ступил мой конь.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 933: Строка 949:
 20 DEFINT A-Z:​K=8:​E=8:​X8=55:​Y8=25 20 DEFINT A-Z:​K=8:​E=8:​X8=55:​Y8=25
 30 '​∗∗∗∗∗∗ Рисунок шахматной доски ∗∗∗∗∗∗ 30 '​∗∗∗∗∗∗ Рисунок шахматной доски ∗∗∗∗∗∗
-40 FOR RO=Y8 TO Y8+64 STEP 64:FOR I=X8 TO X8+32*3 STEP 32:​LINE(I+1,​RO)-STEP(15,​15),,​BF:​LINE(I+17,​RO+16)-STEP(15,​15),,​BF:​LINE(I+1,​RO+32)-STEP(15,​15),,​BF:​LINE(I+17,​RO+48)-STEP(15,​15),,​BF:​NEXTI,​RO+40 FOR RO=Y8 TO Y8+64 STEP 64:FOR I=X8 TO X8+32*3 STEP 32: 
 +   LINE(I+1,​RO)-STEP(15,​15),,​BF:​LINE(I+17,​RO+16)-STEP(15,​15),,​BF:​ 
 +   LINE(I+1,​RO+32)-STEP(15,​15),,​BF:​LINE(I+17,​RO+48)-STEP(15,​15),,​BF:​ 
 +   NEXTI,RO
 50 LINE(X8,​Y8-1)-(X8+1+16*8,​Y8-1) 50 LINE(X8,​Y8-1)-(X8+1+16*8,​Y8-1)
 60 LINE(X8,​Y8+16*8)-(X8+16*8+1,​Y8+16*8) 60 LINE(X8,​Y8+16*8)-(X8+16*8+1,​Y8+16*8)
Строка 955: Строка 974:
 240 M$=M$+P$:​PRESET(EL,​165):​PRINT #​1,​P$:​EL=EL+16 240 M$=M$+P$:​PRESET(EL,​165):​PRINT #​1,​P$:​EL=EL+16
 250 IF LEN(M$)<​2 THEN 210 250 IF LEN(M$)<​2 THEN 210
-260 M=VAL(LEFT$(M$,​1)):​N=VAL(RIGHT$(M$,​1)):​IF M<1 OR M>K OR N<1 OR N>E THEN CLS:​P$="":​M$="":​GOTO ​ 20+260 M=VAL(LEFT$(M$,​1)):​N=VAL(RIGHT$(M$,​1)):​IF M<1 OR M>K OR N<1 OR N>​E ​ 
 +                                           THEN CLS:​P$="":​M$="":​GOTO 20
 270 P$="":​M$="":​EL=0 270 P$="":​M$="":​EL=0
-280 DATA 1,​1,​1,​2,​7,​10,​16,​23,​13,​1,​1,​2,​7,​15,​0,​0,​0,​192,​240,​112,​56,​24,​24,​24,​56,​48,​16,​8,​252,​254,​0,​0+280 DATA 1,​1,​1,​2,​7,​10,​16,​23,​13,​1,​1,​2,​7,​15,​0,​0,​0,​192,​ 
 +         240,​112,​56,​24,​24,​24,​56,​48,​16,​8,​252,​254,​0,​0
 290 FOR TI=1 TO 32:READ R:​XO$=XO$+CHR$(R):​NEXT 290 FOR TI=1 TO 32:READ R:​XO$=XO$+CHR$(R):​NEXT
 300 SPRITE$(1)=XO$ 300 SPRITE$(1)=XO$
Строка 963: Строка 984:
 320 G=8:​I=M:​J=N:​A(I,​J)=1:​XX=(J-1)*16+X8:​YY=(I-1)*16+Y8:​PUT SPRITE 1,​(XX,​YY),​10,​1 320 G=8:​I=M:​J=N:​A(I,​J)=1:​XX=(J-1)*16+X8:​YY=(I-1)*16+Y8:​PUT SPRITE 1,​(XX,​YY),​10,​1
 330 FOR V=-2 TO 2:FOR H=-2 TO 2'​Перебор всевозможных вариантов хода коня 330 FOR V=-2 TO 2:FOR H=-2 TO 2'​Перебор всевозможных вариантов хода коня
-340 IF V=0 OR H=0 OR ABS(V)=ABS(H) THEN 350 ELSE GOSUB 500 '​Переход на подпрограмму,​ определяющую оптимальный вариант хода коня.+340 IF V=0 OR H=0 OR ABS(V)=ABS(H) THEN 350 ELSE GOSUB 500  
 +    ​'​Переход на подпрограмму,​ определяющую оптимальный вариант хода коня.
 350 NEXT H:NEXT V 350 NEXT H:NEXT V
 360 COLOR15,​1,​8:​PSET(190,​45):​PRINT #​1,​SED:​COLOR1,​15,​8 360 COLOR15,​1,​8:​PSET(190,​45):​PRINT #​1,​SED:​COLOR1,​15,​8
Строка 971: Строка 993:
 400 PUT SPRITE 1,​(XX,​YY),​10,​1 '​Перемещение спрайта 400 PUT SPRITE 1,​(XX,​YY),​10,​1 '​Перемещение спрайта
 410 IF (I-V2+J-H2)MOD2<>​0 THEN GOTO 430 410 IF (I-V2+J-H2)MOD2<>​0 THEN GOTO 430
-420 COLOR15,​1,​8:​PRESET((J-H2-1)*16+X8+5,​(I-V2-1)*16+Y8+5):​PRINT #​1,"​∗":​COLOR1,​15,​8:​GOTO 440 +420 COLOR15,​1,​8:​PRESET((J-H2-1)*16+X8+5,​(I-V2-1)*16+Y8+5):​PRINT #​1,"​∗":​ 
-430 PRESET((J-H2-1)*16+X8+5,​(I-V2-1)*16+Y8+5):​PRINT #​1,"​∗"'​Заполнение пройденных полей+    ​COLOR1,​15,​8:​GOTO 440 
 +430 PRESET((J-H2-1)*16+X8+5,​(I-V2-1)*16+Y8+5):​PRINT #​1,"​∗"​ 
 +    ​'​Заполнение пройденных полей
 440 PRESET(190,​45):​PRINT #1,SED 440 PRESET(190,​45):​PRINT #1,SED
 450 PRESET(215,​45):​PRINT #​1,"​ход"​ 450 PRESET(215,​45):​PRINT #​1,"​ход"​
Строка 978: Строка 1002:
 470 FOR II=1 TO K:FOR JJ=1 TO E 470 FOR II=1 TO K:FOR JJ=1 TO E
 480 IF A(II,JJ)=1 THEN NEXT JJ:NEXT II:GOTO 610 ELSE IF G>0 THEN G=8:GOTO 330 480 IF A(II,JJ)=1 THEN NEXT JJ:NEXT II:GOTO 610 ELSE IF G>0 THEN G=8:GOTO 330
-490 '​Подпрограмма,​ считающая число возможных ходов с тех полей,​на которые конь мог бы пойти, и выделение из них минимального.+490 '​Подпрограмма,​ считающая число возможных ходов с тех полей, 
 +     на которые конь мог бы пойти, и выделение из них минимального.
 500 IF I+V=>1 AND I+V=<K AND J+H=>1 AND J+H=<E THEN 510 ELSE RETURN 500 IF I+V=>1 AND I+V=<K AND J+H=>1 AND J+H=<E THEN 510 ELSE RETURN
 510 IF A(I+V,​J+H)=0 THEN I=I+V:J=J+H ELSE RETURN 510 IF A(I+V,​J+H)=0 THEN I=I+V:J=J+H ELSE RETURN
Строка 1013: Строка 1038:
 70 DEFINT A-Z:​OL=35:​K=8:​E=8 70 DEFINT A-Z:​OL=35:​K=8:​E=8
 90 Y8=25:X8=70 90 Y8=25:X8=70
-110 FOR RO=Y8 TO Y8+64 STEP 64:FOR I=X8 TO X8+32*3 STEP 32:​LINE(I+1,​RO)-STEP(15,​15),,​BF:​LINE(I+17,​RO+16)-STEP(15,​15),,​BF:​LINE(I+1,​RO+32)-STEP(15,​15),,​BF:​LINE(I+17,​RO+48)-STEP(15,​15),,​BF:​NEXTI,​RO+110 FOR RO=Y8 TO Y8+64 STEP 64:FOR I=X8 TO X8+32*3 STEP 32: 
 +    ​LINE(I+1,​RO)-STEP(15,​15),,​BF:​LINE(I+17,​RO+16)-STEP(15,​15),,​BF:​ 
 +    ​LINE(I+1,​RO+32)-STEP(15,​15),,​BF:​LINE(I+17,​RO+48)-STEP(15,​15),,​BF:​ 
 +    ​NEXTI,RO
 130 LINE(X8,​Y8-1)-(X8+1+16*8,​Y8-1) 130 LINE(X8,​Y8-1)-(X8+1+16*8,​Y8-1)
 150 LINE(X8,​Y8+16*8)-(X8+16*8+1,​Y8+16*8) 150 LINE(X8,​Y8+16*8)-(X8+16*8+1,​Y8+16*8)
Строка 1031: Строка 1059:
 430 COLOR10,​8,​8:​PRESET(165,​182):​PRINT #​1,"​HISCORE:"​ 430 COLOR10,​8,​8:​PRESET(165,​182):​PRINT #​1,"​HISCORE:"​
 450 PRESET(166,​182):​PRINT #​1,"​HISCORE:":​COLOR1,​15,​8 450 PRESET(166,​182):​PRINT #​1,"​HISCORE:":​COLOR1,​15,​8
-470 DATA 1,​1,​1,​2,​7,​10,​16,​23,​13,​1,​1,​2,​7,​15,​0,​0,​0,​192,​240,​112,​56,​24,​24,​24,​56,​48,​16,​8,​252,​254,​0,​0+470 DATA 1,​1,​1,​2,​7,​10,​16,​23,​13,​1,​1,​2,​7,​15,​0,​0,​0,​192,​ 
 +         240,​112,​56,​24,​24,​24,​56,​48,​16,​8,​252,​254,​0,​0
 475 RESTORE 470:FOR TI=1 TO 32:READ R:​XO$=XO$+CHR$(R):​NEXT 475 RESTORE 470:FOR TI=1 TO 32:READ R:​XO$=XO$+CHR$(R):​NEXT
 490 SPRITE$(20)=XO$:​XO$=""​ 490 SPRITE$(20)=XO$:​XO$=""​
Строка 1067: Строка 1096:
 650 IF YY-DO<Y5 THEN A$="":​GOTO 570 650 IF YY-DO<Y5 THEN A$="":​GOTO 570
 670 YY=YY-DO:​I=I-1:​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 670 YY=YY-DO:​I=I-1:​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570
-690 IF YY+DO>​=Y6 THEN A$="":​GOTO 570 ELSE YY=YY+DO:​I=I+1:​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 +690 IF YY+DO>​=Y6 THEN A$="":​GOTO 570 ELSE YY=YY+DO:​I=I+1:​ 
-710 IF XX+DO>​=X6 THEN A$="":​GOTO 570 ELSE XX=XX+DO:​J=J+1:​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 +    ​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 
-730 IF XX-DO<X5 THEN A$="":​GOTO 570 ELSE XX=XX-DO:​J=J-1:​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 +710 IF XX+DO>​=X6 THEN A$="":​GOTO 570 ELSE XX=XX+DO:​J=J+1:​ 
-750 IF F>=1 THEN 790 ELSE A(I,​J)=1:​GOSUB1150:​Q=5:​GOSUB1010:​IF(I+J)MOD2=0 THEN COLOR15,​1,​8:​PRESET(XX+5,​YY+5):​PRINT #​1,"​∗":​COLOR 1,15,8 ELSE PRESET(XX+5,​YY+5):​PRINT #​1,"​∗"​+    ​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 
 +730 IF XX-DO<X5 THEN A$="":​GOTO 570 ELSE XX=XX-DO:​J=J-1:​ 
 +    ​PUT SPRITE5,​(XX,​YY),​10,​20:​GOTO 570 
 +750 IF F>=1 THEN 790 ELSE A(I,​J)=1:​GOSUB1150:​Q=5:​GOSUB1010:​IF(I+J)MOD2=0 ​ 
 +    ​THEN COLOR15,​1,​8:​PRESET(XX+5,​YY+5):​PRINT #​1,"​∗":​COLOR 1,​15,​8 ​ 
 +    ​ELSE PRESET(XX+5,​YY+5):​PRINT #​1,"​∗"​
 770 F=1:​K1=I:​K2=J:​GOTO 570 770 F=1:​K1=I:​K2=J:​GOTO 570
 790 FOR V4=-2 TO 2:FOR H4=-2 TO 2 790 FOR V4=-2 TO 2:FOR H4=-2 TO 2
-810 IF V4=0 OR H4=0 OR ABS(V4)=ABS(H4) THEN NEXT H4,V4 ELSE IF I=K1+V4 AND J=K2+H4 AND A(I,​J)<>​1 THEN 850 ELSE NEXT H4,V4:GOTO 570+810 IF V4=0 OR H4=0 OR ABS(V4)=ABS(H4) THEN NEXT H4,V4  
 +    ​ELSE IF I=K1+V4 AND J=K2+H4 AND A(I,​J)<>​1 THEN 850 ELSE NEXT H4,V4:GOTO 570
 830 GOTO 570 830 GOTO 570
-850 K1=I:​K2=J:​A(I,​J)=1:​GOSUB1150:​Q=Q+5:​GOSUB1010:​IF (I+J)MOD2=0 THEN COLOR15,​1,​8:​PRESET(XX+5,​YY+5):​PRINT #​1,"​∗":​COLOR 1,15,8 ELSE PRESET(XX+5,​YY+5):​PRINT #​1,"​∗"​+850 K1=I:​K2=J:​A(I,​J)=1:​GOSUB1150:​Q=Q+5:​GOSUB1010:​IF (I+J)MOD2=0 ​ 
 +    ​THEN COLOR15,​1,​8:​PRESET(XX+5,​YY+5):​PRINT #​1,"​∗":​COLOR 1,​15,​8 ​ 
 +    ​ELSE PRESET(XX+5,​YY+5):​PRINT #​1,"​∗"​
 870 FOR V5=-2 TO 2:FOR H5=-2 TO 2 870 FOR V5=-2 TO 2:FOR H5=-2 TO 2
 890 IF V5=0 OR H5=0 OR ABS(V5)=ABS(H5) THEN 950 890 IF V5=0 OR H5=0 OR ABS(V5)=ABS(H5) THEN 950
Строка 1085: Строка 1122:
 1010 COLOR 15,​8,​8:​PRESET(45,​182):​PRINT#​1,​Q 1010 COLOR 15,​8,​8:​PRESET(45,​182):​PRINT#​1,​Q
 1030 PRESET(46,​182):​PRINT#​1,​Q:​COLOR1,​15,​8:​RETURN 1030 PRESET(46,​182):​PRINT#​1,​Q:​COLOR1,​15,​8:​RETURN
-1050 FOR L1=1 TO 8:PUT SPRITE 1,​(119,​79),​8,​L1:​PUTSPRITE2,​(135,​79),​8,​L1+8:​FORC=0 TO 35:​NEXTC:​NEXT +1050 FOR L1=1 TO 8:PUT SPRITE 1,​(119,​79),​8,​L1:​PUTSPRITE2,​(135,​79),​8,​L1+8:​ 
-1070 XIT$=INKEY$:​IFXIT$=""​ THEN 1050 ELSE PUT SPRITE1,​(0,​0),​15,​L1:​PUT SPRITE 2,​(16,​0),​15,​L1+8+     FOR C=0 TO 35:​NEXTC:​NEXT 
 +1070 XIT$=INKEY$:​IFXIT$=""​ THEN 1050 ELSE PUT SPRITE1,​(0,​0),​15,​L1:​ 
 +     PUT SPRITE 2,​(16,​0),​15,​L1+8
 1090 FOR I1=1 TO 8:FORJ1=1 TO 8 1090 FOR I1=1 TO 8:FORJ1=1 TO 8
-1110 IF(I1+J1)MOD2=0 THEN NEXTJ1,I1 ELSECOLOR15,​1,​8:​PSET((I1-1)*16+X8+5,​(J1-1)*16+Y8+5):​PRINT #​1,"​∗":​COLOR1,​15,​8:​NEXTJ1,​I1+1110 IF(I1+J1)MOD2=0 THEN NEXTJ1,I1 ELSECOLOR15,​1,​8:​PSET((I1-1)*16+X8+5,​(J1-1)*16+Y8+5):​ 
 +     PRINT #​1,"​∗":​COLOR1,​15,​8:​NEXTJ1,​I1
 1130 GOSUB 1150:GOTO 1190 1130 GOSUB 1150:GOTO 1190
 1150 COLOR 8,​15,​8:​PSET(45,​182):​PRINT #1,Q 1150 COLOR 8,​15,​8:​PSET(45,​182):​PRINT #1,Q
Строка 1097: Строка 1137:
 1250 COLOR 5,​8,​8:​PRESET(225,​182):​PRINT #​1,​M1:​PRESET(226,​182):​PRINT #​1,​M1:​COLOR1,​15,​8 1250 COLOR 5,​8,​8:​PRESET(225,​182):​PRINT #​1,​M1:​PRESET(226,​182):​PRINT #​1,​M1:​COLOR1,​15,​8
 1270 ERASE A:​F=0:​Q=0:​CLOSE:​GOTO 50 1270 ERASE A:​F=0:​Q=0:​CLOSE:​GOTO 50
-1280 DATA 0,​0,​127,​128,​128,​190,​179,​179,​190,​179,​179,​179,​190,​128,​128,​127,​0,​0,​255,​0,​0,​51,​51,​51,​51,​30,​12,​12,​12,​0,​0,​255 +1280 DATA 0,​0,​127,​128,​128,​190,​179,​179,​190,​179,​179,​179,​190,​128,​ 
-1290 DATA 0,​0,​0,​0,​0,​127,​128,​191,​190,​179,​190,​128,​127,​0,​0,​0,​0,​0,​0,​0,​0,​255,​0,​51,​51,​30,​12,​0,​255,​0,​0,​0 +          ​128,​127,​0,​0,​255,​0,​0,​51,​51,​51,​51,​30,​12,​12,​12,​0,​0,​255 
-1300 DATA 0,​0,​0,​0,​0,​0,​0,​0,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​255,​0,​0,​0,​0,​0,​0 +1290 DATA 0,​0,​0,​0,​0,​127,​128,​191,​190,​179,​190,​128,​127,​0,​0,​0,​0,​0,​ 
-1310 DATA 0,​0,​0,​0,​0,​127,​128,​190,​179,​190,​191,​128,​127,​0,​0,​0,​0,​0,​0,​0,​0,​255,​0,​12,​30,​51,​51,​0,​255,​0,​0,​0 +          ​0,​0,​0,​255,​0,​51,​51,​30,​12,​0,​255,​0,​0,​0 
-1320 DATA 0,​0,​127,​128,​128,​190,​179,​179,​179,​190,​179,​179,​190,​128,​128,​127,​0,​0,​255,​0,​0,​12,​12,​12,​30,​51,​51,​51,​51,​0,​0,​255 +1300 DATA 0,​0,​0,​0,​0,​0,​0,​0,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​ 
-1330 DATA 0,​0,​255,​0,​0,​63,​51,​53,​60,​52,​49,​51,​63,​0,​0,​255,​0,​0,​254,​1,​1,​25,​25,​25,​25,​25,​1,​25,​25,​1,​1,​254 +          ​255,​0,​0,​0,​0,​0,​0 
-1340 DATA 0,​0,​0,​0,​0,​255,​0,​63,​60,​53,​63,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​254,​1,​25,​25,​1,​25,​1,​254,​0,​0,​0 +1310 DATA 0,​0,​0,​0,​0,​127,​128,​190,​179,​190,​191,​128,​127,​0,​0,​0,​0,​0,​ 
-1350 DATA 0,​0,​0,​0,​0,​255,​0,​63,​53,​60,​63,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​254,​1,​25,​1,​25,​25,​1,​254,​0,​0,​0 +          ​0,​0,​0,​255,​0,​12,​30,​51,​51,​0,​255,​0,​0,​0 
-1360 DATA 0,​0,​255,​0,​0,​63,​51,​49,​52,​60,​53,​51,​63,​0,​0,​255,​0,​0,​254,​1,​1,​25,​25,​1,​25,​25,​25,​25,​25,​1,​1,​254+1320 DATA 0,​0,​127,​128,​128,​190,​179,​179,​179,​190,​179,​179,​190,​128,​ 
 +          ​128,​127,​0,​0,​255,​0,​0,​12,​12,​12,​30,​51,​51,​51,​51,​0,​0,​255 
 +1330 DATA 0,​0,​255,​0,​0,​63,​51,​53,​60,​52,​49,​51,​63,​0,​0,​255,​0,​0,​254,​ 
 +          ​1,​1,​25,​25,​25,​25,​25,​1,​25,​25,​1,​1,​254 
 +1340 DATA 0,​0,​0,​0,​0,​255,​0,​63,​60,​53,​63,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​ 
 +          ​254,​1,​25,​25,​1,​25,​1,​254,​0,​0,​0 
 +1350 DATA 0,​0,​0,​0,​0,​255,​0,​63,​53,​60,​63,​0,​255,​0,​0,​0,​0,​0,​0,​0,​0,​ 
 +          ​254,​1,​25,​1,​25,​25,​1,​254,​0,​0,​0 
 +1360 DATA 0,​0,​255,​0,​0,​63,​51,​49,​52,​60,​53,​51,​63,​0,​0,​255,​0,​0,​ 
 +          ​254,​1,​1,​25,​25,​1,​25,​25,​25,​25,​25,​1,​1,​254
 </​code>​ </​code>​
  
Строка 1114: Строка 1163:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Если в задаче меньше трёх переменных,​ это не задача;​ если ​ больше ​ восьми — она неразрешима. Если в задаче меньше трёх переменных,​ это не задача;​ если ​ больше ​ восьми — она неразрешима.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1241: Строка 1290:
 60 NEXT J,I 60 NEXT J,I
 70 FOR I=1 TO L:FOR J=1 TO U 70 FOR I=1 TO L:FOR J=1 TO U
-80 IFMID$(X$,​I,​1)=MID$(Y$,​J,​1) AND MID$(X$,​I,​1)<>​CHR$(0) THEN P$=P$+MID$(X$,​I,​1):​R=R+1:​N$=MID$(X$,​I,​1):​NEXT I+80 IF MID$(X$,​I,​1)=MID$(Y$,​J,​1) AND MID$(X$,​I,​1)<>​CHR$(0) ​ 
 +   THEN P$=P$+MID$(X$,​I,​1):​R=R+1:​N$=MID$(X$,​I,​1):​NEXT I
 90 IF N$=MID$(X$,​L,​1) THEN 120 90 IF N$=MID$(X$,​L,​1) THEN 120
 100 NEXT J 100 NEXT J
Строка 1394: Строка 1444:
 270 Y$=INKEY$ 270 Y$=INKEY$
 280 INPUT "​А,​может,​Вы желаете извлечь корень?​ (Да/​Нет)";​Y$ 280 INPUT "​А,​может,​Вы желаете извлечь корень?​ (Да/​Нет)";​Y$
-290 IF Y$="​Д"​ OR Y$="​д"​ THEN N$=T$:GOSUB 180:​T=N:​W=INT(SQR(T)):​GOSUB 110:? "​Корень из ";​T$;"​ равен: ";​C$:​GOTO 400+290 IF Y$="​Д"​ OR Y$="​д"​ THEN N$=T$:GOSUB 180:​T=N:​W=INT(SQR(T)):​GOSUB 110: 
 +    ​? "​Корень из ";​T$;"​ равен: ";​C$:​GOTO 400
 300 IF Y$="​Н"​ OR Y$="​н"​ THEN 310 ELSE 270 300 IF Y$="​Н"​ OR Y$="​н"​ THEN 310 ELSE 270
 310 N$=T$:GOSUB 180:​T=N:​N$=L$:​GOSUB 180:L=N 310 N$=T$:GOSUB 180:​T=N:​N$=L$:​GOSUB 180:L=N
Строка 1426: Строка 1477:
 90 FOR J=1 TO K:PRINT C(J);:NEXT J:PRINT 90 FOR J=1 TO K:PRINT C(J);:NEXT J:PRINT
 100 FOR J=K TO 1 STEP -1 100 FOR J=K TO 1 STEP -1
-110 IF C(J)=N-K+J THEN NEXT J:GOTO 60 ELSE C(J)=C(J)+1:​IF J+1>K THEN GOTO 60 ELSE FOR I=J+1 TO K:​C(I)=C(I-1)+1:​NEXT I:GOTO 60+110 IF C(J)=N-K+J THEN NEXT J:GOTO 60 ELSE C(J)=C(J)+1:​IF J+1>​K ​ 
 +    ​THEN GOTO 60 ELSE FOR I=J+1 TO K:​C(I)=C(I-1)+1:​NEXT I:GOTO 60
 run run
 Укажите N и K? 3,2 Укажите N и K? 3,2
Строка 1441: Строка 1493:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Что наша "​Жизнь"?​ Игра! Что наша "​Жизнь"?​ Игра!
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1576: Строка 1628:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Один человек купил трёх коз и заплатил 3 рубля. \\ Один человек купил трёх коз и заплатил 3 рубля. \\
 Спрашивается:​ по чему каждая коза пошла? Спрашивается:​ по чему каждая коза пошла?
Строка 1614: Строка 1666:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Незатейливые головоломки о целых числах веками служили источником обновления математики. Незатейливые головоломки о целых числах веками служили источником обновления математики.
 <WRAP rightalign>​ <WRAP rightalign>​
msx/basic_dialogue_programming_language/012.1664651867.txt.gz · Последние изменения: 2022-10-01 22:17 — GreyWolf