António Roberto Software
a.roberto@mail.telepac.pt

Linguagens de Programação I
2º ano da Licenciatura em Informática de Gestão

Frequência de 13 de Dezembro de 2000

Escola Superior de Gestão de Santarém

Frequência de Linguagens de Programação I

13/Dezembro/2000 Duração: 2h Professor : António Roberto

 

I Parte

Considere a seguinte declaração da classe cAposta ( de totoloto ) :

class cAposta

{

int *pAp;

public :

cAposta ();

};

Tenha em conta a implementação do construtor :

cAposta::cAposta()

{

pAp = ( int *) malloc( sizeof( int ) * 6 );

// geração de números aleatórios

}

Considere o seguinte código cliente de cAposta comentado com as questões a que deve responder :

void main()

{

cAposta ap1, ap2;

// a) Desenhe os objectos ap1 e ap2.

// b) Declare e implemente o operador ==

if ( ap1 == ap2 )

cout << "As apostas são iguais " << endl;

else

cout << "As apostas não são iguais " << endl;

// c) Desenhe os objectos ap1 e ap2 após a execução da atribuição. Identifique o problema existente.

Declare e implemente a solução para o problema

ap1 = ap2;

 

// d) Declare e implemente o destrutor

 

}

II Parte

( Tenha presente o quebra-cabeças dos missionários e canibais. )

Considere a declaração da classe cMargem :

class cMargem

{

int Missionarios;

int Canibais;

public:

cMargem( int Miss, int Can);

void AlteraNrMissionarios( int Variacao );

void AlteraNrCanibais( int Variacao );

};

Considere a definição do construtor :

cMargem::cMargem( int Miss, int Can)

{

Missionarios = Miss;

Canibais = Can;

}

  1. Escreva a definição dos métodos AlteraNrMissionarios e AlteraNrCanibais .
  2. Considere a declaração da classe cRio :

    class cRio

    {

    cMargem Esquerda, Direita;

    public:

    cRio( int MissEsq, int CanEsq, int MissDir, int CanDir );

    cMargem *OutraMargem( cMargem *pMargem );

    friend class cBarco;

    };

  3. Escreva a definição do construtor e do método OutraMargem .
  4. Considere a declaração da classe cBarco :

    class cBarco

    {

    cMargem *pMargem; // ponteiro para a Margem onde está o barco

    cRio *pRio; // ponteiro para o Rio onde está o barco

    public :

    cBarco( cRio *pR );

    void Viagem( int NrMiss, int NrCan );

    };

    Considere a definição do construtor :

    cBarco::cBarco( cRio *pR )

    {

    pMargem = &( pR->Esquerda );

    pRio = pR;

    }

  5. Escreva a definição do método Viagem.
  6. Considere o seguinte código cliente :

    void main()

    {

    cRio Rio( 3,3,0,0);

    cBarco Barco( &Rio );

    //

    }

  7. Desenhe os objectos Rio e Barco após a sua construção.

 

III Parte

Considere a declaração ( incompleta ) da classe cConjunto :

class cConjunto

{

public:

int NrElementos;

void Adicionar( int e ); // adiciona o numero "e"

void Remover( int e ); // remove o numero "e"

int Elemento( int idx ); // retorna o elemento índice idx

bool ExisteElemento( int e ); // Existe o numero "e" no conjunto ?

};

Considere o seguinte código cliente :

void main()

{

cConjunto A, B, C, D;

// ...

C = A.Uniao(B);

D = A.Interseccao(B);

}

  1. Declare e implemente o método Uniao
  2. Declare e implemente o método Interseccao