Archivo

Archive for the ‘Programación’ Category

Código fuente de una clase fecha en c++

Bueno este es mi primera publicación en el blog sobre programación. En esta ocasión publicaré una clase que me es bastante útil en muchos proyectos o prácticas, la clase Fecha.
Como se trata de una librería que utilizo bastante, he creado una librería llamada “Fecha.h” que contiene la especificación de la clase y de las funciones que utilizo en la validación de la fecha.

Fecha.h

#ifndef FECHA_H_INCLUDED
#define FECHA_H_INCLUDED

bool esCorrecta(unsigned int d, unsigned int m, int a);
bool esBisiesto (int a);
class Fecha
{
    public:
        Fecha(unsigned int d, unsigned int m, int a); //Constructor de la clase fecha, recibe como parámetros un día (d), un mes (m) y un año (a).
        unsigned int getDia(); //Nos devuelve el día
        unsigned int getMes(); //Nos devuelve el mes
        int getAnho(); //Nos devuelve el año
        void imprimirFecha(); //Muestra por pantalla la fecha en formato d/m/a
        void cambiarFecha(unsigned int d, unsigned int m, int a); //Cambia la fecha
    private:
        unsigned int dia;
        unsigned int mes;
        int anho; //Años a.d.C.
};

#endif // FECHA_H_INCLUDED

El constructor y métodos de la clase fecha, así como las funciones de validación están implementadas en el archivo “Fecha.cpp”.

Fecha.cpp

#include <iostream>
#include "Fecha.h"

using namespace std;

Fecha::Fecha(unsigned int d, unsigned int m, int a)
{
    dia = d;
    mes = m;
    anho = a;
}
unsigned int Fecha::getDia()
{
    return dia;
}
unsigned int Fecha::getMes()
{
    return mes;
}
int Fecha::getAnho()
{
    return anho;
}
void Fecha::imprimirFecha()
{
    cout<<"\n"<<dia<<"/"<<mes<<"/"<<anho;
}
void Fecha::cambiarFecha(unsigned int d, unsigned int m, int a)
{
    if(esCorrecta(d,m,a))
    {
        dia = d;
        mes = m;
        anho = a;
    }
    else
    {
        cout<<"\nLa fecha introducida es incorrecta. Datos no modificados.";
    }

}
bool esCorrecta(unsigned int d, unsigned int m, int a)
{
    unsigned int arrayDiasMes[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    if(a==0) return false; //Aporte de susmel en comentarios.
    if(d<=0||d>31) return false;
    if(m<=0||m>12) return false;
    if(m==2 && d>29) return false;
    if(arrayDiasMes[m-1]<d) return false;
    if(m==2 && d==29 && !esBisiesto(a)) return false;
    return true;

}
bool esBisiesto(int a)
{
    if ((a%4==0)||(a%400==0)&&(a%100!=0)) return true;
    else return false;
}

Un ejemplo de la llamada y el uso de la clase Fecha desde el main.cpp, es el siguiente:

main.cpp


#include <iostream>
#include "Fecha.h"

using namespace std;

int main()
{
    unsigned int dia, mes;
    int anho;
    do
    {
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>dia;
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>mes;
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>anho;
    }
    while(!esCorrecta(dia,mes,anho));

    Fecha anhoNacimiento(dia,mes,anho);
    anhoNacimiento.cambiarFecha(10,31,1984); //Intentamos cambiar la fecha a una errónea. Mostrará un mensaje de error.

    cout<<"\nMostrando la fecha por pantalla con el método imprimirFecha(): ";
    anhoNacimiento.imprimirFecha(); //Utilizamos la función imprimir fecha
    cout<<"\nMostrando la fecha por pantalla con los métodos getDia(), getMes() y getAnho(): "<<anhoNacimiento.getDia()<<"/"<<anhoNacimiento.getMes()<<"/"<<anhoNacimiento.getAnho(); //Visualizamos la fecha de otra forma.
    return 0;
}

Bueno pues esta es, más o menos, la clase Fecha que suelo utilizar. Como siempre, se aceptan correcciones o sugerencias.

Anuncios

Software que todo estudiante de informática debería conocer.

¿Qué programa puedo utilizar para realizar modelos entidad relación? Esta es una de las preguntas más frecuentes que formulan las personas que se inician en el mundo de las bases de datos. En mi opinión, creo que hay unos cuantos programas que todo estudiante de informática debería conocer, tener a mano y utilizar. Así que hoy, que he estado bastante ocioso, he creado una lista de dichos programas. Algunas aplicaciones, evidentemente, están fuera de nuestro alcance por su precio, pero las he puesto en la lista ya que suelen utilizarse en la carrera y suelen tener disponibles licencias educativas, que nos permitirán utilizarlas legalmente.

Programación

  • Code::Blocks. A mi parecer el mejor entorno de programación para C y C++. Es multiplataforma, software libre, gratuíto y soporta una gran cantidad de plugins.
  • BlueJ. BlueJ es un entorno de desarrollo para Java diseñado específicamente para aprender dicho lenguaje de programación. Es multiplataforma y libre. Es mucho más simple y menos potente que los IDE que mostraré a continuación, pero su uso es recomendado para iniciarse en Java.
  • Eclipse. Es un entorno de desarrollo multiplataforma y libre. Tiene un entorno de desarrollo integrado (IDE) de Java cuyo uso es muy extendido. Sirve también para otros lenguajes de programación.
  • Netbeans. Es el “competidor” de Eclipse en la carrera por ser el IDE de java más extendido. También es software libre y multiplataforma. Se le pueden añadir paquetes adicionales para programar en C++, php, etc.

Representación de diagramas.

  • Dia. Dia es una aplicación informática de propósito general para la creación de diagramas. Está concebido de forma modular, con diferentes paquetes de formas para diferentes necesidades. Es una buena alternativa software libre y multiplataforma a Visio de Microsoft. Con este software podemos representar fácilmente diagramas entidad-relación, diagramas UML, diagramas de flujo, diagramas de redes o diagramas de circuitos eléctricos.
  • Microsoft Visio. Es un software de dibujo vectorial para Microsoft Windows. Permite realizar diagramas entidad-relación, diagramas de flujo de programas y UML. Es software propietario y de pago y no es multiplataforma.
  • Visual paradigm for UML. Es una opción muy buena para realizar diagramas UML. Es software propietario y multiplataforma. Tiene una versión gratuíta llamada “Community version” de uso no comercial, que trae como única restricción marcas de agua en los documentos resultantes del proyecto. Personalmente y pese a ser software libre, es la mejor herramienta que he probado para realizar diagramas UML.

Matemáticas y estadística

  • Mathlab. Es un software matemático con un IDE integrado y con un lenguaje propio. Es multiplataforma, de pago y propietario. Se suele utilizar en la mayoría de las universidades y suelen tener licencias educativas para los alumnos.
  • R-project. Es un lenguaje y entorno de programación para el análisis estadístico y gráfico. Es multiplataforma, gratuíto y software libre.

Gestión de proyectos

  • Microsoft Project. es un software de administración de proyectos de Microsoft para asistir a administradores de proyectos en el desarrollo de planes, asignación de recursos a tareas, dar seguimiento al progreso, administrar presupuesto y analizar cargas de trabajo. Se utiliza generalmente en asignaturas de planificación de proyectos informáticos.
  • Openproj: Es una alternativa al software de microsoft en la administración de proyectos. Es libre, gratuíto y multiplataforma

Bases de datos
Además de los programas indicados anteriormente para el modelo entidad relación (Dia y Visio), hay otras herramientas que cualquier informático debería utilizar.

  • MySQL. Es un sistema gestor de bases de datos relacional, multihilo y multiusuario. Es software libre, gratuíto y multiplataforma. Es el más utilizado del mundo.
  • Oracle. Es el sistema gestor de bases de datos relacional más completo y potente del mundo. Es de pago, con licencia privativa y es multiplataforma. Su precio es elevadísimo, pero muchas facultades de informática obtienen licencias educativas.

Otros

  • Diff Meld. Es una herramienta visual de diferenciación de texto para GNU/Linux. Útil para encontrar líneas de código iguales en códigos fuente. Puede utilizarse para encontrar líneas redundantes o para conseguir que unas prácticas se diferencien lo suficiente para que el profesor no se de cuenta de que son copiadas 😛
  • WinMerge. Herramienta similar a Diff Meld pero para sistemas Windows. Es software libre y gratuíta.
  • OpenOffice.org. Es una suite ofimática de software libre y código abierto de distribución gratuita que incluye herramientas como procesador de textos, hoja de cálculo, presentaciones, herramientas para el dibujo vectorial y base de datos.
  • PDFCreator. Personalmente creo que los trabajos y prácticas deben entregarse siempre en dicho formato. Este programa para windows, crea una impresora virtual que convierte cualquier documento en pdf. Si usas la suite ofimática OpenOffice.org, ya trae de serie la opción exportar a pdf, así que esta aplicación no será necesaria.

Fuentes: Me he ayudado de la Wikipedia para obtener la descripción de alguno de estos programas.

Como publicar código fuente en WordPress.

Desconocía que WordPress trae “de serie” un plugin que permite postear código fuente sin que pierda el formato. Soporta una gran cantidad de lenguajes y la sintaxis es tal que así:

[sourcecode language='java']
public static void main (String[] args)
{
System.out.println(“hola mundo”);
}
[/sourcecode]

Y así es como quedaría al publicarlo:

public static void main (String[] args)
{
System.out.println("hola mundo");
}

Soporta una gran cantidad de lenguajes de programación y la forma de indicárselo al script es en la cabecera [sourcecode language='El lenguaje'] mediante el parámetro language, donde se introducirá entre comillas simples el nombre del lenguaje deseado. Las etiquetas de los lenguajes de programación soportados son las siguientes:

  • actionscript3
  • bash
  • coldfusion
  • cpp
  • csharp
  • css
  • delphi
  • erlang
  • fsharp
  • diff
  • groovy
  • javascript
  • java
  • javafx
  • matlab (keywords only)
  • objc
  • perl
  • php
  • text
  • powershell
  • python
  • ruby
  • scala
  • sql
  • vb
  • xml

Además del parámetro language, tenemos una gran cantidad de ellos disponibles, como el collapse que si le damos el valor true, nos mostrará una porción del código y un botón expandir para ver el resto, lo cual es bastante útil a utilizar con código fuente de gran tamaño.
Para obtener más información y el resto de parámetros de configuración, basta con pinchar aqui [ENG]