Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto será considerado informal, não se sentindo a equipa docente vinculada a dar uma resposta em tempo útil.
Durante o período de aulas: o atendimento presencial será feiro de acordo com o horário que se segue, sujeito a marcação verbal ou por email, com um mínimo de uma semana de antecedência, junto do respectivo docente:
Q1 - No trabalho pratico, a função splay tem o tipo [Bool] -> (BTree a -> BTree a), enquanto que o ghci diz que o tipo da função deveria ser [Bool] -> BTree a -> BTree a. É alguma gralha ou representam os mesmos tipo? Além disso, nessa mesma função, como podemos fazer para um catamorfismo consumir duas estruturas, no caso a lista e a árvore, em simultâneo?
R: Em Haskell, [Bool] -> BTree a -> BTree a é o mesmo tipo que [Bool] -> (BTree a -> BTree a). A segunda versão tem a vantagem de mostrar que deverá tratar-se de um catamorfismo de listas ([Bool]) cujo tipo de saída é (BTree a -> BTree a), ou seja, (BTree a)^(BTree a). Logo, deverá ser estudada a exponenciação de funções antes de prosseguir. Ver, por exemplo, Exponenciais.
Q2 - Ainda em relação a 'splay', estamos com dificuldade em construir o gene do catamorfismo que é pedido. Podem dar alguma ajuda?
R: Pensem assim (e aqui verão a vantagem de se pensar a programação com funções de ordem superior):
a) o tipo de saída BTree a -> BTree a sugere que o resultado do cata deve ser uma transformação de árvores;
b) Se a lista de entrada for vazia não há transformação nenhuma a fazer;
c) Se o gene for [g1,g2], em g2(b,f) devem considerar que f é a acumulação de todas as transformações que foram feitas tendo a cauda a lista em consideração. g2 deverá acrescentar a essa transformação já efectuada algo mais, de acordo com b.
Q3 - Quando nos cálculos passamos 'in' (resp. 'out') de um tipo para 'out' (resp. 'in') a mesma posição do outro lado de uma igualdade, que lei(s) estamos a aplicar? Vêm no formulário?
R: Estamos a aplicar as leis (2.18, 2.19) dos apontamentos. Essas leis são válidas para qualquer isomorfismo f/fº, não apenas para in/out. Não, estas leis não estão no formulário.
Q4 - É possível existirem estruturas que possuem functores com mais de 2 parâmetros? Se por exemplo eu estiver a trabalhar com uma estrutura paramétrica nos tipos A e B, faz sentido um functor triplo? E se sim, como o representaríamos na forma B(f,g,h) em que eg. A --f--> C e B --g-->D ?
R: Sim - veja-se por exemplo baseExp no módulo Exp.hs do trabalho prático.
Q5 - Estamos a sentir bastantes dificuldades na função de inserção no problema do dicionário e ainda não conseguimos ter nem o princípio de uma solução. Não será possível darem-nos uma orientação sobre por onde começar?
R: Para definir a função dic_in de uma palavra e seu significado no dicionário, o melhor é pensarem que vai ser preciso fazer recursividade "horizontal" - à procura da primeira letra - e "vertical" - descida para inserir o resto da palavra e seu sinónimo.
O mais natural será assim pensar num hilomorfismo auxiliar que aceite a palavra e a lista de expressões onde está a ser feita a procura / inserção. Recomenda-se que pensem na solução com base num diagrama com os tipos em jogo antes de passarem à programação. Como é habitual em problemas deste género, a parte "ana" do "hilo" vai fazer a maior parte do trabalho.
Q6 - Estamos com dificuldades em fazer a função 'splay' como catamorfismo de listas. Isto porque não conseguimos ver como o fazer sem navegar pela árvore. Será que nos podem dar alguma pista?
R: Têm toda a razão! A função splay deveria ter tipo BTree a -> [Bool] -> BTree a e ser um catamorfismo de BTree e não de listas. Se não conseguirem escrevê-lo directamente, escrevam primeiro a versão uncurried - que, com tipo (BTree a, [Bool]) -> BTree, não é um catamorfismo - e depois tentem derivar daí a solução final.
Q7 - O que deve ser apresentado no trabalho prático além das funções, claro, e dos diagramas explicitamente requisitados? Todos os diagramas? Todos os cálculos para a obtenção das funções e funtores? Comentários explicando funcionalidades do código?
R: Isso é deixado ao vosso critério, pois podem ter ou não tempo para escrever explicações sobre as vossas soluções. Se tiverem tempo, isso é bom e será valorizado. Mas esses textos devem ser objectivos e não devem distrair o avaliador do essencial, ok? Podem também ajudar quando tiverem mais do que uma solução e queiram compará-las. Podem usar \begin{spec}...\end{spec} para código que que querem formatar como em \begin{code}...\end{code} mas não querem que seja executado.
Q8 - Tenho uma dúvida depois do que li na Q6 acima: os professores irão atualizar o enunciado e o trabalho com o quickCheck/splay corrigido ou terão de ser os grupos a mudar?
R: A nossa regra é evitar mudar o enunciado enquanto o trabaho está a correr. O que devem fazer é (a) não mexer no tipo de splay, por forma a estar compatível com o QuickCheck, etc; (b) definirem splay = flip ⦇ g ⦈, em que ⦇ g ⦈ é o catamorfismo de BTree de acordo com o que se escreveu na Q6.
Q9 - Estamos com dificuldade em abordar a primeira questão. Será que nos podem dar mais informação sobre este tipo de dicionários em árvore?
Q10 - Nós definimos a função maisDir = ⦇ [nothing, π2.π2] ⦈ que tipa bem mas dá sempre Nothing. Não estamos a ver como não perder o "último elemento" da árvore, mais à direita...
R: A vossa solução tem, no caso recursivo, g2 = π2.π2, que é a mesma coisa que g2(a,(x,y)) = y. Têm de pensar num g2 que não seja "tão rápido" a deitar o 'a' fora. Ora vejam lá...
Q11 - Quando fazemos testes das propriedades 9, 10 e 11, estes nunca terminam. Sendo assim, gostaríamos de saber se há algo que se possa alterar nos testes de maneira a ser possível testar as referidas propriedades.
R: O QuickCheck (que opera sobre um mónade) pode gastar bastantes recursos quando as estruturas são árvores etc, pois começa a tomar a iniciativa de criar casos de teste arbitrariamente complexos. No fim da secção 3 do enunciado tem como controlar o número de casos de teste e a sua complexidade. Façam experiência usando maxSuccess e maxSize, começando por valores baixos e aumentando.
Q12 - Podemos resolver o exercício 5 puramente em código Haskell "normal", ou seja, sem catamorfismos, eithers, etc que aprendemos na disciplina?
R: O objectivo principal desse exercício é praticarem com mónades num problema concreto. O formato de resolução é “livre”.
Q13 - No problema 1, a propriedade 1 tem a pré-condição de ser testada apenas para dicionários normalizados. Sendo assim, não deveria a propriedade 3, que é também aplicada a dicionários exportados, ter a mesma pré-condição? Pergunto isto porque nos testes da 3ªa propriedade aparecem dicionários não normalizados.
R: Tem razão e obrigado pela pergunta, pois o problema é interessante (irão seguramente reencontrá-lo mais tarde na vossa vida profissional...): (a) é feita um representação em memória para obter eficência; mas (b) "teoricamente" a memória só será "habitada" por árvores de dicionários normalizados, após importação.
Contudo, o Quickcheck não sabe disso e começa a gerar representações em memória "absurdas", pois não há nenhum dicionário normalizado que as origine. A gente olha para elas e pensa: "não vou ligar porque isto nunca iria acontecer na realidade". Mas há contra-exemplos e a gente não gosta disso...
A alternativa é fazer com que os testes filtrem situações absurdas. Mas, como não podem mudar o enunciado a não ser no anexo onde estão a escrever as vossas soluções, a solução é adicionarem estes novos testes à vossa resolução e mostrarem na oral que as vossas funções os satisfazem:
\begin{code}
valid t = t == (dic_imp . dic_norm . dic_exp) t
\end{code}
\begin{propriedade}
Se um significado |s| de uma palavra |p| já existe num dicionário normalizado então adicioná-lo
em memória não altera nada:
\begin{code}
prop_dic_red1 p s d
| d /= dic_norm d = True
| dic_red p s d = dic_imp d == dic_in p s (dic_imp d)
| otherwise = True
\end{code}
\end{propriedade}
\begin{propriedade}
A operação |dic_rd| implementa a procura na correspondente exportação de um dicionário normalizado:
\begin{code}
prop_dic_rd1 (p,t)
| valid t = dic_rd p t == lookup p (dic_exp t)
| otherwise = True
\end{code}
\end{propriedade}
Já agora ficam a saber mais alguma coisa: em "teoria de desenvolvimento de software" (normalmente chamada "métodos formais"), dic_norm diz-se ser um invariante e valid diz-se ser um invariante de representação.
Q14 - Que grau de confiança na correcção do nosso código podemos ter usando o QuickCheck?
R: É sempre relativa. Os testes validam determinadas propriedades desejáveis de um programa, não todas... e portanto nunca provam que um programa está absolutamente correcto. Podem é provar que está incorrecto! Leiam a célebre frase de Dijkstra:
É por isso que uma disciplina como CP se justifica - conseguimos provar propriedades desejáveis dos programas sem fazer testes, usando as leis do cálculo da programação funcional.
Q15 - Conseguimos implementar as funções di_rd e dic_in em Haskell "standard", mas não conseguimos até agora convertê-las em hilomorfismos, como se refere na FAQ5. Vale alguma coisa apresentarmos o que temos, se não tivermos tempo de fazer essa conversão?
R: É sempre melhor apresentar o que têm do que não apresentar nada. E pode ser que até à oral possam ter tempo para as converter em hilos e mostrar lá que o acabaram por fazer com sucesso...
Q16 - Onde posso ler mais sobre isso de invariantes, invariantes de abstracção, etc?
Nos vossos apontamentos nós parámos no capítulo 4; mas se continuarem pelo 5, 6 e em particular o 7, têm lá a teoria de que se falou acima. Aqui na UM, essa matéria é dada no perfil MFES.
Q17 - No decurso do trabalho surgiram-nos estas dúvidas: tendo-se uma função recursiva k que tem uma cláusula k([],a) = a, tem-se curry k [] a = a e logo curry k [] = id, certo? E se o que tivermos for k(a,[]) = a, a função g = curry k a vai ser tal que a = g [], é assim?
R: Sim + sim . No primeiro caso reparem na lei (73) do formulário. No segundo caso, a situação descrita quer dizer que, onde tiverem a, podem sempre substituir por g [], se vos der jeito...
Q18 - Professores: para submeter o trabalho é necessário apenas um elemento o fazer ou todos os elementos do grupo tem de submeter?
R: Basta um elemento do grupo submeter.
Q19 - É possível resolver a insOrd das BTrees por recursividade mútua? Não nos está a fazer muito sentido sem ser por anamorfismo...
R: Não queremos dizer que não possa resolver como anamorfismo. Mas o que se pede é que seja um cata. Pensem assim: (a) caso árvore vazia - é imediato; (b) caso recursivo - o gene vai receber um elemento e duas sub-árvores. Imaginem que o valor à entrada já foi inserido algures numa delas, como que "por milagre"... O que é que o gene deve fazer se se assumir isso? Mais não podemos dizer...
Q20 - Estava a tentar submeter o trabalho e recebi o erro de que o meu número não se encontra em nenhum grupo... Mas na página de alunos está lá! Devo escrever o "a" antes dos dígitos ou não?
R: Devem escrever só o número. Nalguns grupos houve trocas. Nesse caso, quem deve submeter o trabalho é um elemento do grupo que não tenha feito trocas, ok?
Q21 - Eu já passei em época normal à UC, mas queria saber se posso efectuar o exame de recurso de amanhã, dia 18, para fazer melhoria. Ou seja, se fico com a melhor nota ou com a nota do exame de recurso.
R: Este ano, excepcionalmente, qualquer aluno pode fazer melhoria. A nota será t = max(normal, recurso). O que a equipa docente pede é que, caso o aluno veja que não vai mesmo dar para subir nota, não submeta o exame. Poupar-se-ão recursos que podem preciosos noutras circunstâncias (atender alunos, etc). Obrigado pela vossa colaboração.
Q22 - Num passo dum teste resolvido aparece B(a,b) . B(c,d) = B(a . c , b . d), onde B é um bifunctor. Isto encontra-se no formulário?
R: Não. Mas essa lei - que é a (3.57) dos apontamentos - é a extensão a bifunctores da lei functorial (41) do formulário. Já agora: B(id,id)=id é a correspondente extensão da lei (42).
Q23 - Alguns colegas estão a dizer que quem teve R na pauta de Julho pode ir a época especial. No nosso grupo tivemos R por não termos nota mínima no trabalho. É possível esclarecerem quais os critérios para ir a época especial?
R: Devido à situação anormal que vivemos, no corrente ano lectivo foi dado acesso generalizado à época especial. Contudo, esse acesso geral não tem - nem pode ter - enm consideração os regimes de avaliação particulares de cada disciplina. Em CP esse regime determina notas mínimas para passar de ano nas componentes T e TP. O exame de recurso permite melhorar a nota T mas não a nota TP. Logo, se um aluno não tiver nota mínima no TP, o exame de recurso não lhe vai permitir passar à disciplina, pois a nota TP permanece a mesma.
21 Set - Lançadas em Alunos as notas do exame da época especial.
7 Set - Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2-B2 e não no A1, como foi antes anunciado.
4 Set - O exame da época especial será exclusivamente presencial e terá lugar 3ª-feira, 8-Set, 14:00–17:00, no anfiteatro ED1-A1. Sendo presencial, cumpre-se o estipulado no Regime de avaliação da disciplina: sem consulta, exceptuando o formulário.
2 Set - No seu interesse, os alunos inscritos para exame da época especial desta disciplina devem consultar com o seu e-mail institucional.
29 Jul - Publicadas em Alunos as classificações finais desta disciplina.
27 Jul - Orais: terão lugar na próxima quarta-feira, 29-Jul, das 10h30 às 11h30 da manhã, via BBC. Os respectivos links serão enviados aos alunos por e-mail.
24 Jul - Lançadas em Alunos as notas do exame de recurso de 18-Jul.
13 Jul - O exame de recurso desta disciplina terá lugar no próximo sábado, 18 de Julho, das 10h às 13h. Será feito remotamente via BB, tal como o teste.
13 Jul - Disponibilizada em Material o teste de 13-Jun com algumas questões resolvidas.
10 Jul - As notas à data da época normal estão publicadas em Alunos.
8 Jul - As nota do teste e TP serão publicadas amanhã em Alunos.
24 Jun - Orais dos TP: ver horário e detalhes em Alunos.
22 Jun - As defesas orais dos TP terão lugar nos dias 29 e 30 de Junho. Brevemente será divulgado em Alunos o escalonamento dos grupos (gerado aleatoriamente) e detalhes sobre o processo.
15 Jun - Entrega dos TP: ver instruções em Alunos. Data limite: 17 de Junho.
12 Jun - Informa-se que o teste de amanhã (13-Jun) terá a duração de 3 horas, das 10h00 às 13h00.
10 Jun - Nova data para entrega do trabalho prático: 17-Jun (4ª-feira) às 23h59m.
10 Jun - O teste desta disciplina terá início, via BB, às 10h do dia 13-Jun.
22 Mai - O teste desta disciplina terá lugar a 13 de Junho, em horário a definir. Será feito remotamente via BB pelo que, ao contrário do que estava inicialmente previsto, será um teste de consulta (“open-book”). Antes de mais, todos os alunos deverão de imediato verificar se têm acesso à sua página de CP no BB (LCC ou MiEI). Mais informações serão dadas sobre este assunto aqui e no Slack da disciplina.
18 Mai - Publicada no Material a ficha nr.13 (última), destinada às aulas TP desta semana.
13 Mai - Disponibilizada em Material a gravação em vídeo da aula T13 de amanhã à tarde.
11 Mai - Publicada no Material a ficha nr.12, destinada às aulas TP desta semana.
7 Mai - Disponibilizada em Material a gravação em vídeo da aula T12 de hoje à tarde.
5 Mai - Publicada no Material a ficha nr.11, destinada às aulas TP desta semana.
30 Abr - Disponibilizada em Material a gravação em vídeo da aula T11 de hoje.
29 Abr - Trabalho prático: enunciado e material publicados em Material.
27 Abr - Publicada no Material a ficha nr.10, a preparar para as aulas TP desta semana.
22 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T10 desta 5ª-feira.
20 Abr - Publicada no Material a ficha nr.9, a preparar para as aulas TP desta semana.
15 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T9 desta 5ª-feira.
13 Abr - Publicada no Material a ficha nr.8, a preparar para as aulas TP da semana de 14-Abr.
31 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T8 desta 5ª-feira.
24 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T7 desta 5ª-feira.
20 Mar - Publicada no Material a ficha nr.6, a preparar para as aulas TP da semana de 23-Mar.
17 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T6 desta 5ª-feira.
16 Mar - Aulas Teóricas T6: a gravação de vídeo das aulas de quinta-feira, 19-Março, irá ficar disponível amanhã em Material. Recomenda-se aos alunos que o vejam antes da sua aula. No horário das aulas T o docente estará on-line para responder a questões e dúvidas. O que for mais relevante será afixado na FAQs de Atendimento.
15 Mar - Foi enviada uma mensagem via BB a todos os alunos sobre o re-início das aulas - por favor vejam as vossas caixas de correio.
13 Mar - De acordo com a circular CPEEUM-01/2020, as aulas re-iniciam-se na próxima segunda-feira, 16-Mar, em modo de e-learning (on-line). Brevemente serão dadas aqui (e enviadas por email via BB) informações sobre esse novo formato das aulas da disciplina.
10 Mar - Trabalho prático: está aberta a inscrição dos grupos de trabalho, que deverá ser feita em https://form.di.uminho.pt/grupo_cp até dia 1 de Abril. NB: os grupos com alunos externos devem contactar a equipa docente antes de se inscreverem.
9 Mar - Por determinação superior, esta semana não haverá aulas, cf. despachos RT-23/24 da Reitoria. A equipa docente está disponível para acompanhar o estudo à distância dos alunos. Pf. estejam atentos às FAQs em Atendimento. Nas mensagens coloquem sempre "CP/1920" no assunto.
6 Mar - Publicada no Material a ficha nr.5, a preparar para as aulas TP da semana de 9-Mar.
28 Fev - Publicada no Material a ficha nr.4, a preparar para as aulas TP da semana de 2-Mar.
26 Fev - A aula de reposição do turno MiEI/TP1 do dia 28 de Fevereiro, 6.a-feira, 11h-13h, terá lugar na sala E2-1.03.
20 Fev - Não haverá aula do turno TP1 amanhã (6ª-feira, 14:00, MiEI, E3-2.03). Será dada uma aula de substituição no dia 28 de Fevereiro, 6.a-feira, das 11h-13h, em sala a divulgar posteriormente.
20 Fev - Publicada no Material a ficha nr.3, a preparar para as aulas TP da semana de 24-Fev.
13 Fev - Publicada no Material a ficha nr.2, a preparar para as aulas TP da semana de 17-Fev.
12 Fev - Alteração de sala do turno LCC/TP1 para a E1-1.20.
6 Fev - Publicada no Material a ficha nr.1, a preparar para as aulas TP da semana de 10-Fev.
28 Jan - Início das aulas: 5ª-feira, dia 6-Fev. Ver Sumários.
J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos deste livro (em preparação, a versão actual é de Dez. 2019) essenciais para esta disciplina no corrente ano lectivo são o segundo, o terceiro e o quarto.
Bibliografia complementar
A. Cunha. Cálculo de Programas: notas teórico-práticas. Departamento de Informática, Universidade do Minho, 2005. (290k).
R. Bird and O. de Moor. Algebra of Programming. Series in Computer Science. Prentice-Hall International, 1997. C. A. R. Hoare, series editor. BGUM 510.5-B
O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo.
Vídeos das aulas teóricas
Os vídeos das aulas teóricas estão disponíveis no servidor do DIUM, neste endereço
Os alunos podem ver os vídeos no horário das aulas T ou antes (preferencialmente!). No horário das aulas T o docente estará on-line, no canal #geral do slack CP1920@UM, para responder às questões e dúvidas que haja.
Compilar-se-ão nas FAQs do Atendimento o que for mais relevante.
O material para realização do TP desta disciplina consta de um enunciado (cp1920t.pdf) e de um zip (cp1920t.zip) contendo a respectiva fonte (ficheiro cp1920t.lhs) + outros ficheiros auxiliares.
A data de entrega é 17 de Junho ( nova data). Oportunamente serão dadas informações sobre o processo de submissão dos trabalhos.
Bibliotecas de Software (em Haskell)
St.hs contendo uma versão simplificada do mónade de estado.
BTree.hs - biblioteca para o tipo de dados árvores binárias - data BTree a = Empty | Node(a, (BTree a, BTree a)), e aplicações suas (e.g. torres de Hanói, `quick-sort', etc).
LTree.hs - biblioteca contendo os cata/ana/hilomorfismos do tipo de dados árvores binárias de folhas - LTree a = Leaf a | Fork (LTree a, LTree a) e aplicações suas (e.g. Fibonacci, duplo factorial, `merge-sort', etc).
List.hs - biblioteca geral para listas em Haskell, contendo combinadores (e.g. catamorfismos) e exemplos de utilização.
SList.hs - biblioteca geral para listas com sentinela em Haskell, contendo combinadores (e.g. ana-cata-hilo) e exemplos de utilização.
Nat.hs - biblioteca de naturais (combinador ciclo-for, etc).
Cp.hs - contendo os combinadores de base do cálculo de programas, e.g. split, ><, -|- etc.
A nota final terá uma componente teórica (T) e uma componente prática (TP).
O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral e valerá 40% da nota final. A nota TP mínima é 10 valores.
Os restantes 60% (T) serão avaliados num teste (ou exame de recurso) sem consulta. A nota T mínima é 8 valores.
Os grupos TP serão de 3 alunos cada. As notas TP são individuais, conforme prestação de cada aluno no trabalho e na defesa oral.
Congelamento de notas TP: para os alunos que assim o desejarem, consideram-se congeladas as notas dos seus trabalhos de CP do ano passado (e apenas desse ano), sendo nesse caso usada a respectiva fórmula de cálculo.
Melhorias: só se podem fazer à parte T, caso o aluno tenha esse direito; para alunos de anos anteriores, a fórmula de cálculo é a do ano em que a nota a melhorar foi obtida.
Regime de Faltas
Adopta-se o regime geral em vigor na universidade.
TWiki's Education/CP webThe Education/CP web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.http://wiki.di.uminho.pt/twiki/bin/view/Education/CPCopyright 2020 by contributing authors2020-10-12T10:23:36ZAvisoshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Avisos2020-10-12T10:23:36Z21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ... (last changed by JoseNunoOliveira)JoseNunoOliveiraAlunoshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Alunos2020-09-21T15:56:18ZNotas finais (época especial) Ordenadas por número mecanográfico, com indicação da nota final: 43148 nf R ; 57754 8.0 nf 11 ; 64282 10.6 nf ... (last changed by JoseNunoOliveira)JoseNunoOliveiraMaterialPedagogicohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/MaterialPedagogico2020-09-21T15:12:35ZMaterial Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebSideBarhttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebSideBar2020-08-26T11:55:55ZTópicos Apresentação Atendimento Alunos Material Docentes Sumários Horário Regime de Avaliação Contacto Bibliografia ... (last changed by JoseNunoOliveira)JoseNunoOliveiraAtendimentohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Atendimento2020-08-26T11:54:29ZAtendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ... (last changed by JoseNunoOliveira)JoseNunoOliveiraHorarioSalasDocenteshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/HorarioSalasDocentes2020-03-26T12:05:15ZHorário e turnos Dia Horário Curso Turno Sala Docente 2ª feira 11:00 LCC TP1 E1 1.20 O.M. Pacheco 2ª feira 18:00 MiEI TP2 E1 1.21 N. Macedo ... (last changed by JoseNunoOliveira)JoseNunoOliveiraEquipaDocentehttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/EquipaDocente2020-03-09T12:33:59ZEquipa docente Nuno Oliveira Pacheco Cunha Macedo Neves JoseNunoOliveira 03 Feb 2020 (last changed by JoseNunoOliveira)JoseNunoOliveiraWebPreferenceshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebPreferences2020-02-19T18:12:18ZEducation/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida)JoseBacelarAlmeidaWebStatisticshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebStatistics2020-02-18T16:26:50ZStatistics for Education/CP Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ... (last changed by TWikiGuest)TWikiGuestBibliografiahttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Bibliografia2020-02-05T17:26:07ZBibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebHomehttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebHome2020-02-03T11:32:41ZBenvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ... (last changed by JoseNunoOliveira)JoseNunoOliveiraCalendariohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Calendario2020-02-03T10:55:41ZSumários da disciplina Actualização contínua no calendário: JoseNunoOliveira 28 Jan 2020 (last changed by JoseNunoOliveira)JoseNunoOliveiraRegimeAvaliacaohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/RegimeAvaliacao2020-01-30T16:16:08ZRegime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebTopicActionshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopicActions2007-05-18T08:03:35Z (last changed by AlcinoCunha)AlcinoCunhaWebCsshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebCss2007-02-16T14:32:59Z.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ... (last changed by AlcinoCunha)AlcinoCunhaWebTopBarhttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopBar2007-02-13T14:43:04Z (last changed by AlcinoCunha)AlcinoCunha
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ...
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ...
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ...
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ...
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ...
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ...
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ...
Bem vindo à página da edição de 2019/20 de Cálculo de Programas.
Eu chamo-me José Nuno Oliveira e sou o responsável por esta disciplina, que conta com uma
equipa
de docentes que investigam métodos que, como os que aqui se leccionam, estão na base da abordagem científica ao desenvolvimento de software.
Fazemos parte do Laboratório HASLab (High-Assurance Software Laboratory) onde se encontra consolidado know-how em métodos formais de programação desde há mais de 30 anos.
A palavra "programa" vem do grego "programma", uma derivação de "prographein" = "pro" (antes) + "graphein" (escrever).
Isto sugere que alguém que programa deve pensar antes no que vai fazer.
A indústria de software espera das universidades um ensino sistemático da programação, i.e. científico.
Só assim haverá garantias de que não há erros de programação. Tal como noutros ramos da engenharia, para isso é preciso introduzir a noção de cálculo em programação, isto é, uma disciplina que nos ajude a pensar os programas, raciocinar sobre eles e obter versões eficientes sem introduzir erros.
A Universidade do Minho tem uma longa tradição nesta área de ensino.
Com mais de 20 anos de leccionação,
Cálculo de Programas é uma das cadeiras que ensinam tais competências. Mais do que tecnologia ensina-se método, que é afinal aquilo que a maioria dos programadores acaba por não ter.
Resultados da Aprendizagem
Programação composicional: aprender a escrever programas complexos por composição de programas mais simples (princípio da composicionalidade).
Programação construtiva: aprender a escrever programas funcionais com recurso a combinadores algébricos.
Transformação de programas: recurso à algebra da programação para se obter eficiência sem sacrifício da correcção.
Arquitectura da programação: Análise, compreensão e catalogação de programas: recurso à factorização em pares "fold" + "unfold" (hilomorfismos) como forma de se perceber a arquitectura dos algoritmos e sua taxonomia.
Síntese de programas: cálculo de ciclos-for a partir de definições indutivas da matemática.
Programação funcional avançada: construir e raciocinar sobre programas funcionais com efeitos sob a forma de mónades.
Página principal
Para ver todas as edições da disciplina entrar aqui.
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ...
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ...
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ...
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ...
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ...
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ...
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/CP web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.
Web-specific background color: (Pick a lighter one of the StandardColors).
Set WEBBGCOLOR = #D0D0D0
Note: This setting is automatically configured when you create a web
Image, URL and alternate tooltip text of web's logo. Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.
List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/CP.Topic links. Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
Set SITEMAPLIST = on
Set SITEMAPWHAT = Cálculo de Programas
Set SITEMAPUSETO = Mestrado Integrado em Engenharia Informática e Licenciatura em Ciências da Computação
Note: Above settings are automatically configured when you create a web
Exclude web from a web="all" search: (Set to on for hidden webs).
Set NOSEARCHALL =
Note: This setting is automatically configured when you create a web
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
#Set NOAUTOLINK =
Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
Set WEBFORMS =
Users or groups who are not / are allowed to view / change / rename topics in the Education/CP web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce your own preferences variables and use them in your topics and templates.
TWiki search results for \.*
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP
The Education/CP web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/CP
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP
/twiki/pub/Main/LocalLogos/um_eengP.jpgAvisos
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Avisos
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ... (last changed by JoseNunoOliveira)2020-10-12T10:23:36ZJoseNunoOliveiraAlunos
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Alunos
Notas finais (época especial) Ordenadas por número mecanográfico, com indicação da nota final: 43148 nf R ; 57754 8.0 nf 11 ; 64282 10.6 nf ... (last changed by JoseNunoOliveira)2020-09-21T15:56:18ZJoseNunoOliveiraMaterialPedagogico
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/MaterialPedagogico
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ... (last changed by JoseNunoOliveira)2020-09-21T15:12:35ZJoseNunoOliveiraWebSideBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebSideBar
Tópicos Apresentação Atendimento Alunos Material Docentes Sumários Horário Regime de Avaliação Contacto Bibliografia ... (last changed by JoseNunoOliveira)2020-08-26T11:55:55ZJoseNunoOliveiraAtendimento
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Atendimento
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ... (last changed by JoseNunoOliveira)2020-08-26T11:54:29ZJoseNunoOliveiraHorarioSalasDocentes
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/HorarioSalasDocentes
Horário e turnos Dia Horário Curso Turno Sala Docente 2ª feira 11:00 LCC TP1 E1 1.20 O.M. Pacheco 2ª feira 18:00 MiEI TP2 E1 1.21 N. Macedo ... (last changed by JoseNunoOliveira)2020-03-26T12:05:15ZJoseNunoOliveiraEquipaDocente
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/EquipaDocente
Equipa docente Nuno Oliveira Pacheco Cunha Macedo Neves JoseNunoOliveira 03 Feb 2020 (last changed by JoseNunoOliveira)2020-03-09T12:33:59ZJoseNunoOliveiraWebPreferences
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebPreferences
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida)2020-02-19T18:12:18ZJoseBacelarAlmeidaBibliografia
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Bibliografia
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ... (last changed by JoseNunoOliveira)2020-02-05T17:26:07ZJoseNunoOliveiraWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebHome
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ... (last changed by JoseNunoOliveira)2020-02-03T11:32:41ZJoseNunoOliveiraCalendario
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Calendario
Sumários da disciplina Actualização contínua no calendário: JoseNunoOliveira 28 Jan 2020 (last changed by JoseNunoOliveira)2020-02-03T10:55:41ZJoseNunoOliveiraRegimeAvaliacao
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/RegimeAvaliacao
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ... (last changed by JoseNunoOliveira)2020-01-30T16:16:08ZJoseNunoOliveiraWebTopicActions
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopicActions
(last changed by AlcinoCunha)2007-05-18T08:03:35ZAlcinoCunhaWebCss
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebCss
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ... (last changed by AlcinoCunha)2007-02-16T14:32:59ZAlcinoCunhaWebTopBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopBar
(last changed by AlcinoCunha)2007-02-13T14:43:04ZAlcinoCunhaWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebLeftBar
Apresentação Sumários Projectos Material (last changed by AlcinoCunha)2007-02-13T10:35:33ZAlcinoCunha
Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto será considerado informal, não se sentindo a equipa docente vinculada a dar uma resposta em tempo útil.
Durante o período de aulas: o atendimento presencial será feiro de acordo com o horário que se segue, sujeito a marcação verbal ou por email, com um mínimo de uma semana de antecedência, junto do respectivo docente:
Q1 - No trabalho pratico, a função splay tem o tipo [Bool] -> (BTree a -> BTree a), enquanto que o ghci diz que o tipo da função deveria ser [Bool] -> BTree a -> BTree a. É alguma gralha ou representam os mesmos tipo? Além disso, nessa mesma função, como podemos fazer para um catamorfismo consumir duas estruturas, no caso a lista e a árvore, em simultâneo?
R: Em Haskell, [Bool] -> BTree a -> BTree a é o mesmo tipo que [Bool] -> (BTree a -> BTree a). A segunda versão tem a vantagem de mostrar que deverá tratar-se de um catamorfismo de listas ([Bool]) cujo tipo de saída é (BTree a -> BTree a), ou seja, (BTree a)^(BTree a). Logo, deverá ser estudada a exponenciação de funções antes de prosseguir. Ver, por exemplo, Exponenciais.
Q2 - Ainda em relação a 'splay', estamos com dificuldade em construir o gene do catamorfismo que é pedido. Podem dar alguma ajuda?
R: Pensem assim (e aqui verão a vantagem de se pensar a programação com funções de ordem superior):
a) o tipo de saída BTree a -> BTree a sugere que o resultado do cata deve ser uma transformação de árvores;
b) Se a lista de entrada for vazia não há transformação nenhuma a fazer;
c) Se o gene for [g1,g2], em g2(b,f) devem considerar que f é a acumulação de todas as transformações que foram feitas tendo a cauda a lista em consideração. g2 deverá acrescentar a essa transformação já efectuada algo mais, de acordo com b.
Q3 - Quando nos cálculos passamos 'in' (resp. 'out') de um tipo para 'out' (resp. 'in') a mesma posição do outro lado de uma igualdade, que lei(s) estamos a aplicar? Vêm no formulário?
R: Estamos a aplicar as leis (2.18, 2.19) dos apontamentos. Essas leis são válidas para qualquer isomorfismo f/fº, não apenas para in/out. Não, estas leis não estão no formulário.
Q4 - É possível existirem estruturas que possuem functores com mais de 2 parâmetros? Se por exemplo eu estiver a trabalhar com uma estrutura paramétrica nos tipos A e B, faz sentido um functor triplo? E se sim, como o representaríamos na forma B(f,g,h) em que eg. A --f--> C e B --g-->D ?
R: Sim - veja-se por exemplo baseExp no módulo Exp.hs do trabalho prático.
Q5 - Estamos a sentir bastantes dificuldades na função de inserção no problema do dicionário e ainda não conseguimos ter nem o princípio de uma solução. Não será possível darem-nos uma orientação sobre por onde começar?
R: Para definir a função dic_in de uma palavra e seu significado no dicionário, o melhor é pensarem que vai ser preciso fazer recursividade "horizontal" - à procura da primeira letra - e "vertical" - descida para inserir o resto da palavra e seu sinónimo.
O mais natural será assim pensar num hilomorfismo auxiliar que aceite a palavra e a lista de expressões onde está a ser feita a procura / inserção. Recomenda-se que pensem na solução com base num diagrama com os tipos em jogo antes de passarem à programação. Como é habitual em problemas deste género, a parte "ana" do "hilo" vai fazer a maior parte do trabalho.
Q6 - Estamos com dificuldades em fazer a função 'splay' como catamorfismo de listas. Isto porque não conseguimos ver como o fazer sem navegar pela árvore. Será que nos podem dar alguma pista?
R: Têm toda a razão! A função splay deveria ter tipo BTree a -> [Bool] -> BTree a e ser um catamorfismo de BTree e não de listas. Se não conseguirem escrevê-lo directamente, escrevam primeiro a versão uncurried - que, com tipo (BTree a, [Bool]) -> BTree, não é um catamorfismo - e depois tentem derivar daí a solução final.
Q7 - O que deve ser apresentado no trabalho prático além das funções, claro, e dos diagramas explicitamente requisitados? Todos os diagramas? Todos os cálculos para a obtenção das funções e funtores? Comentários explicando funcionalidades do código?
R: Isso é deixado ao vosso critério, pois podem ter ou não tempo para escrever explicações sobre as vossas soluções. Se tiverem tempo, isso é bom e será valorizado. Mas esses textos devem ser objectivos e não devem distrair o avaliador do essencial, ok? Podem também ajudar quando tiverem mais do que uma solução e queiram compará-las. Podem usar \begin{spec}...\end{spec} para código que que querem formatar como em \begin{code}...\end{code} mas não querem que seja executado.
Q8 - Tenho uma dúvida depois do que li na Q6 acima: os professores irão atualizar o enunciado e o trabalho com o quickCheck/splay corrigido ou terão de ser os grupos a mudar?
R: A nossa regra é evitar mudar o enunciado enquanto o trabaho está a correr. O que devem fazer é (a) não mexer no tipo de splay, por forma a estar compatível com o QuickCheck, etc; (b) definirem splay = flip ⦇ g ⦈, em que ⦇ g ⦈ é o catamorfismo de BTree de acordo com o que se escreveu na Q6.
Q9 - Estamos com dificuldade em abordar a primeira questão. Será que nos podem dar mais informação sobre este tipo de dicionários em árvore?
Q10 - Nós definimos a função maisDir = ⦇ [nothing, π2.π2] ⦈ que tipa bem mas dá sempre Nothing. Não estamos a ver como não perder o "último elemento" da árvore, mais à direita...
R: A vossa solução tem, no caso recursivo, g2 = π2.π2, que é a mesma coisa que g2(a,(x,y)) = y. Têm de pensar num g2 que não seja "tão rápido" a deitar o 'a' fora. Ora vejam lá...
Q11 - Quando fazemos testes das propriedades 9, 10 e 11, estes nunca terminam. Sendo assim, gostaríamos de saber se há algo que se possa alterar nos testes de maneira a ser possível testar as referidas propriedades.
R: O QuickCheck (que opera sobre um mónade) pode gastar bastantes recursos quando as estruturas são árvores etc, pois começa a tomar a iniciativa de criar casos de teste arbitrariamente complexos. No fim da secção 3 do enunciado tem como controlar o número de casos de teste e a sua complexidade. Façam experiência usando maxSuccess e maxSize, começando por valores baixos e aumentando.
Q12 - Podemos resolver o exercício 5 puramente em código Haskell "normal", ou seja, sem catamorfismos, eithers, etc que aprendemos na disciplina?
R: O objectivo principal desse exercício é praticarem com mónades num problema concreto. O formato de resolução é “livre”.
Q13 - No problema 1, a propriedade 1 tem a pré-condição de ser testada apenas para dicionários normalizados. Sendo assim, não deveria a propriedade 3, que é também aplicada a dicionários exportados, ter a mesma pré-condição? Pergunto isto porque nos testes da 3ªa propriedade aparecem dicionários não normalizados.
R: Tem razão e obrigado pela pergunta, pois o problema é interessante (irão seguramente reencontrá-lo mais tarde na vossa vida profissional...): (a) é feita um representação em memória para obter eficência; mas (b) "teoricamente" a memória só será "habitada" por árvores de dicionários normalizados, após importação.
Contudo, o Quickcheck não sabe disso e começa a gerar representações em memória "absurdas", pois não há nenhum dicionário normalizado que as origine. A gente olha para elas e pensa: "não vou ligar porque isto nunca iria acontecer na realidade". Mas há contra-exemplos e a gente não gosta disso...
A alternativa é fazer com que os testes filtrem situações absurdas. Mas, como não podem mudar o enunciado a não ser no anexo onde estão a escrever as vossas soluções, a solução é adicionarem estes novos testes à vossa resolução e mostrarem na oral que as vossas funções os satisfazem:
\begin{code}
valid t = t == (dic_imp . dic_norm . dic_exp) t
\end{code}
\begin{propriedade}
Se um significado |s| de uma palavra |p| já existe num dicionário normalizado então adicioná-lo
em memória não altera nada:
\begin{code}
prop_dic_red1 p s d
| d /= dic_norm d = True
| dic_red p s d = dic_imp d == dic_in p s (dic_imp d)
| otherwise = True
\end{code}
\end{propriedade}
\begin{propriedade}
A operação |dic_rd| implementa a procura na correspondente exportação de um dicionário normalizado:
\begin{code}
prop_dic_rd1 (p,t)
| valid t = dic_rd p t == lookup p (dic_exp t)
| otherwise = True
\end{code}
\end{propriedade}
Já agora ficam a saber mais alguma coisa: em "teoria de desenvolvimento de software" (normalmente chamada "métodos formais"), dic_norm diz-se ser um invariante e valid diz-se ser um invariante de representação.
Q14 - Que grau de confiança na correcção do nosso código podemos ter usando o QuickCheck?
R: É sempre relativa. Os testes validam determinadas propriedades desejáveis de um programa, não todas... e portanto nunca provam que um programa está absolutamente correcto. Podem é provar que está incorrecto! Leiam a célebre frase de Dijkstra:
É por isso que uma disciplina como CP se justifica - conseguimos provar propriedades desejáveis dos programas sem fazer testes, usando as leis do cálculo da programação funcional.
Q15 - Conseguimos implementar as funções di_rd e dic_in em Haskell "standard", mas não conseguimos até agora convertê-las em hilomorfismos, como se refere na FAQ5. Vale alguma coisa apresentarmos o que temos, se não tivermos tempo de fazer essa conversão?
R: É sempre melhor apresentar o que têm do que não apresentar nada. E pode ser que até à oral possam ter tempo para as converter em hilos e mostrar lá que o acabaram por fazer com sucesso...
Q16 - Onde posso ler mais sobre isso de invariantes, invariantes de abstracção, etc?
Nos vossos apontamentos nós parámos no capítulo 4; mas se continuarem pelo 5, 6 e em particular o 7, têm lá a teoria de que se falou acima. Aqui na UM, essa matéria é dada no perfil MFES.
Q17 - No decurso do trabalho surgiram-nos estas dúvidas: tendo-se uma função recursiva k que tem uma cláusula k([],a) = a, tem-se curry k [] a = a e logo curry k [] = id, certo? E se o que tivermos for k(a,[]) = a, a função g = curry k a vai ser tal que a = g [], é assim?
R: Sim + sim . No primeiro caso reparem na lei (73) do formulário. No segundo caso, a situação descrita quer dizer que, onde tiverem a, podem sempre substituir por g [], se vos der jeito...
Q18 - Professores: para submeter o trabalho é necessário apenas um elemento o fazer ou todos os elementos do grupo tem de submeter?
R: Basta um elemento do grupo submeter.
Q19 - É possível resolver a insOrd das BTrees por recursividade mútua? Não nos está a fazer muito sentido sem ser por anamorfismo...
R: Não queremos dizer que não possa resolver como anamorfismo. Mas o que se pede é que seja um cata. Pensem assim: (a) caso árvore vazia - é imediato; (b) caso recursivo - o gene vai receber um elemento e duas sub-árvores. Imaginem que o valor à entrada já foi inserido algures numa delas, como que "por milagre"... O que é que o gene deve fazer se se assumir isso? Mais não podemos dizer...
Q20 - Estava a tentar submeter o trabalho e recebi o erro de que o meu número não se encontra em nenhum grupo... Mas na página de alunos está lá! Devo escrever o "a" antes dos dígitos ou não?
R: Devem escrever só o número. Nalguns grupos houve trocas. Nesse caso, quem deve submeter o trabalho é um elemento do grupo que não tenha feito trocas, ok?
Q21 - Eu já passei em época normal à UC, mas queria saber se posso efectuar o exame de recurso de amanhã, dia 18, para fazer melhoria. Ou seja, se fico com a melhor nota ou com a nota do exame de recurso.
R: Este ano, excepcionalmente, qualquer aluno pode fazer melhoria. A nota será t = max(normal, recurso). O que a equipa docente pede é que, caso o aluno veja que não vai mesmo dar para subir nota, não submeta o exame. Poupar-se-ão recursos que podem preciosos noutras circunstâncias (atender alunos, etc). Obrigado pela vossa colaboração.
Q22 - Num passo dum teste resolvido aparece B(a,b) . B(c,d) = B(a . c , b . d), onde B é um bifunctor. Isto encontra-se no formulário?
R: Não. Mas essa lei - que é a (3.57) dos apontamentos - é a extensão a bifunctores da lei functorial (41) do formulário. Já agora: B(id,id)=id é a correspondente extensão da lei (42).
Q23 - Alguns colegas estão a dizer que quem teve R na pauta de Julho pode ir a época especial. No nosso grupo tivemos R por não termos nota mínima no trabalho. É possível esclarecerem quais os critérios para ir a época especial?
R: Devido à situação anormal que vivemos, no corrente ano lectivo foi dado acesso generalizado à época especial. Contudo, esse acesso geral não tem - nem pode ter - enm consideração os regimes de avaliação particulares de cada disciplina. Em CP esse regime determina notas mínimas para passar de ano nas componentes T e TP. O exame de recurso permite melhorar a nota T mas não a nota TP. Logo, se um aluno não tiver nota mínima no TP, o exame de recurso não lhe vai permitir passar à disciplina, pois a nota TP permanece a mesma.
21 Set - Lançadas em Alunos as notas do exame da época especial.
7 Set - Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2-B2 e não no A1, como foi antes anunciado.
4 Set - O exame da época especial será exclusivamente presencial e terá lugar 3ª-feira, 8-Set, 14:00–17:00, no anfiteatro ED1-A1. Sendo presencial, cumpre-se o estipulado no Regime de avaliação da disciplina: sem consulta, exceptuando o formulário.
2 Set - No seu interesse, os alunos inscritos para exame da época especial desta disciplina devem consultar com o seu e-mail institucional.
29 Jul - Publicadas em Alunos as classificações finais desta disciplina.
27 Jul - Orais: terão lugar na próxima quarta-feira, 29-Jul, das 10h30 às 11h30 da manhã, via BBC. Os respectivos links serão enviados aos alunos por e-mail.
24 Jul - Lançadas em Alunos as notas do exame de recurso de 18-Jul.
13 Jul - O exame de recurso desta disciplina terá lugar no próximo sábado, 18 de Julho, das 10h às 13h. Será feito remotamente via BB, tal como o teste.
13 Jul - Disponibilizada em Material o teste de 13-Jun com algumas questões resolvidas.
10 Jul - As notas à data da época normal estão publicadas em Alunos.
8 Jul - As nota do teste e TP serão publicadas amanhã em Alunos.
24 Jun - Orais dos TP: ver horário e detalhes em Alunos.
22 Jun - As defesas orais dos TP terão lugar nos dias 29 e 30 de Junho. Brevemente será divulgado em Alunos o escalonamento dos grupos (gerado aleatoriamente) e detalhes sobre o processo.
15 Jun - Entrega dos TP: ver instruções em Alunos. Data limite: 17 de Junho.
12 Jun - Informa-se que o teste de amanhã (13-Jun) terá a duração de 3 horas, das 10h00 às 13h00.
10 Jun - Nova data para entrega do trabalho prático: 17-Jun (4ª-feira) às 23h59m.
10 Jun - O teste desta disciplina terá início, via BB, às 10h do dia 13-Jun.
22 Mai - O teste desta disciplina terá lugar a 13 de Junho, em horário a definir. Será feito remotamente via BB pelo que, ao contrário do que estava inicialmente previsto, será um teste de consulta (“open-book”). Antes de mais, todos os alunos deverão de imediato verificar se têm acesso à sua página de CP no BB (LCC ou MiEI). Mais informações serão dadas sobre este assunto aqui e no Slack da disciplina.
18 Mai - Publicada no Material a ficha nr.13 (última), destinada às aulas TP desta semana.
13 Mai - Disponibilizada em Material a gravação em vídeo da aula T13 de amanhã à tarde.
11 Mai - Publicada no Material a ficha nr.12, destinada às aulas TP desta semana.
7 Mai - Disponibilizada em Material a gravação em vídeo da aula T12 de hoje à tarde.
5 Mai - Publicada no Material a ficha nr.11, destinada às aulas TP desta semana.
30 Abr - Disponibilizada em Material a gravação em vídeo da aula T11 de hoje.
29 Abr - Trabalho prático: enunciado e material publicados em Material.
27 Abr - Publicada no Material a ficha nr.10, a preparar para as aulas TP desta semana.
22 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T10 desta 5ª-feira.
20 Abr - Publicada no Material a ficha nr.9, a preparar para as aulas TP desta semana.
15 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T9 desta 5ª-feira.
13 Abr - Publicada no Material a ficha nr.8, a preparar para as aulas TP da semana de 14-Abr.
31 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T8 desta 5ª-feira.
24 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T7 desta 5ª-feira.
20 Mar - Publicada no Material a ficha nr.6, a preparar para as aulas TP da semana de 23-Mar.
17 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T6 desta 5ª-feira.
16 Mar - Aulas Teóricas T6: a gravação de vídeo das aulas de quinta-feira, 19-Março, irá ficar disponível amanhã em Material. Recomenda-se aos alunos que o vejam antes da sua aula. No horário das aulas T o docente estará on-line para responder a questões e dúvidas. O que for mais relevante será afixado na FAQs de Atendimento.
15 Mar - Foi enviada uma mensagem via BB a todos os alunos sobre o re-início das aulas - por favor vejam as vossas caixas de correio.
13 Mar - De acordo com a circular CPEEUM-01/2020, as aulas re-iniciam-se na próxima segunda-feira, 16-Mar, em modo de e-learning (on-line). Brevemente serão dadas aqui (e enviadas por email via BB) informações sobre esse novo formato das aulas da disciplina.
10 Mar - Trabalho prático: está aberta a inscrição dos grupos de trabalho, que deverá ser feita em https://form.di.uminho.pt/grupo_cp até dia 1 de Abril. NB: os grupos com alunos externos devem contactar a equipa docente antes de se inscreverem.
9 Mar - Por determinação superior, esta semana não haverá aulas, cf. despachos RT-23/24 da Reitoria. A equipa docente está disponível para acompanhar o estudo à distância dos alunos. Pf. estejam atentos às FAQs em Atendimento. Nas mensagens coloquem sempre "CP/1920" no assunto.
6 Mar - Publicada no Material a ficha nr.5, a preparar para as aulas TP da semana de 9-Mar.
28 Fev - Publicada no Material a ficha nr.4, a preparar para as aulas TP da semana de 2-Mar.
26 Fev - A aula de reposição do turno MiEI/TP1 do dia 28 de Fevereiro, 6.a-feira, 11h-13h, terá lugar na sala E2-1.03.
20 Fev - Não haverá aula do turno TP1 amanhã (6ª-feira, 14:00, MiEI, E3-2.03). Será dada uma aula de substituição no dia 28 de Fevereiro, 6.a-feira, das 11h-13h, em sala a divulgar posteriormente.
20 Fev - Publicada no Material a ficha nr.3, a preparar para as aulas TP da semana de 24-Fev.
13 Fev - Publicada no Material a ficha nr.2, a preparar para as aulas TP da semana de 17-Fev.
12 Fev - Alteração de sala do turno LCC/TP1 para a E1-1.20.
6 Fev - Publicada no Material a ficha nr.1, a preparar para as aulas TP da semana de 10-Fev.
28 Jan - Início das aulas: 5ª-feira, dia 6-Fev. Ver Sumários.
J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos deste livro (em preparação, a versão actual é de Dez. 2019) essenciais para esta disciplina no corrente ano lectivo são o segundo, o terceiro e o quarto.
Bibliografia complementar
A. Cunha. Cálculo de Programas: notas teórico-práticas. Departamento de Informática, Universidade do Minho, 2005. (290k).
R. Bird and O. de Moor. Algebra of Programming. Series in Computer Science. Prentice-Hall International, 1997. C. A. R. Hoare, series editor. BGUM 510.5-B
O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo.
Vídeos das aulas teóricas
Os vídeos das aulas teóricas estão disponíveis no servidor do DIUM, neste endereço
Os alunos podem ver os vídeos no horário das aulas T ou antes (preferencialmente!). No horário das aulas T o docente estará on-line, no canal #geral do slack CP1920@UM, para responder às questões e dúvidas que haja.
Compilar-se-ão nas FAQs do Atendimento o que for mais relevante.
O material para realização do TP desta disciplina consta de um enunciado (cp1920t.pdf) e de um zip (cp1920t.zip) contendo a respectiva fonte (ficheiro cp1920t.lhs) + outros ficheiros auxiliares.
A data de entrega é 17 de Junho ( nova data). Oportunamente serão dadas informações sobre o processo de submissão dos trabalhos.
Bibliotecas de Software (em Haskell)
St.hs contendo uma versão simplificada do mónade de estado.
BTree.hs - biblioteca para o tipo de dados árvores binárias - data BTree a = Empty | Node(a, (BTree a, BTree a)), e aplicações suas (e.g. torres de Hanói, `quick-sort', etc).
LTree.hs - biblioteca contendo os cata/ana/hilomorfismos do tipo de dados árvores binárias de folhas - LTree a = Leaf a | Fork (LTree a, LTree a) e aplicações suas (e.g. Fibonacci, duplo factorial, `merge-sort', etc).
List.hs - biblioteca geral para listas em Haskell, contendo combinadores (e.g. catamorfismos) e exemplos de utilização.
SList.hs - biblioteca geral para listas com sentinela em Haskell, contendo combinadores (e.g. ana-cata-hilo) e exemplos de utilização.
Nat.hs - biblioteca de naturais (combinador ciclo-for, etc).
Cp.hs - contendo os combinadores de base do cálculo de programas, e.g. split, ><, -|- etc.
A nota final terá uma componente teórica (T) e uma componente prática (TP).
O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral e valerá 40% da nota final. A nota TP mínima é 10 valores.
Os restantes 60% (T) serão avaliados num teste (ou exame de recurso) sem consulta. A nota T mínima é 8 valores.
Os grupos TP serão de 3 alunos cada. As notas TP são individuais, conforme prestação de cada aluno no trabalho e na defesa oral.
Congelamento de notas TP: para os alunos que assim o desejarem, consideram-se congeladas as notas dos seus trabalhos de CP do ano passado (e apenas desse ano), sendo nesse caso usada a respectiva fórmula de cálculo.
Melhorias: só se podem fazer à parte T, caso o aluno tenha esse direito; para alunos de anos anteriores, a fórmula de cálculo é a do ano em que a nota a melhorar foi obtida.
Regime de Faltas
Adopta-se o regime geral em vigor na universidade.
TWiki's Education/CP webThe Education/CP web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.http://wiki.di.uminho.pt/twiki/bin/view/Education/CPCopyright 2020 by contributing authors2020-10-12T10:23:36ZAvisoshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Avisos2020-10-12T10:23:36Z21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ... (last changed by JoseNunoOliveira)JoseNunoOliveiraAlunoshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Alunos2020-09-21T15:56:18ZNotas finais (época especial) Ordenadas por número mecanográfico, com indicação da nota final: 43148 nf R ; 57754 8.0 nf 11 ; 64282 10.6 nf ... (last changed by JoseNunoOliveira)JoseNunoOliveiraMaterialPedagogicohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/MaterialPedagogico2020-09-21T15:12:35ZMaterial Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebSideBarhttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebSideBar2020-08-26T11:55:55ZTópicos Apresentação Atendimento Alunos Material Docentes Sumários Horário Regime de Avaliação Contacto Bibliografia ... (last changed by JoseNunoOliveira)JoseNunoOliveiraAtendimentohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Atendimento2020-08-26T11:54:29ZAtendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ... (last changed by JoseNunoOliveira)JoseNunoOliveiraHorarioSalasDocenteshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/HorarioSalasDocentes2020-03-26T12:05:15ZHorário e turnos Dia Horário Curso Turno Sala Docente 2ª feira 11:00 LCC TP1 E1 1.20 O.M. Pacheco 2ª feira 18:00 MiEI TP2 E1 1.21 N. Macedo ... (last changed by JoseNunoOliveira)JoseNunoOliveiraEquipaDocentehttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/EquipaDocente2020-03-09T12:33:59ZEquipa docente Nuno Oliveira Pacheco Cunha Macedo Neves JoseNunoOliveira 03 Feb 2020 (last changed by JoseNunoOliveira)JoseNunoOliveiraWebPreferenceshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebPreferences2020-02-19T18:12:18ZEducation/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida)JoseBacelarAlmeidaWebStatisticshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebStatistics2020-02-18T16:26:50ZStatistics for Education/CP Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ... (last changed by TWikiGuest)TWikiGuestBibliografiahttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Bibliografia2020-02-05T17:26:07ZBibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebHomehttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebHome2020-02-03T11:32:41ZBenvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ... (last changed by JoseNunoOliveira)JoseNunoOliveiraCalendariohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Calendario2020-02-03T10:55:41ZSumários da disciplina Actualização contínua no calendário: JoseNunoOliveira 28 Jan 2020 (last changed by JoseNunoOliveira)JoseNunoOliveiraRegimeAvaliacaohttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/RegimeAvaliacao2020-01-30T16:16:08ZRegime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ... (last changed by JoseNunoOliveira)JoseNunoOliveiraWebTopicActionshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopicActions2007-05-18T08:03:35Z (last changed by AlcinoCunha)AlcinoCunhaWebCsshttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebCss2007-02-16T14:32:59Z.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ... (last changed by AlcinoCunha)AlcinoCunhaWebTopBarhttp://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopBar2007-02-13T14:43:04Z (last changed by AlcinoCunha)AlcinoCunha
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ...
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ...
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ...
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ...
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ...
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ...
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ...
Bem vindo à página da edição de 2019/20 de Cálculo de Programas.
Eu chamo-me José Nuno Oliveira e sou o responsável por esta disciplina, que conta com uma
equipa
de docentes que investigam métodos que, como os que aqui se leccionam, estão na base da abordagem científica ao desenvolvimento de software.
Fazemos parte do Laboratório HASLab (High-Assurance Software Laboratory) onde se encontra consolidado know-how em métodos formais de programação desde há mais de 30 anos.
A palavra "programa" vem do grego "programma", uma derivação de "prographein" = "pro" (antes) + "graphein" (escrever).
Isto sugere que alguém que programa deve pensar antes no que vai fazer.
A indústria de software espera das universidades um ensino sistemático da programação, i.e. científico.
Só assim haverá garantias de que não há erros de programação. Tal como noutros ramos da engenharia, para isso é preciso introduzir a noção de cálculo em programação, isto é, uma disciplina que nos ajude a pensar os programas, raciocinar sobre eles e obter versões eficientes sem introduzir erros.
A Universidade do Minho tem uma longa tradição nesta área de ensino.
Com mais de 20 anos de leccionação,
Cálculo de Programas é uma das cadeiras que ensinam tais competências. Mais do que tecnologia ensina-se método, que é afinal aquilo que a maioria dos programadores acaba por não ter.
Resultados da Aprendizagem
Programação composicional: aprender a escrever programas complexos por composição de programas mais simples (princípio da composicionalidade).
Programação construtiva: aprender a escrever programas funcionais com recurso a combinadores algébricos.
Transformação de programas: recurso à algebra da programação para se obter eficiência sem sacrifício da correcção.
Arquitectura da programação: Análise, compreensão e catalogação de programas: recurso à factorização em pares "fold" + "unfold" (hilomorfismos) como forma de se perceber a arquitectura dos algoritmos e sua taxonomia.
Síntese de programas: cálculo de ciclos-for a partir de definições indutivas da matemática.
Programação funcional avançada: construir e raciocinar sobre programas funcionais com efeitos sob a forma de mónades.
Página principal
Para ver todas as edições da disciplina entrar aqui.
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ...
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ...
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ...
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ...
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ...
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ...
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/CP web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.
Web-specific background color: (Pick a lighter one of the StandardColors).
Set WEBBGCOLOR = #D0D0D0
Note: This setting is automatically configured when you create a web
Image, URL and alternate tooltip text of web's logo. Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.
List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/CP.Topic links. Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
Set SITEMAPLIST = on
Set SITEMAPWHAT = Cálculo de Programas
Set SITEMAPUSETO = Mestrado Integrado em Engenharia Informática e Licenciatura em Ciências da Computação
Note: Above settings are automatically configured when you create a web
Exclude web from a web="all" search: (Set to on for hidden webs).
Set NOSEARCHALL =
Note: This setting is automatically configured when you create a web
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
#Set NOAUTOLINK =
Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
Set WEBFORMS =
Users or groups who are not / are allowed to view / change / rename topics in the Education/CP web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce your own preferences variables and use them in your topics and templates.
TWiki search results for \.*
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP
The Education/CP web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/CP
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP
/twiki/pub/Main/LocalLogos/um_eengP.jpgAvisos
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Avisos
21 Set Lançadas em Alunos as notas do exame da época especial. 7 Set Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2 B2 e não no A1, ... (last changed by JoseNunoOliveira)2020-10-12T10:23:36ZJoseNunoOliveiraAlunos
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Alunos
Notas finais (época especial) Ordenadas por número mecanográfico, com indicação da nota final: 43148 nf R ; 57754 8.0 nf 11 ; 64282 10.6 nf ... (last changed by JoseNunoOliveira)2020-09-21T15:56:18ZJoseNunoOliveiraMaterialPedagogico
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/MaterialPedagogico
Material Pedagógico O material de apoio às aulas desta disciplina irá sendo disponibilizado nesta página à medida que as aulas forem progredindo. Vídeos das aulas ... (last changed by JoseNunoOliveira)2020-09-21T15:12:35ZJoseNunoOliveiraWebSideBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebSideBar
Tópicos Apresentação Atendimento Alunos Material Docentes Sumários Horário Regime de Avaliação Contacto Bibliografia ... (last changed by JoseNunoOliveira)2020-08-26T11:55:55ZJoseNunoOliveiraAtendimento
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Atendimento
Atendimento Em qualquer altura: via correio electrónico pressionando aqui (garantir sempre que "CP" faz parte do assunto). Qualquer outro meio de contacto ser ... (last changed by JoseNunoOliveira)2020-08-26T11:54:29ZJoseNunoOliveiraHorarioSalasDocentes
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/HorarioSalasDocentes
Horário e turnos Dia Horário Curso Turno Sala Docente 2ª feira 11:00 LCC TP1 E1 1.20 O.M. Pacheco 2ª feira 18:00 MiEI TP2 E1 1.21 N. Macedo ... (last changed by JoseNunoOliveira)2020-03-26T12:05:15ZJoseNunoOliveiraEquipaDocente
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/EquipaDocente
Equipa docente Nuno Oliveira Pacheco Cunha Macedo Neves JoseNunoOliveira 03 Feb 2020 (last changed by JoseNunoOliveira)2020-03-09T12:33:59ZJoseNunoOliveiraWebPreferences
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebPreferences
Education/CP Web Preferences The following settings are web preferences of the Education/CP web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida)2020-02-19T18:12:18ZJoseBacelarAlmeidaBibliografia
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Bibliografia
Bibliografia Bibliografia essencial J.N. Oliveira. Program Design by Calculation (, 2.2Mb), Departamento de Informática, Universidade do Minho. Os capítulos ... (last changed by JoseNunoOliveira)2020-02-05T17:26:07ZJoseNunoOliveiraWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebHome
Benvindo a Cálculo de Programas Bem vindo à página da edição de 2019/20 de de Programas. Eu chamo me Nuno Oliveira e sou o responsável por esta disciplina, que conta ... (last changed by JoseNunoOliveira)2020-02-03T11:32:41ZJoseNunoOliveiraCalendario
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/Calendario
Sumários da disciplina Actualização contínua no calendário: JoseNunoOliveira 28 Jan 2020 (last changed by JoseNunoOliveira)2020-02-03T10:55:41ZJoseNunoOliveiraRegimeAvaliacao
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/RegimeAvaliacao
Regime de Avaliação A nota final terá uma componente teórica (T) e uma componente prática (TP). O trabalho de grupo (TP) é obrigatório, será avaliado em prova oral ... (last changed by JoseNunoOliveira)2020-01-30T16:16:08ZJoseNunoOliveiraWebTopicActions
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopicActions
(last changed by AlcinoCunha)2007-05-18T08:03:35ZAlcinoCunhaWebCss
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebCss
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ... (last changed by AlcinoCunha)2007-02-16T14:32:59ZAlcinoCunhaWebTopBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebTopBar
(last changed by AlcinoCunha)2007-02-13T14:43:04ZAlcinoCunhaWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/CP/WebLeftBar
Apresentação Sumários Projectos Material (last changed by AlcinoCunha)2007-02-13T10:35:33ZAlcinoCunha
21 Set - Lançadas em Alunos as notas do exame da época especial.
7 Set - Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2-B2 e não no A1, como foi antes anunciado.
4 Set - O exame da época especial será exclusivamente presencial e terá lugar 3ª-feira, 8-Set, 14:00–17:00, no anfiteatro ED1-A1. Sendo presencial, cumpre-se o estipulado no Regime de avaliação da disciplina: sem consulta, exceptuando o formulário.
2 Set - No seu interesse, os alunos inscritos para exame da época especial desta disciplina devem consultar com o seu e-mail institucional.
29 Jul - Publicadas em Alunos as classificações finais desta disciplina.
27 Jul - Orais: terão lugar na próxima quarta-feira, 29-Jul, das 10h30 às 11h30 da manhã, via BBC. Os respectivos links serão enviados aos alunos por e-mail.
24 Jul - Lançadas em Alunos as notas do exame de recurso de 18-Jul.
13 Jul - O exame de recurso desta disciplina terá lugar no próximo sábado, 18 de Julho, das 10h às 13h. Será feito remotamente via BB, tal como o teste.
13 Jul - Disponibilizada em Material o teste de 13-Jun com algumas questões resolvidas.
10 Jul - As notas à data da época normal estão publicadas em Alunos.
8 Jul - As nota do teste e TP serão publicadas amanhã em Alunos.
24 Jun - Orais dos TP: ver horário e detalhes em Alunos.
22 Jun - As defesas orais dos TP terão lugar nos dias 29 e 30 de Junho. Brevemente será divulgado em Alunos o escalonamento dos grupos (gerado aleatoriamente) e detalhes sobre o processo.
15 Jun - Entrega dos TP: ver instruções em Alunos. Data limite: 17 de Junho.
12 Jun - Informa-se que o teste de amanhã (13-Jun) terá a duração de 3 horas, das 10h00 às 13h00.
10 Jun - Nova data para entrega do trabalho prático: 17-Jun (4ª-feira) às 23h59m.
10 Jun - O teste desta disciplina terá início, via BB, às 10h do dia 13-Jun.
22 Mai - O teste desta disciplina terá lugar a 13 de Junho, em horário a definir. Será feito remotamente via BB pelo que, ao contrário do que estava inicialmente previsto, será um teste de consulta (“open-book”). Antes de mais, todos os alunos deverão de imediato verificar se têm acesso à sua página de CP no BB (LCC ou MiEI). Mais informações serão dadas sobre este assunto aqui e no Slack da disciplina.
18 Mai - Publicada no Material a ficha nr.13 (última), destinada às aulas TP desta semana.
13 Mai - Disponibilizada em Material a gravação em vídeo da aula T13 de amanhã à tarde.
11 Mai - Publicada no Material a ficha nr.12, destinada às aulas TP desta semana.
7 Mai - Disponibilizada em Material a gravação em vídeo da aula T12 de hoje à tarde.
5 Mai - Publicada no Material a ficha nr.11, destinada às aulas TP desta semana.
30 Abr - Disponibilizada em Material a gravação em vídeo da aula T11 de hoje.
29 Abr - Trabalho prático: enunciado e material publicados em Material.
27 Abr - Publicada no Material a ficha nr.10, a preparar para as aulas TP desta semana.
22 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T10 desta 5ª-feira.
20 Abr - Publicada no Material a ficha nr.9, a preparar para as aulas TP desta semana.
15 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T9 desta 5ª-feira.
13 Abr - Publicada no Material a ficha nr.8, a preparar para as aulas TP da semana de 14-Abr.
31 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T8 desta 5ª-feira.
24 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T7 desta 5ª-feira.
20 Mar - Publicada no Material a ficha nr.6, a preparar para as aulas TP da semana de 23-Mar.
17 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T6 desta 5ª-feira.
16 Mar - Aulas Teóricas T6: a gravação de vídeo das aulas de quinta-feira, 19-Março, irá ficar disponível amanhã em Material. Recomenda-se aos alunos que o vejam antes da sua aula. No horário das aulas T o docente estará on-line para responder a questões e dúvidas. O que for mais relevante será afixado na FAQs de Atendimento.
15 Mar - Foi enviada uma mensagem via BB a todos os alunos sobre o re-início das aulas - por favor vejam as vossas caixas de correio.
13 Mar - De acordo com a circular CPEEUM-01/2020, as aulas re-iniciam-se na próxima segunda-feira, 16-Mar, em modo de e-learning (on-line). Brevemente serão dadas aqui (e enviadas por email via BB) informações sobre esse novo formato das aulas da disciplina.
10 Mar - Trabalho prático: está aberta a inscrição dos grupos de trabalho, que deverá ser feita em https://form.di.uminho.pt/grupo_cp até dia 1 de Abril. NB: os grupos com alunos externos devem contactar a equipa docente antes de se inscreverem.
9 Mar - Por determinação superior, esta semana não haverá aulas, cf. despachos RT-23/24 da Reitoria. A equipa docente está disponível para acompanhar o estudo à distância dos alunos. Pf. estejam atentos às FAQs em Atendimento. Nas mensagens coloquem sempre "CP/1920" no assunto.
6 Mar - Publicada no Material a ficha nr.5, a preparar para as aulas TP da semana de 9-Mar.
28 Fev - Publicada no Material a ficha nr.4, a preparar para as aulas TP da semana de 2-Mar.
26 Fev - A aula de reposição do turno MiEI/TP1 do dia 28 de Fevereiro, 6.a-feira, 11h-13h, terá lugar na sala E2-1.03.
20 Fev - Não haverá aula do turno TP1 amanhã (6ª-feira, 14:00, MiEI, E3-2.03). Será dada uma aula de substituição no dia 28 de Fevereiro, 6.a-feira, das 11h-13h, em sala a divulgar posteriormente.
20 Fev - Publicada no Material a ficha nr.3, a preparar para as aulas TP da semana de 24-Fev.
13 Fev - Publicada no Material a ficha nr.2, a preparar para as aulas TP da semana de 17-Fev.
12 Fev - Alteração de sala do turno LCC/TP1 para a E1-1.20.
6 Fev - Publicada no Material a ficha nr.1, a preparar para as aulas TP da semana de 10-Fev.
28 Jan - Início das aulas: 5ª-feira, dia 6-Fev. Ver Sumários.
21 Set - Lançadas em Alunos as notas do exame da época especial.
7 Set - Alteração de sala: o exame de amanhã será afinal no anfiteatro ED2-B2 e não no A1, como foi antes anunciado.
4 Set - O exame da época especial será exclusivamente presencial e terá lugar 3ª-feira, 8-Set, 14:00–17:00, no anfiteatro ED1-A1. Sendo presencial, cumpre-se o estipulado no Regime de avaliação da disciplina: sem consulta, exceptuando o formulário.
2 Set - No seu interesse, os alunos inscritos para exame da época especial desta disciplina devem consultar com o seu e-mail institucional.
29 Jul - Publicadas em Alunos as classificações finais desta disciplina.
27 Jul - Orais: terão lugar na próxima quarta-feira, 29-Jul, das 10h30 às 11h30 da manhã, via BBC. Os respectivos links serão enviados aos alunos por e-mail.
24 Jul - Lançadas em Alunos as notas do exame de recurso de 18-Jul.
13 Jul - O exame de recurso desta disciplina terá lugar no próximo sábado, 18 de Julho, das 10h às 13h. Será feito remotamente via BB, tal como o teste.
13 Jul - Disponibilizada em Material o teste de 13-Jun com algumas questões resolvidas.
10 Jul - As notas à data da época normal estão publicadas em Alunos.
8 Jul - As nota do teste e TP serão publicadas amanhã em Alunos.
24 Jun - Orais dos TP: ver horário e detalhes em Alunos.
22 Jun - As defesas orais dos TP terão lugar nos dias 29 e 30 de Junho. Brevemente será divulgado em Alunos o escalonamento dos grupos (gerado aleatoriamente) e detalhes sobre o processo.
15 Jun - Entrega dos TP: ver instruções em Alunos. Data limite: 17 de Junho.
12 Jun - Informa-se que o teste de amanhã (13-Jun) terá a duração de 3 horas, das 10h00 às 13h00.
10 Jun - Nova data para entrega do trabalho prático: 17-Jun (4ª-feira) às 23h59m.
10 Jun - O teste desta disciplina terá início, via BB, às 10h do dia 13-Jun.
22 Mai - O teste desta disciplina terá lugar a 13 de Junho, em horário a definir. Será feito remotamente via BB pelo que, ao contrário do que estava inicialmente previsto, será um teste de consulta (“open-book”). Antes de mais, todos os alunos deverão de imediato verificar se têm acesso à sua página de CP no BB (LCC ou MiEI). Mais informações serão dadas sobre este assunto aqui e no Slack da disciplina.
18 Mai - Publicada no Material a ficha nr.13 (última), destinada às aulas TP desta semana.
13 Mai - Disponibilizada em Material a gravação em vídeo da aula T13 de amanhã à tarde.
11 Mai - Publicada no Material a ficha nr.12, destinada às aulas TP desta semana.
7 Mai - Disponibilizada em Material a gravação em vídeo da aula T12 de hoje à tarde.
5 Mai - Publicada no Material a ficha nr.11, destinada às aulas TP desta semana.
30 Abr - Disponibilizada em Material a gravação em vídeo da aula T11 de hoje.
29 Abr - Trabalho prático: enunciado e material publicados em Material.
27 Abr - Publicada no Material a ficha nr.10, a preparar para as aulas TP desta semana.
22 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T10 desta 5ª-feira.
20 Abr - Publicada no Material a ficha nr.9, a preparar para as aulas TP desta semana.
15 Abr - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T9 desta 5ª-feira.
13 Abr - Publicada no Material a ficha nr.8, a preparar para as aulas TP da semana de 14-Abr.
31 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T8 desta 5ª-feira.
24 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T7 desta 5ª-feira.
20 Mar - Publicada no Material a ficha nr.6, a preparar para as aulas TP da semana de 23-Mar.
17 Mar - Acaba de ser disponibilizada em Material a gravação em vídeo da aula T6 desta 5ª-feira.
16 Mar - Aulas Teóricas T6: a gravação de vídeo das aulas de quinta-feira, 19-Março, irá ficar disponível amanhã em Material. Recomenda-se aos alunos que o vejam antes da sua aula. No horário das aulas T o docente estará on-line para responder a questões e dúvidas. O que for mais relevante será afixado na FAQs de Atendimento.
15 Mar - Foi enviada uma mensagem via BB a todos os alunos sobre o re-início das aulas - por favor vejam as vossas caixas de correio.
13 Mar - De acordo com a circular CPEEUM-01/2020, as aulas re-iniciam-se na próxima segunda-feira, 16-Mar, em modo de e-learning (on-line). Brevemente serão dadas aqui (e enviadas por email via BB) informações sobre esse novo formato das aulas da disciplina.
10 Mar - Trabalho prático: está aberta a inscrição dos grupos de trabalho, que deverá ser feita em https://form.di.uminho.pt/grupo_cp até dia 1 de Abril. NB: os grupos com alunos externos devem contactar a equipa docente antes de se inscreverem.
9 Mar - Por determinação superior, esta semana não haverá aulas, cf. despachos RT-23/24 da Reitoria. A equipa docente está disponível para acompanhar o estudo à distância dos alunos. Pf. estejam atentos às FAQs em Atendimento. Nas mensagens coloquem sempre "CP/1920" no assunto.
6 Mar - Publicada no Material a ficha nr.5, a preparar para as aulas TP da semana de 9-Mar.
28 Fev - Publicada no Material a ficha nr.4, a preparar para as aulas TP da semana de 2-Mar.
26 Fev - A aula de reposição do turno MiEI/TP1 do dia 28 de Fevereiro, 6.a-feira, 11h-13h, terá lugar na sala E2-1.03.
20 Fev - Não haverá aula do turno TP1 amanhã (6ª-feira, 14:00, MiEI, E3-2.03). Será dada uma aula de substituição no dia 28 de Fevereiro, 6.a-feira, das 11h-13h, em sala a divulgar posteriormente.
20 Fev - Publicada no Material a ficha nr.3, a preparar para as aulas TP da semana de 24-Fev.
13 Fev - Publicada no Material a ficha nr.2, a preparar para as aulas TP da semana de 17-Fev.
12 Fev - Alteração de sala do turno LCC/TP1 para a E1-1.20.
6 Fev - Publicada no Material a ficha nr.1, a preparar para as aulas TP da semana de 10-Fev.
28 Jan - Início das aulas: 5ª-feira, dia 6-Fev. Ver Sumários.