Перейти к содержанию

«Генератор предложений» — код примитивной болтушки

Болтушка — примитивная говорилка из книги по программированию на Basic

100 CLS
110 DIM V$(10), N$(10), A$(10)
120 DIM T$(10), S$(10)
130 DIM M$(30), Q$(30), C(30)
140 REM Чтение данных
150 GOSUB 1000

200 REM Разговор с человеком
210 INPUT "ПРИВЕТ! КАК ВАС ЗОВУТ?"; D$
220 PRINT
230 PRINT "ПОГОВОРИТЕ СО МНОЙ, "; D$
240 INPUT I$
250 IF I$="" THEN GOTO 220
260 IF I$="ДО СВИДАНИЯ" THEN GOTO 910

300 REM Ответ компьютера
310 LET REPLY=INT(RND(1)*8+1)
320 IF REPLY < 6 THEN GOTO 490
330 GOTO 600
340 PRINT
350 PRINT R$
360 PRINT

400 REM Проверка колличества использованных ответов
405 LET T = 0
410 FOR K = 1 TO 30
420 LET T = T + C(K)
430 NEXT K
440 IF T < 12 THEN GOTO 460
450 FOR K = 1 TO 30: LET C(K) = 0: NEXT K
460 LET T = 0
470 GOTO 240

490 REM Подпрограмма контроля фраз
500 FOR PHRASE = 1 TO 30
510 LET L1 = LEN(Q$(PHRASE))
520 LET L2 = LEN(I$)
530 FOR TEST = 1 TO L2
539 REM ... мне не нравится строка 540 чтото там не так
540 IF MID$(I$, TEST, L1) = Q$(PHRASE) THEN GOTO 560
550 NEXT TEST: NEXT PHRASE: GOTO 600
560 IF C(PHRASE) > 0 THEN GOTO 550
570 LET C(PHRASE) = C(PHRASE) + 1
580 LET R$ = M$(PHRASE)
590 GOTO 340

600 REM Генератор предложений
610 LET E = INT(RND(1) * 10 + 1)
620 LET F = INT(RND(1) * 10 + 1)
630 LET G = INT(RND(1) * 10 + 1)
640 LET H = INT(RND(1) * 10 + 1)
650 LET L = INT(RND(1) * 10 + 1)
660 ON E GOTO 700, 720, 740, 760, 780, 800, 830, 850, 870, 890

700 LET R$ = "ЧТО ВЫ СКАЖИТЕ ПО ТАКОМУ ИНТЕРЕСНОМУ ВОПРОСУ, КАК " + N$(H) + "?"
710 GOTO 340
719 REM ... мне не нравится строка 720 чтото там не так
720 LET R$ = S$(L) + " " + D$ + " НЕУЖЕЛИ ВЫ ДУМАЕТЕ ЧТО КАЖДЫЙ ВОКРУГ"
730 GOTO 340
740 LET R$ = "Я СЛЫШАЛ ЧТО ВЫ В НЕКОТОРОМ РОДЕ " + A$(G) + " " + T$(H) + " " + D$
750 GOTO 340
760 LET R$ = S$(L) + " " + D$ + ", Я ДУМАЮ, ЧТО ЧЕЛОВЕК ВЫ " + A$(G)
765 LET R$ = R$ + " КАК И ДРУГИЕ ЛЮДИ, С КОТОРЫМИ Я РАЗГОВАРИВАЛ"
770 GOTO 340
780 LET R$ = "Я ВИЖУ, ЧТО Я " + A$(G) + " ТЕПЕРЬ"
790 GOTO 340
800 PRINT "Ш - Ш - Ш....... Я ДУМАЮ....."
820 GOTO 340
830 LET R$ = "ДАВАЙТЕ ТЕПЕРЬ ОБСУДИМ ТАКУЮ ТЕМУ КАК " + N$(H) + ", " + D$
840 GOTO 340
850 LET R$ = "ВЫ ДУМАЕТЕ, ЧТО Я " + A$(G) + ", " + D$ + "?"
860 GOTO 340
880 LET R$ = "УГАДАЙТЕ, О ЧЕМ Я ДУМАЮ " + D$
900 GOTO 340

910 REM Подпрограмма завершения диалога
920 PRINT "ПОГОВОРИЛИ ДОСТАТОЧНО?"
930 PRINT "НЕТ ЛИ ЗДЕСЬ ЕЩЕ КОГО-НИБУДЬ, С КЕМ БЫ Я МОГ ПОГОВОРИТЬ?"
940 INPUT Z$: IF Z$ = "ДА" THEN GOTO 210
950 PRINT "ТОГДА ДОСВИДАНИЯ"
960 END

1000 REM Фразы для подпрограммы контроля фраз
1010 FOR I = 1 TO 30 : READ Q$(I) : NEXT I
1020 DATA "КТО", "ЧТО?", "ЗНАЧИТ", "ПОЧЕМУ", "ВАШ"
1030 DATA "МНЕ", "Я", "ОН", "ГОВОРИТЬ", "НЕ"
1040 DATA "?", "ЯВЛЯЮТСЯ", "МОЙ", "ДА", "ВЫ"
1050 DATA "?", "?", "ДУМАЕШЬ", "УМНЫЙ", "ГРУБЫЙ"
1060 DATA "БЛАГОДАРЮ", "ПРОЧЬ", "ОНИ", "?", "ПОНИМАЕШЬ"
1070 DATA "НЕТ", "СЕЙЧАС", "К", "?", "ЗНАЕШЬ"

1100 REM Ответы компьютера
1110 FOR I = 1 TO 30 : READ M$(I) : NEXT I
1120 DATA "Я ВСЕГО ЛИШЬ КОМПЬЮТЕР"
1130 DATA "НЕ ИМЕЕТ ЗНАЧЕНИЯ", "ЭТО ХОРОШИЙ ВОПРОС"
1140 DATA "Я НЕ ЗНАЮ", "НУ, А ПОЧЕМУ НЕТ?"
1150 DATA "ЧТО ВЫ ИМЕЕТЕ В ВИДУ", "А ВЫ КТО?"
1160 DATA "ОХ", "ЧТО ЗНАЧИТ ОН"
1170 DATA "ВЫ ХОТИТЕ, ЧТОБЫ Я ЗАМОЛЧАЛ", "ВЫ НАСТРОЕНЫ НЕСКОЛЬКО НЕГАТИВНО"
1180 DATA "ВЫ САМИ ОТВЕТЬТЕ", "КАК ВАС ПОНИМАТЬ"
1190 DATA "МОЙ - МОЙ - МОЙ - ", "ЗНАЧИТ ВЫ СОГЛАСНЫ"
1200 DATA "НЕ УПОДОБЛЯЙТЕСЬ МНЕ"
1210 DATA "ПОЧЕМУ", "РЕШАЙТЕСЬ", "БЛАГОДАРЮ"
1220 DATA "ВЫ ЕЩЕ НИЧЕГО НЕ ВИДЕЛИ"
1230 DATA "НЕ СТОИТ БЛАГОДАРНОСТИ"
1240 DATA "И ВЫ", "МНЕ ВСЕ РАВНО", "КАКОЙ ГЛУПЫЙ ВОПРОС"
1250 DATA "У ВАС НИЗКИЙ КОЕФФИЦИЕНТ УМСТВЕННОГО РАЗВИТИЯ", "ЕРУНДА"
1260 DATA "ОТКУДА У ВАС ТАКАЯ УВЕРЕННОСТЬ", "ИДИТЕ ПРОЧЬ"
1270 DATA "ИЩИ И НАЙДЕШЬ", "ЗНАНИЯ - ЭТО ПРОБЛЕМА"

1300 REM Чтение в массив существительных
1310 FOR I = 1 TO 10 : READ N$(I) : NEXT I
1320 DATA "ФУТБОЛ", "ТАНЦЫ"
1330 DATA "ПОГОДА", "ПОСЛЕДНИЕ НОВОСТИ"
1340 DATA "МОЙ ПРОЦЕССОР", "РЫБАЛКА"
1350 DATA "ГОЛУБЫЕ КИТЫ", "ЭВОЛЮЦИЯ"
1360 DATA "ГЕОГРАФИЯ", "ПИТАНИЕ"

1400 REM Чтение в массив глаголов
1410 FOR I = 1 TO 10 : READ V$(I) : NEXT I
1420 DATA "ПОРАССУЖДАЕМ НА", "ПОГОВОРИМ НА"
1430 DATA "ОБСУДИМ", "РАССМОТРИМ"
1440 DATA "ПОРАЗМЫШЛЯЕМ НА", "ОБДУМАЕМ"
1450 DATA "ПРИМЕМ ВО ВНИМАНИЕ", "ИССЛЕДУЕМ"
1460 DATA "ПРОАНАЛИЗИРУЕМ", "ПОДУМАЕМ"

1500 REM Чтение в массив прилагательных
1510 FOR I = 1 TO 10 : READ A$(I) : NEXT I
1520 DATA "ГЛУПЫЙ", "УМНЫЙ"
1530 DATA "ИНТЕЛЛИГЕНТНЫЙ", "МУДРЫЙ"
1540 DATA "ОСТРОУМНЫЙ", "ДРУЖЕЛЮБНЫЙ"
1550 DATA "СКУЧНЫЙ", "НАДОЕДЛИВЫЙ"
1560 DATA "НЕВЕЖЛИВЫЙ", "НЕРВНЫЙ"

1600 REM Чтение парами в два массива - начало предложения и другие существительные
1610 FOR I = 1 TO 10 : READ S$(I), T$(I) : NEXT I
1620 DATA "БОЖЕ МОЙ", "СКУЧНЫЙ ЧЕЛОВЕК"
1630 DATA "НУ", "ЛЬСТЕЦ"
1640 DATA "ДАВАЙТЕ ПОСМОТРИМ", "МОЛОДЧИНА"
1650 DATA "ПОСЛУШАЙТЕ", "ГЕНИЙ"
1660 DATA "СМОТРИТЕ", "БОЛВАН"
1670 DATA "АМММ....", "ИДИОТ"
1680 DATA "ТЕПЕРЬ", "ПАРАЗИТ"
1690 DATA "В САМОМ ДЕЛЕ", "ЧУДО"
1700 DATA "МОЙ ДОРОГОЙ ДРУГ", "НАСТОЩИЙ КОМПЬЮТЕР"
1720 RETURN




/*///////// МОНОЛОГ КОМПЬЮТЕРА */
160 PRINT "ДИАЛОГ С КОМПЬЮТЕРОМ ИЛИ МОНОЛОГ КОМПЬЮТЕРА? (ВВЕДИТЕ БУКВУ Д ИЛИ БУКВУ М)"
170 INPUT K$
180 IF K$ = "М" THEN LET D$ = "РОБ" : GOTO 600
470 IF K$ = "Д" THEN GOTO 240
475 IF K$ = "М" THEN LET I$ = R$
480 LET R$ = "" : GOTO 310




/*///////// ПРОГРАММА ДЕРЗКИХ ОТВЕТОВ */
135 DIM U$(9), W$(9)
138 DIM Z$(5)
155 GOSUB 2200
325 IF REPLY = 7 THEN GOTO 2000
2000 REM Подпрограмма дерзких ответов
2010 LET Z = 0
2020 LET P = LEN(I$)
2030 FOR A = 1 TO P
2040 FOR B = 1 TO 9
2050 LET L = LEN(U$(B))
2060 IF MID$(I$, A, L)




/*///////// ПРОГРАММА ОТВЕТОВ ДРУГИХ ПК */
135 DIM U$(9, 7)
136 DIM W$(9, 9)
137 DIM Z$(5, 20)
2042 LET P$ = ""
2290 RETURN
Опубликовано в рубрикеПрограмммирование