Baseado no exercício da aula anterior, altere-o de forma que:
Funções e librarias a usar:
Utilize o módulo anterior, realizando as seguintes operações:
-module(aula5).
-export([start/1, top/0, consultar/1, consultar/2, votar/2]).
%% questao 2 start(No) -> spawn(No, aula5, top, [])).
top() -> % questao 3 register(top, self()), Dict = dict:new(), top_processo(Dict).
top_processo(Dict) ->
receive
{ consultar, Requisitante } ->
Requisitante ! { consultar_resposta, self(), Dict },
DictNovo = Dict;
{ consultar, Requerente, Banda } ->
case dict:find(Banda, Dict) of
error -> Val = 0;
{ok, V} -> Val = V
end,
Requerente ! { consultar_resposta, self(), {Banda, Val} },
DictNovo = Dict;
{ votar, Votante, Banda } ->
case dict:find(Banda, Dict) of
error -> Val = 1;
{ok, V} -> Val = V + 1
end,
DictNovo = dict:store(Banda, Val, Dict),
Votante ! {votar_resposta, self(), {Banda, Val} }
end,
top_processo(DictNovo).
consultar(Top) ->
Top ! {consultar, self() },
receive
{ consultar_resposta, PidTop, Resultado } -> Resultado
end.
consultar(Top, Banda) ->
Top ! { consultar, self(), Banda},
receive
{ consultar_resposta, PidTop, Resultado } -> Resultado
end.
votar(Top, ListaBandas) -> %% questao 1 emite_votos(Top, ListaBandas), recebe_respostas(ListaBandas).
%% adicionado ao exercicio anterior
emite_votos(_, [] ) -> io:fwrite("todos os votos foram emitidos~n");
emite_votos(Top, [H|ListaBandas] ) ->
Top ! { votar, self(), H },
emite_votos( Top, ListaBandas ).
recebe_respostas([]) -> io:fwrite("todas as respostas foram recebidas~n");
recebe_respostas( [H|ListaBandas] ) ->
receive
{ votar_resposta, Top, Resultado } -> io:fwrite("~s~n", [io_lib:write(Resultado)])
end,
recebe_respostas( ListaBandas ).
%% fim de alteracoes
Última actualização: 14 Março 2000