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

Получить список в котором удалена вторая треть

04.05.2015, 11:32. Показов 1533. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите решить задачу на языке Erlang.
Задан список длина которого кратная трем.
Получить список в котором удалена вторая треть.


Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-module(lists).
-export([main/2, part1/5, part3/5]).
 
% +List, -NewList
main(L,L1)->
    K2 = length(L) div 3+1,
    K3 = length(L) div 3*2+1,
    P11 = part1(L,1,K2,K3,L1),
    P13 = part3(L,K2,K2,K3,L1),
    lists:append(P11,P13).
 
% +List, +Counter, +K2, +K3, +Acc, -Part1, -Part3
part1([X|Xs],I,K2,K3,[X|P1]) when I < K2 ->
    I1 = I+1,
    part1(Xs,I1,K2,K3,P1).
part3([_|Xs],I,K2,K3,P3) when I >= K2, I < K3->
    I1 = I+1,
    part3(Xs,I1,K2,K3,P3);
part3(P3,K3,_,K3,P3)->
    P3.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 11:32
Ответы с готовыми решениями:

Получить слово, в котором указанная буква удалена
дано слово и число получить слово в котором в указанная буква удалена?

Из заданной строки получить список слов, у которых первая буква гласная, а вторая – согласная
Из заданной строки получить список слов, у которых первая буква гласная, а вторая – согласная....

Какова высота нижнего слоя земной атмосферы, в котором сосредоточена треть ее массы
Здравствуйте) Сначала немного о задаче: Какова высота нижнего слоя земной атмосферы, в котором...

Массив: Поменять местами верхнюю треть и нижнюю треть матрицы.
Дана матрица размера M×N. Поменять местами верхнюю треть и нижнюю треть матрицы.При выполнении...

7
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
04.05.2015, 11:44 2
Лучший ответ Сообщение было отмечено raigon как решение

Решение

Цитата Сообщение от raigon Посмотреть сообщение
Получить список в котором удалена вторая треть.
вот ваша функция:
Prolog
1
Func = fun(L)-> Len=length(L) div 3,lists:sublist(L,Len)++lists:sublist(L,2*Len+1,Len) end.
или нужно сделать без использования библиотечного модуля lists?

Добавлено через 1 минуту
Цитата Сообщение от raigon Посмотреть сообщение
-module(lists).
не надо называть свой модуль также как стандартный.Назовите simple_list или my_list.
2
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
04.05.2015, 11:57  [ТС] 3
Нужно без модуля list. Можно только append если нужно.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
04.05.2015, 12:21 4
Цитата Сообщение от raigon Посмотреть сообщение
Можно только append если нужно.
Не нужно

Prolog
1
2
3
NewFunc = fun(L)-> fun Func([], _, _)-> [];
Func([H|T], Len, N) when N < Len;N >= 2 * Len-> [H|Func(T, Len, N + 1)];
Func([_|T], Len, N)-> Func(T, Len, N + 1)end(L, length(L) div 3, 0) end .
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
04.05.2015, 12:32  [ТС] 5
Чтото она не работает.

syntax error before: Func

fun Func([], _, _)-> [];
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
04.05.2015, 12:35 6
Лучший ответ Сообщение было отмечено raigon как решение

Решение

Цитата Сообщение от raigon Посмотреть сообщение
Чтото она не работает.
У меня работает.Просто вставьте этот код в интерпретатор:
Prolog
1
2
3
4
5
 Y=[1,2,3,4,5,6,7,8,9].
NewFunc = fun(L)-> fun Func([], _, _)-> [];
Func([H|T], Len, N) when N < Len;N >= 2 * Len-> [H|Func(T, Len, N + 1)];
Func([_|T], Len, N)-> Func(T, Len, N + 1)end(L, length(L) div 3, 0) end .
NewFunc(Y).
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
04.05.2015, 12:40  [ТС] 7
Так работает. Я просто делал через отдельный файл с module, export.
Спасибо большое за помощь!
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
06.05.2015, 14:34 8
Так будет почище. Студ вариант:
Код
drop_middle(L) ->
    Len = length(L) div 3,
    drop_middle(L, Len, -(Len + Len)).

drop_middle([],_,_) ->
    [];
drop_middle([X|Xs], Count, Mirror) ->
    case sgn(Count) of
        1 -> [X | drop_middle(Xs, Count - 1, Mirror + 1)];
        0 -> drop_middle([X | Xs], Mirror, -Mirror);
        -1 -> drop_middle(Xs, Count + 1, Mirror + 1)
    end.

sgn(N) when N < 0 ->
    -1;
sgn(N) when N > 0 ->
    1;
sgn(_) ->
    0.
2
06.05.2015, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2015, 14:34
Помогаю со студенческими работами здесь

Поменять местами верхнюю треть и нижнюю треть матрицы
Дана матрица размера M×N. Поменять местами верхнюю треть и нижнюю треть матрицы.

Поменять местами верхнюю треть и нижнюю треть матрицы
Дана матрица размера M×N. Поменять местами верхнюю треть и нижнюю треть матрицы.При выполнении...

Первую треть слова разместить на месте третьей, вторую треть — на месте первой
с помощью procedure Дано слово из 12 букв. Поменять местами его трети следующим образом: а)...

Первую треть слова разместить на месте третьей, вторую треть — на месте первой
Дано слово из 12 букв. Поменять местами его трети следующим образом: а) первую треть слова...


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

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

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