Трудно ли написать диалоговую программу - QBasic

Формулировка задачи:

Для работы этой программы нужно создать файл с именем Dia.txt. Этот файл вы должны заполнить сами теми фразами и словами, которыми вы хотите общаться с программой. Как это сделать? Вот пример с моими комментариями. Файл Dia.txt .................... 5 Ой! Кто бы это другой сказал! Искуситель ты мой! Ты застал меня врасплох, я лучше промолчу... Откуда ты взялся? Тебя с интернета скачали? Заяц - Волк. Заяц - Волк. Заяц - Волк. Заяц - Волк. ... И что? Тебе сказать честно или правду?... ПРИВЕТ Приве-е-е-ет. Как я по тебе соскучилась! ЧТО-ТО ТЫ СЕГОДНЯ ОПОЗДАЛА Это мне дорогу черная кошка перешла... ЧЕРНАЯ КОШКА - ЭТО К ЛЮБВИ Да?! Тогда я побегу ловить черных кошек. ЛУЧШЕ ПОЙМАЙ МЕНЯ А еще лучше, я тебя поцелую. 100 раз хочешь? ............ КОММЕНТАРИИ И ПОЯСНЕНИЯ. 1. Фразы пользователя записаны в файле буквами верхнего регистра Во-первых это удобно для редактирования файла Во-вторых только это понимает программа 2. После фразы пользователя стоит фраза программы. Здесь регистр не имеет никакого значения. 3. Далее (для удобства редактирования) стоит пустая строка 4. Теперь допустим, что пользователь ввел фразу, которой нет в файле. Ничего страшного! 5. Здесь в САМОМ ВЕРХУ файла вы видите число 5 и ниже 5 фраз. Эти фразы программа использует в тех случаях, когда она не знает, что сказать. Программа сама выбирает Один ответ из пяти и выносит его на экран. Конечно будет гораздо лучше, если у программы будет выбор больше, например вы напишете 10 или 20 фраз, тогда число 5 надо заменить на число реально существующих фраз. Программа проверена. Для выхода из нее введите число 0. Редактируйте файл. Вводите свои фразы. И Ваша жизнь станет столь же разнообразной как файл программы.
REM
REM 0 - Выход из программы
REM
 
DECLARE FUNCTION WES$ (t AS STRING)
DECLARE FUNCTION DES$ (t AS STRING)
 
CLS
RANDOMIZE TIMER
DIM s AS STRING
DIM ts AS STRING
 
DO
   INPUT ts
   IF ts = "" THEN 100
   ts = UCASE$(ts)
   ts = WES(ts)
   OPEN "dia.txt" FOR INPUT AS #1
 
   DO
      LINE INPUT #1, s
      IF s = ts THEN
         LINE INPUT #1, s
         s = DES(s)
         PRINT s
         CLOSE #1
         GOTO 100
      END IF
   LOOP UNTIL EOF(1)
 
   CLOSE #1
   OPEN "dia.txt" FOR INPUT AS #1
   INPUT #1, n
   m = FIX(n * RND) + 1
 
   FOR i = 1 TO m
      LINE INPUT #1, s
   NEXT
   s = DES(s)
   PRINT s
   CLOSE #1
100
LOOP UNTIL ts = "0"
END
 
FUNCTION DES$ (t AS STRING)
   DIM t1 AS STRING
   DIM t2 AS STRING
 
   t2 = ""
   FOR i = 1 TO LEN(t)
      t1 = MID$(t, i, 1)
      k = ASC(t1)
      IF 192 <= k AND k <= 241 THEN t1 = CHR$(k - 64)
      IF 240 <= k AND k <= 255 THEN t1 = CHR$(k - 16)
      t2 = t2 + t1
   NEXT i
   DES = t2
END FUNCTION
 
FUNCTION WES$ (t AS STRING)
   DIM t1 AS STRING
   DIM t2 AS STRING
 
   t2 = ""
   FOR i = 1 TO LEN(t)
      t1 = MID$(t, i, 1)
      k = ASC(t1)
      IF 128 <= k AND k <= 175 THEN t1 = CHR$(k + 64)
      IF 223 <= k AND k <= 239 THEN t1 = CHR$(k + 16)
      t2 = t2 + t1
   NEXT i
   WES = t2
END FUNCTION

Код к задаче: «Трудно ли написать диалоговую программу - QBasic»

textual
REM The computer guesses your animal AND learns new animals.
 
REM We store questions AND animals in the animals() Array.
DIM animals(100) AS STRING
 
REM The arrays ifyes(), ifno() store numbers FOR NEXT two possible questions.
REM Note that qbasic initializes arrays of numbers TO 0s.
DIM ifyes(100)
DIM ifno(100)
 
LET animals(0) = "goldfish"
nextfree = 1
 
REM  GET user TO think of a new animal.
90   current = 0
     PRINT "Hit ENTER when you are thinking of a new animal.";
     INPUT A$
 
REM  AS LONG AS this IS NOT an animal, LOOP around asking questions.
100  IF (ifyes(current) = 0) GOTO 200
     PRINT animals(current); "? (y/n)"
     INPUT A$
   
     IF (A$ = "y") THEN
              current = ifyes(current)
         ELSE current = ifno(current)
     END IF
     GOTO 100
 
REM No more questions, so guess NAME of animal.
200 PRINT "Is it a "; animals(current); "? (y/n)";
    INPUT A$
    IF (A$ = "n") GOTO 300
    PRINT "I got it!"
    GOTO 90
 
REM  Learn a new animal.  Replace wrong animal With new question.
300  PRINT "You were thinking of an animal I don't know!"
     PRINT "What is your animal? ";
     INPUT newanimal$
     PRINT "What general question could I have asked to tell a ";
     PRINT newanimal$; " from a "; animals(current)
     INPUT question$
       
     animals(nextfree) = animals(current)
     animals(nextfree + 1) = newanimal$
     animals(current) = question$
 
     PRINT "And for a "; newanimal$; " the answer would be? (y/n)";
     INPUT answer$
     IF (answer$ = "y") THEN
         ifyes(current) = nextfree + 1
         ifno(current) = nextfree
     ELSE
         ifyes(current) = nextfree
         ifno(current) = nextfree + 1
     END IF
 
     nextfree = nextfree + 2
     GOTO 90

13   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ