You are on page 1of 10

ALGORITMOS Y ESTRUCTURAS DE DATOS

ASPECTOS TERICOS PARA IMPLEMENTAR MTODOS RECURSIVOS


RECURSIVIDAD La Recursividad es la propiedad que posee un proceso de permitir que pueda volver a ejecutarse desde una sentencia en el interior del mismo proceso. Condiciones mnimas para ejecutar un proceso recursivo: a) El proceso recursivo, se inicializa, en cada iteracin. b) El proceso recursivo debe ser FINITO. EJEMPLO: Desarrollar el cdigo para implementar la operacin de calcular el Factorial de un nmero entero positivo. SOLUCIN:

IMPLEMENTACIN DE UN CONJUNTO DE OPERACIONES RECURSIVAS EN VISUAL C++ Crear un programa en Visual C++ para desarrollar las siguientes operaciones, a travs de un formulario: a) Verificar si un nmero es PRIMO b) Verificar si un nmero es CUBO PERFECTO c) Verificar si un nmero es PERFECTO d) Verificar si un nmero es COMPLETO e) Verificar si un nmero es CAPICUA Detalle de las operaciones a implementar: a) Verificar si un nmero es PRIMO Un nmero entero positivo es PRIMO si y solamente si, tiene como nicos divisores al 1 y al mismo nmero. MG. LUIS BOY CHAVIL Pgina 1

ALGORITMOS Y ESTRUCTURAS DE DATOS


Ejemplo: Son Primos: 3, 7, 13, 29, b) Verificar si un nmero es CUBO PERFECTO Un nmero entero positivo, es CUBO PERFECTO si es igual a la suma del cubo de cada uno de sus dgitos. Ejemplo: El nmero 153 es cubo Perfecto; pues 153 = 13 + 53 + 33 c) Verificar si un nmero es PERFECTO Un nmero entero positivo, se dice que es PERFECTO, si es igual a la suma de sus divisores, excepto l mismo. Ejemplo: El nmero 6 es PERFECTO; pues 6 = 1 + 2 + 3 d) Verificar si un nmero es COMPLETO Un nmero entero positivo, se dice que es COMPLETO, si es igual a la suma de sus dgitos; ms la suma de los nmeros desde 1 hasta cada uno de sus dgitos. Ejemplo: El nmero 25 es COMPLETO; pues: 25 = 2 + 5 + (1+2) + (1+2+3+4+5) e) Verificar si un nmero es CAPICUA Un nmero entero positivo, se dice que es CAPICUA; si se lee igual de izquierda a derecha y viceversa. Ejemplo: El nmero 131 es CAPICUA; pues se lee igual en ambos sentidos.

MG. LUIS BOY CHAVIL

Pgina 2

ALGORITMOS Y ESTRUCTURAS DE DATOS


PASOS PARA ESCRIBIR EL PROGRAMA: Al ingresar a Visual Studio, veremos la siguiente ventana:

Haga click en Crear Proyecto, y veremos la siguiente pantalla:

MG. LUIS BOY CHAVIL

Pgina 3

ALGORITMOS Y ESTRUCTURAS DE DATOS

Colocar el nombre del proyecto; por ejemplo, escribiremos: TareasRecursivas FORMULARIO PRINCIPAL

MG. LUIS BOY CHAVIL

Pgina 4

ALGORITMOS Y ESTRUCTURAS DE DATOS


DISEO DEL FORMULARIO OBJETO Form1 Label1 TextBox GroupBox1 RadioButton1 RadioButton2 RadioButton3 RadioButton4 RadioButton5 Button1 PROPIEDAD Text Text Name Text Text Name Text Name Text Name Text Name Text Name Name Text VALOR TAREAS RECURSIVAS NMERO ENTERO POSITIVO TxtNumero OPERACIONES NMERO PRIMO RbPrimo NMERO PERFECTO RbPerfecto NMERO CUBO PERFECTO RbCuboPerfecto NMERO COMPLETO RbCompleto NMERO CAPICA RbCapicua BtnSalir &SALIR

DEFINICIN DE LA CLASE Para definir la Clase; iremos al Men Principal de VC++ y seleccionaremos: Proyecto Agregar Clase; entonces veremos la siguiente ventana:

Al pulsar el botn Agregar, veremos:

MG. LUIS BOY CHAVIL

Pgina 5

ALGORITMOS Y ESTRUCTURAS DE DATOS

En la ventana anterior, escribiremos el nombre de la clase; por ejemplo. OPERACIONES, y luego haremos click en el check Inline. Ahora podremos escribir la clase. CLASE PARA LAS OPERACIONES DEL PROGRAMA
#pragma once ref class OPERACIONES { public: int numero; public: bool VerPrimo(int, int); // bool VerCuboPerfecto(int); // bool VerPerfecto(int); // bool VerCompleto(int); // bool VerCapicua(int); // long SumarCubos(int); // long SumarDivisores(int, int); long SumarDigitos(int); // long SumarHasta(int); // long SumarxDigitos(int); // long Invertido(int, int); // OPERACIONES(void) { } };

Verifica si un numero es PRIMO Verifica si un numero es CUBO PERFECTO Verifica si un numero es PERFECTO Verifica si un numero es COMPLETO Verifica si un numero es CAPICA Suma el cubo de los dgitos de un N // Suma los divisores de un N Suma los dgitos de un Nmero Suma desde 1 hasta n Suma SumarHasta por cada dgitodel N Obtiene el invertido de un nmero

MG. LUIS BOY CHAVIL

Pgina 6

ALGORITMOS Y ESTRUCTURAS DE DATOS


bool OPERACIONES::VerPrimo(int num, int mitad) { if(mitad>1) { if(num%mitad==0) return(false); else return(VerPrimo(num, mitad-1)); } return(true); } long OPERACIONES::SumarCubos(int n) { if(n>0) return((n%10)*(n%10)*(n%10)+SumarCubos(n/10)); else return(0); } bool OPERACIONES::VerCuboPerfecto(int num) { if(num == SumarCubos(num)) return(true); else return(false); } long OPERACIONES::SumarDivisores(int n, int d) { if(d<n) { if(n%d==0) return(d+SumarDivisores(n, d+1)); else return(SumarDivisores(n, d+1)); } else return(0); } bool OPERACIONES::VerPerfecto(int num) { if(num==SumarDivisores(num, 1)) return(true); else return(false); } long OPERACIONES::SumarDigitos(int n) { if(n>0) return(n%10+SumarDigitos(n/10)); else return(0); }

MG. LUIS BOY CHAVIL

Pgina 7

ALGORITMOS Y ESTRUCTURAS DE DATOS


long OPERACIONES::SumarHasta(int n) { if(n>0) return(n+SumarHasta(n-1)); else return(0); } long OPERACIONES::SumarxDigitos(int n) { if(n>0) return(SumarHasta(n%10)+SumarxDigitos(n/10)); else return(0); } bool OPERACIONES::VerCompleto(int num) { if(num==SumarDigitos(num)+SumarxDigitos(num)) return(true); else return(false); } long OPERACIONES::Invertido(int num, int inv) { if(num>0) return(Invertido(num/10, num%10+inv*10)); else return(inv); } bool OPERACIONES::VerCapicua(int num) { if(num==Invertido(num, 0)) return(true); else return(false); }

PROGRAMACIN DEL FORMULARIO PRINCIPAL En el formulario principal debemos agregar la Clase anterior, de la siguiente manera:
#include "OPERACIONES.h"

Ahora; programaremos el evento click de cada Radio Button del Formulario; as:

MG. LUIS BOY CHAVIL

Pgina 8

ALGORITMOS Y ESTRUCTURAS DE DATOS

private: System::Void RbPrimo_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { OPERACIONES OP; OP.numero=Convert::ToInt16(TxtNumero->Text); if(OP.VerPrimo(OP.numero, OP.numero/2)) MessageBox::Show("Nmero Primo"); else MessageBox::Show("El nmero NO es Primo"); }

private: System::Void RbPerfecto_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { OPERACIONES OP; OP.numero = Convert::ToInt16(TxtNumero->Text); if(OP.VerPerfecto(OP.numero)) MessageBox::Show("Nmero Perfecto"); else MessageBox::Show("El nmero NO es Perfecto"); }

private: System::Void RbCuboPerfecto_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { OPERACIONES OP; OP.numero=Convert::ToInt16(TxtNumero->Text); if(OP.VerCuboPerfecto(OP.numero)) MessageBox::Show("Nmero Cubo Perfecto"); else MessageBox::Show("El nmero NO es Cubo Perfecto"); }

private: System::Void RbCompleto_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { OPERACIONES OP; OP.numero=Convert::ToInt16(TxtNumero->Text); if(OP.VerCompleto(OP.numero)) MessageBox::Show("Nmero COMPLETO"); else MessageBox::Show("El nmero NO es COMPLETO"); }

MG. LUIS BOY CHAVIL

Pgina 9

ALGORITMOS Y ESTRUCTURAS DE DATOS

private: System::Void RbCapicua_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { OPERACIONES OP; OP.numero=Convert::ToInt16(TxtNumero->Text); if(OP.VerCapicua(OP.numero)) MessageBox::Show("Nmero CAPICUA"); else MessageBox::Show("El nmero NO es CAPICUA"); }

MG. LUIS BOY CHAVIL

Pgina 10