You are on page 1of 16

Escola
de
Comunicação,
Artes
e
Ciências
da
Informação


Licenciaturas
em
Engenharia
Informática
e
em
Informática
de
Gestão


Este
é
enunciado
do
trabalho
de
final
da
unidade
curricular
(UC)
de
Fundamentos
de
Programação
(FP)
dos
cursos
de

licenciatura
em
Engenharia
Informática
e
Informática
de
Gestão
da
Universidade
Lusófona
de
Humanidades
e

Tecnologias
(ULHT),
Lisboa,
para
o
ano
lectivo
2010/2011.


Sendo
esta
a
UC
de
Fundamentos
de
Programação,
e
tendo
sido
a
linguagem
Java
a
escolhida,
numa
abordagem
de

programação
imperativa,
é
natural
que
se
tenha
particular
atenção
à
forma,
estilo,
legibilidade
e
qualidade
da

documentação
do
projecto.


Siga
as
indicações
do
enunciado
e
veja
no
final
a
grelha
de
classificação.
O
trabalho
poderá
ser
realizado
em
grupos

de
até
3
alunos,
no
entanto
a
avaliação
será
presencial
e
individual.
Alunos
não
avaliados
terão
classificação
0.
O

trabalho
deverá
ser
submetido
na
plataforma
de
e‐learning
até
às
23.30h
do
dia
17
de
Janeiro
de
2011.


Lisboa,
Dezembro
de
2010


O
Simulador
da
Máquina
de
Venda
Automática

Pretende‐se
construir
um
programa
em
Java
que
simule
uma
máquina
de
venda
automática
de
produtos
(máquina

de
vending,
veja‐se
a
Figura
1).


O
programa
deverá
fazer
uso
dos
seguintes
conceitos
(entre
outros):


• Leitura
e
escrita
de
ficheiros
(de
texto
ou
outros)

• Uso
de
vectores
de
números
e
de
vectores
de
Strings
(arrays)

• Uso
de
programação
estruturada
(diferentes
funções,
definidas
de
acordo
com
o
que
é
esperado
que
o

programa
faça)

• Uso
de
técnicas
de
programação
que
demonstrem
a
capacidade
do
aluno
em
escrever
código
legível
e

funcional,
bem
documentado
(incluindo
JavaDoc)

• Favorecimento
do
uso
de
variáveis
locais
em
detrimento
das
variáveis
globais


O
enunciado
do
trabalho
é
extenso,
mas
apenas
porque
se
optou
por
dar
uma
grande
variedade
de
exemplos

relativos
ao
funcionamento
que
se
pretende
do
programa.
No
entanto
note,
não
estão
ilustrados
todos
os
casos
de

uso!
As
situações
que
não
estiverem
ilustradas
devem
ser
resolvidas
por
si
autonomamente.



Em
caso
de
dúvidas,
consulte
com
o
seu
professor
das
aulas
práticas.


Bom
trabalho!


Nuno
M.
Garcia,
Novembro
de
2010.


Versão
1.1
–
correcção
de
múltiplas
definições
de
nomes
de
ficheiros,
simplificação
do
processo
de
entrada
de

senha,
inclusão
da
parte
A0
(existe
texto
riscado
no
enunciado
que
deixa
de
ser
considerado).


1
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)


Figura
1
–
uma
máquina
de
venda
automática
de
produtos
e
o
seu
moedeiro
de
trocos.


O
programa
terá
um
único
interface
com
o
qual
os
vários
tipos
de
utilizadores
(cliente,
gestor)
interagirão,
quer
para

comprar
produtos,
quer
para
fazer
a
gestão
da
máquina.


Inicialmente,
a
máquina
encontra‐se
desligada.
Quando
o
utilizador
emite
a
ordem
de
ligar
(escrevendo
LIGAR)
na

linha
de
comando,
a
máquina
deve
responder
com
o
seguinte
aviso



AutoVenda. Comando? > LIGAR


MÁQUINA LIGADA. A FAZER AUTOTESTE
...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Máquina OK e preparada para vender. Prima ENTER para exibir o ecrã inicial.
Figura
2
–
arranque
da
máquina
de
vending.


Durante
este
momento,
a
máquina
deve
ler
os
ficheiros
de
configuração,
por
exemplo,
os
ficheiros
com
o
nome
de

PRODUTOS.TXT
e
MOEDEIRO.TXT
de
onde
carrega
as
definições
dos
produtos
que
pode
vender,
e
as
moedas
de
que

dispõe
no
moedeiro
para
fazer
os
trocos.
Veja
uma
lista
completa
dos
ficheiros
do
programa
na
parte
A0
deste

enunciado.


Atenção,
a
máquina
pode
dar
erro
quando
arranca!
Veja
a
parte
A1
deste
enunciado.


A
máquina
pode
vender
até
20
produtos,
dispostos
numa
matriz
de
5
linhas
e
4
colunas.
Cada
uma
destas
posições

da
matriz
contém
zero
ou
mais
itens
de
produtos
para
vender
(ver
Figura
2).


Depois
de
fazer
a
carga
dos
conteúdos
dos
ficheiros
iniciais
para
o
programa,
a
máquina
deve
exibir
um
ecrã

semelhante
ao
que
se
exemplifica
a
seguir
(Figura
3).


2
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > _

Figura
3
–
Exemplo
do
estado
inicial
do
arranque
da
máquina.


No
exemplo
da
Figura
3,
na
posição
a1
estão
disponíveis
5
produtos
“S”
e
na
posição
d2
estão
disponíveis
5
produtos

“M”.
As
posições
d1,
b2,
e
b4,
por
exemplo,
não
têm
produtos.
A
máquina
ainda
avisa
que
há
trocos
disponíveis
e

que
está
pronta
para
aceitar
um
comando.


Assim,
se
escrevermos
o
comando
d2,
a
máquina
deve
responder:


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > d2
produto na posição d2: Mini-chocolate. Preço: 0.70€

Qual o comando? > _


Figura
4
–
Exemplo
de
consulta
de
um
produto
na
máquina.


Agora,
se
quisermos
comprar
o
produto,
basta
“introduzirmos”
as
moedas
e
de
novo
seleccionar
o
produto.
Veja
o

exemplo
da
Figura
5.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > d2
produto na posição d2: Mini-chocolate. Preço: 0.70€

Qual o comando? > 0.5


crédito 0.50€. Mais? > 0.1
crédito 0.60€. Mais? > 0.3
moeda não reconhecida. Recolha a moeda defeituosa na saída de trocos.
crédito 0.60€. Mais? > 0.2
crédito 0.80€. Mais? > d2
Por favor recolha o seu produto e o seu troco (0.10€). Obrigado, volte sempre!

Figura
5
–
exemplo
de
compra
de
um
produto
na
máquina.


3
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

Repare
que
no
exemplo
anterior,
existe
a
tentativa
de
introduzir
uma
moeda
de
0.30€,
que
correntemente
não

existe.
A
máquina
deve
dar
um
erro
quando
o
utilizador
tentar
utilizar
moedas
que
não
existam,
ou
moedas
de
0.02€

ou
de
0.01€.
Logo,
os
preços
dos
produtos
devem
ser
definidos
como
múltiplos
de
5
cêntimos,
isto
é,
não
poderá

definir
um
produto
cujo
preço
seria,
por
exemplo,
0.73€.


Se
durante
o
processo
de
introduzir
uma
moeda
na
máquina,
o
utilizador
emitir
um
comando
não
autorizado,
a

máquina
deve
exibir
uma
mensagem
de
erro,
devolver
o
dinheiro
ao
utilizador
e
voltar
ao
estado
anterior.
Veja
o

exemplo
da
figura
6.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > d2
produto na posição d2: Mini-chocolate. Preço: 0.70€

Qual o comando? > 0.5


crédito 0.50€. Mais? > 0.1
crédito 0.60€. Mais? > xyz
comando não reconhecido. Venda anulada. Recolha as suas moedas na saída de
trocos.

+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? >
Figura
6
–
exemplo
de
venda
anulada
pela
introdução
de
um
comando
errado.


No
caso
do
exemplo
da
figura
5,
a
máquina
deveria
esperar
um
tempo
curto
(ver
parte
A2
do
enunciado),
e
mostrar

novo
ecrã
de
venda.
Como
a
venda
da
figura
5
foi
bem
sucedida,
a
máquina
deveria
mostrar
o
seguinte
(Figura
7):


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M4 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > _

Figura
7
–
Exemplo
do
estado
inicial
do
arranque
da
máquina.


Note
que
o
anteriormente
o
produto
na
posição
d2
mostrava
“M5”
e
agora
mostra
“M4”.


4
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

No
entanto,
uma
venda
pode
correr
mal.
Veja
a
parte
A3
deste
enunciado.


Regressemos
ao
exemplo
da
venda.
Isto
é
o
que
deve
acontecer
se
o
utilizador
não
introduzir
dinheiro
suficiente

para
comprar
o
produto,
e
decidir
depois
anular
a
venda
(Figura
8).


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > d2
produto na posição d2: Mini-chocolate. Preço: 0.70€

Qual o comando? > 0.5


crédito 0.50€. Mais? > 0.1
crédito 0.60€. Mais? > d2
não tem crédito suficiente para comprar o Mini-chocolate (0.70€). Insira mais
moedas ou “a” para anular a venda
crédito 0.60€. Mais? > a
Venda anulada, por favor recolha as suas moedas na saída de trocos.
Figura
8
–
exemplo
de
compra
de
um
produto
na
máquina.


Também
neste
caso,
a
máquina
deverá
esperar
um
tempo
curto
(ver
parte
A2
do
enunciado),
e
mostrar
novo
ecrã
de

venda.


Outro
dos
casos
possíveis
é
a
máquina
ficar
sem
os
trocos
necessários
para
poder
fazer
a
venda.
Imagine
que
quer

comprar
o
produto
d2
mas
que
a
máquina
já
não
possui
internamente
no
seu
moedeiro,
nenhuma
moeda
nem
de

0.05€
nem
de
0.10€.
Veja
a
figura
9.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M5 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis (limitado)


Qual o comando? > d2
produto na posição d2: Mini-chocolate. Preço: 0.70€

Qual o comando? > 0.5


crédito 0.50€. Mais? > 0.5
crédito 1.00€. Mais? > d2
lamento, não consigo fazer o troco necessário. Tecle “c” para continuar a venda
do produto Mini-Chocolate por 1.00€ ou tecle “a” para anular a venda
crédito 1.00€. Mais? > a
Venda anulada, por favor recolha as suas moedas na saída de trocos.
Figura
9
–
exemplo
de
compra
de
um
produto
na
máquina.


Repare
que
neste
caso,
a
máquina
dá
duas
opções,
ou
continua
a
venda
pelo
valor
que
o
utilizador
lhe
forneceu,
ou

permite
que
o
utilizador
receba
o
seu
dinheiro
de
volta.
Note
ainda
que
quando
a
máquina
tem
um
dos

dispensadores
de
moedas
vazio,
escreve
“trocos
disponíveis
(limitado)”.
Em
qualquer
um
dos
casos
(venda
feita
com


5
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

preço
mais
caro,
ou
venda
anulada)
o
programa
deve
registar
este
acontecimento
num
ficheiro
de
Logs
(veja
mais
à

frente,
na
parte
de
Gestão
da
Máquina).


O
Moedeiro
da
máquina

As
máquinas
de
venda
automática
possuem
dois
moedeiros
internos.
Um
deles
consiste
numa
caixa
de
metal
com

uma
abertura
superior
e
acesso
através
de
uma
chave,
e
serve
para
receber
as
moedas
de
1€
e
de
2€
que
são

introduzidas,
bem
como
as
outras
moedas
que
já
não
cabem
no
moedeiro
dos
trocos.
Este
moedeiro
de
depósito

está
vazio
quando
a
máquina
arranca.


O
outro
moedeiro
é
o
moedeiro
dos
trocos
(ver
Figura
1).
Este
moedeiro
possui
4
tubos
onde
são
armazenadas
as

moedas
de
0.05€,
0.10€,
0.20€
e
0.50€.
Quando
o
utilizador
introduz
uma
moeda
destas,
ela
vai
para
o
moedeiro
dos

trocos,
se
este
ainda
não
tiver
cheio,
senão,
a
moeda
vai
para
o
moedeiro
de
depósito.
Quando
um
utilizador
tem
a

receber
troco,
o
moedeiro
dos
trocos
dá
as
moedas
que
o
utilizador
vai
receber.


O
conteúdo
do
moedeiro
dos
trocos
está
armazenado
no
ficheiro
inicial
MOEDEIRO.TXT.
Veja
o
exemplo
do
ficheiro

MOEDEIRO.TXT
abaixo
(Figura
10).


5
10
12
15
Figura
10
–
exemplo
do
conteúdo
do
ficheiro
MOEDEIRO.TXT.


Isto
significa
que,
quando
a
máquina
arranca,
o
moedeiro
tem
5
moedas
de
0.50€,
10
moedas
de
0,20€,
12
moedas

de
0,10€
e
15
moedas
de
0.05€.


A
capacidade
dos
moedeiros
também
varia.
A
capacidade
dos
moedeiros
está
definida
no
ficheiro

CAPMOEDEIRO.TXT.
Veja
o
exemplo
na
Figura
11.


20
30
40
50
Figura
11
–
exemplo
do
conteúdo
do
ficheiro
MOEDEIRO.TXT.


No
caso
do
exemplo
acima,
o
moedeiro
tem
capacidade
para
20
moedas
de
0.50€,
30
moedas
de
0,20€,
40
moedas

de
0,10€
e
50
moedas
de
0.05€.


Atenção,
o
moedeiro
pode
avariar.
Veja
detalhes
na
parte
A4
deste
enunciado.


No
final
da
execução
do
programa,
e
após
o
utilizador
emitir
o
comando
DESLIGAR,
a
máquina
deve
escrever
os

ficheiros
relevantes
no
disco
rígido
e
terminar
o
programa.
Veja
o
exemplo
da
figura
12.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M4 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > DESLIGAR
MÁQUINA A DESLIGAR, FICHEIROS ESCRITOS.
Figura
12
–
Exemplo
do
encerramento
da
máquina.



6
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

O
modo
de
gestão
da
máquina

A
máquina
tem
um
modo
de
gestão.
Este
modo
de
gestão
é
acedido
quando
o
utilizador
introduz
o
comando

“GERIR”
na
linha
de
comandos
da
máquina.
O
utilizador
deve
introduzir
uma
senha
de
acesso,
sem
a
qual
o

programa
volta
ao
modo
normal
de
venda
(Figura
3).
Veja
o
exemplo
do
processo
de
entrada
no
modo
de
gestão
na

Figura
13.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M4 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
Qual o comando? > GERIR
Acesso ao modo de gestão.
Insira a senha de acesso: ULHTFP1011
Acesso permitido.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > _
Figura
13
–
Exemplo
do
encerramento
da
máquina.


Note‐se
que
o
menu
tem
10
opções.
Vamos
agora
defnir
o
que
faz
cada
uma
das
opções
de
gestão.


A
opção
1
e
2
fazem
uma
listagem
do
número
de
moedas
que
estão
em
cada
um
dos
moedeiros
(por
tipo),
e
fazem
a

listagem
dos
produtos
que
estão
nos
dispensadores,
respectivamente
(na
opção
de
estatísticas
de
vendas
é

mostrado
um
exemplo
de
listagem
de
produtos).


A
opção
3
permite
redefinir
o
preço
praticado
por
cada
posição
da
matriz
de
produtos.
Veja
o
exemplo
da
Figura
14.


Acesso ao modo de gestão.


Insira a senha de acesso: ULHTFP1011
Acesso permitido.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os nomes e os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 3

7
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

A exibir as tabelas de nomes e preços dos produtos.
+----------------------------------------------------+
| a b c d |
+---+------------------------------------------------+
| 1 | S5 0.50 X6 0.30 K1 0.50 P0 0.90 |
| | Sqwerty Xqwerty Kqwerty Pqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 2 | C10 1.00 L2 2.00 L1 1.50 M5 0.70 |
| | Cqwerty Lqwerty Lqwerty Mini-Chocol |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 3 | P2 0.25 Q0 0.35 W0 0.55 A0 1.00 |
| | Pqwerty Qqwerty Wqwerty Aqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 4 | Z0 0.00 A9 2.00 F3 1.50 O3 1.25 |
| | Zqwerty Amendoins Fqwerty Oqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 5 | C1 1.05 I4 0.10 J1 0.50 L10 0.85 |
| | Cqwerty Iqwerty Jqwerty Lqwerty |
+---+------------------------------------------------+
Qual é o produto para alterar? _
Figura
14
–
Exemplo
da
definição
dos
produtos
e
preços
(opção
do
menú
de
gestão).


Observe
a
figura
14
e
note
que,
apesar
de
previamente
termos
apresentado
o
produto
da
posição
d2
como
“Mini‐
Chocolate”,
agora
aqui
nestra
grelha
de
exibição,
apenas
aparece
“Mini‐Chocol”,
isto
é,
o
programa
exibe
apenas

alguns
dos
caracteres
do
nome
do
produto,
por
forma
a
não
desformatar
o
ecrã
de
visualização.



Observe
ainda
que
a
inicial
que
define
o
produto
é
a
primeira
letra
do
nome
do
produto,
colocada
em
maiúsculas.

Por
exemplo,
o
produto
na
posição
b4
chama‐se
“Amendoins”,
logo,
a
letra
que
vai
designar
este
produto
na
matriz

de
exibição
vai
ser
um
“A”.
Note
ainda
que,
nesta
matriz
são
exibidos
os
nomes
e
preços
dos
produtos
que
já
não

estão
em
stock
na
máquina,
por
exemplo,
o
produto
da
posição
a4
anteriormente
não
era
exibido,
mas
neste
ecrã

de
gestão
já
aparece.


Esta
opção
3
do
menu
de
gestão
permite‐lhe
mudar
o
nome
e
o
preço
do
produto
de
uma
dada
posição,
como
se
vê

no
exemplo
da
Figura
15.


+----------------------------------------------------+
| a b c d |
+---+------------------------------------------------+
| 1 | S5 0.50 X6 0.30 K1 0.50 P0 0.90 |
| | Sqwerty Xqwerty Kqwerty Pqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 2 | C10 1.00 L2 2.00 L1 1.50 M5 0.70 |
| | Cqwerty Lqwerty Lqwerty Mini-Chocol |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 3 | P2 0.25 Q0 0.35 W0 0.55 A0 1.00 |
| | Pqwerty Qqwerty Wqwerty Aqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 4 | Z0 0.00 A9 2.00 F3 1.50 O3 1.25 |
| | Zqwerty Amendoins Fqwerty Oqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 5 | C1 1.05 I4 0.10 J1 0.50 L10 0.85 |
| | Cqwerty Iqwerty Jqwerty Lqwerty |
+---+------------------------------------------------+
Qual é o produto para alterar (0 para sair)? a4
Produto em a4: Zqwerty, preço: 0.00, na máquina há 0 unidades.
Novo nome deste produto: Limonada Fresca
Novo preço deste produto: 0.80
Alterado!
Qual é o produto para alterar (0 para sair)? 0

8
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

Esta é a nova tabela
+----------------------------------------------------+
| a b c d |
+---+------------------------------------------------+
| 1 | S5 0.50 X6 0.30 K1 0.50 P0 0.90 |
| | Sqwerty Xqwerty Kqwerty Pqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 2 | C10 1.00 L2 2.00 L1 1.50 M5 0.70 |
| | Cqwerty Lqwerty Lqwerty Mini-Chocol |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 3 | P2 0.25 Q0 0.35 W0 0.55 A0 1.00 |
| | Pqwerty Qqwerty Wqwerty Aqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 4 | L0 0.80 A9 2.00 F3 1.50 O3 1.25 |
| | Limonada Fr Amendoins Fqwerty Oqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 5 | C1 1.05 I4 0.10 J1 0.50 L10 0.85 |
| | Cqwerty Iqwerty Jqwerty Lqwerty |
+---+------------------------------------------------+

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
(…)
Figura
15
–
Exemplo
da
definição
dos
produtos
e
preços
(opção
do
menú
de
gestão).


A
opção
4
do
menú
permite
alterar
a
dimensão
dos
moedeiros
de
trocos
da
máquina,
isto
é,
esta
opção
vai
definir

quantas
moedas
cada
tubo
pode
conter.
Veja
a
Figura
16
para
exemplo.


Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os nomes e os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 4

A capacidade dos tubos do moedeiro de trocos é a seguinte:


Tubo de 0.50€: 20 moedas
Tubo de 0.20€: 30 moedas
Tubo de 0.10€: 40 moedas
Tubo de 0.05€: 50 moedas

Introduza a nova capacidade para todos os tubos (introduza 4 valores)


>10
>15
>15
>20

Os moedeiros irão ser redimensionados. As moedas que eventualmente estejam em excesso


serão descarregadas para o moedeiro depósito.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
(…)
Figura
16
–
Exemplo
da
definição
da
capacidade
dos
tubos
de
moedas
dos
moedeiros
de
trocos
(opção
do
menú
de

gestão).


9
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

Note‐se
que
neste
caso,
se
qualquer
dos
tubos
tiver
mais
moedas
do
que
o
que
for
dimensionado,
a
máquina
irá

deitar
as
moedas
em
excesso
no
moedeiro
de
depósito,
afectando
assim
o
saldo
do
moedeiro
de
depósito.


Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os nomes e os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 5

AVISO: esta opção esvazia os moedeiros de trocos.


Tem a certeza que quer fazer isto? (SIM / N)
>SIM
Os moedeiros de trocos foram esvaziados para o moedeiro de depósito.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
(…)
Figura
17
–
Exemplo
da
definição
da
opção
de
purga
dos
tubos
de
moedas
dos
moedeiros
de
trocos
(opção
do

menú
de
gestão).


A
Figura
17
mostra
como
funciona
a
opção
5
–
purga
do
moedeiro
de
trocos.



A
opção
6
serve
para
limpar
o
saldo
do
moedeiro
de
depósito,
como
ilustra
a
figura
18.


Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os nomes e os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 6

O moedeiro de depósito actual contém 57.95€.


Tem a certeza que quer substituir o moedeiro de depósito? (SIM / N)
>SIM
Proceda à troca dos moedeiros.
Operação concluída.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
(…)
Figura
18
–
Exemplo
da
definição
da
capacidade
dos
tubos
de
moedas
dos
moedeiros
de
trocos
(opção
do
menú
de

gestão).


A
opção
7
serve
para
mostrar
as
estatísticas
de
vendas
desde
que
a
máquina
foi
ligada.
A
Figura
19
ilustra
o
modo
de

funcionamento
desta
opção.



10
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

0 – sair para o modo de venda
Qual é o comando? > 7

Estatísticas de vendas do período que se iniciou a Sun Nov 21 14:39:36 GMT 2010
+----------------------------------------------------+
| a b c d |
+---+------------------------------------------------+
| 1 | S2 0.50 X2 0.30 K1 0.50 P0 0.90 |
|u/€| 3 1.50 4 1.20 0 0.00 P0 0.00 |
| | Sqwerty Xqwerty Kqwerty Pqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 2 | C3 1.00 L2 2.00 L1 1.50 M5 0.70 |
|u/€| 7 7.00 0 0.00 0 0.00 0 0.00 |
| | Cqwerty Lqwerty Lqwerty Mini-Chocol |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 3 | P2 0.25 Q0 0.35 W0 0.55 A0 1.00 |
|u/€| 0 0.00 0 0.00 0 0.00 P0 0.00 |
| | Pqwerty Qqwerty Wqwerty Aqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 4 | L0 0.80 A0 2.00 F3 1.50 O3 1.25 |
|u/€| 0 0.00 9 18.00 0 0.00 0 0.00 |
| | Limonada Fr Amendoins Fqwerty Oqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 5 | C1 1.05 I4 0.10 J1 0.50 L10 0.85 |
|u/€| 0 0.00 0 0.00 0 0.00 P0 0.00 |
| | Cqwerty Iqwerty Jqwerty Lqwerty |
+---+------------------------------------------------+

Valor das vendas neste período: 27.70€


Total de produtos vendidos: 25

Moedas no moedeiro de trocos:


Inicial 0 x 0.50€; 5 x 0.20€; 7 x 0.10€; 10 x 0.05€ = 2.20€
Actual 3 x 0.50€; 10 x 0.20€; 4 x 0.10€; 19 x 0.05€ = 4.85€

Valor no moedeiro de depósito: 25.05€


Total de dinheiro na máquina: 29.90€

Produtos a precisar de reposição (com stock 0)


+----------------------------------------------------+
| a b c d |
+---+------------------------------------------------+
| 1 | P0 0.90 |
| | Pqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 2 | |
| | |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 3 | Q0 0.35 W0 0.55 A0 1.00 |
| | Qqwerty Wqwerty Aqwerty |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 4 | L0 0.80 A0 2.00 |
| | Limonada Fr Amendoins |
|~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| 5 | |
| | |
+---+------------------------------------------------+
Quer imprimir esta opção para um ficheiro? (S/N)
>S
Qual é o nome do ficheiro? RELATORIO.txt
Relatório guardado no ficheiro com sucesso.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
(…)
Figura
19
–
Exemplo
da
opção
de
visualização
da
estatística
de
vendas
(opção
do
menú
de
gestão).

11
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

A
opção
8
permite‐lhe
definir
a
senha
de
acesso
à
opção
de
gestão.
Note‐se
que,
se
o
ficheiro
que
guarda
a
senha
de

gestão
não
existir
no
arranque,
esta
senha
fica
definida
por
omissão
(by
default)
como
sendo
“ULHTFP1011”
(sem

aspas).


A
Figura
20
ilustra
o
modo
de
funcionamento
desta
opção.


Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os nomes e os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 8

Introduza a senha antiga: ULHTFP1011


Introduza a senha nova: ULHTFP1011-2
Confirme a senha nova: ULHTFP1011-2
Operação concluída com sucesso. Esta nova senha ficou registada.

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
Figura
20
–
Exemplo
da
opção
de
definição
da
senha
de
acesso
à
opção
de
gestão
(opção
do
menú
de
gestão).


Note
que
na
Figura
20,
não
é
feito
nenhum
eco
da
introdução
da
senha
pelo
utilizador.
Isto
faz‐se
usando
a
classe

Console
do
Java
(veja
mais
informação
na
documentação
do
método
Console.readPassword()).


A
leitura
das
senhas,
como
se
mostra
na
figura
20,
deve
ser
feita
como
se
tratasse
de
uma
String
normal.



A
opção
9
permite
limpar
o
aviso
de
avaria.
Como
de
vez
em
quando
a
máquina
avaria
e
deixa
de
funcionar,
é

preciso
aceder
ao
menú
de
gestão
para
limpar
o
aviso
de
avaria.


Cada
vez
que
a
máquina
avaria
(porque
uma
moeda
ou
um
produto
encravou,
por
exemplo,
ou
porque
não
fez
o

arranque
de
forma
correcta),
essa
informação
deve
ser
escrita
de
forma
incremental
num
ficheiro
de
texto
chamado

LOGS.TXT
AVARIAS.TXT,
e
estando
o
programa
em
estado
de
avaria,
é
preciso
chamar
o
gestor
da
máquina,
para

activar
a
opção
9
e
limpar
a
avaria.
A
opção
de
“limpeza”
(reset)
do
estado
de
avaria
também
deve
ficar
registada
no

ficheiro
de
registo
de
erros
(ficheiro
de
Logs).


A
opção
funciona
como
se
ilustra
a
seguir
na
figura
21.


+----------------------------+
| a b c d |
+---+------------------------+
| 1 | S5 X6 K1 |
| 2 | C10 L2 L1 M4 |
| 3 | P2 |
| 4 | A9 F3 O3 |
| 5 | C1 I4 J1 L10 |
+---+------------------------+

trocos disponíveis
ATENÇÃO MÁQUINA EM AVARIA! CHAME O GESTOR DA MÁQUINA
Qual o comando?> a2
Máquina em avaria, comando inválido. CHAME O GESTOR DA MÁQUINA
Qual o comando? > GERIR
Acesso ao modo de gestão.

12
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

Insira a senha de acesso: ULHTFP1011
Acesso permitido.
Escolha a opção no menú de gestão:
1 – ver estado dos moedeiros
2 – ver estado dos produtos
3 – redefinir os preços dos produtos
4 – redefinir a dimensão máxima dos moedeiros de trocos
5 – purgar moedeiros de trocos
6 – recolher moedeiro depósito
7 – ver estatísticas de vendas
8 – redefinir a senha de acesso
9 – limpar aviso de avaria
A – repor/alterar stock de produtos
0 – sair para o modo de venda
Qual é o comando? > 9

A máquina está em estado de avaria porque às Sun Nov 21 18:30:01 GMT 2010 o
produto a3 ficou encravado.
Quer ver o ficheiro de avarias, limpar a avaria ou sair? (A, L, S)
>A

Estas são as últimas 10 entradas no ficheiro de avarias:


Sun Nov 21 13:05:01 GMT 2010, máquina ligada, arranque OK
Sun Nov 21 13:07:01 GMT 2010, utilizador redefiniu senha de acesso
Sun Nov 21 14:30:01 GMT 2010, utilizador pediu produto d1, esgotado
Sun Nov 21 15:30:01 GMT 2010, moeda encravou
Sun Nov 21 15:35:01 GMT 2010, ***AVARIA LIMPA
Sun Nov 21 15:40:01 GMT 2010, utilizador redefiniu capacidade moedeiro
Sun Nov 21 16:30:01 GMT 2010, moeda encravou
Sun Nov 21 16:35:01 GMT 2010, ***AVARIA LIMPA
Sun Nov 21 17:30:01 GMT 2010, pagamento em excesso (0.30€) pelo produto d2
Sun Nov 21 18:30:01 GMT 2010, produto a3 encravado
(para visualizar mais erros, veja o ficheiro AVARIAS.TXT).
Quer ver o ficheiro de avarias, limpar a avaria ou sair? (A, L, S)
>L
Avaria limpa com sucesso

Escolha a opção no menú de gestão:


1 – ver estado dos moedeiros
Figura
20
–
Exemplo
da
opção
de
definição
da
senha
de
acesso
à
opção
de
gestão
(opção
do
menú
de
gestão).


Note‐se
que
o
sistema
regista
a
data
e
o
tipo
da
última
avaria,
e
não
permite
a
operação
da
máquina
enquanto
esta

tiver
o
estado
de
avaria
ligada.


Mais,
o
ficheiro
de
avaria
regista
não
apenas
as
avarias
que
acontecem
na
máquina
mas
também
todas
as
operações

do
menú
de
gestão.


A
opção
“A
–
repor/alterar
stock
de
produtos”
deve
exibir
uma
mensagem
que
diga
“Esta
funcionalidade
ainda
não

está
implementada”.


PARTE
A0
–
LISTA
DE
FICHEIROS
DE
DADOS.

Os
ficheiros
de
dados
são
os
seguintes:


PRODUTOS.TXT,
MOEDEIRO.TXT,
CAPMOEDEIRO.TXT,
SENHA.TXT
e
LOGS.TXT.


As
funções
que
estes
ficheiros
têm
estão
descritas
abaixo.



13
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

PARTE
A1
–
ERROS
NO
ARRANQUE.

Durante
o
processo
de
arranque,
a
máquina
pode
ter
erros.
Estes
erros
podem
ser
reais
ou
simulados.


Os
erros
reais
são
aqueles
que
acontecem
quando
os
ficheiros
de
configuração
não
existem.


Os
ficheiros
de
configuração
obrigatórios
para
o
programa
funcionar
são
os
seguintes:


PRODUTOS.TXT,
MOEDEIRO.TXT,
CAPMOEDEIRO.TXT.


Se
estes
ficheiros
não
existirem,
a
máquina
não
deve
arrancar
e
deve
dar
erro.


Os
restantes
ficheiros,
se
não
existirem,
devem
ser
criados.
Os
ficheiros
acessórios
são:



 SENHA.TXT
e
LOGS.TXT.


Se
o
ficheiro
SENHA.TXT
não
existir,
a
senha
de
acesso
ao
modo
de
gestão
deve
ser
“ULHTFP1011”.


Quer
a
falta
de
ficheiros
quer
a
criação
dos
ficheiros
em
falta
devem
ficar
registadas
no
ficheiro
de
Logs
do

programa.


Os
erros
simulados
são
criados
da
seguinte
forma:
é
lançado
um
número
aleatório
entre
0
e
1.
Se
este
número
for

inferior
ou
igual
a
0.25
(isto
é,
uma
probabilidade
de
25%),
então
a
máquina
tem
um
erro
e
não
arranca.



Os
erros
simulados
deve
ficar
registado
no
ficheiro
de
LOGS.TXT
como
sendo
“Erro
inesperado
no
arranque”.


PARTE
A2
–
TEMPO
DE
ESPERA

No
arranque
e
entre
a
venda
de
dois
produtos,
queremos
simular
um
tempo
de
espera.


No
arranque,
aparece
a
barra
de
percentagens.
Cada
um
dos
caracteres
da
barra
de
percentagens
(excepto
os

números
que
têm
que
ser
escritos
de
uma
vez
só),
deve
estar
sujeita
a
um
atraso.
O
exemplo
de
código
que
se
segue

permite
criar
um
atraso
de
10
segundos
(Figura
A2.1);


try {
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}

Figura
A2.1
–
Exemplo
de
código
para
criar
um
atraso.


PARTE
A3
–
ERROS
NA
VENDA

Por
vezes
um
produto
fica
encravado
no
mecanismo
de
venda
e
não
caí
na
gaveta
recolectora
que
está

normalmente
no
fundo
da
máquina.
Neste
caso,
é
preciso
chamar
o
responsável
da
máquina
para
a
abrir
e
assim

poder
retirar
o
produto
pago.


Este
erro
simulado
é
conseguido
da
seguinte
forma:
cada
vez
que
se
realiza
uma
venda,
é
gerado
um
número

aleatório
entre
0
e
1.
Se
este
número
for
inferior
ou
igual
a
0.1
(equivalente
a
uma
probabilidade
de
erro
de
10%),
a

máquina
entra
em
avaria
(ver
exemplo
na
Figura
20).



Quando
uma
máquina
entra
em
avaria
por
ter
havido
um
erro
na
venda,
este
facto
deve
ficar
registado
no
ficheiro

de
erros.


14
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)

PARTE
A4
–
AVARIA
NO
MOEDEIRO

O
moedeiro
é
um
componente
sensível
e
sujeito
a
avarias.
Quando
tal
acontece,
a
máquina
entra
em
estado
de

avaria
e
é
preciso
chamar
o
responsável
da
máquina
para
colocar
o
moedeiro
em
funcionamento
(ver
exemplo
da

Figura
20).


Este
erro
simulado
é
feito
de
forma
semelhante
ao
descrito
na
parte
A3,
excepto
que
neste
caso,
pode
haver
erro

sempre
que
se
insira
uma
moeda
na
máquina,
com
uma
probabilidade
de
5%,
e
mais,
se
for
uma
moeda
não

reconhecida
(por
exemplo,
moedas
de
0.01€,
0.02€,
ou
de
outro
valor
não
aceite),
esta
probabilidade
de
erro
sobe

para
os
30%.


PARTE
A5
–
(facultativa,
não
sujeita
a
avaliação)
Easter
Egg

Em
programação
um
Easter‐Egg
é
uma
funcionalidade
de
um
programa
ou
de
um
dispositivo
que
pode
ou
não
ter

uma
função
útil,
mas
que
não
se
encontra
descrita
nos
manuais
de
utilização
e
cujo
acesso
é
apenas
do

conhecimento
dos
programadores.
Quase
todas
as
grandes
aplicações
informáticas
das
últimas
décadas
tiveram
um

Easter‐Egg,
por
exemplo,
uma
das
versões
do
Excel
tinha
um
jogo
de
labirinto
escondido
quando
se
clicava
com
um

dado
botão
do
rato
e
se
carregava
numa
combinação
de
teclas,
simultaneamente,
na
janela
de
créditos
do

programa.
(Alguns
telemóveis
têm
Easter‐eggs!
O
seu
tem?)


Se
tiver
tempo
e
se
se
sentirem
com
vontade,
façam
o
vosso
próprio
Easter‐Egg.


Nota
1:
ver
mais
info
sobre
Easter‐Egg
no
Google.


Nota
2:
a
maior
parte
das
companhias
produtoras
de
software
não
apreciam
que
os
seus
programadores
gastem
o

seu
tempo
e
os
recursos
da
empresa
e
dos
clientes
a
programar
/
manter
Easter‐Eggs,
pelo
que
a
inclusão
deste

ponto
no
enunciado
é
apenas
para
sua
diversão
e
educação,
não
sendo
de
forma
nenhuma
um
incentivo
para
que

faça
isto
na
sua
vida
profissional.


15
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)


Grelha
de
Avaliação

ITEM
 Peso

Relatório
rigor
complexidade
 6

operação
para
venda
de
produtos
OK
 10

algoritmo
de
trocos
OK
 3

algoritmo
de
anulação
de
venda
OK
 3

algoritmo
de
devolução
de
moedas
OK
 3

algoritmo
de
gestao
dos
moedeiros
OK
 3

venda
de
produto
sem
troco
OK
 3

algoritmo
de
desligar
máquina
OK
 3

entrada
em
modo
de
gestão
OK
 3

encerramento
da
máquina
OK
 3

Op
1
(Gestão)
 3

Op
2
(Gestão)
 3

Op
3
(Gestão)
 5

Op
4
(Gestão)
 3

Op
5
(Gestão)
 3

Op
6
(Gestão)
 3

Op
7
(Gestão)
 6

Op
8
(Gestão)
 3

Op
9
(Gestão)
 7

Parte
A1
 3

Parte
A2
 3

Parte
A4
 3

Legibilidade
do
código,
nomes
de
variáveis,
convenções
de
escrita
 5

Java
Doc
 2

Eficiência
dos
algoritmos
 5

Eficiência
das
estruturas
de
dados
escolhidas
 3

Recuperação
de
um
erro
 ‐25

Explicação
de
uma
porção
de
código
 ‐25

Alteração
de
uma
funcionalidade
 ‐25

à
vontade
na
manipulação
do
IDE
 ‐25


Por
favor
note
que
estes
itens
e
estes
pesos
ainda
podem
sofrer
alterações,
devendo
ser
considerados
como

indicativos.



Em
caso
de
detecção
de
plágio,
o
exercício
será
anulado
em
todas
as
suas
instancias
e
o
resultado
é
nota
zero.


16
 Universidade
Lusófona
de
Humanidades
e
Tecnologias
–
Fundamentos
de
Programação
2010/2011
(LIG,
LEI)


You might also like