Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 48
1

Clojure Дать описание фрагмента программы, в котором определяется количество нечетных, отрицательных четных и прочих элементов

28.04.2014, 16:07. Показов 1147. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста решить задачу:

Дан список целых чисел. Требуется дать описание фрагмента программы, в котором определяется количество нечетных элементов, количество отрицательных четных и количество прочих элементов списка.

Очень прошу также помочь с хорошей литературой по теории и программированию ЛИСП, сам совсем новичок и понять тяжело по той литературе, что нам дали.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2014, 16:07
Ответы с готовыми решениями:

Дать описание фрагмента программы, обеспечивающей вывод и ввод элементов матрицы А(к,к) по строкам
дать описание фрагмента программы, обеспечивающей вывод и ввод элементов матрицы А(к,к) по строкам....

В целочисленном массиве подсчитать количество четных положительных, четных отрицательных, нечетных положительных и нечетных отрицательных
в целочисленном массиве подсчитать количество четных положительных, четных отрицательных, нечетных...

Найти произведение отрицательных четных и положительных нечетных элементов матрицы
Двумерный массив: Найти произведение отрицательных четных и положительных нечетных элементов...

В двумерном массиве найти сумму положительных четных и отрицательных нечетных элементов
В массиве целых чисел А(n, m) найти по отдельности сумму положительных четных и отрицательных...

10
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
28.04.2014, 17:13 2
Способ 1. Функциональный:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (lst)
  (let* ((num-odd (length (remove-if-not #'oddp lst)))
         (num-neg-even (length (remove-if-not #'(lambda (x) (and (minusp x) (evenp x))) lst)))
         (num-other (- (length lst) num-odd num-neg-even)))
    (list num-odd num-neg-even num-other)))
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 4 минуты
Способ 2. Рекурсия:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun task (lst &optional (num-odd 0) (num-neg-even 0) (num-other 0))
  (cond ((null lst) (list num-odd num-neg-even num-other))
        ((oddp (car lst)) (task (cdr lst) (+ 1 num-odd) num-neg-even num-other))
        ((and (evenp (car lst)) (minusp (car lst))) (task (cdr lst) num-odd (+ 1 num-neg-even) num-other))
        (t (task (cdr lst) num-odd num-neg-even (+ 1 num-other)))))
 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 4 минуты
Способ 3. Цикл

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun task (lst)
  (let ((num-odd 0)
        (num-neg-even 0)
        (num-other 0))
    (dolist (i lst (list num-odd num-neg-even num-other))
        (cond ((oddp i) (setq num-odd (+ 1 num-odd)))
              ((and (evenp i) (minusp i)) (setq num-neg-even (+ 1 num-neg-even)))
              (t (setq num-other (+ 1 num-other))))))) 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
2
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
28.04.2014, 17:33 3
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun Score (ls)
  (defstruct score (odd 0) (neg-even 0) (other 0))
  (let ((ins (make-score)))
    (dolist (i ls)
      (cond
        ((oddp i)
         (setf (score-odd ins)
               (1+ (score-odd ins))))
        ((and (evenp i) (minusp i))
         (setf (score-neg-even ins)
               (1+ (score-neg-even ins))))
        (t (setf (score-other ins)
                 (1+ (score-other ins))))))
    (format t "ODD: ~12D~%NEGATIVE-EVEN: ~2D~%OTHER: ~10D~%"
      (score-odd ins) (score-neg-even ins) (score-other ins))))
 
> (Score '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
ODD:            9
NEGATIVE-EVEN:  5
OTHER:          6
1
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.04.2014, 03:27 4
Цитата Сообщение от nVerner Посмотреть сообщение
Очень прошу также помочь с хорошей литературой по теории и программированию ЛИСП, сам совсем новичок и понять тяжело по той литературе, что нам дали.
Читайте годные английские (ну то есть американские, ну вы поняли) книжки - ANSI Common Lisp (можно нагуглить нелегальную копию), Practical Common Lisp (перевод на лисперру) и кодьте побольше.
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.04.2014, 08:25 5
варианты:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun count-all (w)
  (values (count-if #'oddp w)
          (count-if #'(lambda (a) (and (minusp a) (evenp a))) w)
          (count-if-not #'(lambda (a)
                            (or (oddp a)
                                (and (minusp a) (evenp a))))
                        w)))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
Добавлено через 2 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun count-all (w &aux
                  (a (count-if #'oddp w))
                  (b (count-if #'(lambda (a)
                                   (and (minusp a)
                                        (evenp a)))
                               w)))
  (values a b (- (length w) a b)))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
Добавлено через 2 минуты
Цитата Сообщение от nVerner Посмотреть сообщение
помочь с ... литературой
памятка по решению задач
1
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
30.04.2014, 08:58 6
Clojure:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defn task [coll]
  (map count ((juxt (partial filter odd?)
                    (partial filter (every-pred even? neg?))
                    (partial remove (some-fn odd? neg?)))
              coll)))
;; => #'user/task
 
(task '(1 2 3 0 -1 -2 -3))
;; => (4 1 2)
 
(task '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
;; => (9 5 6)
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.04.2014, 09:10 7
Lisp
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
29
(defun count-all (w)
  (loop for a in w
        if (oddp a)
        collect a into odds
        else
        if (and (minusp a) (evenp a))
        collect a into mevens
        else collect a into ramp
        finally (return (values (length odds)
                                (length mevens)
                                (length ramp)
                                odds
                                mevens
                                ramp))))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
(1 3 -1 -3)
(-2)
(2)
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
(11 -63 51 -59 55 -67 -85 29 -41)
(-32 -6 -24 -20 -62)
(98 44 18 0 36 22)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
30.04.2014, 09:19 8
Цитата Сообщение от helter Посмотреть сообщение
Читайте годные английские (ну то есть американские, ну вы поняли) книжки - ANSI Common Lisp (можно нагуглить нелегальную копию), Practical Common Lisp (перевод на лисперру) и кодьте побольше.
- лучшие книги уже переведены на русский. Например П. Грэм "ANSI Common Lisp" или "Структура и интерпретация компьютерных программ" (там, правда основой является Схема а не Лисп). Есть и масса пособий для студентов на русском (см., например, сайт Интуит.ру).

А учить незнакомый язык (Лисп) на незнакомом (или слабо знакомом) английском - не лучшее решение...

Кодить побольше - да, совет правильный.
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.04.2014, 09:38 9
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun count-all (w &optional o me r &aux (a (car w)) (d (cdr w)))
  (cond ((null w) (values (length o) (length me) (length r) o me r))
        ((oddp a) (count-all d (cons a o) me r))
        ((and (minusp a) (evenp a)) (count-all d o (cons a me) r))
        (t (count-all d o me (cons a r)))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
8
3
2
(29 -85 -67 55 -59 51 -63 11)
(-24 -6 -32)
(0 44)
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
30.04.2014, 10:05 10
И еще вариант (iter):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun task (lst)
  (let ((odd 0) (even-neg 0) (other 0))
    (iter (for i in lst) (if (oddp i) (counting i into odd) 
                             (if (and (minusp i) (evenp i)) (counting i into even-neg)
                                 (counting i into other))))
    (list odd even-neg other))) 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 3 минуты
Цитата Сообщение от nVerner Посмотреть сообщение
тяжело по той литературе, что нам дали.
- кстати, а ЧТО вам дали?
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.04.2014, 10:17 11
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun count-all (w)
  (loop for a in w
        if (oddp a) count a into o
        else
        if (and (minusp a) (evenp a))
        count a into me
        else count a into r
        finally (return (values o me r))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
8
3
2
Добавлено через 10 минут
Lisp
1
2
3
4
5
6
7
8
9
(defun count-all (w &optional (o 0) (me 0) (r 0)
                  &aux (a (car w)) (d (cdr w)))
  (cond ((null w) `(,o ,me ,r))
        ((oddp a) (count-all d (1+ o) me r))
        ((and (minusp a) (evenp a)) (count-all d o (1+ me) r))
        ((count-all d o me (1+ r)))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
(8 3 2)
2
30.04.2014, 10:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2014, 10:17
Помогаю со студенческими работами здесь

Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива X(n)
3. Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива...

Для чисел от -50 до 50 найти количество четных отрицательных и количество положительных нечетных чисел
Ребят,всем привет! Помогите пожалуйста решить данную задачу.Ее нужно написать на я зыке C...

Определить сумму указанных элементов, количество нечетных элементов и среднее арифметическое четных элементов массива
Дан двумерный массив целых чисел. Определить: 1. Сумму элементов массива, больших 30 2....

Поместить в начало списка L количество четных элементов, а в конец - количество нечетных
Помогите написать программу. При формировании списков значения элементов задавать произвольно....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru