#include <iostream>
using namespace std;
typedef int(*FuncType[8])(int);
bool a=false, b=false, c=false;
int A(int Current) {
cout << "-----> FuncA" << endl;
return 2;
}
int B(int Current) {
cout << "-----> FuncB" << endl;
c = true; // тут типа управляем выходом из бесконечного цикла
return 2;
}
int C(int Current) {
cout << "-----> FuncC" << endl;
return 6;
}
int D(int Current) {
cout << "-----> FuncD" << endl;
return 1;
}
int E(int Current) {
cout << "-----> FuncE" << endl;
return -1;
}
int JmpA(int Current) {
cout << "JmpA" << endl;
return (a) ? 0 : 6;
}
int JmpB(int Current) {
cout << "JmpB" << endl;
return (b) ? 1 : 7;
}
int JmpC(int Current) {
cout << "JmpC" << endl;
return (c) ? 4 : 3;
}
int main() {
int StepNo = 5;
FuncType Func = {A, B, C, D, E, JmpA, JmpB, JmpC};
while((StepNo = (*Func[StepNo])(StepNo)) >= 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnR5cGVkZWYgaW50KCpGdW5jVHlwZVs4XSkoaW50KTsKYm9vbCBhPWZhbHNlLCBiPWZhbHNlLCBjPWZhbHNlOwogCmludCBBKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQSIgPDwgZW5kbDsJIAogICByZXR1cm4gMjsKfQogCmludCBCKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQiIgPDwgZW5kbDsJIAogICBjID0gdHJ1ZTsgIC8vINGC0YPRgiDRgtC40L/QsCDRg9C/0YDQsNCy0LvRj9C10Lwg0LLRi9GF0L7QtNC+0Lwg0LjQtyDQsdC10YHQutC+0L3QtdGH0L3QvtCz0L4g0YbQuNC60LvQsAogICByZXR1cm4gMjsKfQogCmludCBDKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQyIgPDwgZW5kbDsJIAogICByZXR1cm4gNjsKfQogCmludCBEKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jRCIgPDwgZW5kbDsJIAogICByZXR1cm4gMTsKfQogCmludCBFKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jRSIgPDwgZW5kbDsJIAogICByZXR1cm4gLTE7Cn0KIAppbnQgSm1wQShpbnQgQ3VycmVudCkgewogICBjb3V0IDw8ICJKbXBBIiA8PCBlbmRsOwogICByZXR1cm4gKGEpID8gMCA6IDY7Cn0KIAppbnQgSm1wQihpbnQgQ3VycmVudCkgewogICBjb3V0IDw8ICJKbXBCIiA8PCBlbmRsOwkgCiAgIHJldHVybiAoYikgPyAxIDogNzsKfQogCmludCBKbXBDKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIkptcEMiIDw8IGVuZGw7CSAKICAgcmV0dXJuIChjKSA/IDQgOiAzOwp9CiAKaW50IG1haW4oKSB7CglpbnQgU3RlcE5vID0gNTsKCUZ1bmNUeXBlIEZ1bmMgPSB7QSwgQiwgQywgRCwgRSwgSm1wQSwgSm1wQiwgSm1wQ307Cgl3aGlsZSgoU3RlcE5vID0gKCpGdW5jW1N0ZXBOb10pKFN0ZXBObykpID49IDApOwoJcmV0dXJuIDA7Cn0=