Entries for C++

Argumentos en Python

written by uve

28 March 2012

Para los programadores de C, C++, Java, ... puede resultar un tanto extraño la forma de gestionar los parámetros que tiene Python.

Voy a explicar en esta entrada los tipos de parámetros y cómo podemos hacer uso de ellos.

Full entry >>

Jugando con Automake para generar Makefiles automáticos

written by uve

14 December 2010

Estos días estoy empezando a implemetar un pequeño programita para un Reto Tecnológico que organiza el Departamento de Teoría de la Señal, Telemática y Comunicaciones de la Universidad de Granada. Lo estoy desarrollando en C++ y sinceramente no me apetece hacer el Makefile. Así que estoy aprendiendo a usar las Autotools de GNU, empezando por Automake.

Full entry >>

Functores y ordenación mediante sort en la STL

written by uve

5 December 2010

La STL, o Standard Template Library, es un conjunto de plantillas para C++ que facilitan la vida al programador, y además de una forma eficiente.

Para quién no lo conozca, un Functor o Function Object es un objeto que puede ser invocado como una función. Por tanto, nos estamos refiriendo a la instancia de a una clase o a una estructura, la cuál tiene definido el operator().

Full entry >>

Enteros de mayor precisión en Java

written by uve

17 June 2010

Ahora mismo estoy desarrollando una práctica en la que necesito generar números de 128 bits y escribirlos en un fichero en formato decimal, formato hexadecimal y formato binario.

Empecé jugueteando con C++, y mi sorpresa fue que un long long int utiliza 64 bits bajo una arquitectura de 64 bits. Como el estándar de C/C++ no especifica el tamaño de los tipos de datos esperaba que la últimas versiones del compilador (g++ para ser concretos) utilizasen mayor precisión. Tras esto descarté C++. Existen librerías, como GMP, que nos permiten trabajar con datos de mayor precisión, pero no dispongo de tiempo para investigar.

Lo siguiente en venirme a la cabeza fue Python. La ventaja (y en este caso desventaja) de usar Python es que Python utiliza precisión arbitraria. Esto es, que tú asignas a una variable un entero y te puedes despreocupar. Python asigna dinámicamente el tipo de dato int a la variable, pero si esta crece, en lugar de producir un overflow, le asigna el tipo de dato long y continúa con la ejecución. A partir de ahí, el tipo de dato long crece (reserva de memoria automática) en función de la precisión que necesite. Esto me impide limitar los enteros a 128 bits :(

La opción por la que he optado: Java.

Full entry >>

Una de iteradores en C++

written by uve

29 May 2010

Ayer, mi colega Antares me planteó un problema (y yo no sé decir que no a los problemas). Está desarrollando un contenedor en el cuál necesita tener iteradores e iteradores constantes para recorrer los elementos. Probando los iteradores constantes, utilizó el siguiente código:

Contenedor c;
for(Contenedor::const_iterator it = c.begin(); it != c.end(); ++it)
{
    ...
}

Pero el compilador arrojaba el siguiente error:

contenedor.cpp:474: error: conversion from ‘Contenedor::iterator’ to non-scalar type ‘Contenedor::const_iterator’ requested
contenedor.cpp:474: error: no match for ‘operator!=’ in ‘ite != Contenedor::end()()’
contenedor.h:226: note: candidates are: bool Contenedor::const_iterator::operator!=(const Contenedor::const_iterator&) const

Full entry >>

Breves: Inicializar una variable a infinito en C++

written by uve

29 May 2010

En algunas ocasiones, nos encontramos con que necesitamos inicializar una variable al mayor valor posible. Por ejemplo, supongamos un programa que acepta por entrada estándar un número indeterminado de números reales (pudiendo no introducir ninguno) y queremos que se devuelva el menor de todos los números introducidos. En caso de que no se introduzca ninguno, el programa informará de ello.

Full entry >>

Breves: Forzar la lectura de un entero en C++

written by uve

11 May 2010

Cuando estamos programando en C++ y leemos un entero por terminal, nadie garantiza que realmente se lea. Imaginemos lo siguiente:

int entero;
cin >> entero;

Y cuando se ejecuta el programa, el usuario escribe una 'a'. ¿Qué ocurre? Pues que el programa se sigue ejecutando y el entero no se ha leído.

Full entry >>

Breves: Leer de cin después de cerrarlo en C++

written by uve

11 May 2010

Vamos a ponernos en contexto. Estaba escribiendo un programita en C++ el cuál hace uso de una función que lee desde un flujo (en este caso cin) hasta que encuentra EOF. Escribiendo en terminal podemos simular un fin de fichero pulsando Ctrl+D, pero como consecuencia, también cierra el flujo o lo que es lo mismo, ya no podemos seguir leyendo más datos a través de cin. Todo intento de lectura dará un error.

Full entry >>

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.