18/04/2024
# Tags
#C++ #Programación

Funciones III – Bibliotecas

Introducción

Cuando se desarrolló C, la funciones de entrada y salida, entre otras muchas interacciones que hoy consideramos normales, no existían.

De hecho en la etapa inicial de C, la mayor parte de los programas realizaban procesos que no interactuaban directamente (o de forma muy limitada) entre el usuario y el programa,  simplemente realizaban tareas específicas y terminaban su ejecución.

Las características propias del lenguaje lo dotaron de la capacidad de auto extenderse, conforme se fue popularizando y conforme se desarrolló la necesidad de aplicaciones más grandes y complejas, fueron desarrollándose módulos de uso frecuente que se volvieron casi sinónimo del lenguaje, sin embargo no formaron parte de la definición del mismo. Estas características se reunieron en bibliotecas que podían utilizar los programadores.

Librerías (Bibliotecas de funciones)

De esta forma llegamos a las librerías, estas librerías son archivos externos a nuestro programa que contienen definidas funciones, constantes, identificadores, etc. La principal característica de las librerías es que podemos incluirlas en nuestros programas y utilizar todo su contenido en nuestro código, únicamente debemos conocer qué valores requiere, cuáles entregan y por su puesto, su forma de invocarla (llamarla)

De los programas que hemos trabajado, podrás intuir que muchas veces nos veremos reutilizando código tanto en el mismo programa, como en otros, incluir librerías extiende este concepto, podemos reutilizar código que otros han desarrollado, o el que nosotros hayamos integrado en nuestras propias librerías.

Aunque te pueda parecer increíble, C no implementa ninguna de las características de entrada/salida como parte del lenguaje que hemos utilizado hasta el momento, por lo que esta funcionalidad se adquiere a través de librerías externas. C++ hereda la librería de C estándar y añade su propia funcionalidad.

Se puede suponer que siempre habrá un conjunto común de funciones que usaremos (tú y cualquier programador sin importar el nivel) prácticamente siempre, por ejemplo, siempre será necesario mostrar algo en la pantalla, recibir una entrada por parte del usuario, manipular cadenas de texto, manejar archivos, etc.

Nota: recuerda, es un curso para no programadores y recién llegados al lenguaje, si requieres un enfoque eminentemente informático, te sugiero revises las referencias al final del documento.

La librería estándar de C++

La biblioteca estándar de C++  (STL); es un gran conjunto de clases y funciones que de acuerdo al estándar se debe incluir en toda implementación del compilador. Y conviene tenerla siempre presente, pues incluye prácticamente todo lo que necesitarás en todos tus programas (y lo que no exista o no funcione como necesitas, tú lo puedes modificar, recuerda eres programador 😉 ) así que revisar dicha librería te puede ahorrar horas de programación y sobre todo, te evitará reinventar la rueda.

La El estándar de C++ correspondiente a 1998 establece que la librería estándar se compone de 32 archivos de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos(2). Por el perfil de este curso, tiene más sentido conocer las funciones agrupadas por funcionalidad, a continuación te presento la clasificación que adopta organiZATOR(2).

  • Clasificación: Clasifican caracteres ASCII, como letras, caracteres de control (no imprimibles), Mayúsculas/minúsculas etc. Se definen en la cabecera <ctype.h>.
  • Entradas/Salidas de Consola: Estas son las denominadas entrada/salida estándar. Por defecto se refieren al teclado y a la pantalla (no pueden utilizarse directamente en aplicaciones de interfaz gráfica).
  • Conversión: Convierten caracteres y cadenas de caracteres desde formato alfabético a numérico de diversos tipos (floatintlong).  También realizan la conversión inversa: de formatos numéricos a representaciones alfabéticas y de mayúsculas a minúsculas y viceversa.
  • Diagnóstico: Son rutinas destinadas a comprobaciones; a descubrir y corregir posibles errores.
  • Directorio: Rutinas para manejo de directorios y sus direcciones (path names).
  • En linea (Inline): Rutinas para versiones inline de funciones. El compilador genera el código correspondiente para las versiones inline cuando se utiliza #pragma intrinsic o si se solicita optimización al compilador (optimización de tiempo de ejecución).
  • Entrada/Salida. Son rutinas que proporcionan manejo de flujos y operaciones de Entrada/Salida a bajo nivel (de Sistema Operativo).
  • Manipulación. Manejo de cadenas y bloques de memoria: copiar, comparar, convertir y buscar.
  • Matemáticas: Para realizar cálculos matemáticos.
  • De Memoria: Proporcionan asignación de memoria dinámica.
  • Miscelánea. Se agrupan aquí rutinas varias, como las que posibilitan saltos (goto) no locales y las que manejan diferencias de tipo cultural o de lenguaje. Por ejemplo representación de números, de moneda, formatos de fecha y hora, clasificación de tipo alfabético, etc.
  • Control de proceso. Rutinas que permiten invocar y terminar nuevos procesos desde otra rutina.
  • Fecha y hora. Incluyen rutinas para conversión y manipulación de variables de medida del tiempo (fecha y hora).
  • Argumentos variables. Rutinas utilizadas cuando se usan listas variables de argumentos, como en los casos de printf()vscanf(), etc.

También es necesario saber que toda la biblioteca de estándar del lenguaje C está contenida o incluida en la biblioteca estándar de plantillas de C++, pues C++ es la evolución de C

Librería o Biblioteca.

El término Bilblioteca tiene su origen en la traducción del inglés del término library que es el término utilizado en la documentación. Sin embargo está muy difundido en el ámbito de la programación el término librería. Los dos conceptos se utilizan indistintamente, por lo que también aquí los usaremos de forma indistinta.

Cómo utilizar una librería en C++

Para declarar el uso de una librería utilizamos la siguiente sintaxis.

#include <nombre_de_libreria>

o podemos usar la forma alterna

#include "nombre_de_libreria"

Por ejemplo si queremos utilizar la biblioteca string para poder manipular cadenas de texto, debemos declarar la siguiente cabecera.

#include string

Al hacer esta declaración, estamos dando acceso a nuestro programa a todo el contenido de la biblioteca string a nuestro programa, de este modo podemos realizar el siguiente programa:

// cpp_60_funciones_include1.cpp
// Este programa forma parte del tutorial de introducción al lenguaje C++
// http://a.ehack.info/leguaje-c-introduccion/
// Se ilustra la inclusión de librerías estándar, utilizamos string como ejemplo
// 2018, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string entrada;
    cout<<"Escribe una palabra: ";
    cin >> entrada;
    cout << "Palabra actual: " << entrada << "\n";
    cout << "Tamaño: " << entrada.size() << "\n";
    cout << "Longitud: " << entrada.length() << "\n";
    cout << "Capacidad: " << entrada.capacity() << "\n";
    cout << "Tamaño Máximo: " << entrada.max_size() << "\n";
    entrada.clear();    //Limpiamos el contenido de la variable
    cout << "Palabra actual: " << entrada << "\n";
    cout << "Tamaño: " << entrada.size() << "\n";
    cout << "Longitud: " << entrada.length() << "\n";
    cout << "Capacidad: " << entrada.capacity() << "\n";
    cout << "Tamaño Máximo: " << entrada.max_size() << "\n";
    return 0;
}

A continuación puedes ver una posible salida del programa, observa que podemos manipular y obtener algunos datos del texto que introducimos. Por su puesto, podemos programar nuestras propias funciones que hagan lo mismo, sin embargo ¿para que perder el tiempo haciendo lo que ya existe?, mejor desarrollamos lo que queremos programar. Ésa es la filosofía de las librerías.

Uso de la biblioteca String en C++
Uso de la biblioteca String en C++

El ejemplo anterior es solo una muestra mínima de lo que podemos hacer, hay librerías para cientos de actividades, solo es cuestión de tener la documentación para poder utilizarlas.

Librerías más usadas en C++

iostream

Está especializada en funciones de entrada y salida de datos, y como puedes ver, es la que hemos utilizado hasta el momento de forma continua.
cout cin min() max()

cmath

Funciones para operaciones matemáticas y transformaciones. Algunas funciones son:
sin() cos() tan() exp() log() pow() sqrt() abs()

cstring

Declara un conjunto de funciones principalmente para manipulación de elementos tipo string
strcat() memcmp() strpbrk() strlen() memset()

ctime

Declara un conjunto de funciones para obtener y manipular información de tiempo y fecha.
asctime() ctime() gmtime() mktime() time()

algorithm

Define una colección de funciones especialmente diseñadas para utilizarse en rangos de elementos. Además incluye la mayoría de los contenedores de la STL.
find() count() swap() reverse() sort() merge()

A continuación puedes ver un programa que utiliza funciones de varias librerías,

// cpp_61_funciones_include2.cpp
// Este programa forma parte del tutorial de introducción al lenguaje C++
// http://a.ehack.info/leguaje-c-introduccion/
// Se ilustra la inclusión de librerías de mayo uso y el uso de algunas
// de las funciones más representativas
// 2018, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream> // Permite usar cin, cout, min(), max()
#include <cmath>    // Permite usar sqrt(), pow()
#include <time.h>   // Permite usar time_t, tm, time, asctime
#include <algorithm>// Permite usar max, min
#include <random>   // Permite usar srand, rand
using namespace std;
int main()
{
    string entrada;
    int edad = 0;
    float calculo = 0;
    // Requiere de iostream
    cout<<"Escribe tu nombre: ";
    cin >> entrada;
    cout<<"Escribe tu edad: ";
    cin >> edad;
    cout << "Bienvenid@" << entrada << "\n";
    // Requiere cmath
    calculo = sqrt(edad);
    cout<<"La raíz de tu edad es: " << calculo << "\n";
    calculo = pow(edad,3);
    cout<<"Tu edad elevada al cubo es: " << calculo << "\n";
    // Requiere time.h
    time_t horaSistema;
    struct tm * timeinfo;
    time (&horaSistema);
    timeinfo = localtime (&horaSistema);
    cout << "Hora y fecha local: " << asctime(timeinfo);
    // Requiere algorithm
    cout << "max(1,2)==" << max(1,2) << '\n';
    cout << "min(2,1)==" << max(2,1) << '\n';
    cout << "max('a','z')==" << max('a','z') << '\n';
    cout << "max(3.14,2.73)==" << min(3.14,2.73) << '\n';
    // Requiere random
    srand((unsigned)time(0));
    int semilla;
    semilla = rand();
    cout << "La semilla vale =" << semilla  << '\n';
    cin.get();  // Requiere string
    return 0;
}

La librería <bits/stdc++.h>

<bits/stdc++.h> básicamente es un archivo de encabezado que incluye todas las bibliotecas estándar. En los concursos de programación, usar este archivo es una buena idea cuando se quiere reducir el tiempo utilizado al realizar las tareas encomendadas; especialmente cuando el tiempo es bastante reducido. (5)

En los concursos de programación, las personas se centran más en encontrar algoritmos para resolver un problema que en la ingeniería de software. Al utilizar esta librería en realidad incluyes una gran cantidad de archivos, que tu programa puede no necesitar, por lo tanto, aumenta el tiempo de compilación y el tamaño del programa innecesariamente. Es preferible no utilizarlo en programas de producción, pero es importante que conozcas su existencia.

Conclusión

Así que ya lo sabes, tienes al alcance virtualmente miles de funciones listas para utilizar en tu programa, solo es cuestión de incluir la biblioteca que las contiene, y saber utilizar dicha función. Así que ahora es cuestión que consultes ya sea la documentación oficial o realizar una búsqueda en Internet y practicar. Un buen punto de partida para que explores la biblioteca de librerías y sus funciones es la recopilación que tiene cppreference.com(4)


Ethical Hack

Referencias

Fuente Imágenes

  • «Todas las demás imágenes de esta sección»: by Nala Systems

Código Fuente

Licencia de Creative Commons
Funciones III en C++ by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
Funciones III – Bibliotecas

Funciones – II

Funciones III – Bibliotecas

Funciones IV – Prototipos

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *