|
|
Регистрация | << Правила форума >> | 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; |