Programação Estruturada 2004/05

1ª Submissão

Estruturas, Sequências de caracteres e Apontadores ...


Para que todos os interessados possam ter uma ideia mais precisa sobre o que será abordado na submissão de 30 minutos, deslinda-se parte do enunciado dos problemas.




    Dada uma base de dados contendo informação sobre alunos e disciplinas de cursos duma faculdade, pretende-se consultá-la para obter informações, como, por exemplo, os nomes e códigos dos alunos/as cujo nome inclua uma certa palavra (ex, Maria), e naturalmente outras informações talvez mais interessantes. As estruturas de dados que vão ser usadas pelo programa, obedecem à especificação seguinte.
     
    typedef struct aluno {
      char *nome, codigo[MAX];
      int disc[MAX], nd;
    } ALUNO;
    
    
    typedef struct disciplina {
      char *nome;
      int ano;
    } DISCIPLINA;
    
    
    ALUNO Alunos[MAXALUNOS];
    int NAlunos;
    
    DISCIPLINA Disc[MAXDISC];
    int NDisc;
    
    O problema seria: escrever um procedimento void procura(char *palavranome) que imprimiria o código e nome de cada aluno que está nas condições pretendidas ( palavranome indicaria a palavra que o nome deve conter).

    Exemplo de Input
    5 
    Programacao Imperativa 
    1 
    Calculo Infinitesimal I 
    1 
    Programacao Estruturada 
    1 
    Probabilidades e Estatistica  
    2 
    Modelos de Computacao 
    2
    
    6 
    Joao Maria Diogo Silva 
    2001018001 1 2
    Mariana Pinto Matias
    2001018003 4 1 4 2 3 
    Anabela Moreira
    2004018014 3 1 3 2 
    Sonia Maria Silva 
    1999018015 1 1 
    Manuel Pereira 
    2001019005 2 3 2
    Carlos Santos 
    2004019007 3 1 2 3 
    
    Maria
    

    No exemplo anterior Programacao Imperativa é a disciplina 1 e Programacao Estruturada a disciplina 3.
    O primeiro número que está a seguir ao código do aluno indica o número de disciplinas em que está inscrito. Os números seguintes identificam essas disciplinas.
    Os quatro primeiros dígitos dos códigos dos alunos representam o ano, os três seguintes o código do curso, e os três últimos identificam o aluno.

    Exemplo de output
    Alunos cujo nome inclui Maria
    
    2001018001 Joao Maria Diogo Silva 
    2001018003 Mariana Pinto Matias
    1999018015 Sonia Maria Silva 
    
    --------------------------------
    

    Neste caso, o output não pode ter nenhuma linha antes do título, mas tem uma linha de intervalo a seguir ao título e outra antes da linha final (a linha final neste exemplo, é constituída por tracinhos...). Todas terminam por mudança de linha. Não deverá ser feita qualquer ordenação dos dados. A menos que a ordenação seja explicitamente solicitada, no output deverá ser mantida a ordem de ocorrência dos dados nas estruturas de dados.

    Para correr o programa, inclua no seu ficheiro este código e note que não vai poder efectuar outras chamadas a funções da biblioteca string.h no programa (a única chamada será a de strcpy em ler_nome).

    As funções

    char *ler_nome(void);
    void ler_dados(void);
    
    definidas no código indicado podem ser usadas se facilitarem a escrita do programa. Embora, na criação da base de dados, sejam efectuadas chamadas de malloc, nenhum exercício que será proposto na submissão obrigará os alunos a efectuar alocação dinâmica de espaço de memória, nem a sua libertação.