Aula nº 4

Desenvolva um sistema que simule um processo de votação. Existe uma entidade (modelada por um processo) denominada Top, que é responsável pelo processo de recepção dos votos e posterior actualização da base de dados (BD). As entidades votantes, também modeladas por processos, conhecem o "endereço" de Top. Podem também ser requeridas consultas a Top, quer acerca dum elemento quer à BD completa.

A figura seguinte pretende representar as transações entre várias entidades intervenientes.

Funções e librarias a usar:

OC 98-99 (Exercícios Práticos)


% nome do modulo. Tem de ser sempre a primeira linha util do programa
-module(aula4).
-export([start/0, top/0, consultar/1, consultar/2, votar/2]).
start() -> spawn(aula4, top, []).
top() ->
	Dict = dict:new(),
	top_processo(Dict).
top_processo(Dict) ->
	receive
		{ consultar, Requerente} ->
			Requerente ! { 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, Top, Resultado } -> Resultado
	end.
consultar(Top, Banda) ->
	Top ! { consultar, self(), Banda },
	receive
		{ consultar_resposta, Top, Resultado } -> Resultado
	end.
votar(Top, Banda) ->
	Top ! {votar, self(), Banda},
	receive
		{ votar_resposta, Top, Resultado } -> Resultado
	end.
Índice

Última actualização: 14 Março 2000

OC 98-99 (Exercícios Práticos)