Aula prática 1

Sumário

Avisos

Objectivos

Os alunos no final desta aula deverão ser capazes de:

  1. Entrar na sua área Linux
  2. Deslocar-se com à vontade no seu ambiente gráfico de utilização.
  3. Desenvolver programas muito simples com o XEmacs e a GCC (GNU Compiler Collection).

Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão repetir a aula autonomamente ou recorrer aos horários de dúvidas.

Introdução ao ambiente de trabalho

Como entrar na área de trabalho Windows NT

  1. Pressione ctrl-alt-del (todas ao mesmo tempo).
  2. Preencha o ecrã com o seu nome de utilizador (annnnn, onde nnnnn é o seu número) e a senha do Windows NT, atribuída pelo CIISCTE (Centro de Informática do ISCTE).  
  3. Ainda não tem área no Windows NT?  Resolva já o problema no CIISCTE.
  4. No campo Domain deve estar ALUNOS.

Acesso ao correio electrónico do ISCTE

  1. Execute aplicação Eudora (ícone no ambiente de trabalho Windows NT)
  2. Configure Eudora de acordo com instruções do CIISCTE.
  3. Actualize a sua caixa do correio.
  4. Alternativamente, use o Webmail do ISCTE:
    1. Abra janela do Internet Explorer.
    2. Desloque-se para http://webmail.iscte.pt.
    3. Introduza nome de utilizador (annnnn) e senha.  Atenção!  Nome e senha do CIISCTE!
    4. Não tem senha?  Resolva já o problema no CIISCTE.
  5. Procure mensagem com assunto "A sua senha na maquina mercurio é xxxxx".  
  6. Registe senha num papel!  Letras alternam com dígitos!  Não confunda letras com dígitos!

Registo no Yahoo! para acesso ao grupo ip-iscte (lista de correio electrónico)

  1. Siga instruções em O grupo ip-iscte do Yahoo! (http://iscte.pt/programacao/p1/metodologia.html#O grupo ip-iscte do Yahoo).
  2. Quando terminar, continue nas instruções abaixo.

Acesso à sua área de trabalho Linux na máquina mercurio

  1. Execute aplicação X-Win32 em Start/Programs/Telnet e Outros/X-Win32/X-Win32.
  2. Aparece janela de entrada na mercurio (mercurio.students.intranet ou mercurio.iscte.pt).
  3. Insira nome (annnnn) e senha recebida via correio electrónico!
Senha deve ser alterada já!  Siga instruções abaixo:
  1. Seleccione aplicação Terminal no Painel (em baixo à esquerda, ícone é um ecrã).
  2. Na janela que aparece escreva passwd e prima tecla <enter>.
  3. Digite senha (password) actual, recebida via correio electrónico, e prima tecla <enter>.
  4. Introduza nova senha duas vezes (para confirmação).
  5. Critérios de escolha de senha:
    1. Use mesma senha na mercurio e no Windows NT!  Simplifica transferência de ficheiros entre sistemas!  Ver Acedendo aos ficheiros na área de trabalho Linux a partir do Windows NT.
    2. Não use palavras do dicionário (português, inglês, francês, etc.): qualquer um adivinhará.
    3. Não use nomes próprios.  Muito menos o seu.  
    4. Não use nomes de clubes de futebol.
    5. Não use nada que seja óbvio para quem o conheça.
    6. Use dígitos e letras.
    7. Use exactamente oito caracteres.
    8. Nunca confie em ninguém.  Você é responsável pelo que for feito a partir da sua área!

Características do sistema Linux na máquina mercurio

  1. Sistema operativo: Linux, distribuição Caixa Mágica 8.0 (Sagres), versão do kernel 2.4.17
  2. Shell : /bin/tcsh (tcsh 6.10)
  3. Ambiente gráfico de utilização (Graphical User Interface): KDE 2.2.2.
  4. Editor: XEmacs (XEmacs 21.1.14).
  5. Compilador: c++, (GCC 3.2).
Mais esclarecimentos em Perguntas Frequentes.

Aspecto do ambiente gráfico

Pare brevemente o rato sobre elementos gráficos para obter sua descrição. Experimente pressionar botão Execução do Painel.  Surge novo ecrã virtual.  Prima botão direito do rato a mini-janela do Terminal (ou Konsole) na Lista de mini-janelas.  Escolha opção Para o ecrã actual.  O Terminal passa para este ecrã virtual.  O ecrã Enunciados fica disponível para enunciados das aulas.  Pode pôr uma janela em cada ecrã virtual evitando a sua sobreposição.

Pastas e ficheiros pré-existentes na área Linux

A sua área tem pasta IP com sub-pastas para cada aula (por exemplo, IP/Aula1).  Cada sub-pasta contém ficheiros necessários à aula respectiva.  Mantenha a organização existente, gravando resoluções de exercícios na pasta da aula correspondente.

Informações sobre o ambiente

  1. Copiar/Colar:
  2. Botões na barra de topo das janelas:

Utilização do editor XEmacs

Muitas das funcionalidades podem ser acedidas quer pelos botões no topo, quer pelos menus, quer por combinações de teclas (normalmente referidas como atalhos ou "shortcuts").  Na descrição do editor serão indicadas, sempre que necessário, as várias formas de aceder à mesma funcionalidade.  

No início é mais fácil usar botões, mas é mais eficaz usar atalhos: aprenda-os.

Alguns atalhos (não os experimente agora!):

Pratique um pouco o XEmacs:
  1. Clique no ícone do Painel que corresponde ao editor (XEmacs).
  2. Crie novo ficheiro: botão Open do XEmacs (ou <ctrl-x> <ctrl-f>, ou menu File/Open ) e digite/complete o nome do ficheiro com o caminho (path) completo ("~" no caminho significa "a minha casa", e é equivalente a /home/annnnn).  Caminho completo do ficheiro pode ser ~/IP/Aula1/nome.C.
  3. Para testar escreva o seu nome no ficheiro criado.
  4. Guarde ficheiro:  botão Save do XEmacs (ou <ctrl-x> <ctrl-s>, ou menu File/Save).
  5. Atenção:  Ficheiros de programa sempre com extensão .C (o 'c' é maiúsculo), que significa "programa na linguagem C++".
  6. Repare na mensagem no fundo do editor na janela de mensagens (última linha), também chamada mini-buffer.  Deve aparecer: Wrote : /home/annnnn/IP/nome.C.
  7. Feche o ficheiro:  File/Delete Buffer (ou <ctrl-x> <k>).
  8. Saia do XEmacs:  File/Exit (ou <ctrl-x> <ctrl-c>).
No XEmacs atente ao mini-buffer.  Esta janela alerta-o para várias situações: erros durante execução de comandos, avisos de tarefas completadas e pedidos de respostas a comandos, etc.  

Quando algo correr mal, verifique se há mensagens no mini-buffer.  Atalho <ctrl-g> cancela comando em execução.  Se algo ficar estranho, pressione <ctrl-g> várias vezes seguidas.

Utilização do compilador no editor XEmacs

Crie com editor XEmacs ficheiro chamado ola.C (pasta IP/Aula1) e copie para ele o seguinte programa C++:

#include <iostream>

using namespace std;

int main()
{
    cout << "Olá mundo!" << endl;
}

Compile o programa:  seleccione botão Compile (ou pressione <ctrl-c> <c>).  Aparece numa caixa de diálogo ou no mini-buffer:

make -k 'ola'

Pressione <enter> no mini-buffer ou o botão Compile na caixa de diálogo.

Aparece outra janela com resultado da compilação (compilação é tradução do programa da linguagem C++ para linguagem máquina, que é a língua nativa do computador).  Resultado da compilação pode incluir erros de compilação.  Quando isso acontece o programa tem "pontapés na gramática" da linguagem C++.  Neste caso não há erros e o resultado é

Compilation finished at ...

Criou o seu primeiro programa executável!  Abra um Terminal e escreva:

cd ~/IP/Aula1
./ola

Executou o seu primeiro programa!

O ficheiro onde escreveu o código C++ era ola.C e o ficheiro executável é apenas ola.

Percebeu para que serve a instrução cout << "Olá mundo!" << endl;?

Sempre que se altera o programa C++ é necessário recompilar (antes de executar o ficheiro executável).

Ajuda sobre o ambiente de trabalho

Dê comando man comando num Terminal para obter ajuda sobre comando comando (exemplo: man cp).

Use K/Ajuda/Centro de ajuda para obter ajuda em ambiente gráfico.  Explore Páginas de manual Unix e Manual do Utilizador do KDE.  

O cartão de referência do XEmacs está disponível em PostScript e em PDF.

Use o tutorial do XEmacs!  Dentro do XEmacs, escolha no menu Help/Basics/Tutorials/English.

Para sair da sua área Linux deve:

  1. fechar aplicações em execução (botão com a cruz no canto superior direito);
  2. seleccionar Sair no Painel.

Consulte as Perguntas Frequentes dos alunos de Introdução à Programação.

Acedendo aos ficheiros na área de trabalho Linux a partir do Windows NT

Em Windows NT tem acesso aos ficheiros na mercurio.  Clique sobre o ícone Network Neighborhood e escolha  a máquina mercurio (ou Mercurio).  Escolha o directório com o seu nome de utilizador.  Surgem os seus ficheiros na mercurio.  

Se não funcionar garanta primeiro que a sua senha é idêntica no Windows NT e no Linux.  Se continuar a não funcionar chame um docente.  (Faça figas.)

Exercícios

1.a)  Seja o ficheiro ex1.C, que pode ser encontrado no directório ~/IP/Aula1.  Compile o programa da seguinte forma:
  1. Seleccione o ecrã virtual Programação.
  2. Seleccione o editor (XEmacs).
  3. Seleccione Open para abrir um ficheiro.
  4. Digite o nome do ficheiro onde se encontra a código acima (~/IP/Aula1/ex1.C).  Pode usar a tecla <tab> para o XEmacs completar automaticamente o nome do ficheiro (caso não haja outro ficheiro que comece com as mesmas letras).  Pode também usar o rato para seleccionar os directórios seguindo o caminho até ao ponto onde se encontra o ficheiro.  Note que para seleccionar uma opção nas janelas do XEmacs deve usar o botão do meio do rato ou, caso este não exista, pressionar ambos os botões do rato em simultâneo.
  5. Depois de ter aberto o ficheiro prima o botão Compile (ou pressione <crtl-c> <c>).
  6. Prima o botão Compile da caixa de diálogo que apareceu no ecrã (ou <enter> na janela de mensagens do XEmacs se usou o atalho <ctrl-c> <c>).

  7. (Se posteriormente precisar de alterar o comando de compilação deverá usar o comando <ctrl-c> <c> e editar a linha que surgirá na janela de mensagens.)
    A linha que aparece na janela de compilação tem vários componentes:
  8. Leia os resultados da compilação.  Deverá apresentar a mensagem:
    1. Compilation finished at ...

Para executar um programa, pode ir ao Terminal, mudar para a pasta em que este se encontra (para isso use o comando cd ~/IP/Aula1) e depois escrever ./ex1.  Pode também seleccionar o botão Debug do XEmacs (falaremos mais tarde em maior pormenor do modo de depuração), seleccionar a pasta e o ficheiro que pretende executar e, quando a nova janela apresentar a prompt (gdb), escrever run.  Para seleccionar uma pasta no modo de Debug do XEmacs deve usar o botão do meio do seu rato, ou, caso este não exista, os dois botões do rato em simultâneo.  Opcionalmente pode pôr o cursor em cima da pasta e pressionar <enter>.

1.b)  Experimente fazer as seguintes alterações (mas leia primeiro o resto do exercício):
  1. Modifique a linha 18
    1. int m, n;
    para
      int m, n
        
  2. Modifique a linha 26
    1. if(n > m)
    para
      if(n > m
        
  3. Modifique a linha 37
    1. --divisor;
    para
      --divisor
        
  4. Modifique a linha 15
    1. cout << "Cálculo do .... números" << endl;
    para
      cout << "Cálculo do .... números << endl;
        
  5. Modifique a linha 33
    1. while(m % divisor != 0 or n % divisor != 0)
    para
      while((m % divisor != 0 or n % divisor != 0)
        
  6. Apague a última linha (linha 48)
    1. }
        
  7. Modifique a linha 9
    1. #include <iostream>
    para
      //#include<iostream>
        
  8. Modifique a linha 15
    1. cout << "Cálculo do .... números" << endl;
    para
      cout << "Cálculo do .... números";
Após cada alteração tente compilar o programa (se a compilação teve sucesso, o que deve acontecer apenas no último caso, tente também executá-lo)  e interprete os resultados.  Desfaça cada uma das alterações feitas antes de fazer a alteração seguinte, gravar, compilar e analisar de novo o resultado.

Quando detecta um erro de compilação posicione o cursor em cima da mensagem de erro e seleccione usando o botão do meio (ou ambos os botões do rato em simultâneo).  O cursor irá saltar para o programa e posicionar-se na linha em que o compilador detectou o erro . Normalmente não é a mesma linha em que se encontra de facto o erro, esta é uma das coisas importantes a notar neste exercício.  Outra coisa importante é começar a perceber que tipo de mensagem de erro é gerada quando, por exemplo, se esquece de um ponto e virgula (;) no fim de uma linha em que este é necessário, e comparar o sítio onde se encontra o erro com o local onde o compilador acha que o erro acontece.

Pode também posicionar o cursor em cima da mensagem de erro e pressionar <enter> para saltar para linha do programa correspondente.  Na janela do XEmacs, existe uma barra onde, entre outras informações, pode ver em que linha do programa se encontra.  Se estiver na linha 12, por exemplo, aparecerá, sensivelmente a meio da barra um L (de Line) seguido do número 12 (L12).