Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Apostila Programação Orientada a Objeto com C++ - ProjetoIntegracaoNumerica - Rascunho, Manuais, Projetos, Pesquisas de Engenharia de Petróleo

Programação Orientada a Objeto com C++ UML C++ STL Programação GNU Programação Paralela

Tipologia: Manuais, Projetos, Pesquisas

2011

Compartilhado em 25/09/2011

andre-duarte-bueno-10
andre-duarte-bueno-10 🇧🇷

3 documentos

Pré-visualização parcial do texto

Baixe Apostila Programação Orientada a Objeto com C++ - ProjetoIntegracaoNumerica - Rascunho e outras Manuais, Projetos, Pesquisas em PDF para Engenharia de Petróleo, somente na Docsity! Capítulo 1 Projeto 1: Integração Numérica • Programação Orientada a Objeto com C++ 2 edição. • Autor: André Duarte Bueno UENF-LENEP-CCT-LDSC. • Disciplinas:  Programação Orientada a Objeto Com C++.  Programação Prática. Didática • O objetivo deste projeto é mostrar um mesmo programa com diferentes níveis de abstração e diferentes níveis de uso das ferramentas da linguagem de programação C++. Mostrar que com C++ pode-se desenvolver diferentes tipos de programas (maioresa detalhes veja seção ??).  Programa estruturado escrito em C++  utiliza alguns conceitos de C++, como cin/cout, switch, funções inline, const e referências, ou seja, utiliza algumas novi- dades de C++. Versões 0.1, 0.2, 0.3, 0.4.  Programa baseado em objeto escrito em C++  utiliza os conceitos de classes e heranças. Inclui controle de acesso (public, protected e private), funções friend e o conceito fundamental de classes. Versões 0.5, 0.6.  Programa orientado a objeto escrito em C++  inclui o conceito de polimorsmo e pode incluir a utilização de conceitos da STL, como containers e iteradores. Versões 0.7, 0.8.  Programa genérico escrito em C++  inclui os conceitos de programação gené- rica. Inclui a utilização de algoritmos genéricos da STL, uso intensivo de containers e iteradores. Versões 0.9, 1.0. 1 Projeto 1: Integração Numérica 2 1.1 Especicação • Desenvolver um programa para cálculo da área de funções simples. • O programa deve ser feito usando inicialmente paradigma de programação estruturada e depois programação orientada a objeto com C++. As versões nais devem usar recursos como templates e programação genérica. • O uso de recursos da linguagem de programação C/C++ devem ser acrescentados a cada nova versão. • O nível de abstração deve ser maior a cada nova versão. 1.2 Elaboração 1.2.1 O que é Integração Numérica? Em matemática, os métodos de integração numérica permitem calcular o valor aproximado de uma integral denida sem conhecer uma expressão analítica para a sua primitiva. O método básico envolvido nesta aproximação é chamado de quadratura numérica e consiste em:∫ b a f(x)dx ' n∑ i=0 αif(xi) (1.1) onde {αi}, são coecientes reais e {xi}, são pontos de [a, b]. Note que a área é calculada divivindo-se o intervalo em pequenos retângulos (veja ilustração na Figura 1.1 ). Os chamados métodos compostos consistem em dividir o intervalo de integração em diversos subintervalos e aplicar um método de quadratura em cada um dos intervalos:∫ b a f(x)dx = N∑ i=1 ∫ bi ai f(x)dx (1.2) onde a1 = a, bi = ai+1, e bn = b. O princípio básico destes métodos é o fato de o erro decrescer rapidamente com o comprimento do intervalo. Regra trapézio ∫ b a f(x)dx ' (b− a)f(a) + f(b) 2 (1.3) Regra trapézio composta ∫ b a f(x)dx ' h 2 [f(x1) + 2f(x2) + 2f(x3) + . . .+ f(xn)] (1.4) Regra Simpson ∫ b a f(x)dx ' (b− a) f(a) + 4f(a+b2 ) + f(b) 6 (1.5) Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 5 1.9 Versão 0.1 1.9.1 Características • Paradigma:  Programação Estruturada. • Funcionamento:  Todo código esta dentro da função main().  Variáveis criadas no inicio do programa. 1.9.2 Códigos Listing 1.1: Todo código dentro da função main(). /** * Projeto 1: Integração Numérica com C++. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Instituição: LENEP/CCT/UENF. * http :// www2.lenep.uenf.br/~bueno/DisciplinaCpp/MaterialExtra/Projetos. * Implementação de uma biblioteca de classes -funções para cálculo de integração numérica. * * Versão 0.1: * Código no estilo de C - Tudo dentro de main(). */ #include <iostream > /** Função principal do programa. * Cálculo da área de uma função do segundo grau usando método do trapézio */ int main(int argc , char **argv) { // Variáveis declaradas no início da funcao double c0; ///< Coeficiente c0 da função de segundo grau double c1; ///< Coeficiente c1 da função de segundo grau double c2; ///< Coeficiente c2 da função de segundo grau double limInf; ///< Limite Inferior do intervalo de integração double limSup; ///< Limite Inferior do intervalo de integração int numInt; ///< Numero intervalos , numero pontos double dx; ///< Intervalo dx double area; ///< Valor da área calculada double y; double x ; // Inicio código em sí // Entrada dados std::cout << "Hello , world!" << std::endl; std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; std::cin >> c1; std::cin.get(); std::cout << "Entre com c2 :\n"; std::cin >> c2; std::cin.get(); Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 6 std::cout << "Entre com dados do metodo integracao :\n"; std::cout << "Entre com Limite Inferior :\n"; std::cin >> limInf; std::cin.get(); std::cout << "Entre com limite Superior :\n"; std::cin >> limSup; std::cin.get(); std::cout << "Entre com numero intervalos :\n"; std::cin >> numInt; std::cin.get(); // Cálculos x = limInf; // posiciona x na posição inicial area = (c0 + c1*x + c2*x*x)*0.5; // calcula área primeiro retangulo x = limSup; // posiciona x na posição final area += (c0 + c1*x + c2*x*x)*0.5; // calcula área último retangulo x = limInf; // posiciona x na posição inicial dx = (limSup -limInf)/numInt; // calcula valor de dx for( int i = 1; i < numInt ; i++ ) // for para calculo dos retangulo intermediários { x += dx; // note que x é incrementado a cada passo area += (c0 + c1*x + c2*x*x); // e que a área dos retangulos é acumulada } area *= dx ; // a área final é obtida multiplicando -se a área por dx // Saída resultados std::cout << "Area = " << area << std::endl; std::cin.get(); return 0; } 1.9.3 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 7 1.10 Versão 0.2 1.10.1 Características • Paradigma:  Programação Estruturada. • Funcionamento:  Todo código esta dentro da função main().  Variáveis criadas ao longo do programa, criadas sob demanda. 1.10.2 Códigos Listing 1.2: Variáveis sob demanda. /** * Projeto 1: Integração Numérica com C++. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Instituição: LENEP/CCT/UENF. * http :// www2.lenep.uenf.br/~bueno/DisciplinaCpp/MaterialExtra/Projetos. * Implementação de uma biblioteca de classes -funções para cálculo de integração numérica. * * Versão 0.2: * Código no estilo de C - Tudo dentro de main(). * Nesta versão declaramos as variáveis perto de onde serão utilizadas. */ #include <iostream > /** Função principal do programa. * Cálculo da área de uma função do segundo grau usando método do trapézio */ int main(int argc , char **argv) { // Entrada dados std::cout << "Hello , world!" << std::endl; std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; double c0; // Variáveis criadas sob demanda std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; double c1; std:: cin >> c1; std::cin.get(); std::cout << "Entre com c2 :\n"; double c2; std:: cin >> c2; std::cin.get(); std::cout << "Entre com dados do metodo integracao :\n"; std::cout << "Entre com Limite Inferior :\n"; double limInf; std:: cin >> limInf; std::cin.get(); std::cout << "Entre com limite Superior :\n"; double limSup; std:: cin >> limSup; std::cin.get(); Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 10 std::cout << "Entre com c0 :\n"; double c0; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; double c1; std:: cin >> c1; std::cin.get(); std::cout << "Entre com c2 :\n"; double c2; std:: cin >> c2; std::cin.get(); std::cout << "Entre com dados do metodo integracao :\n"; std::cout << "Entre com Limite Inferior :\n"; double limInf; std:: cin >> limInf; std::cin.get(); std::cout << "Entre com limite Superior :\n"; double limSup; std:: cin >> limSup; std::cin.get(); std::cout << "Entre com numero intervalos :\n"; int numInt; std:: cin >> numInt; std::cin.get(); // Cálculos - chama funçao criada double area = Area(c0,c1,c2 ,limInf ,limSup ,numInt); // Saída resultados std::cout << "area = " << area << std::endl; std::cin.get(); return 0; } 1.11.3 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 11 1.12 Versão 0.4 1.12.1 Características • Paradigma:  Programação estruturada. • Funcionamento:  Código dividido, leitura de dados dentro da função main().  Cálculo da integral colocado dentro da função Area().  Cálculo da função colocado dentro da função F2G(). 1.12.2 Códigos Listing 1.4: Uso de duas funções auxiliares. /** * Projeto 1: Integração Numérica com C++. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Instituição: LENEP/CCT/UENF. * http :// www2.lenep.uenf.br/~bueno/DisciplinaCpp/MaterialExtra/Projetos. * Implementação de uma biblioteca de classes -funções para cálculo de integração numérica. * * Versão 0.4: * Código no estilo de C - Usando funções. * Parte do código que calcula a função do segundo grau * foi separada da função que calcula a Area. */ #include <iostream > /// Cálculo da função do segundo grau double F2G(double c0,double c1,double c2, double x) { return (c0 + c1*x + c2*x*x); } /// Cálculo da área usando trapézio // Note que requer passagem de muitos parâmetros. double Area(double c0,double c1,double c2,double limInf ,double limSup ,int numInt) { double area; double y; double x = limInf; area = F2G(c0,c1,c2,x)*0.5; // Chama função de segundo grau x = limSup; area += F2G(c0,c1 ,c2,x) * 0.5; // Chama função de segundo grau x = limInf; double dx = (limSup -limInf)/numInt; for( int i = 1; i < numInt ; i++ ) { x += dx; area += F2G(c0,c1 ,c2,x); // Chama função de segundo grau } Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 12 area *= dx ; return area; } /// Função principal do programa int main(int argc , char **argv) { // Entrada dados std::cout << "Hello , world!" << std::endl; std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; double c0; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; double c1; std:: cin >> c1; std::cin.get(); std::cout << "Entre com c2 :\n"; double c2; std:: cin >> c2; std::cin.get(); std::cout << "Entre com dados do metodo integracao :\n"; std::cout << "Entre com Limite Inferior :\n"; double limInf; std:: cin >> limInf; std::cin.get(); std::cout << "Entre com limite Superior :\n"; double limSup; std:: cin >> limSup; std::cin.get(); std::cout << "Entre com numero intervalos :\n"; int numInt; std:: cin >> numInt; std::cin.get(); // Cálculos // Chama função que calcula a área double area = Area(c0,c1,c2 ,limInf ,limSup ,numInt); // Saída resultados std::cout << "area = " << area << std::endl; std::cin.get(); return 0; } 1.12.3 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 15 : Setc0(_c0 : double) : Setc1(_c1 : double) : Setc2(_c2 : double) funcao : CFun2G : Usuário <<recursiva>>: f(_x : double) : double : Set limInf(_limInf : double) : CIntTrapezio() : Main : CFun2G() t rapezio : CIntTrapezio : Set limSup(_limSup : double) : SetnumInt (_numInt : int ) : Area(funcao : CFuncao*) : double : Main Diagrama Figura 1.4: Diagrama de Sequência. 1.13.3 Códigos . Listing 1.5: CFuncao.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFuncao.h * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ // Define variável de pré -processamento que impede dupla compilação deste arquivo. #ifndef CFUNCAO_H #define CFUNCAO_H Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 16 /** * Representa uma função genérica. * @class CFuncao */ class CFuncao { protected: double y; ///< Representa variável dependente. double x; ///< Representa variável independente. public: /// Construtor CFuncao () {}; /** * Calcula valor da função na posição x, isto é, y = f(x);. * @return double * @param _x */ virtual double f ( double _x = 0.0 ); /** * Set the value of y * @param _y the new value of y */ void Sety ( double _y ) { y = _y; }; /** * Get the value of y * @return the value of y */ double Gety ( ) { return y; }; /** * Set the value of x * @param _x the new value of x */ //void Setx ( double _x ) { x = _x; }; /** * Get the value of x * @return the value of x */ double Getx ( ) { return x; }; }; #endif // CFUNCAO_H Listing 1.6: CFuncao.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFuncao.cpp * Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 17 * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #include "CFuncao.h" /** * Calcula valor da função na posição x. * @return double * @param _x */ double CFuncao ::f ( double _x ) { return 0.0; } . Listing 1.7: CFun1G.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFun1G.h * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #ifndef CFUN1G_H #define CFUN1G_H #include "CFuncao.h" /** * Representa funcao do primeiro grau , y = c0 + c1 * x;. * @class CFun1G */ class CFun1G : public CFuncao { protected: double c0; ///< Representa coeficiente linear double c1; ///< Representa coeficiente angular public: /// Construtor CFun1G () {}; /** * Calcula valor da função na posição x, y = c0 + c1 * x;. * @return double * @param _x Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 20 }; #endif // CFUN2G_H Listing 1.10: CFun2G.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFun2G.cpp * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #include "CFun2G.h" /** * Representa funcao do segundo grau y = c0 + c1*x + c2*x*x;. * @return double * @param _x */ double CFun2G ::f (double _x ) { x = _x; y = c0 + c1*x + c2*x*x; return y ; } . Listing 1.11: CFunExp.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFunExp.cpp * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #ifndef CFUNEXP_H Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 21 #define CFUNEXP_H #include "CFuncao.h" /** * Representa funcao exponencial , y = a*exp(b*x). * @class CFunExp */ class CFunExp : public CFuncao { protected: double a; ///< Coeficiente a da funcao exponencial y = a*exp(b*x) double b; ///< Coeficiente b da funcao exponencial y = a*exp(b*x) public: /// Construtor CFunExp () {}; /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ virtual double f ( double _x = 0 ); /** * Set the value of a * @param _a the new value of a */ void Seta ( double _a ) { a = _a; }; /** * Get the value of a * @return the value of a */ double Geta ( ) { return a; }; /** * Set the value of b * @param _b the new value of b */ void Setb ( double _b ) { b = _b; } /** * Get the value of b * @return the value of b */ double Getb ( ) { return b; }; }; #endif // CFUNEXP_H Listing 1.12: CFunExp.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 22 * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CFunExp.cpp * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #include <cmath > /// math.h no C #include "CFunExp.h" using namespace std; /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ double CFunExp ::f ( double _x ) { x = _x; return y = a * exp( b * x ); } . Listing 1.13: CIntegral.h. /** * Projeto 1: Integração Numérica com C++. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Instituição: LENEP/CCT/UENF. * http :// www2.lenep.uenf.br/~bueno/DisciplinaCpp/MaterialExtra/Projetos. * Implementação de uma biblioteca de classes -funções para cálculo de integração numérica. * @file CIntegral.h * * Versão 0.5: * Código no estilo de C - Usando funções. * Parte do código que calcula a função do segundo grau * foi separada da função que calcula a Area. */ #ifndef CINTEGRAL_H #define CINTEGRAL_H #include "CFuncao.h" // inclui acesso a classe CFuncao /** * Representa método numérico para cálculo área funções. * @class CIntegral */ class CIntegral { protected: double limInf; ///< Limite Inferior do intervalo de integração double limSup; ///< Limite Inferior do intervalo de integração double dx; ///< Intervalo dx int numInt; ///< Numero intervalos , numero pontos double area; ///< Valor da área calculada Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 25 #include "CIntegral.h" /** * Representa método numérico trapésio para cálculo área funções. * @class CIntTrapezio */ class CIntTrapezio : public CIntegral { public: /// Construtor CIntTrapezio () {}; /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ); }; #endif // CINTTRAPEZIO_H Listing 1.16: CIntTrapezio.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CIntTrapezio.cpp * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #include "CIntTrapezio.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntTrapezio ::Area (CFuncao* funcao ) { area = funcao ->f(limInf)*0.5; area += funcao ->f(limSup)*0.5; // area = area + funcao ->f(limSup); double x = limInf; for( int i = 1; i < numInt ; i++ ) { // area += funcao ->f( limInf + i * dx ); x += dx; area += funcao ->f( x ); } area *= dx ; return area; Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 26 } . Listing 1.17: Uso de duas funções auxiliares. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file main.cpp * * Versão 0.5: * Código no estilo de C++ - Usando classes e objetos. * Criamos duas hierarquias de classes , uma para classes que representam funções , * e outra para classes que representam métodos de cálculo da área de funções. */ #include <iostream > #include "CFun2G.h" #include "CFunExp.h" #include "CIntTrapezio.h" /// Função principal do programa int main(int argc , char **argv) { std::cout << "Hello , world!" << std::endl; CFun2G funcao2G; // Cria objeto função std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; double _c0; std::cin >> _c0; std::cin.get(); funcao2G.Setc0(_c0); // Seta parâmetros a medida que lê , seta c0 std::cout << "Entre com c1 :\n"; double _c1; std:: cin >> _c1; std::cin.get(); funcao2G.Setc1(_c1); std::cout << "Entre com c2 :\n"; double _c2; std:: cin >> _c2; std::cin.get(); funcao2G.Setc2(_c2); std::cout << "Entre com dados do metodo integracao :\n"; CIntTrapezio trapezio; // Cria objeto de integração std::cout << "Entre com Limite Inferior :\n"; double _limInf; std:: cin >> _limInf; std::cin.get(); trapezio.SetlimInf(_limInf); // Seta parâmetros de integração std::cout << "Entre com limite Superior :\n"; double _limSup; std:: cin >> _limSup; std::cin.get(); trapezio.SetlimSup(_limSup); Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 27 std::cout << "Entre com numero intervalos :\n"; int _numInt; std:: cin >> _numInt; std::cin.get(); trapezio.SetnumInt(_numInt); std::cout << "\nArea = " << trapezio.Area(& funcao2G) << "\n"; std::cin.get(); return 0; } 1.13.4 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 30 // Define variável de pré -processamento que impede dupla compilação deste arquivo. #ifndef CFUNCAO_H #define CFUNCAO_H /** * Representa uma função genérica. * @class CFuncao */ class CFuncao { protected: double y; ///< Representa variável dependente. double x; ///< Representa variável independente. public: /// Construtor default CFuncao ():x(0.0),y(0.0) {}; /** * Calcula valor da função na posição x, isto é, y = f(x); * @return double * @param _x */ virtual double f ( double _x = 0.0 ); /** * Calcula valor da função na posição x, isto é, y = f(x);. * A sobrecarga do operador (), possibilita uso objeto como objeto função , objeto se comporta como uma função. * @return double * @param _x */ double operator ()( double _x = 0.0 ) { return f(x); } /** * Set the value of y * @param _y the new value of y */ void Sety ( double _y ) { y = _y; }; /** * Get the value of y * @return the value of y */ double Gety ( ) { return y; }; /** * Set the value of x * @param _x the new value of x */ void Setx ( double _x ) { x = _x; }; /** * Get the value of x * @return the value of x */ double Getx ( ) { return x; }; }; #endif // CFUNCAO_H Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 31 Listing 1.19: CFuncao.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #include "CFuncao.h" /** * Calcula valor da função na posição x. * @return double * @param _x */ double CFuncao ::f ( double _x ) { return 0.0; } . Listing 1.20: CFun1G.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #ifndef CFUN1G_H #define CFUN1G_H #include "CFuncao.h" /** * Representa funcao do primeiro grau , y = c0 + c1 * x;. * @class CFun1G */ class CFun1G : public CFuncao { Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 32 protected: double c0; ///< Representa coeficiente linear double c1; ///< Representa coeficiente angular public: /// Construtor default CFun1G ():c0 (0.0) ,c1(0.0) {}; /// Construtor sobrecarregado CFun1G(double _c0 , double _c1):c0(_c0),c1(_c1) {}; /** * Calcula valor da função na posição x, y = c0 + c1 * x;. * @return double * @param _x */ virtual double f (double _x ); /** * Calcula valor da função na posição x, y = c0 + c1 * x;. * @return double * @param _x * @param _c0 * @param _c1 */ virtual double f (double _x , double _c0 , double _c1) { c0 = _c0; c1 = _c1; return f(_x); } /** * Set the value of c0 * @param _c0 the new value of c0 */ void Setc0 ( double _c0 ) { c0 = _c0; }; /** * Get the value of c0 * @return the value of c0 */ double Getc0 ( ) { return c0; }; /** * Set the value of c1 * @param _c1 the new value of c1 */ void Setc1 ( double _c1 ) { c1 = _c1; }; ; /** * Get the value of c1 * @return the value of c1 */ double Getc1 ( ) { return c1; }; }; #endif // CFUN1G_H Listing 1.21: CFun1G.cpp. /** * Projeto 1: Integração Numérica com C++. Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 35 * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #include "CFun2G.h" /** * Representa funcao do segundo grau y = c0 + c1*x + c2*x*x;. * @return double * @param _x */ double CFun2G ::f ( double _x ) { x = _x; y = c0 + c1*x + c2*x*x; return y ; } . Listing 1.24: CFunExp.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #ifndef CFUNEXP_H #define CFUNEXP_H #include "CFuncao.h" /** * Representa funcao exponencial , y = a*exp(b*x). * @class CFunExp */ class CFunExp : public CFuncao { protected: double a; ///< Coeficiente a da funcao exponencial y = a*exp(b*x) double b; ///< Coeficiente b da funcao exponencial y = a*exp(b*x) public: /// Construtor default CFunExp ():a(0.0),b(0.0) {}; /// Construtor sobrecarregado CFunExp(double _a , double _b):a(_a),b(_b) {}; /** Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 36 * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ virtual double f ( double _x = 0 ); /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x , _a , _b */ virtual double f ( double _x , double _a, double _b ) { a = _a; b = _b; return f(_x); } /** * Set the value of a * @param _a the new value of a */ void Seta ( double _a ) { a = _a; }; /** * Get the value of a * @return the value of a */ double Geta ( ) { return a; }; /** * Set the value of b * @param _b the new value of b */ void Setb ( double _b ) { b = _b; } /** * Get the value of b * @return the value of b */ double Getb ( ) { return b; }; }; #endif // CFUNEXP_H Listing 1.25: CFunExp.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 37 #include <cmath > /// math.h no C #include "CFunExp.h" using namespace std; /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ double CFunExp ::f ( double _x ) { x = _x; return y = a * exp( b * x ); } . Listing 1.26: CIntegral.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #ifndef CINTEGRAL_H #define CINTEGRAL_H #include "CFuncao.h" /** * Representa método numérico para cálculo área funções. * @class CIntegral */ class CIntegral { protected: double limInf; ///< Limite Inferior do intervalo de integração double limSup; ///< Limite Inferior do intervalo de integração int numInt; ///< Numero intervalos , numero pontos double dx; ///< Intervalo dx double area; ///< Valor da área calculada public: /// Construtor default CIntegral (): limInf (0.0), limSup (0.0), numInt (100), dx(0.0),area (0.0){} /// Construtor sobrecarregado CIntegral( double _limInf , double _limSup , int _numInt) : limInf(_limInf), limSup(_limSup), numInt(_numInt), area (0.0) Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 40 * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #ifndef CINTTRAPEZIO_H #define CINTTRAPEZIO_H #include "CIntegral.h" /** * Representa método numérico trapésio para cálculo área funções. * @class CIntTrapezio */ class CIntTrapezio : public CIntegral { public: /// Construtor default CIntTrapezio (){} /// Construtor sobrecarregado CIntTrapezio( double _limInf , double _limSup , int _numInt) :CIntegral(_limInf ,_limSup ,_numInt) {} /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ); }; #endif // CINTTRAPEZIO_H Listing 1.29: CIntTrapezio.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #include "CIntTrapezio.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntTrapezio ::Area (CFuncao* funcao ) { area = funcao ->f(limInf)*0.5; area += funcao ->f(limSup)*0.5; // area = area + funcao ->f(limSup); Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 41 double x = limInf; for( int i = 1; i < numInt ; i++ ) { // area += funcao ->f( limInf + i * dx ); x += dx; area += funcao ->f( x ); } area *= dx ; return area; } . Listing 1.30: CSimulador.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file CSimulador * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #ifndef CSIMULADOR_H #define CSIMULADOR_H /** * Classe de controle da simulação. * Dentro de ExecutarSimulacao cria objetos e executa cálculos necessários. */ class CSimulador { public: /// Construtor da classe CSimulador () {}; /// Destrutor da classe virtual ~CSimulador () {}; /// Executa a simulação. int ExecutarSimulacao (); }; #endif // CSIMULADOR_H Listing 1.31: CSimulador.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 42 * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição da classe simulador e de construtores. */ #include <iostream > #include "CSimulador.h" #include "CFun2G.h" #include "CFunExp.h" #include "CIntTrapezio.h" /// Executa a simulação. int CSimulador :: ExecutarSimulacao () { // Entrada dados std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; double c0; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; double c1; std:: cin >> c1; std::cin.get(); std::cout << "Entre com c2 :\n"; double c2; std:: cin >> c2; std::cin.get(); std::cout << "Entre com dados do metodo integracao :\n"; std::cout << "Entre com Limite Inferior :\n"; double limInf; std:: cin >> limInf; std::cin.get(); std::cout << "Entre com limite Superior :\n"; double limSup; std:: cin >> limSup; std::cin.get(); std::cout << "Entre com numero intervalos :\n"; int numInt; std:: cin >> numInt; std::cin.get(); // Criação objeto função e objeto integração CFun2G funcao2G(c0 ,c1,c2); CIntTrapezio trapezio(limInf ,limSup ,numInt); // Cálculo e, logo após , saída de resultados std::cout << "\nArea = " << trapezio.Area(& funcao2G) << "\n"; std::cin.get(); return 0; } . Listing 1.32: Uso de duas funções auxiliares. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 45 1.15.3 Códigos . Listing 1.33: CFuncao.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ // Define variável de pré -processamento que impede dupla compilação deste arquivo. #ifndef CFUNCAO_H #define CFUNCAO_H #include <iostream > /** * Representa uma função genérica. * @class CFuncao */ class CFuncao { protected: double y; ///< Representa variável dependente. double x; ///< Representa variável independente. public: /// Construtor default CFuncao ():x(0.0),y(0.0) {}; /** * Calcula valor da função na posição x, isto é, y = f(x);. * @return double * @param _x */ virtual double f ( double _x = 0.0 ) = 0; /** * Calcula valor da função na posição x, isto é, y = f(x);. * A sobrecarga do operador (), possibilita uso objeto como objeto função , objeto se comporta como uma função. * @return double * @param _x */ double operator ()( double _x = 0.0 ) { return f(x); } /** * Set the value of y Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 46 * @param _y the new value of y */ void Sety ( double _y ) { y = _y; }; /** * Get the value of y * @return the value of y */ double Gety ( ) const { return y; }; /** * Set the value of x * @param _x the new value of x */ //void Setx ( double _x ) { x = _x; }; /** * Get the value of x * @return the value of x */ double Getx ( ) const { return x; }; /** * Input the atribut values. */ virtual void Entrada () = 0; /** * Ouput the function. */ virtual void Saida () = 0; /** * Overloading operator >> */ friend std:: istream& operator >>(std:: istream& in, CFuncao& funcao); /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFuncao& funcao); }; #endif // CFUNCAO_H Listing 1.34: CFuncao.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 47 #include "CFuncao.h" /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFuncao& funcao) { in >> funcao.x; in.get(); in >> funcao.y; return in; } /** * Overloading operator << */ std:: ostream& operator <<(std:: ostream& out , CFuncao& funcao) { out << funcao.x << " " << funcao.y; return out; } . Listing 1.35: CFun1G.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CFUN1G_H #define CFUN1G_H #include "CFuncao.h" /** * Representa funcao do primeiro grau , y = c0 + c1 * x;. * @class CFun1G */ class CFun1G : public CFuncao { protected: double c0; ///< Representa coeficiente linear double c1; ///< Representa coeficiente angular public: /// Construtor default CFun1G ():c0 (0.0) ,c1(0.0) {}; /// Construtor sobrecarregado Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 50 return y; } /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFun1G& funcao) { in >> funcao.c0; in.get(); in >> funcao.c1; return in; } /** * Overloading operator << */ std:: ostream& operator <<(std:: ostream& out , CFun1G& funcao) { out << funcao.c0 << " " << funcao.c1 << " "; return out; } . Listing 1.37: CFun2G.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CFUN2G_H #define CFUN2G_H #include "CFun1G.h" /** * Representa funcao do segundo grau y = c0 + c1*x + c2*x*x;. * @class CFun2G */ class CFun2G : public CFun1G { protected: double c2; ///< Coeficiente quadrático public: /// Construtor CFun2G () {}; /** Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 51 * Calcula valor da função na posição x, y = c0 + c1 * x + c2 *x*x;. * @return double * @param _x */ virtual double f (double _x = 0 ); /** * Calcula valor da função na posição x, y = c0 + c1 * x + c2 *x*x;. * @return double * @param _x */ virtual double f (double _x , double _c0 , double _c1 , double _c2 ) { c0 = _c0; c1 = _c1; c2 = _c2; f(_x); } /** * Set the value of c2 * @param _c2 the new value of c2 */ void Setc2 ( double _c2 ) { c2 = _c2; }; /** * Get the value of c2 * @return the value of c2 */ double Getc2 ( ) const { return c2; }; /** * Input the atribut values. */ virtual void Entrada (); /** * Ouput the function. */ virtual void Saida (); /** * Overloading operator >> */ friend std:: istream& operator >>(std:: istream& in, CFun2G& funcao); /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFun2G& funcao); }; #endif // CFUN2G_H Listing 1.38: CFun2G.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 52 * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include "CFun2G.h" /** * Input the atribut values. */ void CFun2G :: Entrada () { std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Inicia pedindo dados de 1G y = c0 + c1*x :\n"; CFun1G :: Entrada (); /* std::cout << "Entre com dados da funcao 2G y = c0 + c1*x + c2*x*x :\n"; std::cout << "Entre com c0 :\n"; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; std:: cin >> c1; std::cin.get(); */ std::cout << "Agora , entre com c2 :\n"; std:: cin >> c2; std::cin.get(); } /** * Output the function. */ void CFun2G ::Saida() { std::cout << "Funcao 2G y = " << c0 << " + "<< c1 << " * x + "<< c2 << " * x * x \n"; } /** * Representa funcao do segundo grau y = c0 + c1*x + c2*x*x;. * @return double * @param _x */ double CFun2G ::f (double _x ) { x = _x; y = c0 + c1*x + c2*x*x; return y ; } /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFun2G& funcao) { in >> funcao.c0; in.get(); Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 55 Listing 1.40: CFunExp.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include <cmath > /// math.h no C #include "CFunExp.h" /** * Input the atribut values. */ void CFunExp :: Entrada () { std::cout << "Entre com dados da funcao 2G y = a * exp( b * x );\n"; std::cout << "Entre com a :\n"; std::cin >> a; std::cin.get(); std::cout << "Entre com b :\n"; std:: cin >> b; std::cin.get(); } /** * Output the function. */ void CFunExp ::Saida () { std::cout << "Funcao Exp y = " << a << " * e^("<< b << " * x) \n"; } /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ double CFunExp ::f ( double _x ) { x = _x; return y = a * std::exp( b * x ); } /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFunExp& funcao) { in >> funcao.a; in.get(); in >> funcao.b; Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 56 return in; } /** * Overloading operator << */ std:: ostream& operator <<(std:: ostream& out , CFunExp& funcao) { out << funcao.a << " " << funcao.b << " "; return out; } . Listing 1.41: CIntegral.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CINTEGRAL_H #define CINTEGRAL_H #include "CFuncao.h" /** * Representa método numérico para cálculo área funções. * @class CIntegral */ class CIntegral { protected: double limInf; ///< Limite Inferior do intervalo de integração double limSup; ///< Limite Inferior do intervalo de integração double dx; ///< Intervalo dx int numInt; ///< Numero intervalos , numero pontos double area; ///< Valor da área calculada public: /// Construtor default CIntegral (): limInf (0.0), limSup (0.0), numInt (100), dx(0.0),area (0.0){} /// Construtor sobrecarregado CIntegral( double _limInf , double _limSup , int _numInt) : limInf(_limInf), limSup(_limSup), numInt(_numInt), area (0.0) { dx = (limSup - limInf) / numInt; } Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 57 /// Construtor sobrecarregado , cópia de CIntegral CIntegral(const CIntegral& integral) { this ->limInf = integral.GetlimInf (); this ->limSup = integral.GetlimSup (); this ->numInt = integral.GetnumInt (); this ->dx = integral.Getdx(); }; /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ) = 0; /** * Set the value of limInf * @param _limInf the new value of limInf */ void SetlimInf ( double _limInf ) { limInf = _limInf ; }; /** * Get the value of limInf * @return the value of limInf */ double GetlimInf ( ) const { return limInf; }; /** * Set the value of limSup * @param _limSup the new value of limSup */ void SetlimSup ( double _limSup ) { limSup = _limSup; }; /** * Get the value of limSup * @return the value of limSup */ double GetlimSup ( ) const {return limSup; } ; /** * Set the value of dx * @param _dx the new value of dx */ void Setdx ( double _dx ) { dx = _dx; numInt = (limSup - limInf) / dx ;}; /** * Get the value of dx * @return the value of dx */ double Getdx ( ) const { return dx;}; /** * Set the value of numInt * @param _numInt the new value of numInt */ void SetnumInt ( int _numInt ) { numInt = _numInt; dx = (limSup - limInf) / numInt; Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 60 */ #include "CIntTrapezio.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntTrapezio ::Area (CFuncao* funcao ) { area = funcao ->f(limInf)*0.5; area += funcao ->f(limSup)*0.5; // area = area + funcao ->f(limSup); double x = limInf; for( int i = 1; i < numInt ; i++ ) { // area += funcao ->f( limInf + i * dx ); x += dx; area += funcao ->f( x ); } area *= dx ; return area; } . Listing 1.45: CIntSimpson.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CINTSIMPSON_H #define CINTSIMPSON_H #include "CIntTrapezio.h" /** * Representa método numérico simpson para cálculo área funções. * @class CIntSimpson */ class CIntSimpson : public CIntTrapezio { public: /// Construtor CIntSimpson () {}; /// Construtor sobrecarregado , cópia de CIntegral // Possibilita construir um CIntSimpson a partir de um CIntTrapezio Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 61 CIntSimpson(const CIntegral& integral) { this ->limInf = integral.GetlimInf (); this ->limSup = integral.GetlimSup (); this ->numInt = integral.GetnumInt (); this ->dx = integral.Getdx(); }; /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ); }; #endif // CINTSIMPSON_H Listing 1.46: CIntSimpson.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include "CIntSimpson.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntSimpson ::Area (CFuncao* funcao ) { area = 0.5* ( funcao ->f(limInf) // ponto 0 // [0] + funcao ->f(limSup) ) ; // ponto n // [4] for (int i = 1; i < (numInt - 2); i += 2) { area += 2.0 * funcao ->f (limInf + i * dx) // ponto 1,...,n-3 // [1] + funcao ->f (limInf + (i + 1) * dx); // ponto 2,...,n-2 // [2] } area += 2.0 * funcao ->f (limSup - dx); // ponto n-1 // [3] area *= 2.0 * dx / 3.0; return area; } Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 62 . Listing 1.47: CSimulador.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CSIMULADOR_H #define CSIMULADOR_H class CSimulador { public: /// Construtor da classe CSimulador () {}; /// Destrutor da classe virtual ~CSimulador () {}; /// Executa a simulação. int ExecutarSimulacao (); }; #endif // CSIMULADOR_H Listing 1.48: CSimulador.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.7: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include "CSimulador.h" #include "CFun1G.h" Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 65 1.16 Versão 0.8 1.16.1 Características • Paradigma:  Programação Orientada a Objeto. • Funcionamento:  Adicionada classe CFuncaoFactory, que é usada para criar objeto função (uso do padrão Simple Factory). 1.16.2 Diagramas A Figura 1.8 mostra o diagrama de classes do programa. CFun2G + f(_x : double) : double + f(_x : double, _c0 : double, _c1 : double, _c2 : double) : double + Setc2(_c2 : double) + Getc2() : double + CFun2G() + Entrada() + Saida() + operator >>(in : std::ist ream&, funcao : CFun2G&) : std::ist ream& + operator <<(out : std::ost ream&, funcao : CFun2G&) : std::ost ream& + CFun2G(_c0 : double, _c1 : double, _c2 : double) CFunExp + f(_x : double) : double + f(_x : double, _a : double, _b : double) : double + Seta(_a : double) + Geta() : double + Setb(_b : double) + Getb() : double + CFunExp() + Entrada() + Saida() + operator >>(in : std::ist ream&, funcao : CFunExp&) : std::ist ream& + operator <<(out : std::ost ream&, funcao : CFunExp&) : std::ost ream& + CFunExp(_a : double, _b : double) CFuncao + f(_x : double) : double + operator ( )(_x : double) : double + Sety(_y : double) + Gety() : double + Getx() : double + CFuncao() + Entrada() + Saida() + operator >>(in : std::ist ream&, funcao : CFuncao&) : std::ist ream& + operator <<(out : std::ost ream&, funcao : CFuncao&) : std::ost ream& + Setx(_x : double) CIntTrapezio + Area(funcao : CFuncao*) : double + CIntTrapezio() + CIntTrapezio(_limInf : double, _limSup : double, _numInt : int ) CSimulador + CSimulador() + ~ CSimulador() + ExecutarSimulacao() : int CFun1G + f(_x : double) : double + f(_x : double, _c0 : double, _c1 : double) : double + Setc0(_c0 : double) + Getc0() : double + Setc1(_c1 : double) + Getc1() : double + CFun1G() + Entrada() + Saida() + operator >>(in : std::ist ream&, funcao : CFun1G&) : std::ist ream& + operator <<(out : std::ost ream&, funcao : CFun1G&) : std::ost ream& + CFun1G(_c0 : double, _c1 : double) CIntegral + Area(funcao : CFuncao*) : double + Set limInf(_limInf : double) + Get limInf() : double + Set limSup(_limSup : double) + Get limSup() : double + Setdx(_dx : double) + Getdx() : double + SetnumInt (_numInt : int ) + GetnumInt () : int + CIntegral() + CIntegral(integral : const CIntegral&) + Entrada() + CIntegral(_limInf : double, _limSup : double, _numInt : int ) CIntSimpson + CIntSimpson() + CIntSimpson(integral : const CIntegral&) + Area(funcao : CFuncao*) : double Diagrama Figura 1.8: Diagrama de Classe. Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 66 1.16.3 Códigos . Listing 1.50: CFuncao.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ // Define variável de pré -processamento que impede dupla compilação deste arquivo. #ifndef CFUNCAO_H #define CFUNCAO_H #include <iostream > /** * Representa uma função genérica. * @class CFuncao */ class CFuncao { protected: double y; ///< Representa variável dependente. double x; ///< Representa variável independente. public: /// Construtor default CFuncao ():x(0.0),y(0.0) {}; /** * Calcula valor da função na posição x, isto é, y = f(x);. * @return double * @param _x */ virtual double f ( double _x = 0.0 ) = 0; /** * Calcula valor da função na posição x, isto é, y = f(x);. * A sobrecarga do operador (), possibilita uso objeto como objeto função , objeto se comporta como uma função. * @return double * @param _x */ double operator ()( double _x = 0.0 ) { return f(x); } /** * Set the value of y Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 67 * @param _y the new value of y */ void Sety ( double _y ) { y = _y; }; /** * Get the value of y * @return the value of y */ double Gety ( ) const { return y; }; /** * Set the value of x * @param _x the new value of x */ //void Setx ( double _x ) { x = _x; }; /** * Get the value of x * @return the value of x */ double Getx ( ) const { return x; }; /** * Input the atribut values. */ virtual void Entrada () = 0; /** * Ouput the function. */ virtual void Saida () = 0; /** * Overloading operator >> */ friend std:: istream& operator >>(std:: istream& in, CFuncao& funcao); /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFuncao& funcao); }; #endif // CFUNCAO_H Listing 1.51: CFuncao.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 70 /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFun1G& funcao); }; #endif // CFUN1G_H Listing 1.53: CFun1G.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include "CFun1G.h" /** * Input the atribut values. */ void CFun1G :: Entrada () { std::cout << "Entre com dados da funcao 1G y = c0 + c1*x :\n"; std::cout << "Entre com c0 :\n"; std::cin >> c0; std::cin.get(); std::cout << "Entre com c1 :\n"; std:: cin >> c1; std::cin.get(); } /** * Output the function. */ void CFun1G ::Saida() { std::cout << "Funcao 1G y = " << c0 << " + "<< c1 << " * x \n"; } // out << "x = " << x << " y = " << y; /** * Calcula valor da função na posição x, y = c0 + c1 * x;. * @return double * @param _x */ double CFun1G ::f (double _x ) { x = _x; y = c0 + c1 * x; Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 71 return y; } /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFun1G& funcao) { in >> funcao.c0; in.get(); in >> funcao.c1; return in; } /** * Overloading operator << */ std:: ostream& operator <<(std:: ostream& out , CFun1G& funcao) { out << funcao.c0 << " " << funcao.c1 << " "; return out; } . Listing 1.54: CFun2G.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CFUN2G_H #define CFUN2G_H #include "CFun1G.h" /** * Representa funcao do segundo grau y = c0 + c1*x + c2*x*x;. * @class CFun2G */ class CFun2G : public CFun1G { protected: double c2; ///< Coeficiente quadrático public: /// Construtor CFun2G () {}; /** Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 72 * Calcula valor da função na posição x, y = c0 + c1 * x + c2 *x*x;. * @return double * @param _x */ virtual double f (double _x = 0 ); /** * Calcula valor da função na posição x, y = c0 + c1 * x + c2 *x*x;. * @return double * @param _x */ virtual double f (double _x , double _c0 , double _c1 , double _c2 ) { c0 = _c0; c1 = _c1; c2 = _c2; f(_x); } /** * Set the value of c2 * @param _c2 the new value of c2 */ void Setc2 ( double _c2 ) { c2 = _c2; }; /** * Get the value of c2 * @return the value of c2 */ double Getc2 ( ) const { return c2; }; /** * Input the atribut values. */ virtual void Entrada (); /** * Ouput the function. */ virtual void Saida (); /** * Overloading operator >> */ friend std:: istream& operator >>(std:: istream& in, CFun2G& funcao); /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFun2G& funcao); }; #endif // CFUN2G_H Listing 1.55: CFun2G.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 75 */ virtual double f ( double _x = 0 ); /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x , _a , _b */ virtual double f ( double _x , double _a, double _b ) { a = _a; b = _b; return f(_x); } /** * Set the value of a * @param _a the new value of a */ void Seta ( double _a ) { a = _a; }; /** * Get the value of a * @return the value of a */ double Geta ( ) const { return a; }; /** * Set the value of b * @param _b the new value of b */ void Setb ( double _b ) { b = _b; } /** * Get the value of b * @return the value of b */ double Getb ( ) const { return b; }; /** * Input the atribut values. */ virtual void Entrada (); /** * Ouput the function. */ virtual void Saida (); /** * Overloading operator >> */ friend std:: istream& operator >>(std:: istream& in, CFunExp& funcao); /** * Overloading operator << */ friend std:: ostream& operator <<(std:: ostream& out , CFunExp& funcao); }; #endif // CFUNEXP_H Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 76 Listing 1.57: CFunExp.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include <cmath > /// math.h no C #include "CFunExp.h" /** * Input the atribut values. */ void CFunExp :: Entrada () { std::cout << "Entre com dados da funcao Exp y = a * exp( b * x );\n"; std::cout << "Entre com a :\n"; std::cin >> a; std::cin.get(); std::cout << "Entre com b :\n"; std:: cin >> b; std::cin.get(); } /** * Output the function. */ void CFunExp ::Saida () { std::cout << "Funcao Exp y = " << a << " * e^("<< b << " * x) \n"; } /** * Calcula valor da função exponencial na posição x, y = a*exp(b*x). * @return double * @param _x */ double CFunExp ::f ( double _x ) { x = _x; return y = a * std::exp( b * x ); } /** * Overloading operator >> */ std:: istream& operator >>(std:: istream& in, CFunExp& funcao) { in >> funcao.a; in.get(); in >> funcao.b; Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 77 return in; } /** * Overloading operator << */ std:: ostream& operator <<(std:: ostream& out , CFunExp& funcao) { out << funcao.a << " " << funcao.b << " "; return out; } . Listing 1.58: CIntegral.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CINTEGRAL_H #define CINTEGRAL_H #include "CFuncao.h" /** * Representa método numérico para cálculo área funções. * @class CIntegral */ class CIntegral { protected: double limInf; ///< Limite Inferior do intervalo de integração double limSup; ///< Limite Inferior do intervalo de integração double dx; ///< Intervalo dx int numInt; ///< Numero intervalos , numero pontos double area; ///< Valor da área calculada public: /// Construtor default CIntegral (): limInf (0.0), limSup (0.0), numInt (100), dx(0.0),area (0.0){} /// Construtor sobrecarregado CIntegral( double _limInf , double _limSup , int _numInt) : limInf(_limInf), limSup(_limSup), numInt(_numInt), area (0.0) { dx = (limSup - limInf) / numInt; } Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 80 * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CINTTRAPEZIO_H #define CINTTRAPEZIO_H #include "CIntegral.h" /** * Representa método numérico trapésio para cálculo área funções. * @class CIntTrapezio */ class CIntTrapezio : public CIntegral { public: /// Construtor default CIntTrapezio (){} /// Construtor sobrecarregado CIntTrapezio( double _limInf , double _limSup , int _numInt) :CIntegral(_limInf ,_limSup ,_numInt) {} /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ); }; #endif // CINTTRAPEZIO_H Listing 1.61: CIntTrapezio.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 81 */ #include "CIntTrapezio.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntTrapezio ::Area (CFuncao* funcao ) { area = funcao ->f(limInf)*0.5; area += funcao ->f(limSup)*0.5; // area = area + funcao ->f(limSup); double x = limInf; for( int i = 1; i < numInt ; i++ ) { // area += funcao ->f( limInf + i * dx ); x += dx; area += funcao ->f( x ); } area *= dx ; return area; } . Listing 1.62: CIntSimpson.h. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #ifndef CINTSIMPSON_H #define CINTSIMPSON_H #include "CIntTrapezio.h" /** * Representa método numérico simpson para cálculo área funções. * @class CIntSimpson */ class CIntSimpson : public CIntTrapezio { public: /// Construtor CIntSimpson () {}; /// Construtor sobrecarregado , cópia de CIntegral // Possibilita construir um CIntSimpson a partir de um CIntTrapezio Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 82 CIntSimpson(const CIntegral& integral) { this ->limInf = integral.GetlimInf (); this ->limSup = integral.GetlimSup (); this ->numInt = integral.GetnumInt (); this ->dx = integral.Getdx(); }; /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ virtual double Area ( CFuncao* funcao = 0 ); }; #endif // CINTSIMPSON_H Listing 1.63: CIntSimpson.cpp. /** * Projeto 1: Integração Numérica com C++. * Implementação de uma biblioteca de classes -funções para cálculo de integrais numéricas. * Instituição: LENEP/CCT/UENF - Setor Modelagem Matemática Computacional. * Disciplina: Programação Orientada a Objeto com C++. * Professor: André Duarte Bueno. * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include "CIntSimpson.h" /** * Calcula área da função no intervalo limInf ->limSup considerando numInt. * @return double * @param funcao */ double CIntSimpson ::Area (CFuncao* funcao ) { area = 0.5* ( funcao ->f(limInf) // ponto 0 // [0] + funcao ->f(limSup) ) ; // ponto n // [4] for (int i = 1; i < (numInt - 2); i += 2) { area += 2.0 * funcao ->f (limInf + i * dx) // ponto 1,...,n-3 // [1] + funcao ->f (limInf + (i + 1) * dx); // ponto 2,...,n-2 // [2] } area += 2.0 * funcao ->f (limSup - dx); // ponto n-1 // [3] area *= 2.0 * dx / 3.0; return area; } Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 85 * e-mail: bueno@lenep.uenf.br * Site: http :// www2.lenep.uenf.br/~ bueno/DisciplinaCpp/MaterialExtra/ Projetos. * * @file * * Versão 0.8: * Código no estilo de C++ - Usando classes e objetos. * Adição de sobrecarga de operadores , métodos entrada e uso polimorfismo. */ #include <iostream > #include "CSimulador.h" /// Função principal do programa int main(int argc , char **argv) { std::cout << "Hello , world!" << std::endl; CSimulador simulador; simulador.ExecutarSimulacao (); std::cin.get(); return 0; } 1.16.4 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 86 1.17 Versão 0.9 1.17.1 Características • Paradigma:  Programação Orientada a Objeto. • Funcionamento:  Adicionado uso de templates na hierarquia de funções. 1.17.2 Códigos . 1.17.3 Comentários . Programação Orientada a Objeto com C++ - André Duarte Bueno Projeto 1: Integração Numérica 87 1.18 Versão 1.0 1.18.1 Características • Paradigma: Programação estruturada. • Funcionamento: Todo código esta dentro da função main(). 1.18.2 Códigos . 1.18.3 Comentários . 1.19 Sentenças • . 1.20 Resumo do capítulo . 1.21 Exercícios 1. . 2. . Programação Orientada a Objeto com C++ - André Duarte Bueno
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved