Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
maximka1093
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 8
1

Получить значения из списка

23.06.2014, 14:37. Просмотров 532. Ответов 9
Метки нет (Все метки)

Есть 3 списка, которые задаются пользователем. Если в этих 3 списках есть:

3 элемента>0, то вывести меньший из 3х
3 элемента <0, то вывести тот, что ближе к нулю
2 элемента>0 вывести больший из двух
2 элемента<0 вывести самый меньший

также вывести сумму общую этих элементов и количество положительных и отрицательных

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 14:37
Ответы с готовыми решениями:

Лямба вызов (Получить разность между k - м элементом списка х и n - м элементом списка y)
Помогите пожалуйста Составить не рекурсивную программу в форме лямбда вызова. Получить разность...

Как получить все значения из списка
Здраствуйте, подскажите пожалуста, как сформировать строку состоящую из всех значений СПИСКА через...

Как получить только уникальные значения из списка?
Всем привет! Есть файл, состоящий из 30 значений, 15 из них уникальные. Подскажите,...

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

TableView Получить значения из ячеек в таблице, и присвоить эти значения переменным, а потом получить их сумму
есть код таблицы из примера с оф сайта docs.oracle как можно получить и присвоить переменной...

9
Catstail
Модератор
24555 / 12471 / 2275
Регистрация: 12.02.2012
Сообщений: 20,242
23.06.2014, 15:36 2
Формулировка некорректна... Решение, допустим, такое:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun task (l1 l2 l3)
  (let* ((lall (append l1 l2 l3))
         (lpos (remove-if #'(lambda (x) (<= x 0)) lall))
         (lneg (remove-if #'(lambda (x) (>= x 0)) lall))
         (summ (apply '+ lall))
         (nump (length lpos))
         (numn (length lneg)))
    (values 
         (cond ((= nump 3) (apply 'min lpos))
               ((= numn 3) (apply 'max lneg))
               ((= nump 2) (apply 'max lpos))
               ((= numn 2) (apply 'min lneg))
               (t nil))
         summ nump numn))) 
 
==> task
 
(task '(1 2 3) '(-1 -2 -3) '(2 7 0))
 
==> -1
9
5
3
1
korvin_
2496 / 1935 / 349
Регистрация: 28.04.2012
Сообщений: 6,621
23.06.2014, 15:55 3
Цитата Сообщение от Catstail Посмотреть сообщение
Формулировка некорректна...
Ага, я не стал париться и тоже просто дословно переписал ее в код:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
(defun f (xs ys zs)
  (let (positives negatives)
    (flet ((collect (xs)
             (dolist (x xs)
               (cond ((> x 0) (push x positives))
                     ((< x 0) (push x negatives))))))
      (collect xs)
      (collect ys)
      (collect zs))
    (let ((plen (length positives))
          (nlen (length negatives)))
      (values (cond ((= plen 3) (apply #'min positives))
                    ((= nlen 3) (apply #'max negatives))
                    ((= plen 2) (apply #'max positives))
                    ((= nlen 2) (apply #'min negatives)))
              (+ (reduce #'+ positives)
                 (reduce #'+ negatives))
              plen
              nlen))))
 
(defun test-f (xs ys zs)
  (multiple-value-bind (item sum plen nlen) (f xs ys zs)
    (when item
      (format t "; item=~s " item))
    (format t "; sum=~s ; positives=~s ; negatives=~s~%" sum plen nlen)))
 
(defun test ()
  (let ((args '(((1 -1) (2 -1) (3 -1))
                ((0 -1) (1 -2) (2 -3))
                ((0  0) (1 -1) (2 -2))
                ((0  0) (0 -1) (1 -2))
                ((0  0) (0  0) (1 -2)))))
    (dolist (args args)
      (format t "; For args~{ ~s~}:~%" args)
      (apply #'test-f args)
      (terpri))))
 
(test)
; For args (1 -1) (2 -1) (3 -1):
; item=1 ; sum=3 ; positives=3 ; negatives=3
 
; For args (0 -1) (1 -2) (2 -3):
; item=-1 ; sum=-3 ; positives=2 ; negatives=3
 
; For args (0 0) (1 -1) (2 -2):
; item=2 ; sum=0 ; positives=2 ; negatives=2
 
; For args (0 0) (0 -1) (1 -2):
; item=-2 ; sum=-2 ; positives=1 ; negatives=2
 
; For args (0 0) (0 0) (1 -2):
; sum=-1 ; positives=1 ; negatives=1
2
maximka1093
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 8
23.06.2014, 17:08  [ТС] 4
не тут получается не совсем правильно

по заданию пользователь задает списки допустим:
(1 -3 -5 7 8 -1)(0 6 -1 9)(8 9 7 5 -2 0)
и программа соответственно выводит:
список 1:
3эл>0=8
3эл<0=-5
2эл>0=1
2эл<0=-5
также для остальных списков
потом соответственно считает сумму всех элементов которые вывел из 3х списков
и также приводит количество чисел во всех списках которые больше 0 и меньше 0
0
23.06.2014, 17:08
Catstail
Модератор
24555 / 12471 / 2275
Регистрация: 12.02.2012
Сообщений: 20,242
23.06.2014, 17:26 5
"не", тут все правильно (в смысле - соответствует исходной постановке). Ты писал "Если в этих 3 списках есть" это значит что есть в объединении трех списков. А если эти действия нужно проделать для каждого списка, то так и нужно было писать.

Теперь ты пишешь 3эл>0 = 8 Но это противоречит твоей первоначальной постановке! "3 элемента>0, то вывести меньший из 3х" Меньший из трех будет 1 для списка (1 -3 -5 7 8 -1).

Кто ясно мыслит, тот ясно излагает.
1
maximka1093
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 8
23.06.2014, 17:54  [ТС] 6
да с ясностью формулировки у меня вышло плоховато,сам запутался
задача такая:
3 списка так и остается,
берем из каждого по 3 элемента,
3 элемента > 0 - выбираем больший
3 элемента < 0 - выбираем то что ближе к нулю
потом берем по 2 элемента
2 элемента > 0 - выбираем меньший
2 элемента < 0 - выбираем наибольший минус
потом считаем сумму всех элементов и считаем количество отрицательных и положительных элементов
(0 2 5)(-9 3 -4 -5 9)(0 9 3 1 5 -1 -5 -6)
3эл>0 - 5
3эл<0 - -4
2эл>0 - 2
2эл<0 - 0
0
Catstail
Модератор
24555 / 12471 / 2275
Регистрация: 12.02.2012
Сообщений: 20,242
23.06.2014, 18:13 7
Цитата Сообщение от maximka1093 Посмотреть сообщение
берем из каждого по 3 элемента,
- с какого места? А если в списке один или два элемента?
0
maximka1093
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 8
23.06.2014, 18:21  [ТС] 8
тогда возвращаем 0
0
Catstail
Модератор
24555 / 12471 / 2275
Регистрация: 12.02.2012
Сообщений: 20,242
23.06.2014, 18:45 9
А с какого места берем три элемента? Что с остальными делать, если их больше трех?

Добавлено через 1 минуту
Цитата Сообщение от maximka1093 Посмотреть сообщение
потом считаем сумму всех элементов
- каких? Исходного списка? Выбранных трех? Выбранных двух?
0
maximka1093
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 8
23.06.2014, 19:52  [ТС] 10
Всех выбранных

Добавлено через 2 минуты
Выбираем произвольные 3 элемента
0
23.06.2014, 19:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2014, 19:52

Из исходного списка получить два новых списка путем копиpования
Здравствуйте! Помогите, пожалуйста, реализовать следующую функцию. Изломал всю голову, но так и не...

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct Double_List {//структура...

Вывод определенного значения, при выборе другого значения из списка
Где-то это уже было, но не смог найти. Подскажите, пожалуйста, формулу, для решения такой задачи:...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru