INFORMATICAII–SEGUNDOPARCIALRECUPERATORIO Ejercicio 1 Explicar cómo se representa una pila mediante vectores. Definir una clase que la implemente empleando memoria dinámica (constructor, etc.). Desarrollar en lenguaje C++ solamente la función pop(). //La parte teórica no se resuelve. class Pilavect { private: int * a; int terms; int pos; public: Pilavect(unsigned int n); Pilavect( Pilavect & pv); //constructor copia ~Pilavect(); bool vacia(void); bool llena(void); void push( int n); int pop(void); Pilavect & operator =(Pilavect pv); }; int pop(void) { if( ¡ vacia() ) { pos--; return( a[pos+1] ); } } Ejercicio 2 Hacer un programa en C++ que realice lo siguiente: a. Hallar la integral definida empleando el método de la suma de los trapecios y los rectángulos de la función: y = x.sen ( x ) 0 ≤ x ≤ 4π en incrementos de1 / 2π en1 / 2π . Considerando el valor “verdadero” como −12.5663706143592 ( 4π ) b. Mostrar qué error relativo y absoluto porcentual se produce empleando cada método. c. Mostrar qué error relativo y absoluto porcentual se produce redondeando y truncando los resultados a cuatro dígitos decimales. #include <iostream> #include <cmath> using namespace std; double f( double x) { return (x*sin(x) ); } int main(int argc, char *argv[]) { double y, x, inc; double vreal = -(4*M_PI); double vrect, vtrap; inc = 1.0/(2*M_PI); vrect = 0; x = 0; while(x < 4*M_PI ) { vrect += f((x+inc)/2)*inc; if( (x + inc ) > (4*M_PI) ) { inc = (4*M_PI)-x; } x += inc; } cout << "metodo de la suma de los rectangulos"<<endl<<endl; cout << "valor real "<< vreal<<endl; cout << "valor calculado " << vrect <<endl; cout << "error absoluto " << fabs(vreal-vrect) <<endl; cout << "error relativo % " << fabs( (vreal-vrect)/vreal) * 100; inc = 1.0/(2*M_PI); vtrap = 0; x = 0; while(x < 4*M_PI ) { vtrap += (f(x)+f(x+inc))* inc /2.0; if( (x + inc ) > (4*M_PI) ) { inc = (4*M_PI)-x; } x += inc; } cout << "metodo de la suma de los trapecios"<<endl<<endl; cout << "valor real "<< vreal<<endl; cout << "valor calculado " << vtrap <<endl; cout << "error absoluto " << fabs(vreal-vtrap) <<endl; cout << "error relativo % " << fabs( (vreal-vtrap)/vreal) * 100; return 0; } Ejercicio 3 Hacer un programa en C++ que realice lo siguiente: Mediante el llamado a una función recursiva a la que se le pasa un número entero n entero y positivo, devuelva la suma de los enteros hasta n inclusive en una variable tipo double. #include <iostream> using namespace std; double sumarhasta(int n) { if( n > 0 ) { return n+sumarhasta(n-1); } return 0; } int main(int argc, char *argv[]) { unsigned n; double r; cout<<"entre un numero "; cin >> n; r = sumarhasta(n); cout <<r <<endl; return 0; } Visual Graficar la función del ejercicio 2. Poner en un formulario los siguientes controles: Un TPanel, un TImage y un TButton. Archivo de cabecera //--------------------------------------------------------------------------#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TImage *im1; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations double f(double x); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------#endif Archivo de Código //--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <math.h> //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Panel1->Color = clWhite; } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { double escx, escy; TCanvas * cv = im1->Canvas; //trazado de ejes double x,inc; cv->Pen->Color = clBlack; cv->MoveTo(0,0); cv->LineTo(0, im1->Height); cv->MoveTo(0, im1->Height/2); cv->LineTo(im1->Width, im1->Height/2); escx = im1->Width /(4*M_PI); escy = im1->Height/22.0; inc = 4*M_PI / im1->Width; cv->Pen->Color = clBlue; cv->Pen->Width = 2; x = 0; cv->MoveTo(0, im1->Height/2); while( x < 4*M_PI ) { if( ( x + inc ) > 4 * M_PI ) { inc = 4 * M_PI - x ; } x += inc; cv->LineTo(x * escx, im1->Height/2 - f(x) * escy); } } //--------------------------------------------------------------------------double TForm1 :: f(double x) { return (x * sin(x) );