Informações para o teste prático (online) de 8 de Junho
Data e Horário:
- Data: 8 de Junho (segunda-feira)
- Duração: 3h30m [duas partes, cada uma com 1h45m]
- Horário: 1ª parte 14:00 às 15:45; 2ª parte das 16:15 às 18:00
Valorização:
Como já explicado e como podem ver na página de avaliação e no Sigarra, o teste vale 5 valores, ou seja, 25% da nota desta unidade curricular (e não será possível repetir). Não existe nota mínima no teste.
Inscrição e Declaração de Compromisso de Honra:
- [IMPORTANTE] Para poder fazer o teste têm de se inscrever e subscrever a declaração de compromisso de honra. Faça-o no Mooshak de EDados, na "prova" com o nome "Inscrição e compromisso de honra para o teste prático".
- Alunos não inscritos ou que não assinaram a declaração de honra não poderão fazer o teste (e não terão utilizador disponível no Mooshak do teste).
- Pode ler a declaração de compromisso de honra (está repetida no Mooshak quando declaram que a subscrevem).
Casos Expecionais:
- Se quiser declarar que não tem condições para fazer o teste online no dia e hora marcados, deverá enviar email para o regente da unidade curricular antes de 8 de Junho justificando o porquê e se o motivo for considera plausível será agendado teste prático presencial num dos laboratórios do DCC, quando tal for permitido pelas regras da FCUP.
- Se tiver algum estatuto especial que lhe permita ter mais tempo para a prova, deverá enviar email para o regente da unidade curricular antes de 8 de Junho justificando o porquê, e será combinado previamente quanto tempo adicional terá.
- Se tiver algum problema (técnico) grave durante o teste online que o impeça de fazer o teste, deverá enviar logo que possível email ao regente da unidade curricular, justificando o porquê (com fotos e ou screenshots anexados) e se o motivo for considerado plausível o seu teste ficará sem efeito e será agendado teste prático presencial num dos laboratórios do DCC em data posterior, quando tal for permitido pelas regras da FCUP.
Modo de Funcionamento:
- O exame divide-se em duas partes (cada uma com 1h45m), cada uma com 4 problemas. No final da 1ª parte fecha a possibilidade de submeter exercícios para essa parte e têm 30m para descansar um pouco antes do início da 2ª parte.
- É permitido usarem a vossa máquina, com qualquer sistema operativo e qualquer editor à vossa escolha.
- É permitido consultarem código vosso que tenham anteriormente submetido no contexto da unidade curricular
- O teste é "open book": é permitido usar pesquisas na internet para obter documentação sobre métodos, ver algo na página da cadeira, ou até ajuda conceptual sobre como funciona uma dada estrutura de dados
- É expressamente proibido pedir ajuda a alguém (pessoalmente ou remotamente), o que constitui uma quebra do compromisso de honra
- Em caso de dúvida sobre legalidade/ética sobre algo... não façam!
- Durante o teste, qualquer pergunta que tenham deve ser feita usando o interface do próprio Mooshak.
- Existirão várias versões de cada problema. Deverá consultar qual versão que deve submeter no link fornecido no dia do teste (acessível no cabeçalho de todos os problemas). As atribuições de versões serão feitas de forma aleatória.
- Tem acesso a um arquivo zip contendo uma cópia dos problemas, da qual poderá fazer download no início para o caso de ter alguma intermitência na sua ligação de internet (acessível no cabeçalho de todos os problemas).
- Podem submeter quantas vezes quiserem, e irá contar para avaliação a melhor pontuação que obtiverem.
- O Mooshak contará com um conjunto de casos de testes públicos (sem cotação) que podem usar para poder perceber se o programa faz o esperado (e aos quais terão acesso se falharem). Existe também um conjunto de casos de testes privados (com cotação), que será usado para obter uma nota de 0 a 100 (ou seja, existe pontuação parcial). Os casos de teste públicos são gerados para serem semelhantes aos privados (só não os damos para evitar que simplesmente imprimam o valor esperado, ao, invés de resolverem genuinamente o problema).
- A nota típica será simplesmente a que o Mooshak devolve (baseada nos casos de teste onde passaram). Casos (muito) anómalos poderão então ver a nota modificada (ex: negativamente, se houver quebra clara do compromisso de honra; positivamente se virmos que falharam mesmo "por muito pouco").
- Durante o teste apenas verão a vossa própria pontuação e as vossa próprias submissões, não estando por isso disponíveis os resultados dos vossos colegas.
Objectivos específicos para cada parte:
Cada parte vale 50% da nota do teste prático e tem 4 problemas como estão a seguir descritos.
1ª Parte (14:00 às 15:45)
- [15%] Exercício 1: programa completo para imprimir uma figura geométrica
Ler da entrada padrão um ou mais números ou caracteres e imprimir uma figura geométrica.
- [15%] Exercício 2: implementação de métodos para listas
ligadas simples.
Terão de adicionar um ou mais
pequenos métodos à classe SinglyLinkedList. Será dada
como base a implementação dada nas aulas e será descrito o
método a implementar, incluindo a assinatura do método (qual
o tipo de retorno e o tipo dos argumentos). Irão submeter a
classe como nas aulas (com o novo método adicionado).
- [15%] Exercício 3: programa completo (incluindo ler e escrever) que usa listas, pilhas e/ou filas
Problema com algoritmo descrito no enunciado. O tema do problema implicará que é conveniente usar listas, pilhas ou filas, mas poderão usar qualquer implementação (ex: usar a base de código dada nas aulas, usar TADs do próprio Java, ou usar uma qualquer implementação vossa).
- [5%] Exercício 4: pequeno problema envolvendo eficiência algorítmica.
Terão de resolver um pequeno problema, para o qual terão de pensar no algoritmo adequado. O problema não será completamente resolúvel com uma solução exaustiva de "força bruta" e será necessário ser eficiente. A complexidade esperada será dada no enunciado. Este problema é destinado a alunos que desejem ter uma nota alta, e só deverá ser tentando depois dos outros três exercícios estarem feitos (daí ter menos pontuação atribuída).
2ª Parte (16:15 às 18:00)
- [15%] Exercício 5: implementação de métodos simples
para árvores binárias.
Terão de adicionar um ou mais
pequenos método à classe BTree. Será dada como base a
implementação dada nas aulas e será descrito o método a
implementar, incluindo a assinatura do método (qual o tipo de
retorno e o tipo dos argumentos). Irão submeter a classe como nas
aulas (com o novo método adicionado).
- [15%] Exercício 6: implementar método estático para árvores binárias.
Terão de implementar um método estático que recebe como argumento uma árvore binária (simples - uma BTree - ou de pesquisa, uma BSTree) e faz algo sobre ela. O esforço de implementação esperado é também pequeno, mas será um pouco mais complicado que o exercício 1 e poderá dar jeito criar métodos auxiliares.
- [15%] Exercício 7: programa completo (incluindo ler e escrever) que usa conjuntos e/ou dicionários.
Terão de implementar um programa completo, que leia um dado input (usando a classe Scanner) e escreva o resultado pedido. O tema do problema implicará que é conveniente usar conjuntos e/ou dicionários, mas poderão usar qualquer implementação (ex: usar a base de código dada nas aulas, usar TADs do próprio Java, ou usar uma qualquer implementação vossa).
- [5%] Exercício 8: pequeno problema envolvendo recursividade.
Terão de resolver um pequeno problema, para o qual terão de pensar no algoritmo adequado. O problema envolverá recursividade e será útil conhecer as ideias de flood fill e/ou subconjuntos e/ou permutações. Este problema é destinado a alunos que desejem ter uma nota alta, e só deverá ser tentando depois dos outros três exercícios estarem feitos (daí ter menos pontuação atribuída).