Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упорядоченный список, Проверка на упорядоченность списка 
:(
    Опции темы
Octane
Дата 19.11.2008, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.5.2007
Где: Волгоград

Репутация: нет
Всего: нет



Здравствуйте.

Решаю задачу: «Определить, является ли массив упорядоченным по возрастанию. В случае отрицательного ответа, определить номер первого элемента, нарушившего такую упорядоченность».

Часть функции написал в «MULISP»:
Код
(defun check (x)
    (cond
        ((atom x) 0)
        (t (cond
            ((not (second x)) NIL)
            ((< (first x) (second x)) (check (cdr x)))
            (t …)
        ))
    )
)

Но как вывести номер элемента, никак не придумаю.

Помогите, пожалуйста, доделать задачу, ну или хотя бы подсказать правильный алгоритм решения.

Это сообщение отредактировал(а) Octane - 19.11.2008, 01:45
PM MAIL WWW ICQ   Вверх
adejneka
Дата 19.11.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: 9
Всего: 11



Можно передавать количество просмотренных элементов списка как второй параметр check. Т.е. написать функцию check1 (list, n), которая возвращает n+(номер первого элемента list, нарушающего...). Тогда check(list)=check1 (list, 0).

Кстати, Ваша программа работает не с массивом, а со списком.
PM MAIL   Вверх
VH_
Дата 19.11.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



Код

(defun CHECK (L &optional (N 0))
 (cond
  ((null L) T)
  ((null (cdr L)) T)
  ((< (car L) (cadr L)) (CHECK (cdr L) (1+ N)))
  (T N)))

Зачем рассматривать вариант (atom x), если в задаче сказано «...является ли массив (читай список) упорядоченным...»
PM MAIL   Вверх
Octane
Дата 19.11.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.5.2007
Где: Волгоград

Репутация: нет
Всего: нет



Вариант (atom x) рассматривал для выхода из рекурсии, когда (cdr x) возвращает атом «NIL», по аналогии с реализацией функции «length» в «MULISP»:
Код
(defun length (x) (cond ((atom x) 0) (t (+ 1 (length (cdr x))))))


Изменил в вашем примере (1+ N) на (+ 1 N), но всеравно в ответе всегда «N», а не число. Может быть в «MULISP» не поддерживается «&optional»? В каком диалекте вы писали?
PM MAIL WWW ICQ   Вверх
_sg
Дата 24.4.2014, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



как вариант:
Код

(defun check< (w &optional (n 1))
  (cond ((or (null w) (null (cdr w))))
        ((< (car w) (cadr w)) (check< (cdr w) (1+ n)))
        (n)))

> (check< '(1 2 3 4 5))
T
> (check< '(1 2 3 1 5))
3

--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.