SEGUNDO PARCIAL INFORMATICA II Tema 1 Hacer un programa en C++ que realice lo siguiente: a. b. Generar los primeros 100 números enteros comenzando en 1 y guardar los impares en una pila y los pares en una cola. Mostrar todos los números de la pila y de la cola. Nota. No hace falta desarrollar los métodos de las clases pila y cola. #include <iostream> using namespace std; int main(int argc, char *argv[]) { int i; class pila p; class cola c; for( i = 1; i <=100; i+=2 ) { p.push(i); c.put(i+1); } while( ! p.vacia() ) { cout<<p.pop()<<'\t'; } cout << endl; while( ! c.vacia() ) { cout<<c.get()<<'\t'; } return 0; } Tema 2 Hacer un programa en C++ que realice lo siguiente: a. b. c. Ingresar un número real positivo. Calcular la raíz cuadrada utilizando el método iterativo dado en clases empleando solo cinco iteraciones. Indicar los errores absolutos y relativo porcentual considerando como “valor verdadero” el valor obtenido mediante el llamado a la función de librería sqrt(). #include <iostream> #include <cmath> using namespace std; int main(int argc, char *argv[]) { double h, x, b, y; int i; cout << "entre un numero positivo "; cin>>x; b = 1; for(i=0;i<5;i++) {//algoritmo para el cálculo h = x / b; b = (b+h)/2; } cout << b << endl; cout<<b<<endl; y = sqrt(x); cout<<"valor verdadero " << y << endl; cout << "error absoluto "<< fabs(y-b)<<endl; cout << "error porcentual " << fabs( (b-y)/y )*100.00 << " %"3<<endl; return 0; } Tema 3 Se tiene el siguiente problema: a. b. c. Ingresar un número entero entero. Ir mostrando sucesivamente las divisiones enteras por 2 hasta llegar a cero. Hacer un programa en C++ que lo realice en forma normal y otro llamando a un procedimiento recursivo. #include <iostream> using namespace std; void mostrarmitades(int n ) { if( n > 0 ) { cout << n<<'\t'; mostrarmitades(n/2); } } int main(int argc, char *argv[]) { int n; cout << "entre numero entero "; cin >> n; mostrarmitades(n); return 0; } GRAFICAS Grupo 1 Hacer un programa visual de modo que el formulario principal sea como el de la figura: Este estará compuesto de los siguientes objetos: Cinco paneles Dos Botones Un temporizador Al presionar el botón “Iniciar”, cada 500 milisegundos los paneles cada uno a la vez irán cambiando de color en forma aleatoria. Dicho cambio de color se realiza mediante el llamado al método de la clase del formulario CambiarColor declarado como privado cuyo código es el siguiente: TColor TForm1::CambiarColor(void) { unsigned int r,v,a; r = random(256); v = random(256); a = random(256); return (TColor)RGB( r, v, a ); } El botón Iniciar, además de iniciar el proceso, se deshabilita a sí mismo y habilita el botón Detener . Al presionar dicho botón, además de detener el proceso, se deshabilita a sí mismo y habilita al botón Iniciar. Se pide: Sobrecargar los eventos correspondientes para que el programa funcione de la manera requerida. Declarar métodos, atributos, interceptar los eventos necesarios e incorporar el método “CambiarColor” al formulario. Solucion del ejercicio Archivo de Cabecera: //--------------------------------------------------------------------------#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Buttons.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TPanel *Panel2; TPanel *Panel3; TPanel *Panel4; TBitBtn *BitBtn1; TBitBtn *BitBtn2; TTimer *tm1; TPanel *Panel5; void __fastcall BitBtn1Click(TObject *Sender); void __fastcall tm1Timer(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); private: TColor __fastcall CambiarColor(void); // User declarations int prox; 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 <stdlib.h> //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { prox = 0; } //--------------------------------------------------------------------------void __fastcall TForm1::BitBtn1Click(TObject *Sender) { randomize(); tm1->Enabled = true; } //--------------------------------------------------------------------------- TColor __fastcall TForm1::CambiarColor(void) { unsigned int r,v,a; r = random(256); v = random(256); a = random(256); return (TColor)RGB( r, v, a ); } void __fastcall TForm1::tm1Timer(TObject *Sender) { switch( prox ) { case 0: Panel5->Color = CambiarColor(); break; case 1: Panel1->Color = CambiarColor(); break; case 2: Panel2->Color = CambiarColor(); break; case 3: Panel3->Color = CambiarColor(); break; case 4: Panel4->Color = CambiarColor(); break; } prox ++; prox = (prox >5)?0:prox; } //--------------------------------------------------------------------------void __fastcall TForm1::BitBtn2Click(TObject *Sender) { tm1->Enabled = false; } //--------------------------------------------------------------------------- Grupo 2 Hacer un programa visual de modo que el formulario principal sea como el de la figura: Este estará compuesto de los siguientes objetos: Dos botones Un panel Un objeto TShape incrustado en el panel con formato de círculo. Un Temporizador. Al presionar el botón iniciar el objeto TShape éste cambia de posición hacia la derecha en saltos de 100 píxeles cada 500 milisegundos. Al llegar al final, comienza de nuevo desde la izquierda y así indefinidamente. El cambio de color se realiza mediante el llamado al método de la clase del formulario CambiarColor declarado como privado cuyo código es el siguiente: TColor TForm1::CambiarColor(void) { unsigned int r,v,a; r = random(256); v = random(256); a = random(256); return (TColor)RGB( r, v, a ); } El botón Iniciar, además de iniciar el proceso, se deshabilita a sí mismo y habilita el botón Detener . Al presionar dicho botón, además de detener el proceso, se deshabilita a sí mismo y habilita al botón Iniciar. Se pide: Sobrecargar los eventos correspondientes para que el programa funcione de la manera requerida. Declarar métodos, atributos, interceptar los eventos necesarios e incorporar el método “CambiarColor” al formulario. Solución del Ejercicio Archivo de Cabecera. //--------------------------------------------------------------------------#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Buttons.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TBitBtn *BitBtn1; TTimer *Timer1; TBitBtn *BitBtn2; TPanel *Panel1; TShape *Shape1; void __fastcall BitBtn1Click(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); private: // User declarations TColor CambiarColor(void); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------#endif Archivo de Código //--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::BitBtn1Click(TObject *Sender) { Timer1->Enabled = true; randomize(); BitBtn1->Enabled = false; BitBtn2->Enabled = true; Shape1->Left = 0; Shape1->Brush->Color = CambiarColor(); Shape1->Visible = true; } //--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender) { Shape1->Left = Shape1->Left +100; if( (Shape1->Left + Shape1->Width) > (Panel1->Left + Panel1->Width) ) { Shape1->Left = 0; } Shape1->Brush->Color = CambiarColor(); } //--------------------------------------------------------------------------TColor TForm1::CambiarColor(void) { unsigned int r,v,a; r = random(256); v = random(256); a = random(256); return (TColor)RGB( r, v, a ); } void __fastcall TForm1::BitBtn2Click(TObject *Sender) { BitBtn2->Enabled = false; BitBtn1->Enabled = true; Timer1->Enabled = False; } //---------------------------------------------------------------------------