Code
Листинг procedure TForm1.BitBtn1Click
procedure TForm1.BitBtn1Click(Sender: TObject);
var n, i: integer;
userans, corranswer: string;
begin
IF Edit1.Text<> '' then //Если хоть что-то написано, то
begin
n:=1; i:=1; //Инициализируем переменные
totvarans:= DBMemo1.Lines.Count; //Сколько вариантов
totcorrcount:= length(ClientDataSet1CorrectAnswer.Value);//Сколько из них правильных
userans:= Edit1.text;//Возьмем вариант юзера
corranswer:= ClientDataSet1CorrectAnswer.Value;//И возьмем ПРАВИЛЬНЫЙ вариант <img src="http://s5.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile">
balls:=0; //Пока 0 баллов
REPEAT //Начнем последовательно сравнивать - каждый вариант юзера со всеми правильными
IF userans[i]=corranswer[n] then //Если правильно, то
begin
Inc(i);//Проверим следующий пользовательский
n:=1; //Начиная с первого символа правильного ответа
balls:= balls+(100 div totcorrcount); //Вычислим, скольких баллов достоин
end else //А если неправильно
begin
IF n<>length(corranswer) then INC(n) else //если правильные кончились, значит юзер
//не прав и этот ответ не засчитывается. Если не кончились, то сравним со следующим
begin
INC (i); //Перейдем к следующему варианту
n:=1; //Сравнивать будем с первым правильным
end;
end;
UNTIL i>length(userans); //Завяжем, если кончатся все варианты
TotalBalls:= totalballs + balls; //Подсчитаем итоговое число баллов
Inc(lim); //Еще один вопрос отвечен...
IF lim=limit then //Если лимит достигнут, то
ShowMessage ('Вы набрали '+ inttostr((totalballs*100) div (limit*100))+' из 100 возможных!')
//Пересчитаем общее число баллов на 100 и выдадим заключение
else Clientdataset1.Next; //Иначе перейдем к следующему вопросу
end; //Здесь ты можешь поставить else на случай пустого Edit’а
end;