Recibo, exame, 1ªépoca, 1ºsemestre, 1998/99, Programação I :
Nome: _______________________________________________
Nº ______________________
Ass. Docente: ________________________________________

Identificação

Nome: _______________________________________________
Nº ________________
Turma: ____________

ISCTE - ETI

Introdução à Programação

Exame, 1ª época

1998/1999,  1º semestre, Lisboa, 20 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, 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[100];

___A a;

___A a(1);

[cotação: 1.5]

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

___int b = a.x[i];

___int b = a.z;

___int b = a.f1();

___int b = f2(a);

[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 = f1() + x;

___int b = f2();

___int b = z;

[cotação: 1.5]

2.a) Considere uma função int menor(int m[], int n) que deve devolver o valor do menor elemento 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 pistas de aterragem de um aeroporto. Para cada avião é necessário guardar a pista em que vai aterrar (entre 0 e 9) e a identificação do avião (um número inteiro positivo inferior a 231). Durante o funcionamento o operador do programa irá necessitar de inserir na lista os aviões que pediram licença para aterrar, retirar da lista os aviões que já tenham aterrado e verificar se um determinado avião ainda se encontra em lista de espera.

3.a) Defina uma classe Avião que possa guardar a informação sobre a identificação de um avião e a pista onde está previsto aterrar. Deve existir um construtor para a classe avião com dois argumentos (identificação e pista de aterragem) e um construtor sem argumentos. Deve declarar também a sobrecarga do operador de igualdade (==) que compara dois aviões 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 um avião. Não é necessário nesta questão definir qualquer um dos métodos.

[cotação: 2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3.b) Defina uma classe ListaDeAterragem que deve guardar a informação sobre um conjunto de aviões (no máximo 100). Deve declarar os métodos necessários para inserir e retirar um avião da lista. Deve também declarar uma função que, dado um avião, devolve true se este já se encontra na lista e false caso contrário. 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 Avião.

[cotação: 1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3.d) Defina o operador de igualdade (==) entre dois aviões sabendo que dois aviões são iguais caso a sua identificação seja igual independentemente da pista onde devem aterrar.

[cotação: 1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Avião a(1,1);

cout << a;

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

Avião 1, vai aterrar na pista 1.

[cotação: 1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3.f) Defina o método da classe ListaDeAterragem que retira um avião (dado como argumento) da lista de aviões.

[cotação: 2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

[cotação: 1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

4. Defina completamente uma classe que permita manipular datas do ano. Deve definir o construtor (que verifica a correcção dos argumentos). Deve definir o operador ++ que permite adicionar um dia a uma data e o operador << que permite visualizar uma data no ecrã no seguinte formato ano/mês/dia. A implementação deve prever anos bissextos. Consideram-se anos bissextos todos os anos que sejam múltiplos de 4, excepto se são múltiplos de 100 e não são múltiplos de 400. Nesta questão devem ser definidos todos os métodos desta classe.
Esta classe deverá poder ser usada do seguinte modo:

Data a(1999,2,28);

a++;

cout << a;

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

1999/3/1

[cotação: 2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

5. Escreva um pequeno texto (sucinto) que explique as vantagens da metodologia de Dijkstra no desenvolvimento de ciclos.

[cotação: 1]