Подсчет результатов:
1. За каждый ответ "ДА" приписывается 10 очков.
2. За каждый ответ "НЕ ЗНАЮ" приписывается 5 очков.
3. За отрицательные ответы очки не пишутся.
4. Подсчитывается сумма набранных очков.
5. Сумма сверяется с таблицей возможных набранных очков.
6. Выводиться результат психологического тестирования.
Записи сгруппированы в файл, который хранится на диске. Для получения списков выполняется последовательный поиск в файле.
Результаты заносятся в новый файл, который сохраняется на диске.
3. Функциональные модели и блок-схемы решения задачи
Функциональные модели и блок-схемы решения задачи представлены на рисунках 1 – 4.
Рисунок 1 – Функциональная модель решения задачи для функции CREATE_LST: X – размерность списка, LST – создаваемый список
Рисунок 2 – Функциональная модель решения задачи для функции SUM_COUNTER: VALUE – ответ, COUNTER – счетчик, суммирующий ответы
Рисунок 3 – Блок-схема решения задачи для функции CALC_RESULTCOUNTER – счетчик, суммирующий ответы, I – рабочая переменная, INPUT_STREAM – входной поток, MAX_COUNT – максимальное количество очков, MIN_COUNT – минимальное количество очков, PRINT_RES – функция, печатающая результат тестирования
Рисунок 4 – Функциональная модель решения задачи для функции PRINT_RES: NUM_PEOPLE – номер тестируемого человека, COUNTER – счетчик, суммирующий ответы, OUPUT_STREAM – поток вывода, RESULT– результат тестирования
4. Программная реализация решения задачи
;ФУНКЦИЯ СОЗДАЕТ НУЛЕВОЙ СПИСОК НА X ЭЛЕМЕНТОВ
(DEFUNCREATE_LST (XLST)
(COND
((EQLX 0) LST)
(T (CREATE_LST (- X 1) (CONS 0 LST)))
)
)
;ОТКРЫВАЕМФАЙЛДЛЯЧТЕНИЯ
(SETQ INPUT_STREAM (OPEN " D:\TEST.TXT" :DIRECTION :INPUT))
;СЧИТЫВАЕМ НАЗВАНИЕ ТЕСТА
(SETQ TEMP (READ INPUT_STREAM))
(SETQ NAME_TEST (CAR TEMP))
;КОЛИЧЕСТВО ВОПРОСОВ ТЕСТА 2 ЭЛЕМЕНТ В СПИСКЕ
(SETQ NUM (CADR TEMP))
;КОЛИЧЕСТВО ТЕСТИРУЕМЫХ
(SETQ PEOPLE (CADDR TEMP))
;ПОДСЧИТЫВАЕМ ОТВЕТЫ
(SETQ COUNTER 0)
(DEFUN SUM_COUNTER (VALUE COUNTER)
;ЗА ОТВЕТ "ДА" (1) - 10 БАЛЛОВ
;ЗА ОТВЕТ "НЕ ЗНАЮ" (-1) - 5 БАЛЛОВ
;ЗАОТВЕТ "НЕТ" (0) - 0 БАЛЛОВ
(COND
((= VALUE 1) (SETF COUNTER (+ COUNTER 10)))
((= VALUE -1) (SETF COUNTER (+ COUNTER 5)))
((= VALUE 0) (SETF COUNTER (+ COUNTER 0)))
)
)
;СОЗДАЕМ НУЛЕВОЙ СПИСОК СЧЕТЧИКОВ РАЗМЕР КОТОРОГО РАВЕН КОЛИЧЕСТВУ ЧЕЛОВЕК
(SETQ LST_COUNTER (CREATE_LST PEOPLE NIL))
(DO
((I 0))
((>= I NUM))
;СЧИТЫВАЕМСТРОКУ LST
(SETQ LST (READ INPUT_STREAM))
;ПОЛУЧАЕМ ОТВЕТЫ ЛЮДЕЙ ИЗ СТРОКИ LST
(SETQ ANSWER (CADR LST))
;СУММИРУЕМ СЧЕТЧИК РЕЗУЛЬТАТОВ ТЕСТИРОВАНИЯ ДЛЯ КАЖДОГО ЧЕЛОВЕКА
(SETQ LST_COUNTER (MAPCAR 'SUM_COUNTER ANSWER LST_COUNTER))
(SETQ I (+ I 1))
)
;ЗАКРЫВАЕМФАЙЛ TEST.TXT
(CLOSE INPUT_STREAM)
;СЧЕТЧИК ДЛЯ ВЫВОДА КОЛИЧЕСТВА ЧЕЛОВЕК
(SETQ NUM_PEOPLE 1)
;ПЕЧАТЬРЕЗУЛЬТАТОВ
(DEFUN PRINT_RES (RESULT COUNTER)
;ВЫВВОДКОЛИЧЕСТВАНАБРАННЫХБАЛЛОВ
(PRINT (LIST NUM_PEOPLE 'PEOPLE '= 'COUNTER COUNTER) OUTPUT_STREAM)
;ВЫВВОД РЕЗУЛЬТАТА ТЕСТИРОВАНИЯ
(PRINT RESULT OUTPUT_STREAM)
;УВЕЛИЧИВАЕМ СЧЕТЧИК ДЛЯ ВЫВОДА КОЛИЧЕСТВА ЧЕЛОВЕК
(SETQ NUM_PEOPLE (+ NUM_PEOPLE 1))
)
;ОТКРЫВАЕМ ФАЙЛ CALC_RESULT.TXT ДЛЯ ЧТЕНИЯ
(DEFUN CALC_RESULT (COUNTER)
;ОБЪЯВЛЯЕМ ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
(DECLARE (SPECIAL INPUT_STREAM))
(DECLARE (SPECIAL RES))
(DECLARE (SPECIAL MAX_COUNT))
(DECLARE (SPECIAL MIN_COUNT))
(SETQ INPUT_STREAM (OPEN " D:\CALC_RESULT.TXT" :DIRECTION :INPUT))
(DO
((I 0))
((>= I 3))
;СЧИТЫВАЕМ ВАРИАНТ РЕЗУЛЬТАТА
(SETQ RES (READ INPUT_STREAM))
;СЧИТЫВАЕМ МАКСИМУМ И МИНИМУМ
(SETQ MAX_COUNT (CAR (CAR RES)))
(SETQ MIN_COUNT (CADR (CAR RES)))
;ЕСЛИ КОЛИЧЕСТВО НАБРАННЫХ БАЛЛОВ СОВПАДАЕТ С ТРЕБУЕМЫМИ
;ВЫВОДИМ РЕЗЛЬТАТ ТЕСТИРОВАНИЯ И ВЫХОДИМ ИЗ ЦИКЛА
(IF (AND (<= COUNTER MAX_COUNT) (>= COUNTER MIN_COUNT))
(PROGN
(PRINT_RES (CADR RES) COUNTER)
(SETQ I 3)
)
)
(SETQ I (+ I 1))
)
;ЗАКРЫВАЕМФАЙЛ
(CLOSE INPUT_STREAM)
)
;ОТКРЫВАЕМ ФАЙЛ RESULT.TXT ДЛЯ ЗАПИСИ
(SETQ OUTPUT_STREAM (OPEN " D:\RESULT.TXT" :DIRECTION :OUTPUT))
;ВЫВВОДНАЗВАНИЯТЕСТА
(PRINT (LIST 'TEST NAME_TEST) OUTPUT_STREAM)
(MAPCAR 'CALC_RESULT LST_COUNTER)
;ЗАКРЫВАЕМФАЙЛ RESULT.TXT
(TERPRI OUTPUT_STREAM)
(CLOSE OUTPUT_STREAM)
;END
5. Пример выполнения программы
Рисунок 5 – Входные данные
Рисунок 6 – Входные данные
Рисунок 7 – Выходные данные
Пример 2.
Рисунок 8 – Входные данные
Рисунок 9 – Входные данные
Рисунок 10 – Выходные данные
ЗАКЛЮЧЕНИЕ
Компьютерная обработка предполагает использование одних и тех же команд при выполнении идентичных операций обработки данных, что практически исключает появление случайных ошибок, обыкновенно присущих ручной обработке.
Разработанная в данной курсовой работе программа для обработки результатов психологических тестов делает наиболее простой работу пользователя в данной области и сокращает время на выполнение соответствующих операций.
В результате выполнения курсовой работы составлена функциональная модель для решения поставленной задачи. Проведён анализ полученных результатов, и сделаны необходимые выводы.
Созданная функциональная модель и ее Лисп-реализация могут служить органической частью решения более сложных задач.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы
1. Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н.Бронштейн, К.А.Семендяев. – М.: Наука, 2007. – 708 с.
2. Выготский, Л.С. О психологических системах [Текст] / Л.С.Выгодский – М.: Питер, 2001. С. 467.
3. Гайда, В.К. Психологическое тестирование: учебное пособие. [Текст] / В.К. Гайда, В.П. Захаров – M.:Мир, 1999. С. 625.
4. Пиаже, Ж. Экспериментальная психология. [Электронный ресурс] / Ж. Пиаже – М.: Прогресс, 2003. С. 318.
5. Симанков, В.С. Основы функционального программирования [Текст] / В.С.Симанков, Т.Т.Зангиев, И.В.Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.
6. Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А.Степанов, А.В. Бржезовский. – М.: ГУАП, 2003. С. 79.
7. Холодная, М.А. Существует ли интеллект как психическая реальность? [Текст] / М.А. Холодная – М.: Педагогика, 200. С. 216.
8. Хювенен Э. Мир Лиспа [Текст] / Э.Хювенен, Й.Сеппянен. – М.:Мир, 1990. – 460 с.