3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
1

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

08.05.2015, 21:36. Показов 2084. Ответов 10
Метки нет (Все метки)

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

Вот код на Prolog!

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
43
44
45
46
%Matrix
dataMatr4([[1,2,3,4],
      [5,6,7,8],
      [9,10,11,12],
      [13,14,15,16]]).
dataMatr5([[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]]).
 
%Result matrix
change(Ans):-
    dataMatr5(M),
    length(M,N),
    N mod 2=:=0,
    I is N//2,
    r(I,M,[],LUp,Down),
    colChange(1,N,LUp,Down,LUp1,Down1),
    r(I,Ans,[],LUp1,Down1).
change(Ans):-
    dataMatr5(M),
    length(M,N),
    I is N//2,
    J is 1,
    r(I,M,[],LUp,[Middle|Down]),
    colChange(J,N,LUp,Down,LUp1,Down1),
    r(I,Ans,[],LUp1,[Middle|Down1]).
 
%+I, +Matrix, +UpTail, -Upper, -Bottom
r(0,Down,LUp,LUp,Down).
r(I,[H|Tail],LUpTail,LUp,Down):-
    I1 is I-1,
    r(I1,Tail,[H|LUpTail],LUp,Down).
 
%+J, +Length, +Top part, +Bottom part, -New top, -New bottom
colChange(_,_,[],[],[],[]).
colChange(J,N,[A|LUp],[B|Down],[A1|LUp1],[B1|Down1]):-
    J1 is J-1,
    colChange(J1,N,LUp,Down,LUp1,Down1),
    exchange(J,A,B,A1,B1).
 
exchange(0,[HA|TailA],[HB|TailB],[HB|TailA],[HA|TailB]).
exchange(J,[HA|TailA],[HB|TailB],[HA|TailA1],[HB|TailB1]):-
    J1 is J-1,
    exchange(J1,TailA,TailB,TailA1,TailB1).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2015, 21:36
Ответы с готовыми решениями:

Получить матрицу, в которой поменяются местами верхние половины главной и побочной диагонали.
Привет, товарищи программисты:gsmile: Запрос на помощь! Я уже наваяла тут что-то...

Переставить местами элементы главной и побочной диагоналей
Кто знает, как ето сделать, ничего не получаеться..(( Дано натуральное число n, определяющий...

Поменять местами элементы главной и побочной диагоналей
Дана матрица целых чисел размером 4х4 (Элемент StringGrid). Button1: Заполнение матрицы...

Обмен местами главной и побочной диагоналей в матрице
помогите пожалуйста написать легонькую программку на си: обмен местами главной и побочной...

10
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
09.05.2015, 10:16 2
raigon, показывайте наработки на Erlang.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2015, 14:27 3
Лучший ответ Сообщение было отмечено raigon как решение

Решение

Не уверен,что перевел в точности:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-module(m1).
-export([transform/1]).
 
transform(X)->change(X,1,(length(X) div 2)+1).
 
change(X,N,K) when N=:=K->X;
change([H|T],N,K)->[swap(H,N)|change(T,N+1,K)].
 
swap(H,N)->{First,Second}= get(H,N,length(H)-N+1,1),
  replace(H,N,length(H)-N+1,First,Second,1).
 
replace([_|T],N,M,F,S,I) when N=:=I ->[S|replace(T,N,M,F,S,I+1)];
replace([_|T],_N,M,F,_S,I) when M=:=I ->[F|T];
replace([H|T],N,M,F,S,I) ->[H|replace(T,N,M,F,S,I+1)].
 
get([H|_],_N,M,I) when M=:=I ->H;
get([H|T],N,M,I) when N=:=I ->{H, get(T,N,M,I+1)};
get([_|T],N,M,I)-> get(T,N,M,I+1).
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
10.05.2015, 14:50  [ТС] 4
Мне не обязательно перевести в точности. Мне главное чтобы поставленная задача выполнялась, если знаете более актуальный метод, то можно им сделать.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2015, 15:01 5

Не по теме:

raigon, да я даже не пытался переводить - Prolog не знаю совершенно.



Цитата Сообщение от raigon Посмотреть сообщение
Мне главное чтобы поставленная задача выполнялась
использование модуля lists по идее должно упростить решение,попробуйте самостоятельно.
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
10.05.2015, 15:17  [ТС] 6
Оно у Вас меняет не те половины диагоналей. Мне нужно слева от центра, а у Вас сверху.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2015, 15:22 7
Цитата Сообщение от raigon Посмотреть сообщение
Оно у Вас меняет не те половины диагоналей. Мне нужно слева от центра, а у Вас сверху.
А ведь и верно,невнимательно прочитал.Тогда добавьте функцию для извлечения столбца и извлекайте элемент оттуда.Сами переделать сможете?
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
10.05.2015, 15:28  [ТС] 8
если не трудно переделайте, а то я новичок в Erlang
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2015, 15:37 9
Цитата Сообщение от raigon Посмотреть сообщение
если не трудно переделайте, а то я новичок в Erlang
Если все задачи будут за вас решаться на форуме,то вы так и останетесь новичком не только в Erlang,но и в программировании вообще
Что вам надо изменить:
1. убрать лишнее из get,чтобы она возвращала только один элемент(как lists:nth)
2. передавать и оставлять неизменной исходную матрицу для извлечения нужного столбца
3. написать(или найти готовую) функцию получения столбца.
Я,например, тоже новичок в Erlang.
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
10.05.2015, 15:46  [ТС] 10
Уже сделал Спасибо
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2015, 15:47 11
Цитата Сообщение от raigon Посмотреть сообщение
Уже сделал Спасибо
можете код выложить,вдруг еще кому-то понадобится?
0
10.05.2015, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2015, 15:47
Помогаю со студенческими работами здесь

Поменять местами максимальные элементы главной и побочной диагоналей.
В заданном целочисленном массиве Ann поменять местами максимальные элементы главной и побочной...

Матрица. Поменять местами элементы главной и побочной диагоналей
Задана матрица Х (Н) (Н<=15). Поменять местами элементы главной и побочной диагоналей. Отпечатать...

Матрица. Переставить местами элементы главной и побочной диагоналей
В квадратной матрице переставить местами элементы главной и побочной диагоналей.

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


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

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

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