Trabalhos entregues após a data estipulada perdem 10% da nota máxima
por dia de atraso, inclusive sábados e domingos.Trabalhos entregues no dia correto mas depois do horário de aula também
perdem 10% da nota máxima.
Apresentações individuais podem ser solicitadas.
Uma sugestão para quem só tem Windows em casa é usar o MinGW.
struct aluno{
char nome[40];
long matricula;
double media;
char sexo;
int aprovado;
};
O programa para gerar os arquivos é o gerador.c .
Os registros estão colocados no arquivo um atrás do outro, em ordem aleatória.
O arquivo deve ser lido completamente e construída uma tabela hash na
memória
principal, sendo usado o campo matricula como chave de busca.
O programa receberá na linha de comando 3 números de matrícula, e deverá
escrever na tela os dados referentes a estes 3 alunos, caso estejam na
tabela.
O primeiro argumento na linha de comando é o arquivo de dados a ser lido.
Por exemplo:
----------------------------------------------------------------------------------------
$ trabalho cadastro.dat 12345 98765 2121212
ALUNO 12345
Rômulo Silva de Olliveira
9.9
m
2000
ALUNO 98765
--- não encontrado ---
ALUNO 2121212
Jean-Marie Farines
9.9
m
1999
----------------------------------------------------------------------------------------
Em seguida, o programa deverá listar na tela os nomes de todos os alunos,
em
ordem alfabética. Pode usar a função qsort() da biblioteca, como em qsort.c
.
A tabela hash deverá ser implementada no próprio programa, entretanto a
ordenação poderá
usar rotinas da biblioteca do C.
É obrigatório usar o tratamento de colisão apresentado no exemplo tabhash.c
da página da disciplina.
http://www.das.ufsc.br/~cury/cursos/apostila.pdf
O objetivo neste trabalho é implementar um controlador para maximizar a
produção da planta, ou seja, manter todas as estações da linha
trabalhando simultaneamente a maior parte do tempo.
Os seguintes arquivos estão disponíveis:
controlador3.c Exemplo do programa controlador a ser feito
envasilhamento3.h Descrição das rotinas disponíveis no simulador da planta
envasilhamento3.c Simulador da planta
Escrever um novo controlador3.c que seja automático (o fornecido é manual) e queComandos do controlador manual:
e - avança esteira
a - liga atuador
b - liga a bomba
t - liga o tampador
r - liga o robô
Todos eles desligam após realizar um ciclo de trabalho.
As rotinas do tipo acionaXYZ retornam -1 quando o dispositivo
está em operação, neste caso um novo pedido de acionamento é
ignorado até que o dispositivo retorne para o estado de repouso.
A caldeira possui instrumentação embutida e aceita os seguintes comandos:
"sta0"
lê valor de Ta
"st-0"
lê valor de T
"sti0"
lê
valor de Ti
"sno0" lê
valor de No
"sh-0" lê
valor de H
"ani123.4" define valor de Ni como 123.4
"aq-567.8" define valor de Q como 567.8
Cuidado com a formatação dos valores em ponto flutuante.
Implementar dois programas em C no Linux, usando a biblioteca de
pthreads.
O programa CONTROLADOR deve incluir as seguintes funcionalidades:
- Laço de controle como tarefa periódica para a temperatura;
- Laço de controle como tarefa periódica para o nível;
- Detecção de temperatura fora do intervalo de valores válidos;
- Informações na tela sobre a situação corrente;
- Recepção através da rede local dos valores de referência para
temperatura e nível;
- Recepção através da rede local dos limites para o intervalo de valores
de temperatura válidos;
- Envio através da rede local de mensagem de alarme para o supervisor
quando o valor medido
da temperatura sai fora do intervalo de valores válidos definido.
O programa SUPERVISOR deve incluir as seguintes funcionalidades:
- Supervisão simultânea de DUAS caldeiras;
- Entrada através do teclado dos valores de referência para nível e
temperatura, e envio
desses valores para o respectivo controlador através da rede local;
- Entrada através do teclado dos valores limites para o intervalo de
temperaturas válidas,
e envio desses valores para os dois controladores através da rede local;
- Recepção através da rede local do alarme gerado pelo controlador quando
a temperatura
sai do intervalo de temperaturas válidas;
- Solicitação periódica dos valores lidos de temperatura para cada um dos
controladores e
armazenagem desses dados em arquivo no computador do SUPERVISOR.
Cada um dos dois programas deve ser composto por várias threads que
colaboram entre si
através de variáveis compartilhadas.
Cada caldeira a ser controlada será simulada por um outro programa, o
simulador, cujo código executável
é fornecido. A comunicação entre o CONTROLADOR e o simulador da sua
respectiva caldeira será através
de sockets UDP/IP. Da mesma forma, a comunicação entre os dois
CONTROLADORES e o SUPERVISOR
deve ser feita através de sockets UDP/IP. O protocolo entre CONTROLADOR e
SUPERVISOR deve ser
definido como parte do trabalho.
Avaliação composta por:
- Código fonte;
- Texto explicando qual a função de cada thread, quais
variáveis compartilhadas cada uma acessa e qual
o protocolo usado entre CONTROLADOR e SUPERVISOR;
- Apresentação individual do trabalho.
Outros requisitos:
- Usar mutex para proteger as variáveis compartilhadas;
- Usar variáveis condição para liberar as threads de
alarme;
- Tarefas periódicas implementadas com precisão e não
com sleep fixo (ver apostila na página da disciplina);
- Período do controlador de temperatura deve ser 150ms;
- Período do controlador de nível deve ser 200ms;
- Atualização da tela pode ser com sleep simples de 1
segundo;
- Usar buffer duplo para a gravação de dados em
arquivos, feita por thread própria.