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

Узнай цену своей работы

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

Для работы этой программы нужно создать файл с именем Dia.txt. Этот файл вы должны заполнить сами теми фразами и словами, которыми вы хотите общаться с программой. Как это сделать? Вот пример с моими комментариями. Файл Dia.txt .................... 5 Ой! Кто бы это другой сказал! Искуситель ты мой! Ты застал меня врасплох, я лучше промолчу... Откуда ты взялся? Тебя с интернета скачали? Заяц - Волк. Заяц - Волк. Заяц - Волк. Заяц - Волк. ... И что? Тебе сказать честно или правду?... ПРИВЕТ Приве-е-е-ет. Как я по тебе соскучилась! ЧТО-ТО ТЫ СЕГОДНЯ ОПОЗДАЛА Это мне дорогу черная кошка перешла... ЧЕРНАЯ КОШКА - ЭТО К ЛЮБВИ Да?! Тогда я побегу ловить черных кошек. ЛУЧШЕ ПОЙМАЙ МЕНЯ А еще лучше, я тебя поцелую. 100 раз хочешь? ............ КОММЕНТАРИИ И ПОЯСНЕНИЯ. 1. Фразы пользователя записаны в файле буквами верхнего регистра Во-первых это удобно для редактирования файла Во-вторых только это понимает программа 2. После фразы пользователя стоит фраза программы. Здесь регистр не имеет никакого значения. 3. Далее (для удобства редактирования) стоит пустая строка 4. Теперь допустим, что пользователь ввел фразу, которой нет в файле. Ничего страшного! 5. Здесь в САМОМ ВЕРХУ файла вы видите число 5 и ниже 5 фраз. Эти фразы программа использует в тех случаях, когда она не знает, что сказать. Программа сама выбирает Один ответ из пяти и выносит его на экран. Конечно будет гораздо лучше, если у программы будет выбор больше, например вы напишете 10 или 20 фраз, тогда число 5 надо заменить на число реально существующих фраз. Программа проверена. Для выхода из нее введите число 0. Редактируйте файл. Вводите свои фразы. И Ваша жизнь станет столь же разнообразной как файл программы.
Листинг программы
  1. REM
  2. REM 0 - Выход из программы
  3. REM
  4. DECLARE FUNCTION WES$ (t AS STRING)
  5. DECLARE FUNCTION DES$ (t AS STRING)
  6. CLS
  7. RANDOMIZE TIMER
  8. DIM s AS STRING
  9. DIM ts AS STRING
  10. DO
  11. INPUT ts
  12. IF ts = "" THEN 100
  13. ts = UCASE$(ts)
  14. ts = WES(ts)
  15. OPEN "dia.txt" FOR INPUT AS #1
  16. DO
  17. LINE INPUT #1, s
  18. IF s = ts THEN
  19. LINE INPUT #1, s
  20. s = DES(s)
  21. PRINT s
  22. CLOSE #1
  23. GOTO 100
  24. END IF
  25. LOOP UNTIL EOF(1)
  26. CLOSE #1
  27. OPEN "dia.txt" FOR INPUT AS #1
  28. INPUT #1, n
  29. m = FIX(n * RND) + 1
  30. FOR i = 1 TO m
  31. LINE INPUT #1, s
  32. NEXT
  33. s = DES(s)
  34. PRINT s
  35. CLOSE #1
  36. 100
  37. LOOP UNTIL ts = "0"
  38. END
  39. FUNCTION DES$ (t AS STRING)
  40. DIM t1 AS STRING
  41. DIM t2 AS STRING
  42. t2 = ""
  43. FOR i = 1 TO LEN(t)
  44. t1 = MID$(t, i, 1)
  45. k = ASC(t1)
  46. IF 192 <= k AND k <= 241 THEN t1 = CHR$(k - 64)
  47. IF 240 <= k AND k <= 255 THEN t1 = CHR$(k - 16)
  48. t2 = t2 + t1
  49. NEXT i
  50. DES = t2
  51. END FUNCTION
  52. FUNCTION WES$ (t AS STRING)
  53. DIM t1 AS STRING
  54. DIM t2 AS STRING
  55. t2 = ""
  56. FOR i = 1 TO LEN(t)
  57. t1 = MID$(t, i, 1)
  58. k = ASC(t1)
  59. IF 128 <= k AND k <= 175 THEN t1 = CHR$(k + 64)
  60. IF 223 <= k AND k <= 239 THEN t1 = CHR$(k + 16)
  61. t2 = t2 + t1
  62. NEXT i
  63. WES = t2
  64. END FUNCTION

Решение задачи: «Трудно ли написать диалоговую программу»

textual
Листинг программы
  1. REM The computer guesses your animal AND learns new animals.
  2.  
  3. REM We store questions AND animals in the animals() Array.
  4. DIM animals(100) AS STRING
  5.  
  6. REM The arrays ifyes(), ifno() store numbers FOR NEXT two possible questions.
  7. REM Note that qbasic initializes arrays of numbers TO 0s.
  8. DIM ifyes(100)
  9. DIM ifno(100)
  10.  
  11. LET animals(0) = "goldfish"
  12. nextfree = 1
  13.  
  14. REM  GET user TO think of a new animal.
  15. 90   current = 0
  16.      PRINT "Hit ENTER when you are thinking of a new animal.";
  17.      INPUT A$
  18.  
  19. REM  AS LONG AS this IS NOT an animal, LOOP around asking questions.
  20. 100  IF (ifyes(current) = 0) GOTO 200
  21.      PRINT animals(current); "? (y/n)"
  22.      INPUT A$
  23.    
  24.      IF (A$ = "y") THEN
  25.               current = ifyes(current)
  26.          ELSE current = ifno(current)
  27.      END IF
  28.      GOTO 100
  29.  
  30. REM No more questions, so guess NAME of animal.
  31. 200 PRINT "Is it a "; animals(current); "? (y/n)";
  32.     INPUT A$
  33.     IF (A$ = "n") GOTO 300
  34.     PRINT "I got it!"
  35.     GOTO 90
  36.  
  37. REM  Learn a new animal.  Replace wrong animal With new question.
  38. 300  PRINT "You were thinking of an animal I don't know!"
  39.      PRINT "What is your animal? ";
  40.      INPUT newanimal$
  41.      PRINT "What general question could I have asked to tell a ";
  42.      PRINT newanimal$; " from a "; animals(current)
  43.      INPUT question$
  44.        
  45.      animals(nextfree) = animals(current)
  46.      animals(nextfree + 1) = newanimal$
  47.      animals(current) = question$
  48.  
  49.      PRINT "And for a "; newanimal$; " the answer would be? (y/n)";
  50.      INPUT answer$
  51.      IF (answer$ = "y") THEN
  52.          ifyes(current) = nextfree + 1
  53.          ifno(current) = nextfree
  54.      ELSE
  55.          ifyes(current) = nextfree
  56.          ifno(current) = nextfree + 1
  57.      END IF
  58.  
  59.      nextfree = nextfree + 2
  60.      GOTO 90

Объяснение кода листинга программы

Список действий в коде:

  1. Объявление и инициализация массива animals для хранения животных и вопросов о них.
  2. Объявление и инициализация массивов ifyes и ifno для хранения числовых значений возможных вопросов.
  3. Инициализация переменной current для отслеживания текущего вопроса.
  4. Запрос у пользователя ввести новое животное и сохранение его в массиве animals.
  5. Ввод нового вопроса для определения, является ли введенное животное известным.
  6. Проверка введенного вопроса и попытка сопоставить его с известными животными.
  7. Если вопрос не совпадает с известными животными, запрашивается новое животное и вопрос.
  8. Сохранение нового вопроса и животного в массивах animals и ifyes или ifno.
  9. Вывод вопроса и ожидание ответа от пользователя.
  10. Если ответ y, то обновление значений ifyes и ifno для текущего вопроса.
  11. Обновление значения nextfree для отслеживания доступных ячеек в массивах.
  12. Повторение цикла с помощью GOTO 90 для продолжения диалога.
  13. Если ответ n, то вывод сообщения о правильном ответе.
  14. Если введенный вопрос совпадает с животным, то вывод сообщения о правильном ответе и завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы