Обpобка масивiв, Детальна інформація
Обpобка масивiв
(INCQ i) ) )
Середовище muLisp має також вмонтовану функцiю MAKE-LIST, яку можна використовувати для створення спискiв заданого розмiру. Функцiя (MAKE-LIST n об'єкт список) утворює список з n елементiв, кожний з яких приймає значення об'єкту, приєднанi до списку. Якщо не задано перший аргумент, то по замовченню n = 0. Якщо другий аргумент не задано, то вважається об'єкт = NIL.
$ (MAKE-LIST 3 '(q w)) $ (MAKE-LIST 4) $ (MAKE-LIST 3 5 '(2 3))
((q w)(q w)(q w)) (NIL NIL NIL NIL) (5 5 5 2 3)
Наведену функцiю можна визначити наступним чином (iм'я змiнено на MAKE-LST):
(DEFUN MAKE-LST (N OBJ LST)
((AND (INTEGERP N) (PLUSP N))
(CONS OBJ (MAKE-LIST (SUB1 N) OBJ LST)) )
LST )
Функця (OBLIST) що не має аргументiв, утворює та повертає список активних на поточний момент символiв у системi. Символи розташованi в тому порядку, в якому вони прочитанi або згенерованi строковими функцiями: новi символi розташованi злiва вiд старих.
Задача 1. Дано неспадний список чисел x. Знайти кiлькiсть рiзних чисел серед елементiв цього масива. Hаписати функцiю (FIND_DIFF x)
Вказiвка: Шукане число на 1 бiльше за кiлькiсть тих чисел i из 1..n-1, для яких x[i] <> x[i+1].
(DEFUN find_diff (x)
((NULL (CDR x)) 1)
(IF (/= (CAR x) (CADR x)) (+ 1 (find_diff (CDR x))) (find_diff (CDR x)))
)
Задача 2. Дано масив цiлих чисел x. Знайти кiлькiсть рiзних чисел серед елементiв цього масиву. Вiдомо, що всi елементи масиву - числа вiд 1 до n. Часова оцiнка O(n). Hаписати функцiю (FIND_NUM_N n x).
Вказiвка: утвоpити допомiжний масив lst чисел вiд 1 до n та пpи читаннi елементу i збiльшити на одиницю елемент масиву x[i].
(DEFUN find_num_n (n x)
(SETQ a (GEN0 n))
(LOOP
((NULL x))
(SETQ a (CHANGE a (CAR x) (+ 1 (MAS a (CAR x)))))
(SETQ x (CDR x))
) a )
Задача 3. Фiшка може pухатися по полю довжини Т лише вперед. Довжина хода фiшки не бiльша за К. Знайти кiлькiсть рiзних шляхiв, по яким фiшка може пройти поле вiд початку до кiнця.
Приклад.
Т=3, К=2
Можливi шляхи:
1,1,1
Середовище muLisp має також вмонтовану функцiю MAKE-LIST, яку можна використовувати для створення спискiв заданого розмiру. Функцiя (MAKE-LIST n об'єкт список) утворює список з n елементiв, кожний з яких приймає значення об'єкту, приєднанi до списку. Якщо не задано перший аргумент, то по замовченню n = 0. Якщо другий аргумент не задано, то вважається об'єкт = NIL.
$ (MAKE-LIST 3 '(q w)) $ (MAKE-LIST 4) $ (MAKE-LIST 3 5 '(2 3))
((q w)(q w)(q w)) (NIL NIL NIL NIL) (5 5 5 2 3)
Наведену функцiю можна визначити наступним чином (iм'я змiнено на MAKE-LST):
(DEFUN MAKE-LST (N OBJ LST)
((AND (INTEGERP N) (PLUSP N))
(CONS OBJ (MAKE-LIST (SUB1 N) OBJ LST)) )
LST )
Функця (OBLIST) що не має аргументiв, утворює та повертає список активних на поточний момент символiв у системi. Символи розташованi в тому порядку, в якому вони прочитанi або згенерованi строковими функцiями: новi символi розташованi злiва вiд старих.
Задача 1. Дано неспадний список чисел x. Знайти кiлькiсть рiзних чисел серед елементiв цього масива. Hаписати функцiю (FIND_DIFF x)
Вказiвка: Шукане число на 1 бiльше за кiлькiсть тих чисел i из 1..n-1, для яких x[i] <> x[i+1].
(DEFUN find_diff (x)
((NULL (CDR x)) 1)
(IF (/= (CAR x) (CADR x)) (+ 1 (find_diff (CDR x))) (find_diff (CDR x)))
)
Задача 2. Дано масив цiлих чисел x. Знайти кiлькiсть рiзних чисел серед елементiв цього масиву. Вiдомо, що всi елементи масиву - числа вiд 1 до n. Часова оцiнка O(n). Hаписати функцiю (FIND_NUM_N n x).
Вказiвка: утвоpити допомiжний масив lst чисел вiд 1 до n та пpи читаннi елементу i збiльшити на одиницю елемент масиву x[i].
(DEFUN find_num_n (n x)
(SETQ a (GEN0 n))
(LOOP
((NULL x))
(SETQ a (CHANGE a (CAR x) (+ 1 (MAS a (CAR x)))))
(SETQ x (CDR x))
) a )
Задача 3. Фiшка може pухатися по полю довжини Т лише вперед. Довжина хода фiшки не бiльша за К. Знайти кiлькiсть рiзних шляхiв, по яким фiшка може пройти поле вiд початку до кiнця.
Приклад.
Т=3, К=2
Можливi шляхи:
1,1,1
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021