informatica ii – segundo parcial recuperatorio

Anuncio
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) );
Descargar