Трудно ли написать диалоговую программу - 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
Объяснение кода листинга программы
Список действий в коде:
- Объявление и инициализация массива
animals
для хранения животных и вопросов о них. - Объявление и инициализация массивов
ifyes
иifno
для хранения числовых значений возможных вопросов. - Инициализация переменной
current
для отслеживания текущего вопроса. - Запрос у пользователя ввести новое животное и сохранение его в массиве
animals
. - Ввод нового вопроса для определения, является ли введенное животное известным.
- Проверка введенного вопроса и попытка сопоставить его с известными животными.
- Если вопрос не совпадает с известными животными, запрашивается новое животное и вопрос.
- Сохранение нового вопроса и животного в массивах
animals
иifyes
илиifno
. - Вывод вопроса и ожидание ответа от пользователя.
- Если ответ
y
, то обновление значенийifyes
иifno
для текущего вопроса. - Обновление значения
nextfree
для отслеживания доступных ячеек в массивах. - Повторение цикла с помощью
GOTO 90
для продолжения диалога. - Если ответ
n
, то вывод сообщения о правильном ответе. - Если введенный вопрос совпадает с животным, то вывод сообщения о правильном ответе и завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д