Os alunos no final desta aula deverão conhecer:
Deverão também ser capazes de:
A aula serve ainda para os alunos avançarem na resolução do Problema 1.
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.
Para todos os exercícios que se seguem deve explicitar claramente a pré-condição e a condição objectivo, i.e., o contrato, de todas as rotinas desenvolvidas.
1.a) Defina todas as variáveis e preencha os parâmetros
e tipos de devolução das funções necessárias
para o bom funcionamento do programa ex1.C
,
que pode encontrar no directório ~/IP/Aula4
.
Lembre-se que as variáveis devem ser definidas, tanto quanto possível, imediatamente antes da sua primeira utilização e de modo a terem o menor âmbito (ou zona de visibilidade) possível, excepto se forem constantes universais.
1.b) Transfira as definições de todas as funções
do programa acima para depois da função main()
.
Compile o programa. Interprete os erros e corrija-os sem alterar
a posição relativa das definições das funções.
2.a) Crie uma função que devolva a média de três números de vírgula flutuante passados como argumentos.
2.b) Crie um procedimento que divida três números de vírgula flutuante pela sua média. Use a função criada acima para calcular a média.
3.a) Crie um procedimento que, quando lhe forem
passados dois argumentos do tipo char
, troque os seus valores.
Coloque o procedimento no programa
ex3.C
, que se encontra no
directório ~/IP/Aula4
.
3.b) Alternativamente, use o procedimento swap()
da
biblioteca padrão do C++, acrescentando para isso acrescente
#include <algorithm>
ao início do programa.
4.a) Escreva um programa que leia uma linha de texto introduzida pelo utilizador e a escreva invertida. Por exemplo:
Introduza uma linha: gana seca
Ao contrário é: "aces anag"
Use o tipo string
para guardar a palavra lida.
4.b) Escreva uma função bool contem(string const cadeia, char
const caractere)
que devolva o valor lógico da afirmação "a cadeia cadeia
contém o caractere caractere
".
4.c) Escreva uma função numeroDeOcorrencias()
que
devolva o número de ocorrências de um dado caractere numa dada cadeia.
4.d) Escreva um procedimento que coloque um dado caractere numa dada cadeia de
caracteres em todas as posições em que outro caractere dado ocorra
numa outra cadeia de caracteres dada, que tem de ter o mesmo comprimento da
cadeia a alterar. O
procedimento pode-se chamar registaAcerto()
.
4.e) Escreva uma função que devolva a cadeia de caracteres recebida como argumento mas invertida. Altere o programa da alínea 4.a) de modo a usar a função.
5. Desenvolva uma função int notaFinal(int
const p1, int const p2, int const tf, int const f, int const
e)
que, dadas como argumentos as notas parciais de um aluno de Introdução
à Programação (i.e., as notas dos problemas, do trabalho
final, da frequência e do exame), devolva a sua classificação
final na disciplina. A classificação final da disciplina é calculada como se segue. A nota da avaliação
periódica é a soma ponderada da média das notas dos
problemas (com peso 0,2), da nota do trabalho final (peso 0,4) e da nota
da frequência (peso 0,4). A nota final é a maior de
entre: (a) a nota da avaliação periódica, (b) a nota
da avaliação periódica usando a nota do exame como
se da nota da frequência se tratasse, e (c) a nota do exame.
Ou seja, o exame pode ser usado isoladamente ou para melhorar a nota da
frequência, optando-se pela solução mais favorável
para o aluno. Se uma prova não tiver sido realizada pelo aluno
a nota dessa prova é 0 (zero).
6. Escreva uma função que permita somar de 0 a 5 valores inteiros dependendo do número de argumentos passados pelo programador consumidor (a soma de zero valores inteiros é zero!).
Para este exercício precisa de saber que é possível criar rotinas cujos parâmetros têm valores por omissão. Por exemplo, o procedimento
pode ser invocado de duas maneiras:
void f(int x, int y, int z = 1)
{
...
}
ou
f(5, 3); // x
é inicializado com o argumento 5,y
é inicializado com o//
argumento 3 ez
, à falta de argumento correspondente, é//
inicializado com valor por omissão 1.
f(5, 3, 4); // x
é inicializado com o argumento 5,y
é inicializado com o//
argumento 3 ez
é inicializado com o argumento 4.
7. Crie um procedimento com dois argumentos inteiros que divida ambos os seus parâmetros de entrada por 2. Ao retornar, o valor do primeiro argumento passado ao procedimento deve ter sido modificado mas o segundo deve manter o seu valor. Este procedimento serve para alguma coisa?
8. Defina o procedimento pedeValorPara()
,
em falta no ficheiro ex8.C
do directório ~/IP/Aula4
, de modo a que o resultado da execução do programa
seja
Introduza o 1º número: 4.0
Introduza o 2º número: 5.3
Introduza o 3º número: 4.2
Introduza o 4º número: 2.1
Introduza o 5º número: 1.7
O resultado é: 17.3.
9. Desenvolva uma função int operacao(char
const operador, int const primeiro_operando, int const segundo_operando)
que execute uma das
quatro operações aritméticas básicas usando
x
e y
como operandos. Segue uma lista de possíveis
chamadas da função e o seu resultado:
operacao('+', 6, 3)
devolve 9.operacao('-', 6, 3)
devolve 3.operacao('/', 6, 3)
devolve 2.operacao('*', 6, 3)
devolve 18.