у меня есть код программы, реализующей тест на определение темперамента. в ходе программы она считает баллы полученные от пользователя путем нажатия кнопок да и нет, записывает в список pts. также у нас есть список ключей, в которых 3 части разделенные знаком =: в первой название шкалы оценивания, во второй номера вопросов на которые если пользователь отвечает да, то получает балл, в третьей части то же самое но для вопросов с ответом нет. все это записано в 3 строки - 3 параметра оценивания(шкалы). функция ots(i) возвращает 3 строки, как и переменная l в которой записано количество баллов по каждой шкале, то есть 3 строки, 3 разных числа баллов, которые получаются в ходе цикла. и мне необходимо сделать ,чтобы вот это самое количество баллов хранилось еще в разных переменных, разделить как то эти 3 числа, чтобы они не выводились поочереди(например если в showmessage загнать l, то мне последовательно выдается 3 числа, но мне нужно чтобы хотя бы в одну строку 3 числа были, а лучше вообще отдельно ) для того, чтобы в дальнейшем прописать условия для выдачи пользователю не только количество баллов отдельно по критериям(шкалам), но и сам тип, зависящий от количества баллов по первой, по второй и третьей шкале(в списке ключа первая, вторая и третья строки соответственно)
Код:
function TForm1.ots(vs: integer): string;
var
str,c,p,o,v: string;
nsm : array[0..3] of string; // Хранилище лексем строки ключа
// 0 - Название шкалы
// 1 - перечень вопросов с ответом "Да"
// 2 - -//- с ответом "Нет"
// 3 - множитель "Грубо"
aaa : array[0..2] of integer;
i,l,b,g,y : integer;
flg :boolean;
begin
str:= kvs.Strings[vs]; // Строка ключа
l:= 0;
b:=0;
flg:= true;
for i:=1 to Length(str) do
begin
if str[i] = '=' then // пойман разделитель
begin
inc(l);
//inc(b); // Заполнить следующую лексему
flg:= false;
end;
if flg then nsm[l] := nsm[l] + str[i];
if not flg then flg:= true;
end;
// Проверка ответов "Да"
str:= nsm[1] + ' ' + nsm[2]; // перечень заданий с критерием ключа
v:= '';
flg:= true;
l:= 0; // счётчик ответов подходящих по критерию ключа (набранных баллов)
for i:=1 to Length(str) do //считываем номер задания для проверки
begin
if str[i] = ' ' then flg:= false;
if flg then v:= v + str[i];
if not flg then // если номер есть
begin
flg:= true;
// и на него был дан ответ "Да", то увеличиваем счетчик баллов на единицу
if StrToIntDef(pts.Strings[StrToInt(v)-1], 0) = 1 then
inc(l);
v:=''; // Подготовка к следующей итерации цикла
end;
if (i=length(str)) and (v <> '') then // достигнут конец строки
if StrToIntDef(pts.Strings[StrToInt(v)-1], 0) = 1 then
inc(l); // окончательная проверка
//inc(b);
end;
str:= nsm[2]; // Проверка ответов "Нет", тоже самое
if length(str) > 0 then // Если есть номера для проверки
begin
v:='';
flg:= true;
for i:=1 to Length(str) do
begin
if str[i] = ' ' then flg:= false;
if flg then v:= v + str[i];
if not flg then
begin
flg:= true;
if StrToIntDef(pts.Strings[StrToInt(v)-1], 0) = 2 then inc(l);
v:= '';
end;
if (i = length(str)) and (v <> '') then
if StrToIntDef(pts.Strings[StrToInt(v)-1], 0) = 2 then inc(l);
end;
end;
l:= l * StrToIntDef(nsm[3], 0); // умножаем набранные баллы на множитель
if l > 0 then Result:= nsm[0] + ' - баллов: ' + IntToStr(l) else
Result:= nsm[0] + ' - баллов: нет';
end;
end.