Автор Тема: Delphi 7. Обработка результатов теста по базе на основе midas.dll  (Прочитано 1986 раз)

Оффлайн YaricZ

  • Автор
  • Дипломированный IT-шник
  • *****
  • Сообщений: 1380
  • Репутация: 150
  • живу как умею
    • живое отражение живой жизни
Я снова взялся за Дельфи после трёхлетнего перерыва =)
Пишу программу для своего факультета психологии - "Личностный опросник Кеттела 16PF". Подробности опущу, скажу лишь, в чём прошу совета..
Итак, есть база данных. Это вопросы. Построено всё на ClientDataSet, DataSource, библиотека midas.dll

На вопрос - три варианты ответа. Второй вариант почти всегда оценивается в 1 бал, Первый \ третий - сочетание баллов "0" \ "2", или "2" \ "0".
Например

Вариант 1    0
Вариант 2    1
Вариант 3    2

или

Вариант 1    2
Вариант 2    1
Вариант 3    0

К сведению - вопросов в базе 183. Это только форма A.

Таким образом, оперировать можно либо выборами человека (записывать только выбранный вариант, а обрабатывать потом), либо сразу подсчитывать баллы (0, 1, 2). Всё бы хорошо...  Но!

Положение вещей
Итоговый показатель теста - не простая сумма баллов. В тесте предусмотрено 16 шкал - они носят название А, В, С и т.д. Есть ещё шкала MB и MF. Итого - 18 переменных.
Шкала А - это сумма баллов за вопросы 1-14, 23-25
Шкала В - это сумма баллов за вопросы 15-19, 31
и так далее..

Задача
Организовать обсчёт результатов теста по 18 шкалам, оперируя либо выходной базой ответов, либо баллами, заложенными в базе. Вот так  :)
Живи

Оффлайн Antikiller

  • Член межгалактического союза рейнджеров #2630
  • Автор
  • Студент
  • *****
  • Сообщений: 479
  • Репутация: 43
    • http://tckb.ru
А в чём вопрос-то? Задача выглядит как "дайте мне готовое, чтоб работало".
Берёшь и пишешь, абсолютно ниего сложного не вижу. Задаёшь соответствие "Такой ответ на такой вопрос таки образом меняет положение на такой шкале". Если соответсвие однозначное, всё просто. Если многозначное, будет уже простенькая экспертная система, тут уже чуть сложнее, но, имхо, также очевидно.
В чём проблема?

Оффлайн YaricZ

  • Автор
  • Дипломированный IT-шник
  • *****
  • Сообщений: 1380
  • Репутация: 150
  • живу как умею
    • живое отражение живой жизни
Мне не нужно готовое решение, я не потребитель =)
мне нужна наводка, с помочью чего сей алгоритм реализовать.
то есть - через что это соотношение прописать. Конструкция if else громоздка, массив не придумал как обрабатывать
Живи

Оффлайн Nik

  • Главред
  • Administrator
  • Кандидат IT-наук
  • *****
  • Сообщений: 3316
  • Репутация: 726
  • Мастер-арфист
    • "Новый Мегабайт"
Полностью согласен с Antikiller. Здесь осталось только готовый код написать. Алгоритм, собственно, в вопросе уже содержится.

Цитировать
Конструкция if else громоздка
В чём проблема? Используй case
« Последнее редактирование: 14 Ноября 2007, 11:27:02 от Nik »
И время всякому делу под небесами...

Оффлайн Antikiller

  • Член межгалактического союза рейнджеров #2630
  • Автор
  • Студент
  • *****
  • Сообщений: 479
  • Репутация: 43
    • http://tckb.ru
Смотри. Пусть данные представлены так (в базе, конечно, это будет иначе, но я просто описываю алгоритм):

;Номер вопроса
[Вопрос#1]
;Номер_ответа=количество баллов, добавляемое к шкале N, где N - порядковый номер цифры в последовательности, разделённой запятыми
Ответ1=1,0,0,0,2,0,-1,0,0,1
;То есть при выборе этого ответа мы добавим по одному баллу в первую и десятую шкалы, два балла - в пятую, а с седьмой один балл снимем.
Ответ2=2,1,1,0,-2,1,0,1,0,-1
Ответ3=0,0,-1,1,0,2,1,2,1,0

[Вопрос#2]

...
Сюда же, при желании, можно впихнуть и текст вопроса, например:

[Вопрос#X]
Вопрос=Бла-бла-бла...

Но повторюсь, сиё не важно. Я привёл тебе наиболее очевидный пример, как записать соответствие.

Как обработать строку вида "1,0,0,0,2,0,-1,0,0,1"? В этом твой вопрос? Парсь строку. С учётом, что число может состоять из нескольких знаков, тебе нужно считать символы до первой запятой, отбросить запятую, снова считать - и так до конца строки или до получения баллов для всех шкал.

Даже мозг напрягать не нужно.

Оффлайн YaricZ

  • Автор
  • Дипломированный IT-шник
  • *****
  • Сообщений: 1380
  • Репутация: 150
  • живу как умею
    • живое отражение живой жизни
хем.. спасибо. я покумекаю   ;)
: 14 Ноября 2007, 17:21:05
*пишет парсер, ищет функцию по работе со строкой
Живи

Оффлайн Antikiller

  • Член межгалактического союза рейнджеров #2630
  • Автор
  • Студент
  • *****
  • Сообщений: 479
  • Репутация: 43
    • http://tckb.ru
Цитировать
ищет функцию по работе со строкой
Юнит strutils, часть функций есть в sysutils. Тебе понадобятся copy и delete. Всё.