viernes, 25 de mayo de 2018

Tablas de multiplicar

#include <iostream>
using namespace std;
int imprime_tabla(int opcion);
int main()
{
int opcion=0;
cout << "Tablas de multiplicar\n";
cout<< "Ingresa que tabla deseas";
cin >> opcion;
imprime_tabla(opcion);
}
 int imprime_tabla(int opcion)
  {
        for (int b=1;b < 11;b++){
        cout << opcion;
        cout << " x ";
        cout << b;
        cout << "=";
        cout << opcion * b ;
        cout << "\n";
        }
  }

Calculadora

#include <iostream>
using namespace std;
float funcion_suma(float valor1,float valor2);
float funcion_resta(float valor1,float valor2);
float funcion_multiplica(float valor1,float valor2);
float funcion_divide(float valor1,float valor2);
int main()
{
    int opcion=0;
    float valor1=0;
    float valor2=0;
    cout <<"Calculadora\n" << "1-.Suma\n" <<"2-.Resta\n" <<"3-.Multiplicacion\n" << "4-.Division\n";
    cout << "Seleccionar una opcion\n";
    cin >> opcion;
    cout << "\n Ingresa valor1 ";
    cin >> valor1;
    cout << "\n Ingresa valor2 ";
    cin >> valor2;
    switch(opcion)

    {
        case 1: cout << "El resultado es: ";
        cout << funcion_suma(valor1, valor2);
        break;
        case 2: cout << "El resultado es: ";
        cout << funcion_resta(valor1, valor2);
        break;
        case 3: cout << "El resultado es: ";
        cout << funcion_multiplica(valor1, valor2);
        break;
        case 4: cout << "El resultado es: ";
        cout << funcion_divide(valor1, valor2);
        break;
    }
}
 float funcion_suma(float valor1, float valor2)
{
    return valor1+valor2;
}
float funcion_resta(float valor1, float valor2)
{
    return valor1-valor2;
}
float funcion_multiplica(float valor1, float valor2)
{
    return valor1*valor2;
}
float funcion_divide(float valor1, float valor2)
{
    return valor1/valor2;
}

viernes, 11 de mayo de 2018

Conceptos


¿Qué es una clase?
Es una construcción que permite crear tipos personalizados propios mediante la agrupación de variables de otros tipos, métodos y eventos. Una clase es como un plano. Define los datos y el comportamiento de un tipo. Si la clase no se declara como estática, el código de cliente puede utilizarla mediante la creación de objetos o instancias que se asignan a una variable. La variable permanece en memoria hasta todas las referencias a ella están fuera del ámbito. Si la clase se declara como estática, solo existe una copia en memoria y el código de cliente solo puede tener acceso a ella a través de la propia clase y no de una variable de instancia.
Cada una tiene sus propias características y ventajas. Un programador que conoce estas características sabe cuando debe usar una y no otra, de manera que su desarrolla un buen software. Los tipos de clases son:
Class. Public: Son muy comunes, accesibles desde cualquier otra clase en la misma librería (de otro modo hay que importarlas).
Class. Abstract: Aquellas que tienen por lo menos un método abstracto. No implementan sus métodos, sino que dan las bases para que sean implementados en la herencia.
Class. Final: Son las que terminan la cadena de herencia. Útiles por motivos de seguridad y eficiencia de un programa, ya que no permiten crear más sub-divisiones por debajo de esta clase.
Class. Synchronizable: Especifica que sus métodos son sincronizados, evitando problemas con los thread (hilo de ejecución), de forma que estos no pueden empezar a correr un método si no ha acabado el otro.

¿Qué es una herencia?
La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclase) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).


¿Qué es un polimorfismo?
La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Es uno de los conceptos esenciales de la programación orientada a objetos. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo lo está con los métodos.
En general, hay tres tipos de polimorfismo: el polimorfismo de sobrecarga, el polimorfismo paramétrico (también llamado polimorfismo de plantillas) y el polimorfismo de inclusión (también llamado redefinición o subtipado).


Polimorfismo de sobrecarga

El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con función similar, en clases que son completamente independientes unas de otras (estas no tienen que ser clases secundarias de la clase objeto). Por ejemplo, la clase complex, la clase image y la clase linkpueden todas tener la función display. Esto significa que no necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en la pantalla. 

Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos comportamientos varían de acuerdo a los parámetros que se les aplican. Así es posible, por ejemplo, agregar el operador + y hacer que se comporte de manera distinta cuando está haciendo referencia a una operación entre dos números enteros (suma) o bien cuando se encuentra entre dos cadenas de caracteres (concatenación). 

Polimorfismo paramétrico

El polimorfismo paramétrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona automáticamente el método correcto a aplicar en función del tipo de datos pasados en el parámetro. 

Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition() efectuando una suma de valores. El método int addition(int,int) devolvería la suma de dos números enteros. Por su parte, float addition(float, float) devolvería la suma de dos flotantes. En cuanto a char addition(char, char) daría por resultado la suma de dos caracteres definidos por el autor. 

Una signature es el nombre y tipo (estático) que se da a los argumentos de una función. Por esto, una firma de método determina qué elemento se va a llamar. 

Polimorfismo de subtipado

La habilidad para redefinir un método en clases que se hereda de una clase base se llama especialización. Por lo tanto, se puede llamar un método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarándolos con una interfaz común (siendo esta la clase básica). 

Imagina un juego de ajedrez con los objetos reyreinaalfilcaballotorre y peón, cada uno heredando el objeto pieza. El método movimiento podría, usando polimorfismo de subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite al programa realizar el movimiento.de_pieza sin tener que verse conectado con cada tipo de pieza en particular.


¿Cómo hacer métodos (funciones) en una clase?
 En el método main se incluye como parámetro para su invocación un array de Strings. Este array permitiría iniciar el programa con argumentos adicionales: por ejemplo podríamos indicarle una gama de colores de presentación entre varias posibles, o si se trata de un juego, si se ejecuta en modo 1 ó 2 jugadores, etc. En este caso suponiendo que la clase que contiene el main se llama juego, para la ejecución por consola escribiríamos > java juego TwoPlayers Red, donde TwoPlayers y Red son parámetros que condicionan la ejecución del programa. Cada palabra después del nombre de la clase se introduce en un array que se pasa al array Args[ ] que va como parámetro de la clase main. No obstante, es muy frecuente que los programas se inicien sin parámetros, para lo cual simplemente en consola habríamos de escribir java y el nombre de la clase.

Un método de instancia es el que se invoca siempre sobre una instancia (objeto) de una clase. Por ejemplo p1.getNombre(); siendo p1 un objeto de tipo Persona es un método de instancia: para invocarlo necesitamos una instancia de persona. Un método de clase es aquel que puede ser invocado sin existir una instancia.
Ejemplo:
// Programa OPP01.CPP
#include <iostream>
#include <cstring>

using std::cout;
using std::endl;


// Esto define la clase CRender
class CRender {
public:
    char buffer[255];
    void m_Renderizar(const char *cadena);
};


/* implementar m_Renderizar() para la c;*/
void CRender::m_Renderizar(const char *cadena){
    strcpy(buffer, cadena);//copia la cadena
    return;
}


int main (int argc, char **argv){
    // crear 2 objetos CRender
    CRender render1, render2;

    render1.m_Renderizar("Inicializando el objeto render1");
    render2.m_Renderizar("Inicializando el objeto render2"); 
   
    cout << "buffer en render1: ";
    cout << render1.buffer << endl;   // tenemos acceso a buffer ya que es publico.

    cout << "buffer en render2: ";
    cout << render2.buffer << endl;

return (0);
}
Este programa imprime:
buffer en render1: Inicializando el objeto render1
buffer en render2: Inicializando el objeto render2


Ejemplo de Funciones

Ejemplo de paso de parámetros por valor:
Por valor:


#include <iostream>
using namespace std;
iut << "Introduce un numero entero: ";
    cin >> num;
    rent invertir (int);

int main()
{   int num;
    int resultado;

    cosultado = invertir(num);
    cout << "Numero introducido: " << num << endl;
    cout << "Numero con las cifras invertidas: " << resultado << endl;
}
int invertir(int num)
{
    int inverso = 0, cifra;
    while (num != 0)
    {
        cifra = num % 10;
        inverso = inverso * 10 + cifra;
        num = num / 10;
    }
    return inverso;
}


Por referencia:

#include <iostream>
using namespace std;
 
int funcion(int &n, int &m);
 
int main() { 
   int a, b;
 
   a = 10; b = 20; 
   cout << "a,b ->" << a << ", " << b << endl;
   cout << "funcion(a,b) ->" << funcion(a, b) << endl; 
   cout << "a,b ->" << a << ", " << b << endl; 
   /* cout << "funcion(10,20) ->" 
           << funcion(10, 20) << endl; // (1)
   es ilegal pasar constantes como parámetros cuando 
   estos son referencias */ 
   
   return 0; 
}
 
int funcion(int &n, int &m) {
   n = n + 2; 
   m = m - 5; 
   return n+m; 
}

Tablas de multiplicar

#include <iostream> using namespace std; int imprime_tabla(int opcion); int main() { int opcion=0; cout << "Tablas de...