Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 19
1

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

06.11.2011, 01:56. Показов 1884. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, товарищи программисты
Запрос на помощь!
Я уже наваяла тут что-то страшное-несустветное, но единственное что мне отвечает товарищ пролог -- no.
Задача звучит так:
Дана квадратная матрица неизвестного размера. Получить матрицу, в которой поменяются местами верхние половины главной и побочной диагонали.
Я тут написала что-то по примеру преподавателя, но как-то не очень оно работать хочет.
Помогите, пожалуйста.
Prolog
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
data_matrix(1,[[1,0,0,0,2],
        [0,1,0,2,0],
        [0,0,1,0,0],
        [0,0,0,0,0],
        [0,0,0,0,0]]).
%+matr, -matr
matrix_pro(L):-
    data_matrix(1,Matr),
    length(Matr,N),
    K is N/2 +1,
    matr_by_rows(Matr,1,N, K, L).
 
matr_by_row([R|Rs], Ian, Izn, K, L):-
    Ian=<K,
    Ian1 is Ian+1,
    Izn1 is Izn-1,
    row_by_items(R,1, Ian, Izn, Ia, Iz, K, L),
    matrix_by_rows(Rs, Ia1, Iz1, L).
matr_by_row(H, Ian, _, _, [H|L]):-
    Ian>K.
    
matr_by_rows([],_,_,_,L).
 
%+Row, +new first, +new last, +Acc, -L
row_by_items([X|Xs], I, Ian, Izn, Ia, Iz, L):-
    I =\= Ian,
    I1 is I+1,
    row_by_items(Xs, I1, Ia, Iz, [X|L]).
 
row_by_items([X|Xs], I, Ian, Izn, Ia, Iz, L):-
    I =:= Ian,
    Iz is X,
    finder([X|Xs], Izn, Ia),
    I1 is I+1,
    row_by_items(Xs, I1, Ia, Iz, [X|L]).
 
finder([_,Xs],G,F):-
    G>1,
    G1 is G-1,
    finder(Xs, G1, F).
finder([X|_],1,X).
row_by_items([], _,_,_,L).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2011, 01:56
Ответы с готовыми решениями:

Получить матрицу, в которой меняются местами половины главной и побочной диагоналей
Помогите переписать программу c Prolog на Erlang Заданная квадратная матрица неизвестного размера....

Массив: Получить матрицу, заполненную 0 и 1 по главной и побочной диагонали
Получить матрицу: 1 0 0…0 0 1 0 1 0…0 1 0 0 0 1…1 0 0 …………… 0 0 1…1 0 0 0 1 0…0 1 0 1 0 0…0...

Получить матрицу B, элементы которой - частное от деления элементов матрицы A на max побочной диагонали
Получить новую матрицу, элементы которой есть частное от деления элементов в исходной матрице ...

Создать новую матрицу в которой элементы зеркально поменять местами относительно главной диагонали
Задана Целочислительная квадратная матрица найти в каждой строке наибольший элемент и поменять его...

5
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
06.11.2011, 15:33 2
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DOMAINS
i=integer   il=i*   ill=il*
%
CONSTANTS
mx=[[1,0,0,0,2],[0,3,0,4,0],[0,0,5,0,0],[0,6,0,7,0],[8,0,0,0,9]]
%
PREDICATES
main(ill,ill)
x(il,ill,i,ill)
y(il,il,i,il)
z(il,i,il,i,il)
%
CLAUSES
main([A|B],C):- x(A,[A|B],0,C).
%
x([_,_|A],[B|C],D,[E|F]):- !, y(A,B,D,E), G=D+1, x(A,C,G,F).
x(_,A,_,A).
%
y(A,[B|C],0,[D|E]):- !, z(A,B,C,D,E).
y(A,[B|C],D,[B|E]):- F=D-1, y(A,C,F,E).
%
z([_|A],B,[C|D],E,[C|F]):- !, z(A,B,D,E,F).
z(_,A,[B|C],B,[A|C]).
Prolog
1
2
3
Goal: main(mx,Out)
Out=[[2,0,0,0,1],[0,4,0,3,0],[0,0,5,0,0],[0,6,0,7,0],[8,0,0,0,9]]
1 Solution
Для SWI уберите всё до CLAUSES(включительно). Замените "=" на "is".
Возможно, проще накидать матрицу в базу, меняя по ходу соответствующие индексы, а потом из базы собрать.
1
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 19
07.11.2011, 16:17  [ТС] 3
Оу, большое-большое спасибо)))
0
Arsene_Wenger
07.11.2011, 23:49 4
Добрый вечер. А если задачу поменять на такую *Дана квадратная матрица неизвестного размера. Получить матрицу, в которой поменяются местами половины главной и побочной диагонали, находящиеся слева от центра*., что бы поменялось в коде программы?
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
08.11.2011, 11:34 5
Гы...
1. Матрицу транспонируем. Делаем то что выше. Ещё раз транспонируем.
2. Таки держим матрицу в виде database...mx(I,J,V) - проще перебивать, меняя по ходу соответствующие индексы.

3. Главное: МАТРИЦЫ ПРОЛОГУ - ГОРНЫЕ ЛЫЖИ ТУРИСТУ НА КРАСНОЙ ПЛОЩАДИ В ИЮНЕ МЕСЯЦЕ!!!!!!!!!!!!!!

Ещё раз "гы")))

Добавлено через 11 часов 0 минут
Цитата Сообщение от Arsene_Wenger Посмотреть сообщение
...*Дана квадратная матрица неизвестного размера. Получить матрицу, в которой поменяются местами половины главной и побочной диагонали, находящиеся слева от центра*...
Позголялся таки:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DOMAINS
i=integer   il=i*   ill=il*
%
CONSTANTS
mx=[[1,0,0,0,2],[0,3,0,4,0],[0,0,5,0,0],[0,6,0,7,0],[8,0,0,0,9]]
%
PREDICATES
main(ill,ill)
x(il,ill,i,ill)
y(il,i,il,il,ill,ill)
z(i,il,il,il,il)
%
CLAUSES
%
main([A|B],C):- x(A,[A|B],0,C).
%
x([_,_|A],[B|C],D,[E|F]):- !, y(A,D,B,E,C,G), H=D+1, x(A,G,H,F).
x(_,A,_,A).
%
y([_|A],J,B,C,[D|E],[D|F]):- !, y(A,J,B,C,E,F).
y(_,J,A,B,[C|D],[E|D]):- z(J,A,B,C,E).
%
z(0,[A|B],[C|B],[C|D],[A|D]):- !.
z(A,[B|C],[B|D],[E|F],[E|G]):- H=A-1, z(H,C,D,F,G).
Prolog
1
2
3
Goal: main(mx,Out)
Out=[[8,0,0,0,2],[0,6,0,4,0],[0,0,5,0,0],[0,3,0,7,0],[1,0,0,0,9]]
1 Solution
Изврат, конечно, все эти матрицы))) Разве что со списочками потренироваться...
2
SergioRamos
14.11.2011, 23:52 6
* а если справа относительно центра? что поменяется??
14.11.2011, 23:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2011, 23:52
Помогаю со студенческими работами здесь

Получить матрицу B, элементы которой - сумма элементов матрицы A с min элементом ниже побочной диагонали
Получить новую матрицу, элементы которой есть сумма элементов данной матрицы с ...

Максимум главной диагонали матрицы поменять местами с минимумом ее побочной диагонали
Дана квадратная матрица порядка n. Если в главной диагонали имеется хотя бы одно отрицательное...

Получить матрицу размера n: элементы выше побочной диагонали = 1, на диагонали = 0, ниже диагонали = -1
Написать программу, которая получает матрицу размерности n (получая поле input box ) ,где элементы...

Дана квадратная матрица. Элементы главной диагонали поменять местами с элементами побочной диагонали
Дана квадратная матрица. Элементы главной диагонали поменять местами с элементами побочной...

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

Получить квадратную матрицу, на главной диагонали которой расположены нули, ниже ее расположены 1, а выше – -1
Получить квадратную матрицу х(i,j), у которой на главной диагонали (i=j) расположены нули, ниже...


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

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