Exercício 4

OC 1999/2000 (Exercícios Práticos)


Enunciado

Desenvolva um módulo Erlang que implemente um sistema distribuído, que resolva a seguinte expressão:

(2x + 0,5y)!


Solução

-module(exercicio4).
-export([start/2,p1/1,p2/1,p3/1,p4/1]).
start(X,Y) ->
	P4=spawn(exercicio4,p4,[self()]),
	P3=spawn(exercicio4,p3,[P4]),
	P2=spawn(exercicio4,p2,[P3]),
	P1=spawn(exercicio4,p1,[P3]),
	P1!X,
	P2!Y,
	receive
		Result when number(Result) -> ok
	end,
	io:format("Resultado: ~w.~n",[Result]).
p1(P3) ->
	receive
		X when number(X) -> ok
	end,
	A = 2*X,
	P3 ! A.
p2(P3) ->
	receive
		X when number(X) -> ok
	end,
	B = X div 2,
	P3 ! B.
p3(P4) ->
	receive
		A -> ok
	end,
	receive
		B -> ok
	end,
	C=A+B,
	P4 ! C.
p4(PidStart) ->
	receive
		C -> ok
	end,
	Result=factorial(C),
	PidStart ! Result.
factorial(0) -> 1;
factorial(N) -> N*factorial(N-1).


Última actualização: 17-05-2000

OC 1999/2000 (Exercícios Práticos)