![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Приветствую!
Помогите разобраться с задачей пожалуйста! Задача: Имеется "Матрица переходов" с условием в 4 графе, занесено все в stringgrid. ____гр1 гр2 гр3 гр4 стр1 0 3 2 select count(*) from table1 where id=1 стр2 0 4 0 select count(*) from table1 where id=2 стр3 0 0 0 select count(*) from table1 where god=2016 and id=1 стр4 0 0 0 select count(*) from table1 where god=2016 and id=2 Получается так: Если стр1гр4 > 0 то переход на стр3 Если стр3гр4 > 0 то выход с выводом результата И по нет.. Если стр1гр4 = 0 то переход на стр2. И т.д. Так сказать переходы по условиям осуществляются с помощью матрицы. Гр1 - слияние(не особо важно) Гр2 - ИСТИНА Гр3 - ЛОЖЬ --- Извиняюсь за сложность в постановке задачи/условия. http://www.pixic.ru/i/50t1u305k536r5i4.jpg Последний раз редактировалось IDREES, 06.02.2017 в 04:17. |
|
#2
|
|||
|
|||
|
А что сделать-то надо?
ну есть матрица переходов.Видимо, выполняется запрос и по его результату делается переход. Типа: Код:
var
Matrix : Array [1..4,1..4] Of String; // сама матрица [строка, столбец]
// функция перехода
// Условие выхода - возврат нуля (специально делать ничего не надо, все в матрице)
function DoStep(APos : Integer) : Integer;
var
gTrue, gFalse : Integer;
qQuery : String;
qValue : Integer;
begin
// Проверяем, что не вышли за пределы матрицы
If (APos < Low(Matrix)) Or (APos > High(Matrix)) Then
Raise Exception.CreateFmt('Index out of matrix (%d)',[APos]);
// Получаем данные из строки
gTrue := StrToInt(Matrix[APos,2]);
gFalse := StrToInt(Matrix[APos,3]);
gQuery := Matrix[APos,4];
// Выполняем запрос. не знаю как у тебя реализованно.
// Функция должна вернуть Integer, на вход принимает запрос из матрицы
qValue := ExecQuery(qQuery);
// Принимаем решение и возвращаем соотв. результат
If qValue > 0
Then Result := gTrue
Else Result := gFalse;
end;
// А это, собстаенно, проход по матрице.
procedure Navigate;
var
CurrentPosition : Integer; // текущая позиция в матрице
begin
CurrentPosition := 1;
While CurrentPosition > 0 Do
Begin
CurrentPosition := DoStep(CurrentPosition);
End;
end; |