Курсовая работа: Некоторые способы разбиения множеств
Pot^.next:=nil
End
Else begin {иначе инициализируем понятие до конца }
Pot:=pot^.next;
Pot^.s:=pot^.s+')'; { закрываем скобку }
Pot ^. next := nil ; {указываем, что это понятие последнее в списке }
Pot ^. p := I {указываем количество элементов, содержащихся в понятии }
End
End ;
For j := k 1-1 downto 2 do begin { k 1 сейчас показывает количество подпонятий последнего понятия плюс 1. Поэтому в этом цикле, который попытается определить следующую комбинацию понятий и используется переменная k 1. Эта часть программы рассматривает случай, когда подпонятия будут ставать не следующими по списку подпонятиями (по крайней мере не все), а будут происходить другие переходы. То есть этот цикл рассчитан на то, чтобы не позволить подпонятию с большим номером по списку в понятии быть большим по абсолютному адресу (по времени создания) }
If (str1[j]^.next=str1[j-1]) and (str1[j+1]=str1[j]) or ((j=k1-1) and (str1[j]<>
Str 1[ j -1])) then begin {если за подпонятием с номером j по списку следует подпонятие с номером j -1 и подпонятия с номером j и j +1 совпадают, или j равно количеству подпонятий и последние два понятия совпадают (сравнение идет по абсолютным адресам расположения понятий в памяти), то }
str 1[ j ]:= str 1[ j ]^. next ; {подпонятие с номером j переходит на следующее за списком подпонятие }
For j := J +1 to k 1-1 do str 1[ j ]:= f ; {а все следующие подпонятия, становятся равными первому (элементарному) подпонятию }
goto met {хотя применение оператора безусловного перехода считается плохим стилем программирования, но здесь он оправдан, дабы не запутывать программу новыми циклами }
End ;
End ;
For j := k 1-1 downto 2 do begin { нов ы й цикл, который переключит соответствующие подпонятия. Мы выделяем это в новый цикл, так как нужно было проверить на наличие “граничных” переходов (см. предыдущий цикл) }
If str 1[ j ]<> str 1[ j -1] then begin { если подпонятия с номерами j и ( j -1) не совпадают, то }
Str 1[ j ]:= str 1[ j ]^. next ; {подпонятие с номером j становится следующим по списку (времени создания подпонятием) }
For j := j +1 to k 1 do str 1[ j ]:= f ; {а все идущие за ним подпонятия в списке подпонятий, составляющих понятие становятся элементарными }
goto met {выходим из цикла }
End
End ;
Str 1[1]:= str 1[1]^. next ; {если не выполнились условия предыдущих двух циклов, то пора переключать первое подпонятие }
for j :=2 to i do str 1[ j ]:= f ; { и, соответствено, следующие подпонятия сделать элементарными }
Met: end
End;
Close(fil);{ закр ыть файл }