Estruturas de Dados e Algoritmos LCI LEBM LMAC 1o mini-teste 19 de Abril de 2004 (duração: 1 hora) 1. Programação e Eficiência (0.75+0.75+0.5 valores) Desenvolva em C uma versão recursiva e outra imperativa da função todosMultiplosQ que, dado um vector de inteiros e um natural n (que se supõe nunca ser negativo ou 0), devolve “1” sse todos os valores nas posições do vector são múltiplos de n (use a operação %). Além do vector há que acrescentar argumentos convenientes à função (como o comprimento do vector ou os ı́ndices de inı́cio e fim). Indique a eficiência (melhor e pior casos apenas) da versão imperativa. 2. Estruturas Dinâmicas de Dados em C (0.5+0.5+1+1 valores) Considere que uma turma (com alunos) é representada pelo apontador para uma estrutura com três campos: o número de alunos na turma, o apontador para o primeiro nó de uma lista ligada e o apontador para o último nó dessa lista. Cada nó da lista ligada é uma estrutura com dois campos: o apontador para a estrutura que representa um aluno e o apontador para o nó seguinte. A estrutura que representa um aluno tem dois campos: o nome e o número (IST). 1. Defina em C os tipos necessários. 2. Defina ainda as funções seguintes: (a) turmaVazia() que devolve o apontador para a estrutura que representa a turma vazia. (b) pesquisaAluno(número, pturma) que devolve “1” sse o aluno com número no primeiro argumento se encontra na turma representada pelo apontador pturma. (c) insereEmTurma(nome,número,pturma) que devolve o apontador para a estrutura correspondente a uma nova turma, resultante de acrescentar (no fim da lista ligada) o nó correspondente ao novo aluno (com nome e número dados no argumento). Note que pturma é o apontador para a estrutura a turma original. No caso de a lista já conter um aluno com o mesmo número nada deverá ser inserido.