Recibo, exame, 1ªépoca, 1ºsemestre, 1998/99, Programação I :

Nome: _______________________________________________
Nº ______________________
Ass. Docente: ________________________________________


Identificação

Nome: _______________________________________________
Nº ________________
Turma: ____________


ISCTE - IGE

Programação I

Exame, 1ª época

1998/1999,  1º semestre, 22 de Fevereiro de 1999


Notas:


1. Assinale com V (Verdadeiro) as expressões que estão correctas e com F (Falso) as que estão incorrectas.

Deve preencher todos os espaços indicados por um sublinhado (___) com V ou F.  Qualquer espaço não preenchido será considerado como uma resposta errada.

Qualquer alínea pode ter zero ou mais respostas correctas.  Cada resposta correctamente assinalada vale 0,5 valores.

Em todos os casos em que não é explicitamente referida a localização de uma instrução, considere que esta é dada na função main() do programa seguinte:

#include <iostream>
using namespace std;
class A {
private: 
    int x[100];
    int y;
	  int f1();
public:
    int z;
	  A(int a = 0, int b=1, int c=0);
    int f2(int);
    bool f3(int);
};

int main() {
    int i = 1, j = 2, k = 3, l = 2;
    ...
}

1. a)  Quais das seguintes instruções estão correctas?

___ A m[1];

___ A a(i,j,k,l);

___ A a(1,i,2);

[cotação: 1.5]

1. b) Assuma que está correctamente declarada uma matriz a de 10 elementos da classe A e nada mais . Quais das seguintes instruções estão correctas?

___ int b = a.z[3];

___ int b = a[2].z;

___ int b = a[0].f2(2);

___ int b = f1();

[cotação: 2]

1. c) Assuma que as seguintes instruções são dadas dentro de uma função membro da classe A, que não tem quaisquer argumentos, e que não são declaradas quaisquer variáveis dentro dessa função. Quais das seguintes instruções estão correctas?

___ int b = z + x;

___ int b = f2();

___ int b = f1() + y;

[cotação: 1.5]

2. a) Considere uma função int piatório(int m[], int n) que deve devolver o produto de todos os elementos de uma matriz m que contém n elementos. Dada a pré-condição n>0, indique a condição objectivo, condição invariante e guarda do ciclo necessário à construção desta função.

[cotação: 1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. b) Defina completamente a função indicada na alínea anterior.

[cotação: 1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Considere o problema da criação de um pequeno programa para gerir as contas de um banco. Para cada conta é necessário guardar o seu saldo (um número decimal) e a sua identificação (um número inteiro positivo inferior a 231). Durante o funcionamento o operador do programa irá necessitar de inserir novas contas na lista, retirar contas que foram fechadas e verificar o saldo de uma determinada conta que se encontra na lista.

3.a) Defina uma classe Conta que possa guardar a informação sobre a sua identificação e o seu saldo. Deverá ser possível criar variáveis da classe Conta com dois argumentos (identificação e saldo inicial), apenas com identificação ou sem qualquer argumento. Deve declarar também a sobrecarga do operador de igualdade (==) que compara duas contas e devolve true caso as suas identificações sejam iguais e false caso contrário. Deve também declarar a sobrecarga do operador << que permite visualizar no ecrã os dados de uma conta. Não é necessário nesta questão definir qualquer um dos métodos.

[cotação: 2]

 

 

 

 

 

 

 

 

 

 

 

 

 

3.b) Defina uma classe ListaDeContas que deve guardar a informação sobre uma lista de contas. Deve declarar os métodos necessários para inserir e retirar uma conta da lista. Deve também declarar uma função que, dada a identificação de uma conta existente na lista, devolve o saldo dessa conta. Não é necessário nesta questão definir qualquer um dos métodos.

[cotação: 2]

 

 

 

 

 

 

 

 

 

3.c) Defina o(s) construtor(es) da classe Conta.

[cotação: 1]

 

 

 

 

 

 

 

3.d) Defina o operador de igualdade (==) entre duas contas sabendo que duas contas são iguais caso a sua identificação seja igual independentemente do seu saldo.

[cotação: 1]

 

 

 

 

 

 

 

3.e) Defina o operador << para a classe Conta que permite dar as seguintes instruções:

Conta a(1, 200.5);

cout << a;

e cujo resultado é aparecer no ecrã o seguinte texto:

A conta 1, tem 200.5 mil escudos.

[cotação: 1]

 

 

 

 

 

 

 

 

 

3.f) Defina o método da classe ListaDeContas que retira uma conta (cuja identificação é dada como argumento) da lista de contas.

[cotação: 2]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.g) Faça um pequeno programa que use uma variável da classe ListaDeContas e peça para inserir nesta lista três contas cujos dados devem ser introduzidos pelo utilizador. Não é necessário repetir a declaração ou definição da classe ListaDeContas.

[cotação: 1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Defina completamente uma classe (HoraDoDia) que permita manipular horas do dia. Deve declarar a classe e definir o construtor (que verifica a correcção dos argumentos). Deve definir o operador - que permite calcular a diferença entre duas variáveis do tipo HoraDoDia.
Deve definir o operador << que permite visualizar no ecrã uma variável do tipo HoraDoDia no seguinte formato horas:minutos. Nesta questão é necessário definir todos os métodos da classe HoraDoDia. A implementação deve prever a seguinte possível utilização:

HoraDoDia a(23,15);

HoraDoDia a(1,0);

cout << b-a;

esta última operação deve fazer aparecer no ecrã o seguinte texto:

1:45

Note que a diferença entre duas horas do dia é sempre uma hora válida (i.e. entre 0 e 24 exclusivé, e os minutos estão entre 0 e 60 exclusivé).

[cotação: 2]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Explique (sucintamente) o que é a condição invariante de um ciclo e como demonstraria que uma condição é de facto invariante.

[cotação: 1]