* Этот макрос находит все перестановки целых чисел 1, 2, ... t, где t < 8. * Автор: Raynald Levesque, февраль 2002. DEFINE !t(nb=!TOKENS(1)) /* Создаём файл, содержащий все комбинации (с возвращением) */. INPUT PROGRAM. !DO !cnt=1 !TO !nb LOOP !CONCAT('cnt',!cnt,'=1 TO ',!nb). LEAVE !CONCAT('cnt',!cnt). !DOEND END CASE. !DO !cnt=1 !TO !nb. END LOOP. !DOEND END FILE. END INPUT PROGRAM. * Считаем, какие числа попадаются в строке более, чем 1 раз. NUMERIC c1 TO !CONCAT('c',!nb). !DO !cnt=1 !TO !nb COUNT !CONCAT('c',!cnt,' =cnt1 TO c',!cnt,'(',!cnt,')'). !DOEND /* Оставляем только действительные перестановки (без возвращения) */. SELECT IF MAX(c1 TO !CONCAT('c',!nb))=1. EXECUTE. STRING newname(A8). COMPUTE newname=CONCAT('p',LTRIM(STRING($CASENUM,F8.0))). FLIP cnt1 TO !CONCAT('cnt',!nb) /NEWNAMES=newname. SAVE OUTFILE='c:\\temp\\all permutations.sav' /DROP=case_lbl. !ENDDEFINE. !t nb=6.