1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 Z(i) – i символ получаемого
результата;
strlen() – функция определения длины строки;
g(Zp(i) - Z(i)) = 1, если Zp(i) = Z(i),
g(Zp(i) - Z(i)) = 1/2, если Zp(i) или Z(i) отсутствуют,
g(Zp(i) - Z(i)) = 0, если Zp(i) и Z(i) присутствуют, но Zp(i) ? Z(i).
В
качестве ЭД определим следующие:
X+Y – склеивание строк;
X-Y – результатом является строка из
символов, присутствующих в X, но отсутствующих в Y;
Di(X) – удаление первого символа строки X;
Dn(X) – удаление последнего символа строки X.
Тогда
результатом применения изложенного подхода станет автоматически сгенерированная
следующая СР-сеть:
При
желании полученная схема всегда может быть автоматически отображена в текст
компьютерной программы на любом заданном языке программирования. Например, если
в качестве языка программирования задан язык Си, то будет получен следующий
текст:
sr_sxema(x,y,z) char x[ ] y[ ] z[ ];
{
char x[80] /* рабочая переменная */
strcpy(x1,x); /*
подготовка к работе */
х1[0]=0; strcat(х1,&х1[1]); /* D1 */
strcat(xl,y); /*xl+y*/
l=strlen(xl);x1[l]=0; /*Dn */
l=strlen(xl);x1[l]=0; /*Dn */
strcat(x1,x); /* x1+x */
1=strlen(xl);xl[l]=0; /*Dn */
1=strlen(xl);xl[l]=0; /*Dn */
strcpy(z,x1); /*
возвращение управления */
return;
}
При
желании приведенную программу можно подвергнуть автоматической оптимизации, которая
приведет к введению циклов за счет поглощения одинаковых строк, например:
sr_sxema(x,y,z) char x[ ] y[ ] z[ ];
{
int j;
/* рабочая переменная */
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28
|