|
|
![]() |
|
© 2000-2008 Pedro Freire |
Olá rapazes!*
Se estás aqui provavelmente és meu aluno. Procura na lista abaixo pelo nome da escola/instituto onde tens aulas e pelo nome da cadeira/módulo que tens comigo. Depois é só descarregar o material e abrir!
Se não encontrares aquilo que procuravas aqui, tenta procurar no Moodle da Lusófona (onde tens de fazer login seguindo a hiperligação ao canto superior direito), ou na secção de "Conteúdos Pedagógicos" do NetLUV da Lusófona (que encontras após fazeres o teu login como aluno). A partir do 2º semestre de 2007/2008 já não haverá mais material colocado no NetLUV: usa o Moodle.
2007/2008, 1º semestre: Compiladores
As aulas práticas vão consistir no uso do analisador lexico lex (ou mais propriamente, a sua versão open-source, flex), e no compilador de gramáticas yacc (ou melhor, o bison open-source). Ambos estes utilitários existem nos sistemas Linux que se encontram no mercado, pelo que podes usá-los em casa. Também consegues encontrar versões para Windows, por exemplo as que acompanham o MinGW, que inclui um (necessário) compilador de C. Pessoalmente eu uso o MinGW em Windows, mas nas aulas vou estar a mostrar-vos os temas num Linux da Lusófona.
As aulas práticas tocarão os seguintes tópicos:
- Contextualização: o que fazem o flex e o bison
- Expressões regulares
- Ficheiros flex
- Exemplos e exercícios
- Limitações do flex → gramáticas e o bison
- Ficheiros bison
- Exemplos e exercícios
- Projecto
A avaliação da parte prática da cadeira consistirá em duas frequências em datas a marcar dependendo do avanço dos alunos, e num projecto final em grupo (grupos de 2 a 5 elementos – excepções terão de ser confirmadas comigo) com enunciado a ser entregue antes do Natal. Ambas as frequências serão (provavelmente) feitas no Moodle, mas os alunos terão de estar presentes na sala de aula durante a frequência. Só será levada em conta a nota de alunos presentes e que tenham assinado uma folha de presenças. Normalmente as minhas frequências são feitas permitindo a consulta, mas confirmem comigo antes da data da frequência!
O projecto terá de ser entregue no último dia de aulas, com a presença de todos os elementos do grupo. Alunos que não estejam presentes na apresentação têm zero (0) no projecto. Se um aluno não puder estar por força maior, todo o grupo deve apresentar noutra data mais tarde (e a falta do aluno deve ser justificada). A apresentação é oral e as notas podem variar para cada elemento do grupo consoante o à-vontade de cada um com o próprio código. A nota é-vos dada na mesma altura. Não é necessária a entrega de relatório, mas é necessário a entrega do código-fonte. Aproveito para avisar que costumo fazer enunciados originais, e que se noto que o código foi (mal) copiado/adaptado de terceiros, aperto ainda mais com vocês...
A nota final da cadeira é definida pelo Prof. Vítor Santos, regente da cadeira. Para vos ajudar vou dar-vos as informações que tenho neste momento, mas é o Prof. Vítor Santos que define a nota e pode alterar estas regras a qualquer momento. Por favor contactem o prof. para terem informações mais actualizadas e fidedignas (os dados de contacto dos professores estão nos sistemas da Lusófona). Em princípio, a nota final será a média aritmética entre a nota final da parte prática e a nota da parte teórica da cadeira. Será o Prof. Vítor Santos a determinar como será efectuada a avaliação da parte teórica. Nenhuma das duas partes da cadeira pode ter nota inferior a sete (7), sob pena dos alunos serem obrigados a ir a exame. As notas de trabalhos da parte prática não serão levadas em conta se o aluno for a exame.
2007/2008, 1º semestre: Arquitectura de Computadores
Esta é uma cadeira do 1º ano, 1º semestre. O objectivo com esta cadeira é (também) dar-vos a conhecer os sistemas de "baixo nível" dos computadores. Refiro-me à única linguagem que o computador realmente conhece: Assembly.
Este conceito irá ser a base para compreenderem como é que na realidade funcionam os restantes sistemas informáticos de que terão conhecimento ao longo do curso. Por exemplo: como funcionam então as restantes linguagens informáticas se o computador só compreende Assembly?
A resposta é simples. Veja-se como analogia os sinais de trânsito. A linguagem falada humana é a única que na realidade compreendemos. Mas "em cima dela" fizemos uma criação intelectual necessária para (neste caso) rapidamente compreendermos avisos típicos de trânsito. Cada um deles é pequeno, simples e (+/-) intuitivo, mas para o descrevermos precisamos de usar muitas palavras da nossa linguagem falada.
O mesmo se passa com todo o software no computador que tem de ser "convertido" para muitas (mesmo muitas) "instruções" Assembly. Esse processo de conversão pode ser feito à priori, para poupar tempo (chamando-se então "compilação") ou "em tempo real" para poupar esforço ao programador (chamando-se então "interpretação"). Os programas (em Assembly**) que fazem estas coisas para as várias linguagens chamam-se então os compiladores e intérpretes das linguagens.
O que vamos descobrir este semestre são as instruções Assembly. Quem corre estas instruções é o processador central do computador (CPU), e cada tipo de computador tem um CPU diferente, logo uma linguagem Assembly diferente — daí que programas para um tipo de computador (e.g.: os antigos Mac) não funcionem noutro (e.g.: os PCs). Nas aulas práticas de Arquitectura de Computadores vamos estudar o Assembly dos PCs que usam um CPU da Intel linha "APX" ou "x86". Esse CPU usa um conjunto de instruções habitualmente chamado de "arquitectura Intel de 32 bits" ou "IA-32". Os novos PCs de 64 bits continuam a correr perfeitamente código IA-32, tal como qualquer clone da AMD (embora estes prefiram referir-se a ele simplesmente como "arquitectura x86").
Para simplificar o trabalho ao CPU (e termos computadores mais baratos e rápidos), cada instrução Assembly é codificada em apenas 1 ou poucos bytes (falaremos do que são bytes nas aulas teóricas com o Prof. regente da cadeira Alexandre Pereira). Mas bytes representam-se habitualmente por números o que tornaria a programação em Assembly (ainda) mais complicada. Então existe geralmente uma abreviação (habitualmente chamamos-lhe "mnemónica") textual para cada instrução. E temos então um programa que converte um ficheiro de texto com essas abreviações para um ficheiro executável com os bytes finais prontos a correr pelo CPU. Como a linguagem Assembly é um caso especial das linguagens, não chamamos a esse programa nem compilador nem intérprete, mas sim o assembler (em Inglês, "Assembly" é "montagem" — como em "linha de montagem" — e "assembler" é então aquele que monta [as instruções]).
Infelizmente, cada assembler usa um conjunto de mnemónicas ligeiramente diferente dos outros, mesmo quando são assemblers para o mesmo CPU. Nas aulas práticas vamos usar o Netwide Assembler (nasm) porque é gratuito e open-source. Embora o nasm funcione também em Windows, os exemplos das aulas práticas serão sempre com as "chamadas de sistema" do Linux (que é ele também, gratuito e open-source, permitindo aos alunos "ver por baixo do capô" para ver como funciona), pelo que estaremos sempre a trabalhar com o Linux. Se tu já conheces outros assemblers e queres usá-los, não há problema, mas cuidado que as frequências incidem (também) sobre as mnemónicas do nasm e respostas que possam ser válidas para outros assemblers mas não o sejam para o nasm são sempre consideradas erradas.
Para poderes trabalhar com o Linux no teu computador Windows de casa, terás de o instalar. Isto pode ser em chamado "dual-boot" ou com uma máquina virtual (tipicamente VMware — mais conhecida e versátil — ou, gratuito, o Microsoft Virtual PC). Procura ajuda na Lusófona sobre este tópico. Em alternativa, se tiveres um computador Mac recente, tens sorte! Ele por "debaixo do capô" tem Linux, pelo que embora eu não te possa confirmar que o Mac tem compatibilidade com as chamadas de sistema do Linux (deve ter), em principio poderás usar o nasm em Mac sem instalar mais nada!
A matéria e exercícios de Assembly que vamos usar foram desenvolvidos pelo Prof. Alexandre Pereira pelo que não devem estar num site público como este. Procura no Moodle da Lusófona por esse material.
A avaliação de toda a cadeira (incluindo a parte prática) é feita nas aulas teóricas pelo Prof. Alexandre Pereira. Consistirá em princípio em duas/três frequências ao longo do semestre e um projecto final. Confirma com o Prof. Alexandre Pereira como é feita a avaliação.
2007/2008, 2º semestre: Algoritmia
Os computadores hoje em dia não estão mais rápidos só porque correm a mais GHz, mas porque os métodos (algoritmos) de trabalhar a informação são cada vez mais inteligentes para poupar trabalho ao próprio computador.
Vê um exemplo (se bem que extremo): o Google. Achas realmente que quando carregas no botão "Pesquisa do Google" ele vai naquele momento procurar em todas as páginas na Internet pelas palavras que lhe deste? Achas que se fosse assim ele conseguiria responder-te em 1 segundo ou menos? Repara como o teu computador leva geralmente vários segundos para descarregar uma única página da Internet. Por muitos computadores e ligações à Internet simultâneas que o Google tivesse, seria impossível para ele descarregar "toda a Internet" num segundo para fazer a tua pesquisa. O processo tem de ser mais inteligente do que o que aparenta à superfície.
Formas inteligentes de guardar e pesquisar informação para que ela possa ser trabalhada de forma mais rápida, é o que vamos estudar em Algoritmia. Vamos ver, por exemplo, como é que consegues encontrar um elemento no meio de um conjunto de 100 olhando para apenas 7 elementos. Vamos falar de vectores, filas, pilhas, árvores, merge sort, quick sort, pesquisa binária e muitos outros temas. As aulas práticas vão ser baseadas na linguagem C, onde iremos trabalhar nestas estruturas com apontadores.
Podes encontrar elementos de apoio no Moodle da Lusófona, entre os quais slides meus sobre a linguagem C e sobre algoritmia (se bem que em C#). Vê também a secção de "Linguagens de Programação I", abaixo. Vamos trabalhar em C no Windows usando o Dev C++ da Bloodshed que usa o compilador da GNU (GCC) e é software gratuito sob a GPL.
Tem cuidado se já tens o GCC instalado no teu computador (com o MinGW ou Cygwin). O Dev C++ pode ficar confuso e dar erros estranhos quando é instalado desta forma. Em alternativa podes usar qualquer compilador ou ambiente de trabalho de C: Eclipse, Microsoft Visual C++ ou até o próprio Notepad ("Bloco de Notas") usando a compilação em linha de comandos com o MinGW ou Cygwin. Todas estas opções são gratuitas!
A avaliação de toda a cadeira (incluindo a parte prática) é feita nas aulas teóricas pelo Prof. Alexandre Pereira. Consistirá em princípio em duas/três frequências ao longo do semestre e um projecto final. Confirma com o Prof. Alexandre Pereira como é feita a avaliação.
2007/2008, 2º semestre: Linguagens de Programação I
Linguagens de Programação I apresenta-te à linguagem de programação de mais sucesso em informática: C. É nesta linguagem que os próprios sistemas operativos são escritos (incluindo o Windows e todos os Unix, incluindo o Linux). É com ela que compreendes a ponte entre Assembly que deste em Arquitectura de Computadores e as linguagens mais avançadas como C++, C# e Java.
Podes encontrar elementos de apoio no Moodle da Lusófona, entre os quais slides meus sobre a linguagem C. Vamos trabalhar em C no Windows usando o Dev C++ da Bloodshed que usa o compilador da GNU (GCC) e é software gratuito sob a GPL.
Tem cuidado se já tens o GCC instalado no teu computador (com o MinGW ou Cygwin). O Dev C++ pode ficar confuso e dar erros estranhos quando é instalado desta forma. Em alternativa podes usar qualquer compilador ou ambiente de trabalho de C: Eclipse, Microsoft Visual C++ ou até o próprio Notepad ("Bloco de Notas") usando a compilação em linha de comandos com o MinGW ou Cygwin. Todas estas opções são gratuitas!
A avaliação de toda a cadeira (incluindo a parte prática) é feita nas aulas teóricas pelo Prof. Alexandre Pereira. Consistirá em princípio em duas/três frequências ao longo do semestre e um projecto final. Confirma com o Prof. Alexandre Pereira como é feita a avaliação.
Se não encontrares aquilo que procuravas aqui, tenta procurar nas correspondentes páginas das cadeiras do sistema Fénix: LEIC/Alameda, LEIC/Taguspark, LERC/Taguspark, LEE/Taguspark.
2007/2008, 2º semestre: Arquitectura de Computadores (Taguspark)
As aulas de laboratório de Arquitectura de Computadores no IST do Taguspark incidem unicamente sobre os guiões de laboratório que têm de ser completados cada semana, sendo o aluno avaliado na mesma aula sobre o sucesso ou não dessa mesma execução. Podem trazer o trabalho já feito de casa (mas durante a avaliação faço-vos perguntas e têm de conhecer o vosso trabalho e a matéria!).
Eu estou convosco às terças-feiras para vos ajudar nos laboratórios e para tirar dúvidas para a execução do projecto. Para outras questões, por favor fala com os professores regentes da cadeira (Prof. José Delgado ou Prof. Rui Neves), ou consulta a página oficial da cadeira.
* ...e meninas, quando as há!
** Os primeiros eram (obrigatoriamente) em Assembly. Hoje em dia o primeiro programa que se escreve (usando Assembly ou outra linguagem) para qualquer nova linguagem de computador que seja inventada é um compilador da própria linguagem.
Todos os direitos reservados.
