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

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

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

Для работы этой программы нужно создать файл с именем Dia.txt. Этот файл вы должны заполнить сами теми фразами и словами, которыми вы хотите общаться с программой. Как это сделать? Вот пример с моими комментариями. Файл Dia.txt .................... 5 Ой! Кто бы это другой сказал! Искуситель ты мой! Ты застал меня врасплох, я лучше промолчу... Откуда ты взялся? Тебя с интернета скачали? Заяц - Волк. Заяц - Волк. Заяц - Волк. Заяц - Волк. ... И что? Тебе сказать честно или правду?... ПРИВЕТ Приве-е-е-ет. Как я по тебе соскучилась! ЧТО-ТО ТЫ СЕГОДНЯ ОПОЗДАЛА Это мне дорогу черная кошка перешла... ЧЕРНАЯ КОШКА - ЭТО К ЛЮБВИ Да?! Тогда я побегу ловить черных кошек. ЛУЧШЕ ПОЙМАЙ МЕНЯ А еще лучше, я тебя поцелую. 100 раз хочешь? ............ КОММЕНТАРИИ И ПОЯСНЕНИЯ. 1. Фразы пользователя записаны в файле буквами верхнего регистра Во-первых это удобно для редактирования файла Во-вторых только это понимает программа 2. После фразы пользователя стоит фраза программы. Здесь регистр не имеет никакого значения. 3. Далее (для удобства редактирования) стоит пустая строка 4. Теперь допустим, что пользователь ввел фразу, которой нет в файле. Ничего страшного! 5. Здесь в САМОМ ВЕРХУ файла вы видите число 5 и ниже 5 фраз. Эти фразы программа использует в тех случаях, когда она не знает, что сказать. Программа сама выбирает Один ответ из пяти и выносит его на экран. Конечно будет гораздо лучше, если у программы будет выбор больше, например вы напишете 10 или 20 фраз, тогда число 5 надо заменить на число реально существующих фраз. Программа проверена. Для выхода из нее введите число 0. Редактируйте файл. Вводите свои фразы. И Ваша жизнь станет столь же разнообразной как файл программы.

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

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

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

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

  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
Похожие ответы