Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
Debate
InforAberta 2019
Moderador: José Coelho
A programação é utilizada na generalidade das UCs da LEI.
Realçam-se algumas UCs que têm entregas de trabalhos de programação.
O conhecimento desta matéria é central na atividade profissional em Engenharia Informática.
Programação não deve ser uma fragilidade, mas sim um ponto forte!
Primeira UC de programação na LEI
Lecionação da UC pelo mesmo docente durante 9 anos.
Apresenta-se uma fotografia da UC vista pelo docente, bem como da sua evolução.
Módulo 1 - Variáveis e Estruturas de Controlo - semanas 1 a 3
• AFs pré-programação
• Formação 1
• Exercícios 1
Módulo 2 - Funções, Vetores e Recursão - semanas 4 a 8
• Formação 2
• Exercícios 2
• AFs extras: Linguagem R; VBA; Processing
• Avaliação: E-fólio A [semana 8]
Módulo 3 - Memória, Estruturas e Ficheiros - semanas 9 a 13
• Formação 3
• Exercícios 3
• Avaliação: E-fólio B [semana 13]
Revisões - semana 14
• Preparação: P-fólio Normal [90 minutos] Exame Normal [150 minutos]
Época de exames
• P-fólio / Exame (realizado presencialmente)
Módulo 1 – Variáveis e estruturas de controlo
1 – Primeiro Programa
2 – Variáveis
3 – Condicionais
4 – Ciclos
Módulo 2 – Funções, Vetores e Recursão
5 – Funções
6 – Mais Ciclos e Condicionais
7 – Vetores
8 – Procedimentos
9 – Recursão
Módulo 3 – Memória, Estruturas e Ficheiros
10 – Memória
11 – Estruturas
12 – Ficheiros
13 – Truques
No módulo I são introduzidos os primeiros conceitos de programação, existentes em todas as linguagens de programação modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que embora aparentemente simples, a sua não compreensão tem consequências em todo o resto do texto, o que poderá ser detetado de imediato no final do módulo, no caso do estudante não conseguir resolver alguns dos exercícios propostos. Após a realização deste módulo, o estudante fica com as bases para programar em qualquer linguagem de programação simples, para implementação de pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos estatísticos. Os conteúdos podem ser visualizados / realizados no HR. Formação 1: http://hr.gs/uabprogf1
O módulo começa por este capítulo, onde de forma sucinta se introduz o conceito de programa, linguagem de programação, e linguagem imperativa. O estudante realiza aqui o seu primeiro programa, o “olá mundo”, sendo explicadas todas as suas componentes e é indicada a secção de instalação do compilador localmente. Atualmente este passo não é essencial, já que o estudante pode utilizar o HackerRank para a realização de todos os exercícios, não sendo necessária qualquer instalação. A instalação era sempre um ponto que necessitava de muita interação e esforço por parte de alguns estudantes, tendo sido eliminada com a solução online.
Este capítulo introduz o conceito de variável num programa, como algo que guarda informação e que utiliza memória. Como suporte a este conceito, utiliza-se um programa de troca de valor entre duas variáveis. É aqui introduzida a primeira execução passo a passo, de modo a que o estudante verifique que uma variável mantém sempre o valor até que exista nova atribuição, e possa compreender a sua diferença relativamente à variável na matemática. Realça-se ainda a introdução neste capítulo de dados num programa, bem como a possibilidade de existirem erros de qualidade de código, sendo listados três.
Aqui temos como principal conceito a introduzir a possibilidade de execução alternativa de instruções num só programa. Não menos importante é a utilização de expressões lógicas para decidir entre as instruções alternativas, sendo dado um exemplo entre número par ou ímpar como primeiro exemplo de instruções alternativas. Novamente a execução passo-a-passo e entrada de dados é utilizada para clarificar o que o programa faz, mediante cada tipo de entrada de dados, e são listados os diferentes tipos de operadores lógicos e operadores numéricos. O exemplo central é determinar se um ano é bissexto, permitindo assim a utilização de diferentes operadores. Em termos de qualidade de código, introduz-se entre outros, o conceito de indentação do código.
Este é o último capítulo deste primeiro módulo, em que se introduz a possibilidade de uma linha de código ser executada mais que uma vez, abrindo assim as portas para uma outra dimensão dos programas, em que com um esforço limitado em escrever o programa, este pode realizar um número arbitrário de instruções, ao contrário do que se verificava até então. O exemplo de base é a soma dos primeiros N números ao quadrado, sem utilizar um ciclo, e depois a solução utilizando o ciclo. Introduz-se apenas o ciclo “while”, de modo a simplificar e manter a proximidade com o condicional introduzido anteriormente. A execução passo a passo evidencia a situação em que existem mais passos na execução do programa do que instruções, o que até aqui não ocorria, introduzindo-se o conceito de variável iteradora. Em termos de erros de qualidade, evidencia-se aqui o das instruções parecidas seguidas, sendo normalmente evidência de falha na identificação de um ciclo.
Existem dois tipos de atividades formativas (AFs): AFs de pré-programação e AFs de programação. As AFs de pré-programação existem apenas neste primeiro módulo, e centram-se nos três conceitos essenciais do módulo: variável, condicional e ciclo. Os testes têm base de dados de perguntas, permitindo repetir o teste, e podem servir de base para identificar problemas que podem tornar espinhosa a tentativa de realização das AFs de programação. Quando o estudante tem problemas em avançar em exercícios muito simples de programação, este é o tipo de exercício que é necessário realizar de modo a verificar se tem os meios mínimos suficientes para iniciar-se no mundo da programação.
• Exercícios Verdes:
Olamundosizeof
Soma
HMS
Produto
Arranjos
• Exercícios Azuis:
SomaDigitos
Fibonacci
Combinacoes
Euler
Trocos
Primo
• Exercícios Vermelhos:
TriplaSoma
PI
FormulaResolvente
Após os quatro capítulos e a realização das AFs de pré-programação, o estudante tem o seguinte conjunto de exercícios, cujos enunciados estão no manual e podem ser visualizados / realizados no HR. Exercícios 1: http://hr.gs/uabproge1
Estes exercícios são realizados no HR, e estão muito apoiados em termos de execuções de exemplo. Ao submeter o código no HR o estudante tem de imediato uma lista de casos de teste bem-sucedidos e falhados, existindo no caso dos testes falhados os dados de entrada e saída, podendo ver a diferença entre o que era esperado e o ocorrido.
Apenas com o módulo I é possível fazer programas, mas não há nenhuma ferramenta de controlo de complexidade. O código à medida que cresce requer cada vez mais atenção para o escrever e manter. No módulo II é introduzida uma ferramenta da programação que permite controlar a complexidade de um programa: a abstração funcional. O bom uso desta ferramenta leva a que a atenção apenas tenha de estar a cada momento centrada num reduzido conjunto de linhas de código, e mesmo assim garante que toda a funcionalidade do programa é satisfeita. Desta forma é possível escrever programas de qualquer dimensão. Serão apresentados também os vetores, de forma a poder lidar com grande volume de variáveis, bem como alternativas mais elegantes para ciclos e condicionais. Após a realização do módulo II, o estudante ficará com bases sólidas para escrever programas de qualquer dimensão, sem grandes limitações. Os conteúdos podem ser visualizados / realizados no HR. Formação 2: http://hr.gs/uabprogf2
Neste primeiro capítulo é introduzido o conceito de função, com base na ideia de mandar executar um bloco de código de qualquer parte do código. Fornece-se um exemplo em que duas linhas de código são repetidas em duas zonas do código, sendo a solução a construção de uma função para conter as instruções duplicadas, e assim chamar a função nos dois locais em que as instruções são necessárias. A execução passo a passo acompanha os exemplos de modo a procurar clarificar esta questão. É de seguida introduzido o termo abstração, para realçar a vantagem das funções, que consiste na abstração funcional, em que ao implementar uma função o programador apenas precisa saber o que a função tem de fazer, e ao utilizar a função é necessário saber apenas o que a função faz. Desta forma pode-se atacar problemas arbitrariamente grandes, prestando atenção a cada momento apenas a uma pequena parte deste. Em termos de erros de qualidade são referidos alguns, sendo o mais relevante as instruções parecidas não seguidas, reveladores de uma falha na identificação da necessidade de uma função.
Este é um capítulo em que não são introduzidos novos conceitos, apenas formas alternativas de na linguagem C de se escrever ciclos e condicionais. Nos ciclos são introduzidos o “for” e “do-while”, fornecendo-se alguns exemplos, e o “switch”. Aqui realça-se que o ciclo “for” prevê a utilização da variável iteradora, ficando o código mais bem organizado.
Neste capítulo é introduzido a importante estrutura de dados vetor, sendo a única estrutura de dados introduzida neste módulo e a primeira que permite ter um conjunto de variáveis. São dados alguns exemplos de evidência da necessidade de ter as variáveis agrupadas, nomeadamente na necessidade de calcular uma média. A não utilização de vetores iria inviabilizar a utilização de um ciclo, o que conduziria ao erro de código duplicado seguido. Introduz-se também o conceito de string, como sendo um conjunto de caracteres. São dados como exemplo algumas funções do string.h. Introduz-se aqui também a leitura dos argumentos do programa e matrizes. Como erros de qualidade realça-se o erro de variáveis com nomes quase iguais, tendo como origem provavelmente a falha de identificação de um vetor.
Embora o conceito de procedimento seja um conceito ligado com o da função, tem a diferença de que o procedimento faz algo, não retornando nada e não podendo ser utilizado numa expressão, enquanto que uma função calcula algo e pode ser utilizado numa expressão. São dados exemplos, nomeadamente o procedimento “Troca” que troca os valores entre duas variáveis, e é introduzida a passagem de argumentos por referência. Este conceito faz uso do apontador, mas de forma leve, de modo a suportar a passagem de argumentos por referência. Os apontadores ficam para o módulo III, no contexto da memória dinâmica. É introduzido também o conceito das variáveis globais, acessíveis a todas as funções, embora sendo algo desaconselhado. São aqui introduzidas as variáveis estáticas internas às funções, acompanhadas de exemplos de utilização. São dados vários erros de qualidade, entre os quais as funções muito grandes, sendo normalmente um indicador de que faltam abstrações funcionais.
Neste último capítulo do módulo é introduzido o conceito da recursão, que aplica a abstração funcional à própria função. É dado o exemplo da função fatorial recursiva, sendo comparada com a versão iterativa, e as torres de Hanoi, em que não é comparada com nenhuma alternativa, sendo realçada a simplicidade para resolver um problema que de outra forma seria de grande complexidade.
• Exercícios Verdes:
Argumentos
Inverte
Rand
Find
Maximo
MDC
Sort
RemoveDups
• Exercícios Azuis:
SomaNumeros
Trocos2
JogoDados
Baralhar
MergeSort
BinarySearch
NumeracaoRomana
PokerDados
• Exercícios Vermelhos:
StrReplace
NDamas
DoisDados
Calendario
EditDistance
Após os capítulos, inicia-se um bloco grande de exercícios, cujos enunciados estão no manual e podem ser visualizados / realizados no HR. Exercícios 2: http://hr.gs/uabproge2
Tal como no módulo anterior, o grau de dificuldade é crescente, procurando-se aqui propor como exercícios exemplos clássicos e funções de alta reutilização, permitindo por um lado que o estudante utilize o seu código nas atividades de avaliação, e por outro dar exemplos do que são boas abstrações funcionais, as que levam a que a função possa vir a ser reutilizada tanto no próprio programa como em outros programas. Entre os exercícios destacam-se as funções de ordenação e procura, bem como função para baralhar um conjunto de elementos e remover duplicados.
Foram feitas três atividades formativas extra, para serem realizadas após os exercícios do módulo 2, com outras linguagens de programação orientadas para determinados fins. Linguagem R para o cálculo estatístico, o VBA para programação numa folha de calculo, e o Processing para produção de imagens. Para além de introduzirem as respetivas linguagens para quem tenha acabado de fazer este módulo, são solicitados alguns dos exercícios para as quais as linguagens trazem vantagem, pretendendo-se assim abrir o leque de possibilidades aos estudantes.
No módulo II pouco foi dito sobre a gestão da memória, as variáveis relacionadas entre si eram declaradas em separado, e nem tão pouco se falou em ficheiros. No módulo III vamos finalmente abordar estas questões, reservando ainda um capítulo para matéria menos relevante, mas característica da linguagem C, a que se chamou de “Truques”. Mais relevante e complementar à abstração funcional é a abstração de dados, que é introduzido neste módulo, sendo essencial utilizar nas grandes aplicações. A abstração de dados é a base da programação por objetos. No final desta parte o estudante estará munido de todo o conhecimento que necessita de saber para construir aplicações em programação estruturada. Os conteúdos podem ser visualizados / realizados no HR. Formação 3: http://hr.gs/uabprogf3
Este é o primeiro capítulo do terceiro módulo, onde se irá introduzir a necessidade de poder alocar memória de forma dinâmica, dependendo dos dados de entrada, e libertar a memória de forma precisa. Para tal irá falar-se do stack, heap, malloc, free, e apontadores. É um capítulo complexo, em que se procura falar dos termos introduzidos como forma de resolver um problema enunciado. Neste capítulo referem-se diversos erros com alocação de memória, como ler/alterar uma posição de memória não alocada, libertar um endereço de memória inválido, não libertar após alocar, etc. São indicadas boas práticas para evitar cair nesses erros.
Neste capítulo introduz-se as estruturas em C, que permitem agrupar variáveis de diferentes naturezas. Entre os exemplos está uma estrutura para data, agrupando o ano, mês e dia, bem como uma estrutura para guardar dados de uma pessoa. É naturalmente introduzido o typedef, e bem como o conceito de abstração de dados. Como exemplo de abstração de dados, cria-se uma estrutura de alta reutilização, TVetorInt, o qual implementa-se de uma forma, da qual se identifica um problema de eficiência. Após se alterar apenas as funções do tipo abstrato de dados, o programa que o utiliza, fica a funcionar mais rapidamente, não tendo o mesmo de ter alterações. Este capítulo não termina sem introduzir a importante estrutura de dados de listas ligadas. Assim os estudantes ficam com uma alternativa à utilização de vetores.
Neste capítulo de ficheiros introduz-se o redireccionamento dos dados de entrada e saída na linha de comandos, nomeadamente para ficheiros, e apresentam-se as funções de ficheiros, em tudo iguais às funções de entrada e saída de dados, mas com o apontador para ficheiro. Os ficheiros stdin e stdout são também introduzidos, sendo dados exemplos com estruturas e com alocação dinâmica de memória, dos capítulos anteriores.
Neste capítulo são introduzidos os operadores binários, o operador ?, e a estrutura union. São dados exemplos de ganho de eficiência, sendo este ganho quantificado, e exemplos em que se vê alguma vantagem em utilizar o operador ? pela sua forma compacta, dentro de expressões, e da estrutura union.
Após os capítulos, inicia-se um bloco de exercícios, cujos enunciados estão no manual e podem ser visualizados / realizados no HR. Exercícios 3: http://hr.gs/uabproge3
Estes exercícios são em menor quantidade que no módulo anterior, seguindo a mesma lógica dos mais simples para os mais complexos. Vários exercícios são de listas, de modo a dar alguma experiência de utilização, podendo assim os estudantes utilizarem de facto esta estrutura de dados em alternativa a vetores.
• Exercícios Verdes:
Adiciona
More
Insere
InsertSort
Enesimo
• Exercícios Azuis:
Palavras
CifraCesar
More
BaseDeDados
MergeSort
Sort
• Exercícios Vermelhos:
Find
Histograma
Indicador
As atividades de avaliação, e-fólios e p-fólios/exames, são elementos determinantes para que a UC decorra em boas condições, devendo existir clareza, rigor e justiça. Iremos descrever os três tipos de atividades de avaliação, os e-fólios, os p-fólios e os exames, sendo os exames uma prova de avaliação única, não sendo necessário realizar qualquer trabalho.
Existem dois e-fólios ao longo do semestre, relativos ao módulo 2 e ao módulo 3. O total dos e-fólios é de 8 valores, os restantes 12 valores são avaliados no p-fólio.
Os e-fólios têm uma estrutura de 4 alíneas, valendo 1 valor cada alínea.
As alíneas devem ser realizadas em sequência, sendo o código útil para a alínea seguinte, e podendo o estudante ficar-se pela realização das primeiras alíneas, mediante a disponibilidade que tenha. O e-fólio é inspirado num tema, tendo sempre subjacente um cliente, não existindo e-fólios abstratos.
A alínea A deve poder ser resolvida com base em uma ou duas instruções. É uma alínea muito simples que revela entendimento do enunciado, e conhecimento básico ao nível do módulo 1.
A alínea B deve ser de nível verde, sendo normalmente suficiente o conhecimento do módulo 1 (para o e-fólio A) ou do módulo 2 (para o e-fólio B) para a sua resolução, envolvendo normalmente um ciclo. Esta alínea juntamente com a alínea A somam já 50% da nota do e-fólio, possibilitando assim que um estudante com aspirações modestas, possa procurar fazer a UC com esforço reduzido para obter uma nota modesta.
Na alínea C deve ser solicitado algo relevante para o exercício proposto, de nível azul. Será uma função chave de todo o e-fólio, e pode conter mais que um ciclo, ou requerer a identificação de uma abstração da parte do estudante.
A alínea D deve conter todo o resto do e-fólio, que deve ser de nível vermelho, devendo existir espaço para aplicar conceitos importantes como a abstração funcional, e no e-fólio B a abstração de dados. O enunciado não deve fazer todas as opções pelo estudante, dando liberdade de este resolver o e-fólio de diversas maneiras.
Em termos de critérios de correção existem critérios divulgado antes do enunciado, os quais são detalhados após a correção, na mensagem de feedback.
No feedback global, em vez de uma resolução do e-fólio, deve existir para cada alínea um conjunto de situações que resultaram das opções dos estudantes, comentando relativamente a problemas e vantagens de cada opção. Deve-se mostrar uma solução considerada a mais simples. Desta forma, tira-se partido de muitos estudantes terem resolvido o mesmo problema, e assim pode-se analisar diferentes formas igualmente boas de resolver o mesmo problema, como por outro lado, analisam-se opções desaconselhadas com as respetivas explicações.
Critérios de correção para os e-fólios (4 valores):
• (2 valores) Funcionalidade:
Resultado dos casos de teste recolhidos do HackerRank (HR).
No caso de existir código específico para um dado caso de teste, esse caso de teste não é contabilizado e é removido um caso de teste passado.
• (1 valor) Qualidade:
Avaliado de acordo com a lista Erros Comuns (capítulo 17 do manual). São apontados os três erros de qualidade principais. Um erro de gravidade elevada desconta 33%, um erro de gravidade média desconta 25% e um erro de gravidade baixa desconta 10% neste critério. No caso de ser realizada a alínea C e/ou D, considera-se que o estudante poderia realizar as alíneas A e B com qualidade máxima, pelo que as penalidades encontradas incidem apenas nas alíneas C e D, sendo a parte relativa às alíneas A e B consideradas como sendo realizadas à qualidade máxima.
• (0,25 valores) Relatório - dimensão/forma:
O relatório deverá ter uma dimensão entre 2 e 4 páginas, não contando com os anexos. O texto deve estar bem organizado e sucinto, devendo representar uma mais valia relativamente ao código. Não necessita de reproduzir o enunciado, nem deve conter código.
• (0,25 valores) Relatório - conteúdo:
O relatório deve indicar o que foi realizado, e o que ficou por realizar. Deve descrever e justificar caso tenha ponderado alternativas, as opções tomadas a nível de estrutura de dados adotada, e abstrações funcionais implementadas.
• (0,5 valores) Relatório - testes
Deve referir no relatório quais os testes realizados e respetivos resultados globais, e colocar em anexo informação relativa a todos os testes realizados. Os testes devem comprovar o bom funcionamento da aplicação na maior diversidade de casos possíveis, sendo necessário apresentar resultados de pelo menos 10 casos de teste para poder ter a totalidade deste critério. Os casos de teste para avaliação, não podem ser utilizados neste critério.
E-fólio A:
E-fólio B:
E-fólio Recurso (até 2016/17):
// Risco
int main()
{
int batalhoes=0, cavalaria=0, artilharia=0;
printf("Numero de batalhoes: ");
scanf("%d",&batalhoes);
/* descontar nos batalhões a artilharia e cavalaria, se possível */
if(batalhoes>0)
{
artilharia=batalhoes/10;
batalhoes-=artilharia*10;
cavalaria=batalhoes/5;
batalhoes-=cavalaria*5;
} else
batalhoes=0;
/* mostrar resultado, já que o número de tropas de infantaria
corresponde ao número de batalhões que não foram contabilizados
na arquilharia nem na cavalaria */
printf("%d Infantaria, %d Cavalaria, %d Artilharia",
batalhoes, cavalaria, artilharia);
}
// Sueca
void MostraCarta(int carta)
{
char numeros[]="23456DVR7A";
if(carta>=0 && carta<40)
printf("%c%c",numeros[carta%10],3+carta/10);
else
printf("**");
}
void main()
{
char str[255];
int carta;
printf("Introduza carta (0-39): ");
gets(str);
printf("Carta introduzida: ");
MostraCarta(atoi(str));
}
Exemplos de resoluções da primeira alínea do primeiro e-fólio.
// Domino
////////////////////////////////////////
// função base para responsta à alínea A
void PrintPeca(int esquerda, int direita) {
printf("[%d:%d]",esquerda,direita);
}
int main() {
srand(time(NULL));
PrintPeca(rand()%7,rand()%7);
}
//Settlers of Cattan
int LancaDoisDados()
{
return rand()%6 + rand()%6 + 2;
}
void main()
{
int i;
for(i=0;i<10;i++)
printf("%d ",LancaDoisDados());
}
// Poker
void MostraCarta(int carta)
{
char *naipes="opce", *numeros="234567890VDRA";
if(carta>=0 && carta<=51) {
// número
if(carta%13==8) // caso do 10, tem dois dígitos
printf("1");
printf("%c",numeros[carta%13]);
// naipe
printf("%c ",naipes[carta/13]);
}
}
main() // alínea A
{
int carta;
printf("Indique carta [0-51]: ");
scanf("%d",&carta);
MostraCarta(carta);
}
/* Jogo dos Pontos e Quadrados
*/
#define TAMANHO_MAXIMO 10
void Quadricula(int tamanho)
{
int i,j,ncasas;
for(i=0;i<tamanho+1;i++) {
if(i==0) {
// colocar a identificação das colunas
printf("\n ");
for(j=0;j<tamanho+1;j++)
printf("%c ",j+'0');
printf("\n");
}
// colocar a identificação das linhas
printf("%c ",i+'A');
for(j=0;j<tamanho;j++)
printf("+ ");
printf("+\n");
if(i<tamanho) {
printf(" ");
for(j=0;j<tamanho;j++)
printf(" ");
printf("\n");
}
}
}
void main()
{
int dimensao,jogador;
// leitura de dados iniciais
printf("\nJogo dos pontos e quadrados\nIndique dimensao [2-%d]: ", TAMANHO_MAXIMO-1);
scanf("%d",&dimensao);
if(dimensao<2)
dimensao=2;
else if(dimensao>TAMANHO_MAXIMO-1)
dimensao=TAMANHO_MAXIMO-1;
// desenhar o mapa de jogo
Quadricula(dimensao);
}
// Black Jack
/* Mostrar uma carta dado um número de 0 a 51 */
int main()
{
int valor;
char *naipe = "POCE";
char *numero = "A234567890VDR";
scanf("%d", &valor);
if (valor % 13 == 9)
printf("1");
printf("%c%c", numero[valor % 13], naipe[valor / 13]);
}
// Mine sweeper
int main() {
int N,M;
int i,j;
scanf("%d",&N);
scanf("%d",&R);
/* Mostre um tabuleiro de N linhas e M colunas */
for(i=0;i<N;i++) {
for(j=0;j<M;j++)
printf("+");
printf("\n");
}
}
/*
Dominó de 4 lados (ou em quadrado em que se juntam cantos), a colocar sempre em baixo num dos lados (a peça pode rodar).
A - pedir para imprimir a peça;
*/
void main()
{
int peca[4], i;
// entrada de dados, 4 números
for(i=0;i<4;i++)
scanf("%d", &(peca[i]));
printf("++++\n+%d%d+\n+%d%d+\n++++\n",
peca[0], peca[1], peca[3], peca[2]);
}
A prova presencial e vigiada p-fólio, é realizada em 90 minutos e no formato normal, papel e esferográfica. A estrutura do p-fólio proposta é constituída por 4 grupos valendo cada grupo 3 valores.
A prova termina com um anexo contendo as funções standard mais utilizadas na linguagem C, sendo estas funções suficientes para resolver qualquer atividade de avaliação.
• Grupo I: é dado um código de uma função, podendo ser de uma atividade formativa ou então um código simples, tendo sido introduzido erros no código. Pretende-se que o estudante identifique e corrija os erros;
• Grupo II: é solicitada uma função, sendo dado código que a chama. A função deverá ter um ou dois condicionais, ou então um ciclo, e pouco mais, sendo de nível verde.
• Grupo III: é solicitado uma ou duas funções de grau de dificuldade de nível azul, mas cuja resolução seja curta, cabendo numa só página. Para a resolução deste grupo, pode-se utilizar a função do grupo II.
• Grupo IV: é solicitado o programa, que utiliza as funções do grupo II e grupo III. Esta pergunta não é forçosamente mais complexa que o grupo III.
Em termos de critérios de correção, sendo a prova realizada com papel e esferográfica, não se pode aplicar os mesmos critérios que nos e-fólios, em que os estudantes utilizaram o computador.
Critérios do Grupo I:
• 0,5 por cada erro detetado, até ao máximo de 3 valores (basta identificar 6 dos 7 erros).
• 0,5 por erro introduzido não existente (cancela um erro bem identificado)
• 0,3 por um erro identificado, mas não corrigido
• 0,2 erro detetado, mas corrigido de forma incorreta
Grupo II / III / IV
Critérios positivos (soma de 0 a 1,5 valores):
• + 0,5 - assinatura correta
• + 0,5 - retorno da função correto
• + 0,5 - lógica relativamente correta
Negativos (subtrai de 3 a 1,5)
• - 0,5 - erro no código (expressão numérica/lógica incorreta; instrução incorreta)
• - 0 - um só erro sintático (inclui troca de aspas por plicas e vice-versa)
• - 0,5 - dois ou mais erros sintáticos menores.
Época Normal:
Época de Recurso:
Naturalmente que é solicitado nos e-fólios algo de grau superior ao solicitado neste grupo, mas o estudante fica com quatro alíneas para realizar em 60 minutos, o que dá 15 minutos por alínea, em prova escrita, enquanto que o e-fólio é realizado em computador. O tempo disponível por alínea não as torna impossíveis de resolver, mas é inferior aos grupos anteriores que são iguais ao p-fólio. Sendo uma prova escrita, considera-se que apenas alguém com muita experiência de programação pode de facto fazer este grupo com sucesso, permitindo que tenha aprovação com menos esforço que o percurso de avaliação contínua, no entanto para o fazer tem de já possuir experiência de programação. Alguém que se inicie na programação, deve naturalmente fazer os e-fólios de modo a ganhar prática de programação, não sendo esta uma via que possa valorizar.
A prova de exame é em tudo idêntica ao p-fólio, mas tem 150 minutos e mais um grupo a valer 8 valores. Este grupo tem de ser naturalmente mais complexo, para que ambas as vias sejam minimamente justas, caso contrário seria sempre muito mais fácil ficar-se mais 60 minutos em prova vigiada, em vez de entregar dois e-fólios a meio do semestre.
Assim sendo, neste grupo é dado o enunciado do tipo do e-fólio B, no qual é pedido para criar a estrutura de dados (alínea a para 2 valores), ler e gravar a informação da estrutura de dados para um ficheiro, num dado formato (alínea b para 2 valores), e as restantes alíneas são dois relatórios realizados com base na estrutura de dados definida (cada alínea a valer 2 valores).
A UC tem três espaços online, a turma, o espaço central, e o HackerRank (HR). O espaço online da turma é onde decorrem as atividades de avaliação, sendo os estudantes inscritos de forma automática pelo sistema, e as notas enviadas para o Portal Académico. No espaço central é onde irá decorrer a maior parte da interação, estando inscritos todos os estudantes de todas as turmas. No HR é onde estão as atividades formativas e de avaliação. Coloca-se aqui exemplos dos espaços de cada tipo.
O espaço da turma encontra-se normalizado em termos de estilo, no curso de Engenharia Informática. Tem primeiramente uma ligação ao espaço central, para facilidade dos estudantes, e o Plano de Unidade Curricular. Existe um recurso de decisão, onde os estudantes optam pela modalidade de avaliação (contínua ou exame), e o único fórum neste espaço, o fórum de turma. Mostra-se de seguida um pequeno vídeo de apresentação do docente e da UC, que será visto na primeira entrada dos estudantes.
Cada módulo fica ativo na data especificada para o efeito, de forma automática. No caso do primeiro módulo, ficam disponíveis as ligações para os testes no HR da “Formação 1” que contém o manual correspondendo ao primeiro módulo e “Exercícios 1” que contém os exercícios a resolver para o primeiro módulo, existindo feedback imediato no HR.
O segundo módulo fica ativo na quarta semana, novamente com as ligações para os recursos no HR respetivos, “Formação 2” e “Exercícios 2”, tendo também o recurso “E-fólio A” para entrega do primeiro trabalho, e as atividades formativas extra de programação em R, VBA e Processing. O e-fólio decorre no HR, mas o relatório é entregue neste espaço, sendo aqui que é dado o feedback individual e a avaliação.
O terceiro módulo é idêntico aos anteriores, abrindo após o final do e-fólio A, e ficando disponíveis a “Formação 3” e “Exercícios 3”, bem como o recurso “E-fólio B”.
O último bloco de recursos abre após o e-fólio B terminar, sendo um módulo de revisão e preparação para a prova presencial. Existe aqui um p-fólio de preparação, e também os recursos onde é lançada a nota do p-fólio e do exame.
O primeiro bloco de recursos chama-se “ Programar ”, contendo primeiramente as AFs de pré-programação. Estas AFs devem ser realizadas antes de se entrar em “Exercícios 1” no HR, mas podem ser realizadas em paralelo com “Formação 1”. Por vezes pode o docente solicitar a resolução destas AFs de modo a identificar erros a nível do entendimento do conceito de variável, expressão lógica, e ciclos. Continua-se com as indicações para acesso ao terceiro espaço da UC, o HackerRank (HR). As ligações aos recursos do HR que estão nas turmas, estão disponíveis aqui também, abrindo na mesma altura.
Neste bloco é colocado também um recurso com o “Relatório de Atividades Formativas”. No final de cada módulo é descarregado do HR um relatório por cada estudante, com todos os exercícios que realizaram, sendo disponibilizado neste recurso. Assim, os estudantes podem arquivar o seu relatório para memória futura, e ver as resoluções dos colegas, como forma de comparar e ver alternativas de escrita de código. O bloco contém ainda um “Arquivo de provas de Avaliação”, com todos os enunciados de e-fólios, p-fólios e exames do passado, sendo este recurso ativo apenas após o e-fólio B terminar, para efeitos de estudo para a prova presencial.
O segundo bloco chama-se “ Comunicar ” e contém os recursos de comunicação, a começar pelo mais importante, o “Fórum Central”. Existe ainda o “Wiki de Programação”, que se destina a ser um quadro assíncrono, onde se pode colocar explicações mais longas, não ficando as explicações fixas, sendo possível corrigir pequenas gralhas, ou utilizar o wiki para perguntas frequentes, entre outras iniciativas. Qualquer pessoa pode editar, no entanto o recurso não permite gerar notificações pelo email, pelo que tem de ser utilizado em conjunto com o fórum.
Este é o espaço central da UC, existindo ligações para as diversas turmas, de modo a facilitar aos estudantes circularem entre os dois espaços. Naturalmente que têm de saber o número de turma. É neste espaço que a interação deve ocorrer, estando inscritos todos os estudantes de todas as turmas.
Existe ainda o Gabinete do Docente, em que se pode marcar uma sessão síncrona com o docente, no serviço Colibri da FCCN, ficando a sessão gravada e disponível por 30 dias para os estudantes que não puderem assistir.
O terceiro bloco tem o nome “ Avaliar ” e contém indicações relativas às atividades de avaliação. O enunciado dos e-fólios é naturalmente divulgado via fórum, aqui coloca-se links para os enunciados dos e-fólios, e no caso do p-fólio e exame, uma simulação de p-fólio online. Naturalmente que esta simulação não é a prova real, que é feita em papel e esferográfica, muito embora esta UC esteja preparada para exames online. Assim que estes sejam implementados na Universidade Aberta, esta UC pode passar a ter os exames online, sendo necessário apenas garantir a todos os estudantes a realizar a prova, que tenham um computador com acesso à internet durante todo o decorrer da prova.
O último bloco tem o nome “ Consultar ” e tem os links para o manual, versão de 2010 e as várias versões de 2012, destinadas a dispositivos móveis, em que o utilizador pode ajustar o tamanho da letra de modo a ser legível mesmo tendo um dispositivo com dimensões reduzidas. A versão do manual no HR de 2016 consiste nos recursos para “Formação 1” a “Formação 3” e “Exercícios 1” a “Exercícios 3”.
Na figura lateral, entrou-se no recurso “Exercícios 3“, em que se pode ver os diversos exercícios e o número de pontos de cada exercício, a que correspondem casos de teste. Pode-se naturalmente editar cada exercício em termos de texto, código inicial e casos de teste, bem como ver estatísticas de utilização do exercício. No entanto esta é a vista do teste no modo do professor.
O espaço do HackerRank (HR) tem uma interface para o docente, como se fosse de uma empresa que pretenda contratar programadores. O acesso é, no entanto, gratuito para os professores. Cada recurso contém várias questões, estando listadas não só “Formação 1” e “Exercícios 1”, como também os e-fólios.
Nesta página vê-se o teste no modo do estudante, existindo um conjunto de questões para resolver. O estudante pode optar por qualquer ordem, ou entrar no exercício apenas para ver o enunciado.
Neste ecrã é visualizado um exercício em que consta o enunciado e o código inicial. Cada exercício tem para além do enunciado, um conjunto de notas de acordo com o grau de dificuldade do exercício, e pelo menos uma execução de exemplo. Ao submeter o código um conjunto de casos de teste são executados, tendo o estudante acesso aos dados de entrada e saída dos casos visíveis, de modo a poder localizar qualquer problema e corrigir. Existe ainda um conjunto de casos de teste ocultos, em que o estudante apenas sabe se acertou ou falhou o caso de teste. Assim procura-se otimizar a programação, ficando os testes feitos automaticamente e, portanto, facilitado o trabalho a quem se inicia na programação.
Esta é outra vista disponível para cada estudante em cada teste, que mostra o tempo em que o estudante gastou em cada exercício. Assim é possível saber qual a frequência de estudo efetivo do estudante, e poder dar orientações de estudo compatíveis com a real disponibilidade do estudante.
O docente pode ver o que cada estudante já fez, nomeadamente após colocar uma mensagem de ajuda no fórum, e assim pode dar uma resposta para o contexto em que o estudante se encontra, dentro do percurso da UC. Neste caso o estudante não fez o exercício palavras.c, embora tenha tentado. É possível ver a última tentativa de resolução, bem como todas as submissões do exercício, e assim contextualizar a resposta sem revelar a solução dos exercícios.
Nesta vista do detalhe do teste do estudante, em que mostra o detalhe de cada questão e quais os casos de teste bem-sucedidos e incorretos. Pode-se ver uma barra na questão 5, em que permite ver as versões anteriores à última, para essa questão. O botão “Show output diff” permite ver a diferença entre o output do código do estudante e do caso de teste, o que permite no caso de teste falhados, ajudar a identificar o local do erro, e a dar uma indicação ao estudante de modo a que o mesmo possa ele próprio resolver o exercício.
Fez-se um apanhado da evolução da UC ao longo do tempo, mostrando-se o início e o fim de cada iniciativa, com um pequeno comentário.
2010/11
2011/12
2012/13
2013/14
Ano letivo sem alterações
2015/16
2016/17
2017/18
2018/19
Nesta secção pretende-se apresentar informação sobre a atividade letiva e resultados académicos.
Atividade Online
A informação neste grau de granularidade, não é simples de interpretar, até porque o número de alunos a realizar AFs é recolhido de forma distinta. No entanto o indicador do número de mensagens é bastante preciso, embora não tenham em atenção ao tamanho das mensagens, e ao tipo de mensagens. Existindo cerca de 14 semanas letivas, o volume de mensagens é cerca de 1000 mensagens por semestre, o que dá 70 mensagens por semana, ou 10 mensagens por dia. Naturalmente que no início do semestre e perto das atividades de avaliação, a interação é mais elevada.
O número de mensagens nos fóruns no espaço central, é um indicador calculado com base nas mensagens em qualquer fórum entre 1 de setembro e 31 de agosto do ano seguinte. O número de estudantes com atividades formativas realizadas é calculado até 2012/13 com base no registo de AFs realizadas. De 2013/14 a 2015/16 é utilizado o arquivo de AFs realizadas, muito embora apenas alguns estudantes utilizavam o arquivo. Utiliza-se este indicador uma vez que os registos das AFs realizadas não estão disponíveis para esse período. Após 2016/17 esse indicador é calculado com base no arquivo de atividades formativas do HR. Naturalmente que este indicador pode ser superior ao real, dado que um estudante pode ter entrado com duas contas no HackerRank, e no anterior sistema, os estudantes que realizavam algumas AFs podem ter dado as respostas sem realizar o programa.
Inscrições
Em termos de inscrições, apresenta-se a tabela seguinte, não sendo contabilizados os estudantes que anularam a inscrição a meio do semestre. Existe informação sobre o número de estudantes no estrangeiro e nos Palop, bem como o curso a que pertencem, se à Licenciatura em Informática (até 2017/18) ou à Licenciatura em Engenharia Informática (após 2018/19), ou se pertencem à Licenciatura de Matemática e Aplicações. Existem ainda alguns estudantes inscritos através da modalidade de Unidades Curriculares Isoladas (UCI). O ano letivo 2018/19 contém dados apenas da época normal, faltando realizar a época de recurso.
Aprovações
Pode-se observar grande estabilidade do número de aprovações ao longo dos anos. Verifica-se ainda que são aprovados cerca de metade dos alunos avaliados.
O número de estudantes avaliado é obtido através do arquivo do docente, na correção de provas de avaliação. No número de aprovações são contabilizados os estudantes que obtiveram a aprovação por creditação ou equivalência. As creditações de competências são contabilizadas como aprovações sem nota, e as equivalências são aprovações com nota, sendo a informação nas respetivas colunas refletindo as notas finais registadas no Portal Académico.
Taxas
Taxa de avaliação = avaliados / inscritos
Taxa de aprovação = aprovados / avaliados
Taxa de sucesso = aprovados / inscritos
Número de Anos
Conclui-se que a maior parte dos estudantes aprovados necessitam apenas de uma edição para obter a aprovação, mas existem estudantes que necessitam de mais anos e mesmo assim conseguem terminar, possivelmente quando as condições de disponibilidade para o estudo finalmente se verificam. A média das notas dos estudantes que necessitam de mais anos, não aparenta ser necessariamente inferior relativamente à média de aprovação dos estudantes com um só ano.
Atendendo à informação existente do número de estudante, é possível calcular o número de anos que cada estudante se inscreveu na UC, e quantos passaram bem como com que nota obtiveram a aprovação.
Soluções?
Porque há estudantes que não chegam a entregar atividades de avaliação?
Possíveis motivos:
Medidas:
Porque há estudantes que entregam atividades de avaliação e reprovam?
Possíveis motivos:
Medidas:
Porque apenas uma pequena percentagem dos estudantes interage no fórum?
Porque não são marcadas sessões de esclarecimentos síncronas?
Possíveis motivos:
Medidas:
Possíveis motivos:
Medidas: