INE-5212   Fundamentos da Estrutura da Informação

Trabalhos para 2003/2

Trabalhos entregues após a data estipulada perdem 1 ponto por dia de atraso, inclusive sábado e domingo.
 

T1A - Trabalho sobre pointers (50% do T1)

Desenvolver na linguagem C o programa abaixo.

/*
 Trabalho T1-Parte A, 50% da nota do T1
 Implementar as funções:
  - copianolugar()
  - copianafrente()
  - copiaatras()
 O resto do programa está pronto, inclusive a função
 main() que testa as demais.

 Trabalho pode ser em grupo, mas a avaliação
 consiste de apresentação individual do código fonte
 pelos membros do grupo.

 NÃO PODE USAR: strcat(), strcpy(), strlen() ou
 outras funções descritas em "string.h".
*/
 

#include <stdio.h>

/* Numero de strings na tabela */
#define N_STRINGS 6
 

/* Tabela global que mantem um vetor de strings */
char *tabela[N_STRINGS];
 

/*-------------------------------------*/
/* Coloca o conteudo da tabela na tela */
/*-------------------------------------*/
void mostratabela(void)
{
    int i;

    printf("CONTEUDO DA TABELA\n");
    for(i=0;i<N_STRINGS;++i)
        printf("%2d>>>>%s\n",i,tabela[i]);
    printf("\n");
}
 

/*-------------------------------------------*/
/* Copia o string "s" no lugar "i" da tabela */
/*-------------------------------------------*/
void copianolugar( char *s, int i)
{
 ........descobre o tamanho de s
 ........aloca memoria com malloc
 ........copia s para area alocada
 ........libera entrada velha da tabela
 ........coloca novo string na tabela
}
 
 

/*-----------------------------------------------------*/
/* Copia o string "s" na frente do lugar "i" da tabela */
/*-----------------------------------------------------*/
void copianafrente( char *s, int i)
{
 ........descobre o tamanho de s
 ........descobre o tamanho do atual i
 ........aloca memoria com malloc
 ........copia s para area alocada
 ........copia atual i atras dele
 ........libera entrada velha da tabela
 ........coloca novo string na tabela
}
 

/*-------------------------------------------------*/
/* Copia o string "s" atras do lugar "i" da tabela */
/*-------------------------------------------------*/
void copiaatras( char *s, int i)
{
 ........descobre o tamanho de s
 ........descobre o tamanho do atual i
 ........aloca memoria com malloc
 ........copia atual i para area alocada
 ........copia s atras dele
 ........libera entrada velha da tabela
 ........coloca novo string na tabela
}
 

/*----------------------------------------------*/
/* Função principal testa as funções auxiliares */
/*----------------------------------------------*/
int main( int argc, char *argv[])
{
    int i;
    char *x = "qwerty";
    char *y = "zzzzzz";
 

    /* inicializa tabela */
    for(i=0;i<N_STRINGS; ++i)
        tabela[i] = NULL;

    /* Copia parametros para a tabela */
    for(i=0;i<N_STRINGS && i<argc; ++i)
        copianolugar(argv[i],i);
    mostratabela();
 

    /* Teste de copianafrente */
    copianafrente("alo",2);
    copianafrente(x,4);
    mostratabela();

    /* Teste de copiaatras */
    copiaatras("FIM",2);
    copiaatras(y,4);
    mostratabela();

    /* Teste de copianolugar */
    copianolugar("abcde",3);
    copianolugar(x,0);
    copianolugar(argv[0],N_STRINGS-1);
    mostratabela();
 

    return 0;
}
 

T1B - Trabalho sobre listas encadeadas (50% do T1)

Desenvolver na linguagem C um programa que implemente uma simulação. Deverá
existir uma fila de eventos implementada como uma lista encadeada, onde eventos
são inseridos conforme o momento previsto de sua ocorrência, retirados da frente
da lista para processamento ou de qualquer lugar da lista quando o evento for
cancelado.

Cada grupo deverá definir o sistema físico, baseado em eventos discretos, a ser
simulado. Cada grupo deverá simular o seu próprio sistema, o qual deve ser
aprovado previamente pelo professor. É necessário haver, no sistema, a possibilidade
de cancelamento de eventos.

Exemplos de sistemas: caixas de supermercado, bombas em posto de gasolina,
filas de banco, lanchonete, etc.

Exemplos de eventos:
- Próxima chegada de cliente (previsto quando chega um cliente)
- Término de atendimento do cliente (previsto quando inicia o atendimento do cliente)
- Desistência do cliente (caso não seja atendido em tanto tempo)

Esqueleto do código:

Faça enquanto existir evento na fila:
    Avança relógio simulado até instante do próximo evento
    Retira próximo evento da fila de eventos
    Processa o evento (o que isto significa depende do sistema)
            - Gera novos eventos e insere na fila
            - Cancela eventos e retira da fila
            - Altera estado do sistema (ex: caixa ocupado/livre)
 

T2 - Implementação de um Jogo de Damas

Desenvolver na linguagem C um programa que implemente um jogo de Damas. As regras
estão em  http://www.jogos.antigos.nom.br/damas.htm.

Deve ser utilizado tabuleiro de 64 casas e as regras clássicas, descritas na página.

O programa deve permitir o jogo entre duas pessoas, as jogadas são entradas
através do teclado e o tabuleiro pode ser descrito de forma simples através
de printf(). Por exemplo:
 

-  +  -  +  -  +  -  +
+  -  +  -  +  -  +  -
-  +  -  +  -  +  -  +
+  -  +  -  +  -  +  -
-  +  -  +  -  +  -  +
+  -  +  -  +  -  +  -
-  +  -  +  -  +  -  +
+  -  +  -  +  -  +  -
 
 

-  B  -  B  -  B  -  B
B  -  B  -  B  -  B  -
-  B  -  B  -  B  -  B
+  -  +  -  +  -  +  -
-  +  -  +  -  +  -  +
P  -  P  -  P  -  P  -
-  P  -  P  -  P  -  P
P  -  P  -  P  -  P  -
 
 

O programa deverá:
- Verificar a legalidade de cada movimento solicitado pelo usuário.
- Detectar o fim do jogo por vitória ou empate, segundo as regras oficiais.
- Ser capaz de fazer um "replay" de toda a partida, após o término da mesma.

O programa também deverá oferecer um jogador virtual, que utiliza um
algoritmo qualquer para fazer suas jogadas, até mesmo escolher aleatoriamente
a peça a ser jogada.

A qualidade do algoritmo usado pelo jogador virtual NÃO será considerada para
a nota, apenas a existência do mesmo. Algoritmos apropriados serão estudados na
disciplina de IA. Entretanto, será feito um campeonato entre os programas e o
melhor jogador virtual valerá um bonus na nota da prova para os membros do
grupo.