OBJETIVOS

  • Utilizar funções da biblioteca padrão
  • Desenvolver funções e procedimentos
  • Definir parâmetros com passagem de valor por referência
  • Utilizar ficheiros para entrada e saída de dados

 

EXERCÍCIOS


Nota 1: As rotinas desenvolvidas nas aulas de problemas deverão ser testadas através de programas de teste desenvolvidos para o efeito.

Nota 2: Deve dar atenção à escolha dos nomes das variáveis e rotinas. Os identificadores devem sugerir o propósito do objeto que nomeiam.

 

1.     (Q11 do Cap.2) Desenvolva um programa que peça ao utilizador um ângulo ϴ e lhe apresente o valor calculado para cos 2 ) + sen 2( ϴ ). Use as funções trigonométricas disponíveis na biblioteca padrão, as quais estão descritas no Apêndice B do livro.

 

2.     (Q16 do Cap.2) Escreva uma função para converter graus Fahrenheit em graus Centígrados (descubra na Web a relação entre estas unidades).

 

3.     (Q18 do Cap.2) Considere o seguinte procedimento:

 

void p(double x, double & y, double & z)

{

    y = x;

    x = 2.0;

    z = x;

}

O que escreve na saída padrão o seguinte trecho de código?

 

   double a = 3.0;

   double b = 1.0;

   double c = 1.0;

   p(a, b, c);

   cout << a << " " << b << " " << c << endl;

 

4.     (Q19 do Cap.2) Escreva um procedimento que receba dois números (por referência) e substitua ambos pela sua média.

 

5.     (Q24 do Cap.2) O que escreve o seguinte trecho de código para os ficheiros ficheiro1 e ficheiro2 ?

 

ofstream ligacao2("ficheiro1");

ofstream ligacao1("ficheiro2");

ligacao2 << 2 << endl;

ligacao1 << 1 << endl;

ligacao2 << 4 << endl;

ligacao1 << 3 << endl;

 

6.     (Q26 do Cap.2) Com o propósito de mudar de uma interacção com um utilizador humano para uma leitura de dados a partir de ficheiro, reescreva o seguinte programa, de modo a que passe a obter os dados a partir do ficheiro dadosIniciais.txt (este programa foi/será discutido nas aulas teóricas e baseia-se no programa incluído no final do capítulo 2 do livro adoptado) :

 

#include <iostream>

#include <fstream>

 

using namespace std;

 

void trajetoria(double g, double v0, double t, double & h, double & v)

{

    v = v0 - g * t;

    h = v0 * t - g * t * t * 0.5;

}

 

void mostraVelocidadeAltitude(double t, double v, double h, ostream & saida)

{

    saida << "A velocidade no momento " << t << " e' "

          << v << " e a altitude e' " << h << endl;

 

    return;

}

 

int main()

{

    double gTerra = 9.81;

    double gMarte = 3.63;

 

    cout << "Introduza a velocidade inicial (m/s) > ";

    double v0;

    cin >> v0;

 

    cout << "Introduza o tempo (s) > ";

    double t;

    cin >> t;

 

    ofstream ligacaoSaida("resultado.txt");

 

    double v, h;

 

    trajetoria(gTerra, v0, t, h, v);

 

    ligacaoSaida << "Terra:" << endl;

 

    mostraVelocidadeAltitude(t, v, h, ligacaoSaida);

 

    trajetoria(gMarte, v0, t, h, v);

 

    ligacaoSaida << endl << endl << "Marte:" << endl;

 

    mostraVelocidadeAltitude(t, v, h, ligacaoSaida);

 

    return 0;

}

 

7.     (Q13 do Cap.2) De acordo com as informações disponíveis no Apêndice B do livro sobre floor e ceil , utilize estas funções num programa que peça um real, arredonde-o para o inteiro mais próximo, e que mostre esse inteiro ao utilizador.

 

8.     (Q15 do Cap.2) Desenvolva uma função double coseno(double x) que use a relação cos(x) = sen(x + π/2) e a função sin da biblioteca padrão para calcular o co-seno de um ângulo.

 

9.     (Q17 do Cap.2) Desenvolva uma função que receba como parâmetros de entrada o declive m e o ponto b de intersecção com o eixo Y de uma linha recta, y = mx + b, e que ainda receba uma coordenada no eixo X. A função deve retornar a coordenada no eixo Y correspondente ao ponto da recta com a coordenada recebida.

 

10. (Q20 do Cap.2) Escreva um procedimento troca(int & a, int & b) que troque os seus argumentos, de modo que o seguinte código mostrasse 1 2 na saída padrão:

 

int x = 2;

int y = 1;

troca(x, y);

cout << x << " " << y << endl;

 

11. (Q21 do Cap.2) Considere a seguinte definição:

 

int f(int & a)

{

    a = a + 1;

    return a;

}

Que valor atribuem as seguintes instruções a a ?

 

   int w = -1;

   int a = f(w) + f(w) + f(w);

  

Detectou alguma falha na definição anterior de acordo com os pressupostos para a definição de uma função? Se sim, corrija-a.

 

12. (Q25 do Cap.2) O que está mal na seguinte declaração de procedimento?

  void mostra(ostream saida, double valor);