С Новым годом! Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 2
Регистрация: 10.10.2014
Сообщений: 62

Сумма элементов побочной диагонали

06.11.2014, 21:06. Показов 2380. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моей программе пока две функции: первая - отделяет каждую строку в матрице, и вторая возвращает n-ый элемент. Потом еще добавлю функцию, которая считает саму сумму. Но пока что в этих двух функциях ошибки.. Программа:

Добавлено через 13 секунд
Haskell
1
2
3
4
5
6
7
matr11 :: [[Int]] -> Int -> [Int] -> Int
matr11 []_ = []
matr11(x:xs)n = seln x n : matr11 xs n 
 
seln :: [Int] -> Int ->Int
seln []_ = 0
seln (y:ys)h = if h==1 then y else seln ys(h-1)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2014, 21:06
Ответы с готовыми решениями:

Сумма элементов побочной диагонали
Помогите, пожалуйста, найти сумму элементов побочной диагонали! Я новичок в Haskell.

Найти минимальный элемент побочной диагонали
Была у меня программа для главной диагонали: vibor :: -> Int -> Int -> Int vibor _ _=0 vibor (x:xs) n m | n==m = x | n<m...

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

20
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2014, 06:15
Haskell
1
2
3
4
5
diag2 ys = 
    nx (reverse ys)
    where
        nx ((x : _) : xs) = x : nx (map tail xs)
        nx _ = []
http://ideone.com/9K0Q4M
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.11.2014, 12:45
Еще вариант (неоптимальный):

Haskell
1
2
sumd2 matr =  sum $ map (\ n -> (matr !! n) !! (k-n-1)) [0..k-1] 
              where k=length matr
0
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
07.11.2014, 14:01
Васкеr, функция seln у Вас работает правильно, я в ней только дополнительные пробелы для красоты поставил. Функцию matr11 я поправил. Постарайтесь сами понять что было не так.
И я добавил проверку работы функции matr11.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
matr11 :: [[Int]] -> Int -> Int
matr11 [] _ = 0
matr11 (x:xs) n = seln x n + matr11 xs (n+1) 
 
seln :: [Int] -> Int ->Int
seln [] _ = 0
seln (y:ys) h = if h==1 then y else seln ys (h-1)
 
testdata = [[1,2,3,4,5],[10,20,30,40,50],[100,200,300,400,500],
            [1000,2000,3000,4000,5000],[10000,20000,30000,40000,50000]]
 
main = do
    -- Верхняя побочная диагональ
    print $  matr11 testdata 2
    -- Нижняя побочная диагональ
    print $  matr11 testdata 0
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.11.2014, 14:10
Опс... А я не ту диагональ суммировал.

Haskell
1
2
sumn2 matr =  sum $ map (\ n -> (matr !! n) !! (n+1)) [0..k-2] 
              where k=length matr
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2014, 14:17
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
И я добавил проверку работы функции matr11
http://ideone.com/MrLntp ?

Добавлено через 2 минуты
или я путаю определение побочной диагонали?
0
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
07.11.2014, 14:31
Значит мы все путаем. Недавно топикстартер здесь начинал такую же тему - Сумма элементов побочной диагонали , ну и все так же и решали. Сейчас посмотрел в википедию - и правда.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.11.2014, 15:26
А значит я суммировал первый раз именно ту. Побочная идет из правого верхнего в левый нижний.
0
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
07.11.2014, 20:41
Catstail, вообще то Вы и ввели в прошлой теме, такие определения как "sumU :: [[Int]] -> Int -- сумма верхней побочной","sumD :: [[Int]] -> Int -- сумма нижней побочной", а я лентяй - не полез в вику проверять что за диагонали такие.

Вот, довольно кратко получилось
Haskell
1
diag2 = fst . foldr (\ a (s,i) -> (s + a !! i,i+1)) (0,0)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.11.2014, 20:45
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Catstail, вообще то Вы и ввели
- мне стыдно, моя вина.
0
1 / 1 / 2
Регистрация: 10.10.2014
Сообщений: 62
09.11.2014, 12:04  [ТС]
Что значат $ и !!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
09.11.2014, 16:13
!! - операция получения элемента списка по его номеру (с нуля). $ - применение функции, позволяющее, к примеру, экономить скобки:

(f x y z) = f $ x y z
1
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
09.11.2014, 16:22
(f x y z) = f $ x y z
Ошибочка: f (x y z) то же что и f $ x y z
Да и то не всегда. "qwe" ++ ( take 5 "asdghk") не удастся заменить на "qwe" ++ $ take 5 "asdghk"


Вобщем, $ - это функция одного аргумента возвращающая свой аргумент неизменным. Принцип применения основан на том, что она имеет самый низкий приоритет среди операций.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
09.11.2014, 16:42
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Ошибочка: f (x y z)
- а что такое в Haskell f (x y z) ?
0
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
09.11.2014, 16:50
f - функция от одного аргумента (или частичное применение с одним аргументом). x,y,z - всё что угодно, так что x y z образует синтаксически правильное выражение. В данном случае, годное дня использования как аргумент функции ($).
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
09.11.2014, 17:21
KolodeznyDiver, я был неправ, спасибо!

Добавлено через 11 минут
Пример, который приводит М.Липовача ("Изучай Хаскелл во имя добра"):

Запись без оператора применения:

Haskell
1
sum (filter (>10) (map (*2) [2..10]))
здесь ни одной скобки опустить нельзя: у sum один аргумент - результат filter ... А у filter, в свою очередь, второй аргумент есть результат применения map с функцией (*2) к диапазону [2..10]. С использованием $ эту конструкцию можно записать несколько проще:

Haskell
1
sum $ filter (>10) $ map (*2) [2..10]
Разумеется, я пишу это для ТС.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
09.11.2014, 17:28
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
"qwe" ++ ( take 5 "asdghk") не удастся заменить на "qwe" ++ $ take 5 "asdghk"
это потому как ++ используется "неправильно" (как оператор). если писать правильно (как функцию) то все работает
Haskell
1
(++) "qwe" $ take 5 "asdghk"
1
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
09.11.2014, 17:37
Да, в инфиксном варианте не работает. Т.е. не всегда (), даже если закрывающая скобка в конце выражения, удастся заменить на $.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
09.11.2014, 21:38
KolodeznyDiver, pycture, там просто скобочек не хватает
Haskell
1
("qwe" ++) $ take 5 "asdghk"
0
Модератор
 Аватар для Curry
5153 / 3465 / 536
Регистрация: 01.06.2013
Сообщений: 7,529
Записей в блоге: 9
09.11.2014, 21:49
Конечно, к функции одной переменной $ можно применять. А к второму аргументу инфиксной функции нет. Без дополнительных () не обойтись. Либо они ( take 5 "asdghk"), либо (++), либо ("qwe" ++).
Можно сказать, закон сохранения скобок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.11.2014, 21:49
Помогаю со студенческими работами здесь

В матрице найти произведение элементов главной диагонали минус сумма элементов побочной диагонали
Задание: дана матрица а, найти B= произведение элементов главной диагонали - (МИНУС) сумма элементов побочной диагонали. Начал...

Выяснить, что больше: сумма элементов главной диагонали матрицы или сумма элементов побочной
Выяснить, что больше: сумма элементов главной диагонали матрицы размером 4*4 или сумма элементов ее побочной диагонали. {если можно с...

В матрице сумма элементов, стоящих на главной диагонали, равна сумме элементов, стоящих на побочной диагонали
⦁ «В данной матрице сумма элементов, стоящих на главной диагонали, равна сумме элементов, стоящих на побочной диагонали». помогите...

Сумма элементов побочной диагонали
Исправьте программу: Program kh; Var x: Array of Integer; i,j,s: Integer; Begin Randomize; Writeln('Случайная...

Сумма элементов побочной диагонали
Задайте двумерный массив (матрицу) размером 9х9.Составьте программу для решения задачи: вычислить сумму чисел,состоящих на побочной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru