Os alunos no final desta aula deverão conhecer:
Deverão também ser capazes de:
Slang++
para desenvolver pequenos programas
interactivos.Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão concluir/repetir os exercícios desta aula autonomamente e ou recorrer aos horários de dúvidas.
O resumo da matéria abordada nesta aula prática pode ser consultado aqui.
Utilize sempre a metodologia de desenvolvimento de ciclos de Dijkstra.
1.a) Desenvolva uma função que devolva true
se o valor do argumento natural (i.e., um inteiro positivo) for primo e false
no caso
contrário. Recorda-se que um número primo é
todo o natural superior a 1 que apenas é divisível
por 1 e por si mesmo.
1.b) Implemente um procedimento que escreva no ecrã todos os números naturais primos entre até n (inclusive), sendo n passado como argumento do procedimento. Escusa de usar a metodologia de Dijkstra.
1.c) Escreva um programa que teste as rotinas das alíneas anteriores.
1.d) Haverá outras formas de escrever o ciclo? Como?
2. Desenvolva um programa que calcule e mostre o máximo de um conjunto de n números introduzidos pelo utilizador (o valor n também é introduzido pelo utilizador e assume-se positivo).
3. Esta é a primeira experiência que fará
com a biblioteca Slang++
(ver Manual
dos Pacotes), que permite manipular
o cursor, o ecrã, o teclado e fazer alguns menus e caixas de diálogo
simples. Para usar esta biblioteca deve incluir no inicio do ficheiro
a directiva
#include <Slang++/slang.H>
. Neste caso pode excluir a directiva
#include<iostream>
, dado que o cout
e o cin
não serão utilizados. Deve também
incluir da directiva de utilização using namespace Slang;
.
Para compilar um programa usando a biblioteca Slang++
(assumindo que
o seu programa se encontra num ficheiro fonte chamado teste.C
)
deve substituir no Emacs o comando
por
make -k teste
Tal como na biblioteca padrão do C++, existem os canais para inserção de valores no ecrã e extracção de valores do teclado (
c++ opções_de_compilação -o teste teste.C -lSlang++ -lUtilitarios -lslang
cout
e cin
), também na biblioteca Slang++
existem
duas entidades que representam o ecrã e o teclado e que se chamam
respectivamente ecra
e teclado
.
O objectivo deste primeiro exercício é escrever no ecrã, na posição (10, 10) um quadrado de lado 7, feito com caracteres '+'. Tenha em atenção que, ao contrário da biblioteca normal do C++, neste caso é possível movimentar e posicionar o cursor no ecrã (ou mesmo fora dele), por exemplo:
Para mais exemplos de utilização veja a documentação.
//
Posiciona o cursor na linha 2 coluna 3 a contar do canto superior esquerdo, com//
coordenadas (0,0):ecra << cursor(2, 3);
//
Move o cursor no ecrã na direcção indicada:ecra << sobeCursor;
ecra << baixaCursor;
ecra << recuaCursor;
ecra << avancaCursor;
//
Escreve no ecrã o caracter '+' e avança uma posição:ecra << '+';
//
Escreve no ecrã o caracter '+' e mantém a posição do cursor:ecra << parado << '+';
//
Pára até que seja premida uma tecla e põe a tecla na variáveltecla
:teclado.leProximaTeclaDisponivel();
Tecla tecla = teclado.teclaLida();
Deve executar os programas escritos usando a biblioteca Slang++
numa
consola Xterm
. Prima <alt-f2> e dê o comando xterm
.
O manual completo desta biblioteca pode ser consultado em Manual
dos Pacotes. Pode também testar os programas de exemplo que se
encontram listados na documentação e que estão disponíveis na distribuição
do código fonte (Pacotes-1.0.tar.gz
)
das bibliotecas que compõe o pacote Pacotes
.
Pode também testar o programa exemplo_slang.C
em ~/IP/Aula8/exemplo_slang.C
para ver como
funcionam alguma outras características da biblioteca Slang++
.
4.a) Desenvolva uma função que devolva true
caso exista algum múltiplo de k nos inteiros entre m
e n e false
caso contrário. Assuma que 0 <= m
<= n e que 0 < k.
4.b) Haverá alguma forma mais simples de resolver este problema, sem que seja necessário recorrer a nenhum ciclo?
5. Desenvolva uma função que permita ao utilizador
inserir caracteres sucessivos, terminando com o caractere '!'
,
e devolva quantos dos caracteres introduzidos pelo utilizador são
asteriscos ('*'
). Crie um pequeno programa para testar esta
função. Exemplo:
Introduza um conjunto de caracteres (termine com '!'):
qwe*98*8w er*we 112rwq!
Contei 3 asteriscos.
Não precisa de desenvolver o ciclo pela metodologia de Dijkstra. Limite-se a dizer qual a sua condição invariante.