Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Dzirten
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
1

Работа с матрицами, поиск наибольшей строки с ее выводом и выводом ее суммы

11.12.2017, 22:14. Просмотров 840. Ответов 9
Метки нет (Все метки)

Написать программу: дана прямоугольная матрица размером m на n. Выделить в ней строку имеющую наибольшую сумму. Вывести значение суммы и эту строку
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2017, 22:14
Ответы с готовыми решениями:

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

ComboBox Поиск по ячейке с выводом полной строки
В combobox выбираем критерии фильтрации, если в 4 столбце имеется такое значения, то строка эта...

Действия с матрицами. Ошибка 94. Проблемы с выводом результата
Вот условие задачи Заданы одномерные матрицы размерностью 40 элементов, заполненные случайными...

Есть ли разница между обычным выводом через echo и выводом с использованием HEREDOC-синтаксиса?
Есть ли разницы между двумя многострочными выводами ? первый записывается как строка, второй код...

9
helter
3862 / 2887 / 312
Регистрация: 12.03.2013
Сообщений: 5,228
11.12.2017, 22:30 2
А вам — тоже готовое, или сами писать будете?
0
Dzirten
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
11.12.2017, 22:58  [ТС] 3
Готовое, да. Я в данный момент изучаю lisp, очень тяжело для меня дается переход на функц. языки. На примере кода, хотел бы разобраться. Буду очень благодарен.
0
_sg
4257 / 3991 / 314
Регистрация: 12.05.2012
Сообщений: 2,818
11.12.2017, 23:22 4
Lisp
1
2
3
4
5
6
(defun maxx (w &aux (m (loop for a in w maximize (reduce #'+ a))))
  (loop for a in w when (= (reduce #'+ a) m) return (values m a)))
 
> (maxx '((0 0 1) (0 0 2) (0 0 3)))
3
(0 0 3)
Добавлено через 4 минуты
Lisp
1
2
3
4
5
6
7
8
(defun maxxx (w &aux (m (loop for a in w maximize (reduce #'+ a))))
  (loop for a in w
        when (= (reduce #'+ a) m) collect a into v
        finally (return (values m v))))
 
> (maxxx '((0 0 1) (0 1 2) (0 0 3)))
3
((0 1 2) (0 0 3))
1
Dzirten
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
11.12.2017, 23:36  [ТС] 5
Выдает ошибку на homelisp

Assoc: символ for не имеет значения (не связан).
> ERRSTATE
0
helter
3862 / 2887 / 312
Регистрация: 12.03.2013
Сообщений: 5,228
12.12.2017, 00:13 6
Цитата Сообщение от Dzirten Посмотреть сообщение
очень тяжело для меня дается переход на функц. языки.
Вас обманули. Лисп не функциональный.
0
_sg
4257 / 3991 / 314
Регистрация: 12.05.2012
Сообщений: 2,818
12.12.2017, 08:57 7
варианты Common Lisp:
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun maxx (w
              &aux
              (m (reduce #'max w
                         :key #'(lambda (a)
                                  (reduce #'+ a)))))
  (loop for a in w
        when (= (reduce #'+ a) m) return (values m a)))
 
> (maxx '((0 0 1) (0 1 2) (0 0 3)))
3
(0 1 2)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun maxx (w
              &aux
              (m (reduce #'max w
                         :key #'(lambda (a)
                                  (eval (cons '+ a))))))
  (loop for a in w
        when (= (eval (cons '+ a)) m) return (values m a)))
 
> (maxx '((0 0 1) (0 1 2) (0 0 3)))
3
(0 1 2)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun maxxx (w
              &aux
              (m (reduce #'max w
                         :key #'(lambda (a)
                                  (reduce #'+ a)))))
  (loop for a in w
        when (= (reduce #'+ a) m) collect a into v
        finally (return (values m v))))
 
> (maxxx '((0 0 1) (0 1 2) (0 0 3)))
3
((0 1 2) (0 0 3))
Добавлено через 56 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun maxxx (w
              &aux
              (m (reduce #'max w
                         :key #'(lambda (a)
                                  (eval (cons '+ a))))))
  (loop for a in w
        when (= (eval (cons '+ a)) m) collect a into v
        finally (return (values m v))))
 
> (maxxx '((0 0 1) (0 1 2) (0 0 3)))
3
((0 1 2) (0 0 3))
1
Catstail
Модератор
25716 / 13277 / 2511
Регистрация: 12.02.2012
Сообщений: 21,764
12.12.2017, 10:17 8
Лучший ответ Сообщение было отмечено Dzirten как решение

Решение

HomeLisp:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun task (matr)
  (let* ((sums (mapcar (lambda (x) (apply '+ x)) matr))
         (maxs (apply 'max sums))
         (pairs (mapcar 'list (range 0 (- (length sums) 1)) sums))
         (nmax (remove-if (lambda (p) (< (cadr p) maxs)) pairs)))
     (printline maxs)
     (mapcar (lambda (r) (printline (nth (car r) matr))) nmax)))
 
(task '((1 2 3 4) (4 2 0 1) (7 5 -6 3) (1 1 7 1) (2 0 3 1)))
10  ;; это максимальная сумма
(1 2 3 4) ;; это первая строка с макс. суммой
(1 1 7 1) ;; это вторая
 
==> ((1 2 3 4) (1 1 7 1))
2
Dzirten
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
14.12.2017, 20:26  [ТС] 9
Выдает ошибку в home lisp:
EVFUN: Не найдена функция MAPCAR
Функция: MAPCAR Аргументы ((LAMBDA (X) (APPLY (QUOTE +) X)) MATR)
==>ERRSTATE

Добавлено через 7 минут
Скачал другую версию homelisp, все заработало

Добавлено через 9 минут
Спасибо большое за помощь!
0
_sg
4257 / 3991 / 314
Регистрация: 12.05.2012
Сообщений: 2,818
14.12.2017, 20:32 10
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun maxxxx (w &aux (m (maxx w)))
  (list m (maxxx w m)))
 
(defun maxxx (w m)
  (cond ((null w) nil)
        ((= (sum (car w)) m) (cons (car w) (maxxx (cdr w) m)))
        (t (maxxx (cdr w) m))))
 
(defun maxx (w
             &optional (m (sum (car w)))
             &aux (n (sum (car w))))
  (cond ((null w) m)
        ((> n m) (maxx (cdr w) n))
        (t (maxx (cdr w) m))))
 
(defun sum (w)
  (if w (+ (car w) (sum (cdr w))) 0))
 
> (maxxxx '((0 0 1) (0 1 2) (0 0 3)))
(3 ((0 1 2) (0 0 3)))
Добавлено через 3 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun maxxxx (w &aux (m (maxx w)))
  (progn (princ m) (maxxx w m)))
 
(defun maxxx (w m)
  (cond ((null w) nil)
        ((= (sum (car w)) m) (cons (car w) (maxxx (cdr w) m)))
        (t (maxxx (cdr w) m))))
 
(defun maxx (w
             &optional (m (sum (car w)))
             &aux (n (sum (car w))))
  (cond ((null w) m)
        ((> n m) (maxx (cdr w) n))
        (t (maxx (cdr w) m))))
 
(defun sum (w)
  (if w (+ (car w) (sum (cdr w))) 0))
 
> (maxxxx '((0 0 1) (0 1 2) (0 0 3)))
3
((0 1 2) (0 0 3))
2
14.12.2017, 20:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2017, 20:32

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

Ассемблер\Работа с файлами\Поиск в файле\ввод искомого символа с клавиатуры с выводом результата на екран.
Всем доброго времени суток. проблема то вот в чем: мне необходимо сделать програму,вводишь с...

Перемножение полей формы с выводом суммы
Всем привет. Помогите))) Как перемножение два поля в форме с виводом суми в трете поле даной...

Проблемы с выводом общей суммы из файла в мемо
У меня было вот такое задание: 1.Составить программу записи в файл сведений о налиии N различных...

Поиск по таблице с выводом
Доброго дня. Есть таблица. На первом листе много разных данных, но нам нужны конкретные столбцы....


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

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

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