Sunteți pe pagina 1din 43

Programación estructurada

De Wikipedia, la enciclopedia libre


Saltar a navegación, búsqueda
La programación estructurada es una forma de escribir programas de ordenador
(programación de computadora) de manera clara. Para ello utiliza únicamente tres
estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción
o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB
o múltiples RETURN).
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades
de programación existentes en los años 1960, principalmente debido a las aplicaciones
gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello
ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a
objetos y el desarrollo de entornos de programación que facilitan la programación de
grandes aplicaciones.

Contenido
[ocultar]
• 1 Orígenes de la programación estructurada
○ 1.1 Estructura secuencial
○ 1.2 Estructura selectiva o de selección
○ 1.3 Estructura iterativa
○ 1.4 Anidamiento
• 2 Ventajas de la programación estructurada
• 3 Inconvenientes de la programación estructurada
• 4 Bibliografia
• 5 Véase también
• 6 Enlaces externos

[editar] Orígenes de la programación estructurada


A finales de los años 1960 surgió una nueva forma de programar que no solamente daba
lugar a programas fiables y eficientes, sino que además estaban escritos de manera que
facilitaba su comprensión posterior.
El teorema del programa estructurado, demostrado por Böhm-Jacopini, demuestra que
todo programa puede escribirse utilizando únicamente las tres instrucciones de control
siguientes:
• Secuencia
• Instrucción condicional.
• Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y
aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio
de estructuras de control, éstas pueden ser construidas mediante las tres básicas.
[editar] Estructura secuencial
Una estructura de programa es secuencial si se ejecutan una tras otra a modo de
secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la anterior.
Ejemplo:
INPUT x
INPUT y
auxiliar= x
x= y
y= auxiliar
PRINT x
PRINT y
• Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una
variable auxiliar, intermedia.
• 1º Guardamos una copia del valor de x en auxiliar.
• 2º Guardamos el valor de y en x, se pierde el valor anterior de x pero no importa
porque tenemos una copia en auxiliar.
• 3º Guardamos en y el valor de auxiliar, que es el valor inicial de x.
• El resultado es el intercambio de los valores de x e y, en tres operaciones
secuenciales.
[editar] Estructura selectiva o de selección
La estructura selectiva permite la realización de una instrucción u otra según un criterio,
solo una de estas instrucciones se ejecutara.
Ejemplo:
IF a > b THEN
PRINT a ; " es mayor que " ; b
ELSE
PRINT a ; " no es mayor que " ; b
END IF
Esta instrucción selectiva puede presentar dos mensajes, uno a es mayor que b, y el
otro a no es mayor que b, solo uno de ellos será presentado, según el resultado de la
comparación de a y b, si el resultado de a > b es cierto, se presenta el primer mensaje, si
es falso el segundo, las palabras IF, THEN, ELSE, END IF; son propias de la
instrucción (palabra reservadas) que tienen un significado en el lenguaje, sirven de
separadores, y el usuario no debe utilizarlas salvo para este fin.
• IF señala el comienzo de la instrucción condicional, y se espera que después esté
la condición de control de la instrucción.
• THEN señala el fin de la condición, y después estará la instrucción a realizar si
la condición es cierta.
• ELSE separa la instrucción que se ejecutará si la condición es cierta de la que
se ejecutará si es falsa.
• END IF indica que la instrucción condicional finaliza y el programa seguirá su
curso.
Ampliemos un poco el ejemplo anterior:
IF a > b THEN
PRINT a ; " es mayor que " ; b
ELSEIF a < b THEN
PRINT a ; " es menor que " ; b
ELSE
PRINT a ; " es igual que " ; b
END IF
Este ejemplo nos permite considerar situaciones en las que tenemos más de dos
alternativas. En este caso hemos considerado tres, pero hay situaciones en las que deben
considerarse más casos y para ellos se puede repetir las veces que queramos la parte
ELSEIF.
[editar] Estructura iterativa
Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan
mientras se cumpla una condición, en un principio el número de iteraciones no tiene
porque estar determinado.
Ejemplo:
a= 0
b= 7

WHILE b > a DO
PRINT a
a= a + 1
WEND
Esta instrucción tiene tres palabras reservadas WHILE, DO y WEND.
• WHILE: señala el comienzo del bucle y después de esta palabra se espera la
condición de repetición, si la condición es cierta se pasa al cuerpo del bucle, si
no al final de la instrucción mientras.
• DO: señala el final de la condición, lo que esté después será el cuerpo del bucle.
• WEND: señala el final del cuerpo del bucle y de la instrucción WHILE.
El bucle mientras, se repite mientras la condición sea cierta, esta condición se
comprueba al principio por lo que el cuerpo del bucle puede que no se ejecute nunca,
cuando la condición es falsa en un principio, o que se repita tantas veces como sea
necesario, mientras la condición sea cierta.
En el ejemplo tenemos dos variables a y b que al iniciarse el bucle tienen los valores
a=0 y b=7.
La condición del bucle es b > a.
Cuando a=0 y b=7. la condición es cierta, en el cuerpo del bucle se escribe el
valor de a en pantalla y se incrementa a en una unidad. Entonces a=1 y b=7.
...
...
Cuando a=6 y b=7. la condición es cierta, se escribe el valor de a en pantalla y
se incrementa en una unidad.
Resultando que a=7 y b=7. Entonces la condición es falsa y la instrucción
WHILE finaliza.
La salida por pantalla de este ejemplo seria 0 1 2 3 4 5 6
[editar] Anidamiento
El cuerpo de cualquier estructura puede ser una instrucción simple u otra estructura, que
a su vez puede anidar a otra.
Ejemplo:
IF a > b THEN
auxiliar= a
a= b
b= auxiliar
ELSE
REM nada
END IF
PRINT a ; b

[editar] Ventajas de la programación estructurada


1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma
secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los
bloques de código para entender la lógica.
2. La estructura del programa es clara, puesto que las instrucciones están más ligadas o
relacionadas entre sí.
3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del
programa ("debugging") se facilita debido a la estructura más visible, por lo que los
errores se pueden detectar y corregir más fácilmente.
4. Reducción de los costos de mantenimiento de los programas.
5. Programas más sencillos y más rápidos (ya que es más fácil su optimización).
6. Los bloques de código son auto explicativos, lo que facilita la documentación.
7. Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de
forma directa, por estar prohibida su utilización, están incluidas implícitamente en las
instrucciones de selección e iteración.
8. Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor
estructura sino también una excelente presentación.
La programación estructurada ofrece estos beneficios, pero no se la debe considerar
como una panacea ya que el desarrollo de programas es, principalmente, una tarea de
dedicación, esfuerzo y creatividad.
[editar] Inconvenientes de la programación
estructurada
El principal inconveniente de este método de programación es que se obtiene un único
bloque de programa, que cuando se hace demasiado grande puede resultar problemático
su manejo; esto se resuelve empleando la programación modular, definiendo módulos
interdependientes programados y compilados por separado (en realidad esto no es
necesario, pero es recomendable para su mantenimiento y funcionalidad).
En realidad, cuando se programa hoy en día (inicios del siglo XXI) se suelen utilizar,
tanto las técnicas de programación estructurada como las de programación modular, de
forma conjunta y por lo tanto es posible que cuando uno haga referencia a la
programación estructurada esté considerando también las técnicas de modularización.
Un método un poco más sofisticado es la programación por capas, en la que los
módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de
funciones o de procedimientos.

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AA

INTRODUCCION
La computadoraautomática debe su derecho a existir, su utilidad,
precisamente a su capacidad de efectuar vastos cálculos que no pueden
realizar los seres humanos. Deseamos que la computadoraefectúe lo que
nunca podríamos hacer nosotros, y la potencia de las maquinas actuales es
tal, que inclusive los cálculos pequeños, por su tamaño, escapan al poderde
nuestra imaginación limitada.
Sin embargo debemos organizar el calculo de manera tal que nuestros
limitados poderes sean suficientes para asegurar que se establecerá el efecto
deseado. Esta organización incluye la composición de los programas.
Los avances en la tecnología siempre van parejos con progresos en los
lenguajes de programación y con nuevas ayudas para simplificar el uso del
computador, con lo cual un numero mayor de usuarios se beneficia del. Pero
la necesidad de hacer programas para resolver problemas específicos quizás
nunca desaparecerá.
CONCEPTO DE PROGRAMACION ESTRUCTURADA
EL creciente empleo de los computadores ha conducido a buscar un
abaratamiento del desarrollo des software, paralelo a la reducción del costo
del hardware obtenido gracias a los avances tecnológicos. Los altos costos del
mantenimientode las aplicaciones en producción normal también han urgido
la necesidad de mejorar la productividad del personalde programación.
En la década del sesenta salieron a la luz publica los principiosde lo que más
tarde se llamo Programación Estructurada, posteriormente se libero el
conjunto de las llamadas " Técnicas para mejoramiento de la productividad
en programación" (en ingles Improved Programming Technologies,
abreviado IPTs), siendo la Programación Estructurada una de ellas.
Los programas computarizados pueden ser escritos con un alto grado de
estructuración, lo cual les permite ser mas fácilmente comprensibles en
actividades tales como pruebas, mantenimiento y modificación de los
mismos. Mediante la programación Estructurada todas las bifurcaciones de
control de un programa se encuentran estandarizadas, de forma tal que es
posible leer la codificacióndel mismo desde su inicio hasta su terminación en
forma continua, sin tener que saltar de un lugar a otro del programa
siguiendo el rastro de la lógicaestablecida por el programador, como es la
situación habitual con codificaciones desarrolladas bajo otras técnicas.
EN programación Estructurada los programadores deben profundizar mas
que lo usual al procederá realizar el diseñooriginal del programa, pero el
resultado final es más fácil de leer y comprender, el objetivode u
programador profesional al escribir programas de una manera estructurada,
es realizarlos utilizando solamente un numero de bifurcaciones de control
estandarizados.
EL resultado de aplicar la sistemática y disciplinada manera de elaboración
de programas establecida por la Programación Estructurada es una
programación de alta precisión como nunca antes había sido lograda. Las
pruebas de los programas, desarrollados utilizando este método, se acoplan
mas rápidamente y el resultado final con programas que pueden ser leídos,
mantenidos y modificados por otros programadores con mucho mayor
facilidad.
DEFINICIONES
Programación Estructurada es una técnica en la cual la estructura de un
programa, esto es, la interpelación de sus partes realiza tan claramente como
es posible mediante el uso de tres estructuras lógicas de control:
a. Secuencia: Sucesión simple de dos o mas operaciones.
b. Selección: bifurcación condicional de una o mas operaciones.
c. Interacción: Repetición de una operación mientras se cumple una
condición.
Estos tres tipos de estructuras lógicas de control pueden ser combinados
para producir programas que manejen cualquier tarea de procesamiento de
información.
Un programa estructurado esta compuesto de segmentos, los cuales puedan
estar constituidos por unas pocas instrucciones o por una pagina o más de
codificación. Cada segmento tiene solamente una entrada y una salida, estos
segmentos, asumiendo que no poseen lazos infinitos y no tienen
instrucciones que jamas se ejecuten, se denominan programas propios.
Cuando varios programas propios se combinan utilizando las tres
estructuras básicas de control mencionadas anteriormente, el resultado es
también un programa propio.
La programación Estructurada esta basada en el Teorema de la Estructura, el
cual establece que cualquier programa propio (un programa con una entrada
y una salida exclusivamente) es equivalente a un programa que contiene
solamente las estructuras lógicas mencionadas anteriormente.
Una característica importante en un programa estructurado es que puede ser
leído en secuencia, desde el comienzo hasta el final sin perder la continuidad
de la tarea que cumple el programa, lo contrario de lo que ocurre con otros
estilos de programación. Esto es importante debido a que, es mucho más
fácil comprender completamente el trabajo que realiza una función
determinada, si todas las instrucciones que influyen en su acción están
físicamente contiguas y encerradas por un bloque. La facilidad de lectura, de
comienzo a fin, es una consecuencia de utilizar solamente tres estructuras de
control y de eliminar la instrucción de desvío de flujo de control, excepto en
circunstancias muy especiales tales como la simulación de una estructura
lógica de control en un lenguaje de programación que no la posea.
VENTAJAS POTENCIALES
Un programa escrito de acuerdo a estos principios no solamente tendrá una
estructura, sino también una excelente presentación.
Un programa escrito de esta forma tiende a ser mucho más fácil de
comprender que programas escritos en otros estilos.
La facilidad de comprensión del contenido de un programa puede facilitar el
chequeo de la codificación y reducir el tiempo de prueba y depuración de
programas. Esto ultimo es cierto parcialmente, debido a que la programación
estructurada concentra los errores en uno de los factores más generador de
fallas en programación: la lógica.
Un programa que es fácil para leer y el cual esta compuesto de segmentos
bien definidos tiende a ser simple, rápido y menos expuesto a
mantenimiento. Estos beneficios derivan en parte del hecho que, aunque el
programa tenga una extensión significativa, en documentacióntiende
siempre a estar al día, esto no suele suceder con los métodos convencionales
de programación.
La programación estructurada ofrece estos beneficios, pero no se la debe
considerar como una panacea ya que el desarrollo de programas es,
principalmente, una tarea de dedicación, esfuerzo y creatividad.
TEOREMA DE LA ESTRUCTURA
El teorema de la estructura establece que un programa propio puede ser
escrito utilizando solamente las siguientes estructuras lógicas de control:
secuencia, selección e iteración.
Un programa de define como propio si cumple con los dos requerimientos
siguientes:
a. Tiene exactamente una entrada y una salida para control del programa.
b. Existen caminos seguibles desde la entrada hasta la salida que
conducen por cada parte del programa, es decir, no existen lazos
infinitos ni instrucciones que no se ejecutan.
Las tres estructuras lógicas de control básicas, se definen de la siguiente
forma:
Secuencia: es simplemente la formalización de la idea de que las
instrucciones de un programa son ejecutadas en el mismo orden en que ellas
aparecen en el programa. En términos de diagrama de flujola secuencia es
representada por una función después de la otra, como se muestra a
continuación.
A y B pueden ser instrucciones sencillas hasta módulos completos, lo
importante es que sean programas propios, independientemente de su
tamaño o complejidad interna. Ay B deben ser programas propios en el
sentido en que estos fueron definidos, es decir, que posean solamente una
entrada y una salida; la combinación de A seguida por B es también un
programa propio, ya que esta unión tiene una entrada y una salida
exclusivamente, esto se muestra gráficamente en la figura siguiente:
Donde la caja externa sugiere que la combinación de A seguida de puede ser
tratada como una unidad para propósitos de control.
Selección: Es la escogencia entre dos accionestomando la decisión en base al
resultado de evaluar un predicado. Esta estructura de control es denominada
usualmente IFTHENELSE. La representación en forma de diagrama de flujo
de esta estructura lógica de control se muestra a continuación:
F
Donde P es predicado y A y B son las dos funciones.
Iteración: Esta estructura lógica es utilizada para que se repita la ejecución
de un conjunto de instrucciones mientras se cumpla una condición o
predicado. Generalmente a esta estructura se le conoce como DOWHILE
(hacer mientras) y su representación se muestra a continuación:
V
F
donde P es predicado y A es el modulo controlado.
Se debe comprender claramente que un rectángulo, que representa un
modulo en un diagrama, siempre puede ser sustituido por cualquiera de las
tres estructuras de control descritas anteriormente; por ejemplo, veamos el
diagrama siguiente:
En él, la línea punteada limita un rectángulo que contiene una estructura,
que a su vez controla dos módulos X y Y. La estructura limitada por la línea
punteada es sustituida por una función quedando de la siguiente forma:
V
F
es decir, una función sustituye a una estructura lógica de control o viceversa.
OTRAS ESTRUCTURAS LOGICAS DE CONTROL
Aunque todos los programas pueden ser escritos utilizando solamente las
tres estructuras de control descritas anteriormente, es algunas veces,
conveniente utilizar algunas estructuras adicionales; a continuación se hará
una descripción de esas formas lógicas de control diferentes a las ya
definidas:
El Dountil: La estructuras de iteración básica es el DOWHILE, pero existe
una estructura que es muy parecida a ella y que aveces es usada,
dependiendo del proceso que se este tratando de representar y de las
características apropiadas en el lenguajecon el cual se esta trabajando, esta
forma de control es la que se llama DOUNTIL, cuya representación gráfica
en forma de diagrama de flujo se muestra a continuación:
V
Donde A es el modulo controlado y P el predicado.
La diferencia entre el DOWHILE y el DOUNTIL es que en el primero el
predicado es probado antes de ejecutar la función, si el predicado es falso la
función no es ejecutada; mientras que en el segundo, el predicado es probado
después de ejecutar la función, o sea, que la función siempre será ejecutada
al menos una vez, independientemente si el predicado es cierto o falso.
La estructura CASE:Algunas veces resulta de gran ayuda, desde el punto de
vista de eficiencias y facilidad de lectura de un programa, tener alguna forma
de expresar una desviación del flujo de control hacia múltiples procesos en
función del resultado de la evaluación de un predicado; usualmente, a la
estructura de control que satisface el requerimiento anterior, se le denomina
la estructura CASE. Por ejemplo, si es necesario ejecutar una de cien rutinas
diferentes en función del valor de un código de 2 dígitos, podemos
representar este proceso mediante 100 estructuras IF, sin embargo el sentido
común nos induce a pensar que no hay razón para adherirnos rígidamente a
las tres estructuras básicas de control y en lugar de 100 IF usaríamos la
estructura CASE.
Esta estructura utiliza el valor de una variable para determinar cual, de
varias rutinas, será ejecutada. La representación gráfica de esta estructura de
control se muestra a continuación:
En cada lenguaje será necesario establecer cuales son las instrucciones que,
en forma conveniente y eficiente, realizan funciones establecidas por las
diferentes estructuras lógicas de control.
ETIQUETAS E INSTRUCCIÓN GOTO:
Ocasionalmente se habla de la programación estructurada como una técnica
de programación que no utiliza GOTO(instrucción de desvío del flujo de
control en forma incondicional); si bien es cierto que un programa bien
estructurado tiene, o bien ninguna o muy pocas instrucciones GOTO,
asumiendo que estamos empleando un lenguaje de programación adecuado,
la ausencia de instrucciones GOTO puede ser mal interpretada. Es
conveniente que aclaremos este aspecto en este momento.
Un programa bien estructurado gana una parte importante de su fácil
comprensión del hecho que puede ser leído en forma secuencial sin desvíos
en el flujo de control desde una parte del programa a otra. Esta característica
es consecuencia de usar exclusivamente las estructuras lógicas de control
estándar (el GOTO no es una de ellas), esta secuencialidad o lectura
TOPDOWN es beneficiosa debido a que hay un limite definido para muchos
detalles que la mente humana puede abarcar de una vez. Se hace
relativamente fácil y rápida la comprensión de la tarea que realiza una
instrucción si su función puede ser entendida en términos de unas pocas
instrucciones mas, físicamente contiguas y delimitadas.
El problema con la instrucción GOTO es que generalmente aleja al programa
realizado de los propósitos descritos y en casos extremos puede hacer que un
programa sea esencialmente incomprensible.
No se requieren esfuerzos especiales para eliminar de un programa los
GOTO, los cuales han sido, algunas veces, malentendidos como enemigos de
la programación estructurada, existen buenas y fundadas razones para no
querer usarlos pero no se necesita que se realice un trabajoarduo para
eliminarlo; ellos no aparecerán, en general, cuando se utilicen las estructuras
lógicas de control, descritas anteriormente. Naturalmente, si escogemos para
programar un lenguaje de computación que no posea las estructuras lógicas
de control fundamentales, entonces, tendremos que simularlas y
seguramente ello implicara el uso de la instrucción GOTO; pero este uso
puede hacerse en forma cuidadosamente controlada.
Existen situaciones poco comunes en las cuales el uso de GOTO puede tener
ventajas comparado con otras maneras de expresar un proceso; estos casos
son excepcionales y usualmente no ocurren en la programación realizada
diariamente.
Se deben analizar cuidadosamente las consecuencias de emplear el GOTO,
antes de su uso.
SEGMENTACION
Para la comprensión de un programa se haga en forma fácil y rápida es
necesario que, al revisarlo, uno no tenga que hojear una gran cantidad de
paginas para entender cuales el trabajo que realiza. Una regla practica para
lograr estos fines es establecer que cada segmento del programa no exceda,
en longitud, a una pagina de codificación, o sea, alrededor de 50 líneas (el
significado que se asigna al termino segmento, en este trabajo, no tiene
ninguna relación con su significado en relación a las funciones de
sistemasoperativos o sistemas maneadores de Bases de Datos).
La segmentación no es solamente particionar un programa en trozos cuya
longitud sea de unas 50 líneas; esta técnica debe cumplir con ciertas
características fundamentales:
a. La segmentación reflejara la división del programa en partes que se
relacionen entre sí en forma jerárquica, formando una estructura de
árbol. Esta organización puede ser representada gráficamente por un
diagrama de procesos, lo que hace más sencillo comprender la relación
existente entre un segmento y el resto del programa. Adicionalmente,
podemos indicar que, el segmento en la cumbre de la estructura
jerárquica contendrá las funciones de control de mas alto nivel,
mientras que los segmentos inferiores en esta organización contendrán
funciones detalladas.
b. Una segmentación bien diseñada deberá mostrar, claramente, las
relaciones existentes entre las distintas funciones de manera que sea
fácil comprender lo que debe hacer el programa y asegurar que
efectivamente lo realice. Este hecho, garantizara que los cambios que se
efectúen a una parte del programa, durante la programación original o
su mantenimiento, no afecten al resto del programa que no ha sufrido
cambios.
c. En una segmentación bien realizada la comunicación entre segmentos
se lleva a cabo de una manera cuidadosamente controlada. Algunos
autores recomiendan que los segmentos consistan en procedimientosy
la única comunicación existente entre ellos sea a través de una lista de
parámetros, esto reduce la oportunidad de que interactuen entre ellos
de una manera indeseada e inentendible.
IDENTACION
El uso de la identacion es importante debido a que, cuando se es consistente
en su utilización, facilita la lectura del programa al mostrar en una forma
gráfica las relaciones existentes entre las distintas instrucciones.
La identacion puede ser de gran beneficio, tal como se muestra continuación,
donde ambos programas realizan la misma función, pero el de la derecha es
más fácil de comprender, verificar y corregir.
DIRECTRICES PAR IDENTAR
Debe comprenderse claramente que las líneas siguientes solo pretenden
presentar unas directrices de identacion, sin pretender que estas sean las
únicas reglas a seguir en este proceso, cada centro de procesamiento deberá
establecer sus propias convenciones, sin que sea motivo de preocupación la
diferencia respecto a las sugerencias dadas aquí, lo importante es que se
establezcan unas normas y se cumplan de manera consistente.
Las siguientes son sugerencias para el desarrollo de una política de
identacion en un centro de procesamiento, la idea fundamental es ayudar a
que el lector de un programa le sea fácil comprender las relaciones y las
funciones existentes en él:
a. En los lenguajes donde se permite el uso de etiquetas, estas deben
colocarse lo más externas posibles, por ejemplo comenzando en la
columna 2, y deben estar separadas por una línea (siempre que lo
permita el lenguaje en uso).
b. Se obtiene consistencia si todas las instrucciones se comienzan en una
misma columna, por ejemplo en la columna 4 o cualquier otra ubicada
a su derecha.
c. En los lenguajes en que se hagan declaraciones sobre las variablesa
utilizar, la información quedara mas claramente representada si los
atributos declarados se alinean en forma vertical.
d. El uso de lineas en blanco ayuda a mostrar con mas claridad las
relaciones existentes entre distintos ítems agrupados en las
declaraciones
e. Las instrucciones son mucho mas fáciles de localizar y de cambiar si no
se escribe mas de una instrucción por línea.
f. La vision de control de las estructuras lógicas o de los bloques se
clarifica si las instrucciones controladas son idénticas por alguna
cantidad constante. Se sugiere una identacion de tres espacios.
VENTAJAS DE LA PROGRAMACION ESTRUCTURADA
Con la programación estructurada elaborar programas de computador sigue
siendo un albor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin
embargo, con este nuevo estilo podemos obtener las siguientes ventajas:
1. - Los programas son más fáciles de entender. Un programa
estructurado puede ser leído en secuencia, de arriba hacia abajo, sin
necesidad de estar saltando de un sitio a otro en la lógica, lo cual es
típico de otros estilos de programación. La estructura del programa es
mas clara puesto que las instrucciones están mas ligadas o relacionadas
entre sí, por lo que es más fácil comprender lo que hace cada función.
2. Reducción del esfuerzo en las pruebas. El programa se puede tener
listo para producción normal en un tiempo menor del tradicional; por
otro lado, el seguimiento de las fallas("debugging") se facilita debido a
la lógica más visible, de tal forma que los errores se pueden detectar y
corregir mas fácilmente.
3. Reducción de los costos de mantenimiento.
4. Programas más sencillos y más rápidos
5. Aumento de la productividad del programador
6. Se facilita la utilización de las otras técnicas para el mejoramiento de la
productividad en programación
7. Los programas quedan mejor documentados internamente.

La programación estructurada es una teoria de programación que consiste en


construir programas de facil comprension.
La programación estructurada es especialmente util, cuando se necesitan
realizar correciones o modificaciones despues de haber concluido un programa o
aplicacion. Al haberse utilizado la programación estructurada, es mucho más
sencillo entender la codificacion del programa, que se habra hecho en diferentes
secciones.

La programación estructurada se basa en una metodologi de desarrollo de


programas llamda refinamiento sucesivos: Se plantea una operacion como un todo
y se divide en segmentos más sencillos o de menor complejidad. Una vez
terminado todos los segmentos del programa, se procede a unificar las aplicaciones
realizadas por el pool de programadores. Si se ha utilizado adecuadamente la
programación estructurada, esta integracion debe ser sencilla y no presentar
problemas al integrar la misma , y de presentar algun problema, sera rapidamente
detectable para su correccion.
La representacion grafica de la programación estructurada se realiza a traves de
diagramas de flujo o flow chart, el cual representa el programa con sus entradas,
procesos y salidas.
La programación estructurada propone segregar los procesos en estructuras lo más
simple posibles, las cuales se conocen como secuencia, seleccion e interaccion.
Ellas estan disponibles en todos los lenguajes modernos de programación
imperativa en forma de sentencias. Combinando esquemas sencillos se pueden
llegar a construir sistemas amplios y complejos pero de facil entendimiento.
Árbol (programación)

En ciencias de la computación, un árbol es una estructura de datos


comúnmente usada que emula la estructura de un árbol con un conjunto de
nodos conectados. Cada nodo tiene cero o más nodos hijos, que están por
debajo de él (en ciencias de la computación, al contrario que en la
naturaleza, los árboles crecen hacia abajo, no hacia arriba), El nodo del cual
uno nodo es hijo es llamado su nodo padre. Un hijo tiene como máximo un
padre; un nodo sin padre es llamado nodo raíz (o simplemente raíz). Los
nodos sin hijos son llamados hojas.

En teoría de grafos, un árbol es un grafo conectado acíclico. Un árbol con


raíz es como un grafo con un vértice seleccionado como la raíz. En ese caso,
sólo dos vértices conectados con el lado heredan una relación de padre-hijo.
Un grafo acíclico con múltiples componentes conectados o un conjunto de
árboles con raíz se llama bosque.

En una estructura de datos en árbol, no hay distinción entre los diferentes


hijos de un nodo, ninguno es el primer hijo o el último hijo. Un árbol en el
que se distinguen los hijos por su orden se llama árbol ordenado, y las
estructuras de datos construidas en ellos se llaman '''estructuras de datos
de árboles ordenados'''

Un Árbol Binario es un tipo de arbol ordenado, y hay una relacion uno a uno
entre los arboles binarios y los arboles ordenados generales

Hay muchas formas diferentes de representar un arbol, representaciones


comunes muestran los nodos como varibles alocados en el moticulo como
punterios a sus hijos, sus padres. o juntos, o como elementos de un array,
con relaciones entre determinadas posiciones en el arreglo (ej., heap
binario)

Ir entre los elementos de un arbol, por medio de las conexiones entre


padres e hijos, es llamado '''Caminar por el arbol''', y la accion es
'''caminata''' por el arbol. A menudo, una operacion puede ser realizada
cuando un apuntador arriva a un nodo en particular. Una caminata donde
las operaciones suceden a un nodo antes de suceder a sus hijos es llamada
una '''primera caminata ancha'''; una caminata donde los hijos son operados
antes de que el padre sea llamado se llama
'''primera caminar profunda '''. Vea tambien Árbol Binario para una
discucion de pre-orden, en-orden y post-orden transversal
Operaciones comunes en arboles son:
* Enumerar todos los elementos
* Buscar un elemeto
* Añadir un nuevo item en una cierta posicion del arbol
* Borrar un elemento
* Remover una seccion completa de un arbol (llamado '''podar''');
* Añadir una seccion completa a un arbol (llamado '''injertar''');
* Encontrar la raiz de cualquier nodo

Usos comunes de los arboles son:


* Manipular datos jerarquicos
* Para hacer la informacion facilmente buscable (ver tambien: algoritmos de
busqueda en Árboles )
* Manipular listas ordenadas de datos.

== Ejemplos ==
* http://www.aisee.com/graphs
* SDXF

== Terminos Relacionados ==
* Particion de espacion binario
* heap
* Árbol(Teoria de grafos)
* Algoritmos de busqueda en árboles
* estructura de un Árbol
* Árbol exponencial

Arbol (programacion)
Arbol (programacion)Arbol (programacion)
5 Librería Estándar
§1 Sinopsis
C++ no llega al nivel de simplicidad de su antecesor C, pero al igual que aquél, tampoco
dispone de utilidades o funciones para entrada o salida implementadas en el propio lenguaje,
de modo que estas y otras muchas, como manejo de cadenas de caracteres (strings), manejo
de ficheros, funciones matemáticas Etc. son implementadas en forma de librerías externas.
Una librería es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados

por el programador para realizar determinadas operaciones ( 1.4.4a). Las declaraciones de

las funciones (prototipos 4.4.1) utilizadas en estas librerías, junto con algunas macros y
constantes predefinidas que facilitan su utilización, se agrupan en ficheros de nombres
conocidos que suelen encontrarse en sitios predefinidos. Por ejemplo, en los sistemas UNIX,
en /usr/include. Estos ficheros se suelen llamar "de cabecera", porque es tradición utilizar las

primeras líneas del programa para poner las directivas #include ( 4.9.10g) que los incluirá

en el fuente durante la fase de preprocesado ( 1.4).

§2 Clases de librerías
Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que
permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto
nivel; manipulación de cadenas alfanuméricas y ficheros; control de procesos (incluyendo
multiproceso); manejo de memoria; cálculos matemáticos y un largo etcétera.
Este repertorio de recursos es denominado colectivamente como "Rutinas de librería";
"Librerías de ejecución" RTL ("Runtime Librarys") o simplemente "Librerías". Puede decirse
que el lenguaje aislado (tal cual) no tiene prácticamente ninguna utilidad sin la concurrencia de
estas utilidades. El Estándar C++ las clasifica según su utilidad:
• Soporte del lenguaje [7]
• Diagnóstico
• Utilidades generales
• Cadenas alfanuméricas ("Strings")
• Localización
• Contenedores
• Iteradores
• Algoritmos
• Cálculo numérico
• Entrada/Salida

§2.1 Librería Estándar C++


Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar [3] que
debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la
norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que
deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse
"Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32
ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los
algoritmos. Son los siguientes:
Ficheros Funcionalidad/funciones

<algorithm>
Parte de la STL que describe los algoritmos ( 5.1.3)

<bitset>
Parte de la STL relativa a contenedores tipo bitset ( 5.1.1e1). Set de valores
booleanos.

<complex>
Parte de la librería numérica de la STL relativa a los complejos ( ).

<deque> Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-

ended-queue" ( 5.1.1c3).

<exception>
Parte de la librería de diagnóstico relativa al manejo de excepciones ( 1.6)

<fstream> Flujos hacia/desde ficheros.

<functional>
Parte de la STL relativa a Objetos-función ( 4.9.18f)

<iomanip> Manipuladores.

<ios> Supreclases para manejo de flujos de E/S.

<iosfwd> Contiene declaraciones adelantadas de todas las plantillas de flujos y sus


typedefs estándar. Por ejemplo ostream.

<iostream> Parte del a STL que contiene los algoritmos estándar de E/S.

<istream> Algoritmos estándar de flujos de entrada.

<iterator>
Parte de la STL relacionada con iteradores ( 5.1.2), un tipo de puntero que
permite utilizar los algoritmos de la Librería con las estructuras de datos
representadas por los contenedores.

<limits>
Descripción de propiedades dependientes de la implementación ( 1.2.1) que
afectan a los tipos fundamentales.

<list>
Parte de la STL relativa a contenedores tipo list ( 5.1.1c4); listas doblemente

enlazadas ( 1.8)

<locale>
Parte de la STL relativa a la internacionalización ( 5.2).
<map>
Parte de la STL relativa a contenedores tipo map ( 5.1.1e4).

<memory>
Utilidades relativas a la gestión de memoria, incluyendo asignadores ( 5.1.5) y
punteros inteligentes (auto_ptr).

<new>
Manejo de memoria dinámica ( 1.3.2)

<numeric>
Parte de la librería numérica de la STL relativa a operaciones numéricas ( ).

<ostream> Algoritmos estándar para los flujos de salida.

<queue>
Parte de la STL relativa a contenedores tipo queue ( 5.1.1d1); colas de

objetos ( 1.8).

<set>
Parte de la STL relativa a contenedores tipo set ( 5.1.1e2).

<sstream> Flujos hacia/desde cadenas alfanuméricas.

<stack>
Parte de la STL relativa a contenedores tipo stack ( 5.1.1c5); pilas de objetos

( 1.8).

<stdexcept> Parte de la STL relativa a las clases de las que derivan los objetos lanzados por
las excepciones ocasionadas en los algoritmos de la propia STL y otras
expresiones. Estas clases son utilizadas para reportar errores detectados
durante runtime. Los usuarios también pueden utilizar excepciones para reportar

errores en sus propios programas ( 1.6.1a).

<streambuf> Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers").

Define los tipos que controlan la capa de transporte ( 5.3.2f).

<string>
Parte de la STL relativa a contenedores tipo string ( ); una generalización de
las cadenas alfanuméricas para albergar cadenas de objetos.

<typeinfo>
Mecanismo de identificación de tipos en tiempo de ejecución ( 4.9.14).

<utility> Parte de la STL que contiene elementos auxiliares como operadores y pares
(pairs).

<valarray> Parte de la librería numérica de la STL relativa a manejo de matrices numéricas


()

<vector> Parte de la STL relativa a los contenedores tipo vector; una generalización de
las matrices unidimensionales C/C++ ( 5.1.1c1)

Es digno de mención que aunque generalmente las librerías no aportan ninguna característica
al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje
propiamente dicho), una pequeña porción de la Librería Estándar C++ sí aporta características
que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de
cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes
elementos:

• Operadores new, new[], delete y delete[] ( 4.9.20).


• Clase type_info que corresponde al mecanismo RTTI de identificación de tipos en

tiempo de ejecución representado por el operador typeid ( 4.9.14).

• Rutinas de inicio y terminación ( 1.5).

• Las excepciones estándar lanzadas por los algoritmos anteriores ( 1.6.1a)

§2.2 Librería C
Además de otras nuevas, cuyo diseño e importancia cambian drásticamente la filosofía del
lenguaje, C++ incluye prácticamente la totalidad de funciones de la primitiva librería estándar C.

A esta librería, mantenida por compatibilidad, la denominamos Librería clásica ( 5.5).

§3 Componentes
Al referirnos a las librerías C++ utilizamos la terminología siguiente:
• RTL Conjunto de librerías que acompañan a un compilador ("Runtime Library"), sean o
no estándar.
• Librería Estándar. Conjunto de librerías cuyo contenido está definido por el Estándar
C++ (abreviadamente LE)
• Libería clásica. Parte de la Librería Estándar correspondiente al C clásico.
• STL ("Standard Templete Library"). Parte de la LE genuina de C++ (que no es
heredada de C) y que responde a la forma "++" de hacer las cosas.
La calidad de un compilador C++ viene determinada en gran medida por la calidad y cantidad
de su RTL; por su grado de adherencia al Estándar [6] y por el grado de soporte que
proporciona para la plataforma concreta a que se destina.

Nota: en lo que concierne a la programación para MS Windows (las referencias a la


plataforma Wintel surgen de forma constante e inevitable), los compiladores Borland C++ y
MS Visual C++ son quizás los más conocidos y utilizados. El primero incluye una completa

librería denominada VCL (Visual Component Library 4.11.8b). La del segundo es

conocida como MFC (Microsoft Foundation Classes 1.7.2).

Linux dispone de su propio compilador: GNU Cpp, que comenzó siendo un compilador C y
ha evolucionado a un producto que es en realidad un superconjunto de compiladores. No
solo puede compilar código C y C++; también otros lenguajes como Ada o Fortran; de
forma que es común referirse a ellos como GCC ("GNU Compiler Collection"). La buena
noticia es que existen versiones de este compilador para plataformas Windows, de forma
que incluso en este ambiente "Propietario" pueden realizarse desarrollos utilizando

herramientas "Open source" (ver recuadro en 1.4.0a1).

A grandes rasgos la librería Estándar C++ comprende los siguientes módulos:

• La denominada Librería Estándar de Plantillas ( 5.1), abreviadamente STL


("Standard Templete Library").
○ Librería numérica. Parte de la STL que contiene algoritmos especialmente
concebidos para computación numérica. Por ejemplo, una clase valarray
optimizada para matrices numéricas y una clase complex para manejo y
representación estandarizada de números complejos (en realidad una plantilla
con especializaciones para los tipos float, double y long double).
○ Utilidades. Parte de la STL dedicada a elementos auxiliares tales como
adaptadores y la clase auto_ptr.
• Unas utilidades de entrada/salida de flujos, denominadas genéricamente iostreams (

5.3).

• Una utilidad locale para manejo de localismos [4] ( 5.2).


• Una clase string para manejo estandarizado de cadenas de caracteres. En realidad es
una instanciación (especialización) de la plantilla basic_string para cadenas de
caracteres.
• Un esquema para describir de modo uniforme el entorno de ejecución mediante la
utilización de una clase estándar denominada numeric_limits y especialización para
cada uno de los tipos de datos fundamentales.

• Utilidades para manejo de memoria ( 5.1.5).


• Soporte para utilización de juegos de caracteres y signos de diversos idiomas.

• Utilidades de diagnóstico y manejo de errores. Incluyen manejo de excepciones (

1.6) y la macro assert ( 1.4.5).

§4 Funcionalidad
Si atendemos a su funcionalidad, las utilidades ofrecidas por la Librería Estándar pueden
agruparse en:
• 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 (float, int, long). 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.

§5 Utilización
La utilización de la Librería Estándar C++ requiere de dos tipos de condiciones que podríamos
describir como formales y conceptuales.

§5.1 En cuanto a las primeras (condiciones formales) y habida cuenta que las utilidades
aparecen en forma de funciones, resulta evidente que su utilización exige incluirlas en nuestro
programa. Para ello se necesitan tres pasos (en realidad las exigencias son las mismas que
con cualquier otra función, la diferencia estriba en la forma en que se realizan los pasos b y c):

a: Incluir en el código fuente las invocaciones a las funciones que estamos utilizando.
Ejemplo:
printf("Esto es una llamada a la función \"printf\" de librería\n");

b: Incluir en el código fuente los prototipos de dichas funciones.


Puesto que los prototipos ya están incluidos en los ficheros estándar de cabecera, hay que
indicar al compilador que los incluya [2]. Esto se realiza poniendo en nuestro fuente

(normalmente al principio) una directiva de preprocesado #include ( 4.9.10g) que señala el


fichero de cabecera que se debe añadir. Por ejemplo, si el manual indica que la función printf
está definida en el fichero de cabecera stdio.h ponemos en nuestro código:
#include <stdio.h>

c: Incluir en el fuente las definiciones de las funciones utilizadas. Como alternativa se


puede indicar al compilador que tales definiciones están en ficheros compilados previamente.

En este último caso se dice que las definiciones de las funciones están en librerías ( 1.4) de
las que existen dos tipos:estáticas (.LIB, .OBJ y .BPI) y dinámicas (.DLL). Toda la información
que necesita el compilador está contenida en los ficheros de cabecera, por lo que las
operaciones correspondientes son realizadas de forma automática; con la sola condición de
que los ficheros y librerías correspondientes sean accesibles al enlazador.

No olvidar que la entidades de la Librería Estándar C++ (que no están en ficheros de


cabecera .h), se han definido en un espacio de nombres denominado std, por lo que es preciso

referirse a él específicamente cuando se quieran utilizar estos recursos ( 4.1.11c2).

§5.2 Respecto a las que hemos denominado "condiciones conceptuales", damos por sentado
que la utilización de algoritmos de la Librería exige conocerlos. Pero debemos advertir que
existe una gran diferencia entre las rutinas de la que hemos denominado librería clásica y los
recursos de la nueva Librería Estándar de Plantillas STL.
§5.2a En general los algoritmos contenidos en la librería clásica realizan tareas muy sencillas
bajo la forma de funciones que, con un cierto número de argumentos, realizan la tarea
encomendada. A veces devolviendo un objeto (que puede ser una estructura). Su utilización
exige poco más que repasar esta colección de funciones (209 en la última versión del
Estándar) hasta encontrar la que mejor se ajusta a nuestras necesidades. Para esto lo mejor es
recurrir a la clasificación temática ofrecida en la documentación que acompaña a los
compiladores antes que a la lista alfabética de las mismas. A continuación estudiamos
atentamente su prototipo y la explicación de funcionamiento que acompaña el manual
(eventualmente incluso con un ejemplo) y ya estamos listos para utilizarla. En el peor de los
casos suelen bastar un par de pruebas hasta que conseguimos ajustar los argumentos de
forma que se consiga el resultado esperado.

Nota: a título de ejemplo, el fichero BCB5RTL.HLP, que contiene la "C Runtime Library
reference" (nombre con que aparece la Librería Clásica en la documentación de Borland),
contiene dos secciones; la primera, denominada "Categorical Routines and Types Listing",
contiene la clasificación temática; la segunda, denominada "Alphabetical Routines and
Types Listing", contiene la relación alfabética [5].

Como última recomendación al respecto, sobre todo si pensamos que nuestro programa tendrá
una larga vida y/o pensamos portarlo a otras plataformas, aconsejaría echar un vistazo a la
sección de "compatibilidad" que acompaña a la descripción de cada función en la
documentación de la mayoría de compiladores. Suele ocurrir que el compilador ofrezca muchas
más funciones que las estrictamente Estándar C++, y que estas no estén claramente
separadas del resto, de forma que es posible que elijamos una función que resuelve nuestro
problema pero no es portable, en cuyo caso aconsejaría evitarlas dentro de lo posible.

Nota: como ejemplo escogido al azar, la función max(), que aparece en primer lugar en la
clasificación temática de la documentación Borland C (Runtime Library reference:
"Categorical Routines and Types Listing"), es una función ofrecida por este compilador
para el entorno Windows-32 pero no es portable a UNIX ni tampoco pertenece a los
estándares C o C++.

§5.2b Para todo el que no se haya asomado antes a la programación genérica, la utilización de
la nueva Librería de Plantillas (STL) exige la asimilación de un nuevo paradigma; una nueva
forma de pensar que, si se tiene experiencia en programación tradicional, exige incluso un
"cambio de chip", ya que estas herramientas conforman un mundo enteramente nuevo y
singular.
Con independencia de las explicaciones más detalladas que incluimos en el siguiente capítulo (

5.1), adelantemos aquí que la STL ofrece un conjunto de recursos flexible, potente y
altamente optimizado para resolver una gran variedad de situaciones de programación. Pero
esta versatilidad y potencia tributan un precio: su alto grado de parametrización supone algo
más que utilizar herramientas aisladas. Es necesario saber ensamblar entre sí los recursos
disponibles, que no trabajan aisladamente y que son básicamente de tres tipos: contenedores,
iteradores y algoritmos. El resultado es que el proceso de utilizar la STL es algo más
complicado que la simple búsqueda de una función que resuelva nuestras necesidades; que la
curva de aprendizaje es ciertamente más ardua que en el caso de la librería clásica, y que los
conceptos involucrados son más abstractos y requieren un conocimiento más extenso de sus
fundamentos para utilizarlos. Desde luego, la descripción detallada de todos sus elementos
exige un libro completo, y de hecho son muchos los que se han publicado con el objeto
exclusivo de describir la STL y/o sus técnicas de uso. En compensación, las contrapartidas
obtenidas justifican sin duda el esfuerzo. El programador puede concentrarse más en el
problema que en los detalles de su implementación en el fuente, se incremente la productividad
y se gana en claridad conceptual.

§6 Funciones y macros
Hay que señalar que algunas funciones pueden venir implementadas de dos formas: como
macro y como función. Por ejemplo, la función isalnum, contenida en <ctype.h>. Esto
significa que además de estar implementada como una función en la correspondiente librería
(que se utiliza con los argumentos señalados en el manual), está definida como una macro de
preprocesado en <ctype.h>, de forma que salvo indicación contraria al compilador, el
preprocesador transforma la llamada del programador en otra serie de sentencias equivalentes
que utilizan los mismos argumentos. El resultado es que en el código resultante, que luego
pasa al compilador y al enlazador, no existe nada parecido a una llamada a una función

isalnum (técnicamente el proceso es una sustitución inline de la función de librería, 4.4.6b).


Para evitar que esto ocurra y por consiguiente que la llamada a islanum nunca llegue a
producirse, basta con indefinir la correspondiente directiva. Esto se hace incluyendo al principio
del código, y debajo de la línea #include <ctype.h>, una línea de preprocesado adecuada,
en este caso: #undef isalnum, con lo que el #define del preprocesador quedará sin efecto,
con el resultado de que todas las invocaciones a isalnum de nuestro código serán respetadas
por el preprocesador. Más tarde el enlazador cargará el código de isalnum (que extrae de la
librería) con el resto de nuestro programa, y colocará en cada punto de nuestro código donde
aparezca una invocación a isalnum, un salto a la dirección adecuada.
En estos casos, el resultado es el mismo en ambas modalidades: como macro (por defecto) o
como función de librería. La elección de una u otra es cuestión de optimización. Para tomar una
decisión es necesario comprobar y valorar dos aspectos:
• El tamaño del ejecutable que resulta en uno y otro caso. Posiblemente mayor si se
utiliza la función muchas veces y se adopta la macro.
• La velocidad de ejecución. Posiblemente mayor si se utiliza la función muchas veces
(en bucles muy largos) y se utiliza la macro [1].

Inicio.

[1] El cronometraje se puede realizar sencillamente a mano, con un cronómetro, o colocando


marcadores en sitios estratégicos del programa que, utilizando el reloj del sistema, muestren

los tiempos consumidos. Ver ejemplo ( 9.1).


[2] Estrictamente hablando estas operaciones son realizadas por el preprocesador, el
analizador sintáctico, el compilador o el enlazador según los casos. Nos referimos a todos
estos módulos como "compilador" en un sentido genérico, pues desde un punto de vista
práctico, en algunos casos (como el copilador C++Builder de Borland), solo hay que realizar

una llamada al "compilador" y este se encarga de la totalidad del proceso ( 1.4.0).


[3] En lo sucesivo la designaremos así, con mayúsculas iniciales, para simbolizar que es una
librería única y perfectamente especificada.
[4] "Locales" son conjuntos de datos que indican preferencias culturales. Por ejemplo: formas
de representar la hora, las fechas, el "punto" decimal, etc. La utilidad locale de la Librería
Estándar es la forma que tiene C++ de dar soporte a la internacionalización de los programas.
[5] Aconsejo descargar la documentación C++ del "Site" de Borland aunque se trabaje con otro
compilador. Además de gratuita, es muy completa, bien estructurada y con abundantes
ejemplos.
[6] Posiblemente esta afirmación puede resultarle sorprendente a más de uno. En informática
y en muchos aspectos de la vida, las leyes y normas suelen ir muy por detrás de mundo y la
vida cotidianos. Es frecuente que las estandarizaciones y normativas se limiten a consagrar
"oficialmente" hábitos y costumbres largamente consagrados ya por la práctica. Sin embargo,
en el caso del C++ los acontecimientos se han sucedido a veces de forma contraria. En el
Comité de Estandarización participan representantes de la industria (del software) junto con
miembros de laboratorios de investigación y desarrollo. Teóricos de los lenguajes; estudiosos
de las teorías de computación, de compiladores, Etc. que han tenido tanto o más peso que
aquellos. El resultado es que en algunos casos el Estándar a introducido y aprobado
herramientas que no estaban suficientemente probadas o generalizadas en la práctica.
Construcciones teóricas que ni siguiera eran soportadas por la mayoría de compiladores
disponibles comercialmente. Esto, que incluso ha originado comentarios negativos por parte de
algunos miembros del Comité, ha motivado que incluso algún tiempo después de publicado el
Estándar, muchos compiladores no hubiesen implementado aún todas sus características.
[7] Este primer grupo constituye un caso especial: En principio una librería es algo que ayuda a
realizar determinadas operaciones con más facilidad que la ofrecida por los métodos
implementados en el lenguaje, o que permite hacer algo que no puede hacerse con las
herramientas definidas en él, pero que en rigor no forma parte del lenguaje en sí mismo. Sin
embargo C++ ha sido dotado de ciertas extensiones que se han incluido en forma de librerías

(denominadas "de soporte" 1.5.2). De forma que en cierto sentido dichas librerías sí forman
parte del lenguaje.
Librerías C/C++
En esta página se incluye una selección de librerías de apoyo a la programación en C/C++. Si
piensa abordar algún desarrollo medianamente importante y cree que no son suficientes las
herramientas que proporciona el lenguaje, antes de reinventar la rueda, es aconsejable que
empiece a buscar por ahí (o por aquí). Es más que posible que eso que busca ya esté
inventado.

BeeCrypt Librería criptográfica www.virtualunlimited.com


BeeCrypt es una librería criptográfica de código abierto que proporciona una encriptación
rápida y potente. Puede ser utilizada en proyectos de código abierto o comerciales. Incluye
generadores aleatorios; bloques de cifras; función hash (función unilateral inconvertible), y
mensaje de autentificación de códigos. Está optimizado para C e implementación en muchos
algoritmos, incluyendo Blowfish, Diffie-Hellman, ElGamal, y SHA-1.

Blitz++ www.oonumerics.org/blitz/
Blitz++ es una librería "Open source" destinada a utilizar los beneficios del C++ y de la POO en
la computación científica; principalmente cálculo matricial & vectorial/tensorial. Básicamente se
trata de aprovechar, entre otras, las ventajas del encapsulamiento; herencia; polimorfismo;
sobrecarga de operadores y programación genérica (plantillas), pero sin los inconvenientes que
hasta ahora imponían los lenguajes destinados tradicionalmente a estos menesteres (como
Fortran) en lo que se refiere a la velocidad. Esta librería está auspiciada por la oonumerics.org
(Scientific Computing in Object-Oriented Languages).

Boost www.boost.org/
Lo primero que habría que destacar de estas librerías es su alta calidad técnica. Además son
gratuitas; pueden ser utilizadas libremente en cualquier proyecto, e incluyen código fuente y
abundante documentación. En realidad las Boost son un conjunto heterogéneo de utilidades
que tienen su origen en una iniciativa de algunos miembros del comité de estandarización del
C++, aunque posteriormente han recibido aportaciones de múltiples autores. Comprenden un
extenso catálogo que incluye los siguientes tópicos: String and text processing; Containers;
Iterators; Algorithms; Function Objects and higher-order programming; Generic Programming;
Template Metaprogramming; Preprocessor Metaprogramming; Concurrent Programming;
Math and numerics; Correctness and testing; Data structures; Input/Output; Inter-language
support; Memory; Parsing; Miscellaneous. El proceso de selección para que una librería sea
admitida, es público y bastante estricto, lo que garantiza que el mero hecho aparecer en la
colección es un marchamo de la calidad y nivel técnico a que antes aludíamos. En realidad
esta colección es una especie de antesala oficiosa del Estándar, ya que algunas de sus
componentes son analizadas y evaluadas por los miembros del comité como candidatas a ser
incluidas en futuras revisiones del estándar C++.

Corrección de errores ECC http://eccpage.com


Esta página está dedicada a programas escritos en C/C++ y MATLAB que implementan rutinas
de codificación y decodificación de control de errores (ECC Error-Correction-Codes) muy
populares, tales como Reed-Solomon, BCH, the binary Golay, binary Goppa, decodificador
Viterbi, y otros.

C++ portable components www.appinf.com/


Librerías C++ que se integran perfectamente con la Librería Estándar, cubriendo aspectos no
contempladas por esta. Están disponibles para casi cualquier plataforma que disponga de un
compilador C++ Estándar, incluyendo MS Visual C++; GCC para Mac y Linux; Sun ONE Studio;
Compaq C++ y HP ANSI C++. Entre otros, proporcionan los siguientes servicios: una librería
NET que ofrece soporte para protocolos y servidores HTTP, FTP, SMTP y otros; una librería
XML que proporciona un analizador/escritor XML, e interfaz para las especificaciones DOM
(Document Object Model); una librería de utilidades con clases para procesar ficheros de
configuración y comandos del shell (command line arguments), además de un marco de trabajo
para crear aplicaciones servidor implementadas como demonios Unix o servicios Windows
(según el caso). Finalmente, una librería DBlite, que ofrece soporte para una database SQL, de
forma que pueden manejarse cómodamente datos de cualquier tipo sin necesidad de utilizar
databases externas.
En el diseño ha primado la consideración de hacerla "ligera", de forma que es adecuada para el
desarrollo de aplicaciones C++ en todo tipo de sistemas, especialmente dispositivos móviles y
"embebidos". Está disponible en dos modelos de licencia: Open Source y comercial.

DLsoft www.dlsoft.com/
Si necesita añadir soporte para códigos de barras en sus programas C++, este fabricante
ofrece una extensa selección de librerías que pueden ser útiles. Dispone de versiones VCL
desarrolladas en Pascal (clases derivadas de TImage) que pueden ser utilizadas con el
compilador Borland C/C++, y de versiones para MS Visual C++.

Firebird www.firebirdsql.org/
Firebird es una base de datos relacional RDBMS ("Relational Data Base Management System")
multiplataforma, que ofrece la mayoría de las características del Estándar ANSI SQL junto con
un elevado rendimiento, excelente concurrencia, y un potente lenguaje que permite almacenar
procedimientos y disparadores ("triggers"). Ofrece soporte nativo para Linux; Windows; una
gran variedad de plataformas Unix; Solaris, y MacOS. Soporta distintos métodos de conexión,
incluyendo componentes nativos para C/C++ [2]. Está exento de cualquier exigencia de
registro, licencia, o derechos. Los desarrollos que lo utilicen pueden ser distribuidos libremente
incluso si se trata de productos comerciales.
Está disponible en tres versiones: SuperServer, Classic y Embedded. La primera es la más
usual; SuperServer utiliza un solo módulo para atender todas las conexiones. Este módulo
comparte su memoria entre los clientes de la database, utilizando un hilo ("thread") para
manejar cada conexión. La versión Classic del servidor es apropiada para máquinas dotadas
de SMP ("Symmetric Multyprocessing"). Crea un nuevo proceso para cada conexión que debe
atender. Finalmente, la versión Embedded consiste en una librería dinámica (.DLL) de 1.5 MB,
que contiene la funcionalidad de un servidor. Es apropiada para aplicaciones que requieran la
capacidad de una RDBMS sin las complicaciones de instalación y mantenimiento de un

servidor (una situación análoga a la ofrecida por SQLite ).


En realidad, Firebird arrastra una larga historia, y experiencia con las RDBs, de más de 20
años. La tecnología subyacente ha sido explotada desde 1984 bajo distintos nombres. El último
Interbase 6.0, cuando en Agosto del 2000, su código fue distribuido como abierto ("Open
Source") por Borland.

IT++ http://itpp.sourceforge.net/
IT++ es una librería C++ de funciones y clases para proceso de señales, incluyendo proceso
del habla y comunicaciones, que tiene su origen en el Departamento de Teoría de la
Información de la Universidad Tecnológica de Chalmers en Suecia y que se distribuye bajo la
licencia GNU GPL. Ha sido desarrollada por investigadores y estudiosos de distintas
universidades. También está siendo desarrollada como parte de NEWCOM (European Network
of Excellence in Wireless Communications). Está formada alrededor de un conjunto de clases
genéricas de vectores y matrices, junto con gran número de funciones para su manejo, que la
hacen similar al popular Matlab. Para aumentar su seguridad, funcionalidad y velocidad, hace
uso de distintas librerías "open-source". En particular BLAS, CBLAS, LAPACK y FFTW. Puede
funcionar bajo los sistemas GNU/Linux, Sun Solaris, Mac OS X y Microsoft Windows (en este
último, a través de Cygwin, MinGW/MSYS, o MS Visual C++ .NET).

Jungo. WinDriver www.jungo.com


Se trata de una herramienta que simplifica el proceso de escribir drivers para diversos Sistemas
Operativos, permitiendo utilizar los compiladores C++ más frecuentes (MS Visual C++, Borland,
GCC y otros).
Entre los SO soportados están: Windows 9x, NT/NT Embedded, 2000, Windows CE, Linux,
Solaris, OS/2 y VxWorks.

Lateral ARTS Simkin www.simkin.co.uk


Simkin es un lenguaje de script que puede trabajar con C++, también con Java y XML. Se trata
de un producto de código abierto (open source). La sintaxis es tan sencilla como la de
JavaScript. La versión para Visual C++ es una librería de 200 KB.
Simkin puede ser utilizado en multitud de formas, entre ellas: Creación y manipulación de
databases; sistemas de simulación; construir test de funcionamiento mediante scripts; incluir en
una aplicación la funcionalidad de una "macro", etc.

LiDIA www.informatik.tu-darmstadt.de
LiDIA es una librería para computación numérica de la Universidad de Tecnología de
Darmstadt, según la descripción original: "LiDIA is a C++ library for computational number
theory which provides a collection of highly optimized implementations of various multiprecision
data types and time-intensive algorithms. Su distribución incluye el código fuente y es libre
para usos no comerciales.
Además de las máquinas Sparc y Alpha, LiDIA puede utilizarse en los entornos ix86/Linux
GNU. En particular con las versiones del compilador g++ 3.x y posteriores.

Literal Arts. Lenguaje embebible de script www.simkin.co.uk


Simking es un lenguaje de script interpretado que trabaja con C++ (existe una versión para
Java), y se distribuye bajo la licencia GNU "Open source". Los scripts pueden ser alojados en
ficheros de datos, incluyendo XML o en bases de datos.
Puede utilizarse para personalizar aplicaciones C++ mediante scripts que son interpretados por
clases C++ que se proporcionan con el lenguaje. Estas clases proporcionan una interfaz
directa para escripts alojados en documentos XML o en árboles.

MarshallSoft. Librerías de comunicaciones www.marshallsoft.com


Librerías de comunicaciones incluyendo protocolos IP para Internet y para comunicación serie,
tanto para entornos Windows como DOS. La empresa ofrece los siguientes paquetes:
• Librerías Windows para e-mail: SEE4C SMTP/POP3 Email Engine Library for C/C++
• Librerías Windows FTP: FCE4C FTP Client Engine Library for C/C++
• Librerías de interfaz Winsock: WIL4C Winsock Interface Library for C/C++
• Marcador para Windows: MDD4C MarshallSoft DUN Dialer for C/C++
• Comunicaciones serie para Windows: WSC4C Windows Standard Serial Comm
Library for C/C++
• Comunicaciones serie para DOS: PCL4C Personal Communications Library for C/C++

MySQL++ www.mysql.com
MySQL++ es una interfaz (API) de la popular base de datos relacional MySQL para C++. Su
propósito es hacerla funcionar mediante contenedores STL.

MySQL. Database www.mysql.com


MySQL es un sistema de administración de una base de datos con soporte para múltiples
usuarios que utiliza el lenguaje SQL estandarizado para el almacenamiento, actualización y
acceso a información. Soporta varios lenguajes de programación: C, C++, Eiffel, Java, Perl,
PHP, Python y TCL.
Dispone así mismo de diferentes GUIs, incluyendo versiones para Borland C++ y Microsoft
Visual C++

Palisand. DalC++ Database Access Library www.palisand.com


Se trata de una librería C++ orientadas a objetos que soporta Borland C++ Builder e incorpora
drivers de MS Access y SQL Server.
Diseñada para desarrolladores de aplicaciones cliente/servidor que necesiten escribir
aplicaciones no muy voluminosas, que deban soportar diversas bases de datos relacionales.
Database Access Library se encarga de todas las transformaciones entre el paradigma
orientado a objetos y el modelo relacional, sin renunciar por ello a ninguna ventaja de la
programación orientada a objetos.
Otras características incluyen: soporte para asociaciones directas y bidireccionales 1-n y n-n,
asociaciones 1-n restringidas, selección polimórfica explícita, soporte de esquemas de diseño
sujeto-objeto, generación automática de esquemas y soporte de migración de esquemas.

PTypes www.melikyan.com
PTypes (C++ Portable Types Library) es una alternativa a la Librería Estándar de Plantillas
(STL) de C++. Es un proyecto de código abierto mantenido por Hovik Melikyan que entre otras
características incluye flujos de E/S, funcionamiento en modo multihebra y trabajo en red, ya
que permite manejar conexiones IP. Se trata de una librería multiplataforma que puede
funcionar en los principales sistemas actualmente en uso (FreeBSD, Linux, SunOS, Mac OS X
y Windows).

SFL www.imatix.com
SFL ("Standard Function Library") es una librería de funciones C/C++ escrita en C estándar,
que contiene aproximadamente 450 funciones relativas a las siguientes áreas: Compression,
encryption, and encoding; Datatype conversion and formatting; Dates, times, and calendars;
Directory and environment access; User and process groups; Inverted bitmap indices; Symbol
tables; Error message files; Configuration files; String manipulation and searching; File access;
Internet socket access; Internet programming (MIME, CGI); SMTP (e-mail) access; Server
(batch) programming; Program tracing.
SFL ha sido portada a MS-DOS; Windows; OS/2; Linux; Digital OpenVMS y distintos sistemas
UNIX (IBM AIX, SunOS, HP/UX, Solaris, NetBSD, FreeBSD, SCO OpenServer, Digital UNIX).
Se distribuye con una completa documentación y con el código fuente. Sus creadores (iMatrix)
la facilitan bajo la licencia Open Source, de forma que puede ser utilizada y distribuida, incluso
en aplicaciones comerciales mediante una licencia muy permisiva (solo se exige que en la
documentación del producto se incluya la siguiente frase: "This product uses parts of the iMatix
SFL, Copyright © 1991-2000 iMatix Corporation <http://www.imatix.com>".

SQLAPI++ Library www.sqlapi.com


Es una librería de interfaz para acceder a las bases de datos de los motores SQL más
comunes: Oracle, SQLServer, InterBase, DB2, Informix, Sybase, SQLBase y ODBC. Utiliza
APIs propios, y las apliaciones desarrolladas con esta librería se ejecutan limpia y eficazmente.
Incluye una interfaz de usuario que permite acceder a las características específicas de cada
base de datos.

SQLite www.sqlite.org
Seguramente no es exagerado decir que prácticamente cualquier aplicación, incluyendo las
que no son específicamente algún tipo de database (un catálogo de música o de fotos por
ejemplo), necesita manejar algunos datos, aunque solo sean de configuración inicial, últimos
ficheros/direcciones utilizadas, etc. Tampoco sería exagerado decir que, casi con seguridad,
ya dispone en su equipo de alguna aplicación que utilice esta librería sin que usted se haya
percatado de ello, ya que multitud de aplicaciones comerciales y freeware la utilizan. Por
ejemplo, Firefox y Thunderbird y Sunbird; el software de muchos teléfonos celulares, y los
sistemas operativos Mac OS X de Apple o Solaris de Sun.
Si desea beneficiarse de la potencia de la sintaxis SQL para sus datos sin la aparatosidad de
los motores SQL tradicionales, seguramente SQLite es la opción más acertada. Su autor
original, Richard Hipp, ha colocado su código en el dominio público, con lo que cualquiera es
libre de copiar, modificar, publicar, usar, compilar, vender o distribuir el código original en forma
de fuente o como binario compilado, y para cualquier propósito, comercial o no comercial.
SQLite ofrece la potencia de un motor de base de datos relacional de cero-configuración,
pensado para ser incluido ("embedded") en cualquier aplicación C/C++ que lo necesite [1].
Soporta databases de hasta 2 TeraBytes (241 Bytes), pero su código se reduce a una librería de
menos de 250 KBytes en su configuración completa, que puede ser reducida a unos 150
Kbytes si se omiten las funcionalidades no esenciales. Además de una interfaz C/C++
perfectamente documentada, dispone de su propio TCL ("Tool Command Languaje") que
permite controlar las bases de datos mediante comandos de consola o ficheros script. Existen
también interfaces ("wrappers") para distintos lenguajes, incluyendo ADA, Common Lisp, Java,
JavaScript, Perl, PHP, Python, etc.

Str Library www.utilitycode.com


Str Library es una librería de clases para desarrollos C++ adecuada al tratamiento de cadenas
("Strings"). Especialmente adecuada para aplicaciones multihebra, se caracteríza por su
eficiencia y velocidad.

Template Numerical Toolkit TNT math.nist.gov


Conjunto de herramientas para computación numérica de Roldan Pozo, de la División de
Matemáticas y Ciencias de la Computación (MCSD) del Instituto USA de Estandarización y
Tecnología (NIST). Es una colección de interfaces e implementaciones de objetos numéricos y
estructuras básicas, como matrices multidimensionales y dispersas, usadas frecuentemente en
aplicaciones numéricas y cáculos científicos en C++.

Virtual Unlimited. Aplicaciones y librerías para seguridad www.virtualunlimited.com


Productos para criptografía y seguridad; entre otros BeeCrypt, una librería suministrada bajo la
licencia GNU de código abierto. Incluye implementaciones en C y ensamblador de varios
algoritmos de cifrado y encriptación, incluyendo Blowfish, MD5, SHA-1 y ElGamal. BeeCrypt ha
sido diseñada como una herramienta de uso general que puede ser utilizada en multitud de
circunstancias. Existen dos versiones: Una escrita en C y ensamblador; otra en Java.

Xceed Software. Aplicaciones y librerías varias www.xceedsoft.com


Xceed Software ofrece diversas herramientas para programación:
• Zip Compression Library
• FTP Library
• Zip Self-Extractor Module
• Winsock Library
• Backup Library
• Absolute Packager

Swig www.swig.org/
SWIG es una herramienta de desarrollo que permite conectar programas escritos en C/C++ con
otros lenguajes de alto nivel, principalmente lenguajes de "script", tales como Perl, Python,
Tcl/Tk, Ruby, Guile, MzScheme y PHP; aunque entre los lenguajes soportados se incluyen
otros como Java y Eiffel. Principalmente se utiliza para crear entornos de programación
interpretados de alto nivel y herramientas para construir interfaces de usuario. Puede ser
utilizado y distribuido libremente para uso comercial y privado.

Inicio.

[1] Últimamente algunos fabricantes de RDBMS ("Relational DataBase Management System")


han ofrecido versiones ligeras ("downsized") de sus gestores de bases de datos de gran escala
para adaptarlos a aplicaciones embebidas. Sin embargo, SQLite es el único de tales RDBMS
que ha sido específicamente diseñado desde su origen para ofrecer esta particularidad.
Además, su código es de dominio público. En el fichero de cabecera sqlite3.h puede leerse la
siguiente nota de copyright:
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
**
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
**
**********************************************************************
***

[2] Existen librerías auxiliares que puede facilitar esta labor. Por ejemplo, IBpp
www.ibpp.org/, una librería de clases (libre de dependencias de cualquier tipo) que proporciona
acceso a Firebird desde cualquier aplicación C++, ya sea visual o en modo consola. En
realidad IBpp es una interfaz que, a través de distintas clases muy fáciles de utilizar,
proporciona todo lo necesario para acceder a las bases de datos Firebird, así como a las tareas
de mantenimiento y administración del servidor.
Inicio
22 - Librerias estandar

Tutorial creado por Peter Class; traducción por Pello Xabier Altadill Izura . Extraido de:
http://es.tldp.org/Manuales-LuCAS/doc-tutorial-c++/html/
28 Febrero 2006
< anterior | 1 .. 19 20 21 22 23 | siguiente >
""La sintaxis de inclusion de librerias puede variar segun la version y la plataforma del
compilador c++. Puede ser asi:

...

using namespace std;

#include <iostream>

...

O mas simple:

...

using namespace std;

#include <iostream>

...

Pero, ¿que narices es eso del namespace? Con eso de namespace lo que hacemos es declarar
un zona concreta para variables, objetos, etc.

...

int contador; // variable global


// definimos el espacio de nombres freedomia

namespace freedomia {

int contador;

// definimos el espacio de nombres libertonia

namespace libertonia {

int acumulador;

int contador;

// vamos a probar

int main () {

// asi utilizariamos la variable del espacio freedomia

freedomia::contador = 0;

// y asi la otra, la global

::contador = 0;

// QUE PASA SI no lo especificamos? efectivamente tendremos

// seremos unos ambiguos

// y si somos unos vagos y no queremos especificar el espacio de


nombres

// en cada uso de la variable??

// metemos la directiva using

using namespace libertonia;

acumulador = 0;

// pero OJO esto seguiria siendo ambiguo

contador = 0;

// using como declaracion.

// Pero que pasa si lo que realmente queremos es quitar esa


ambiguedad

// y afirmar que en adelanta vamos a utilizar la variable de


determinado namespace?

// ESTO se haria asi

using libertonia::contador;

// ahora si, esto seria correcto

contador = 0;

A lo que ibamos: al igual que en c, en c++ tenemos una libreria base para desarrollar
aplicaciones. Aqui se hecha un rapido vistazo a todas ellas.

#include <iostream>

Libreria basica de entrada/salida. Imprescindible.


#include <string>

Libreria para el manejo de string con las funciones mas usuales como strcpy, strncpy, strlen,
strcat, strncat, incluso las que sirven para buscar dividir un string en tokens.

#include <time>

Libreria para escribir fechas, con distintas opciones. Podemos sacar la fecha del momento y
separar los valores de dia, hora, minuto, etc..

#include <stdlib>

Otra libreria basica, que contiene funciones como los conversores de ascci-integer atoi,
algoritmos de ordenacion de arreglos como qsort..

Veamos el listado que contiene las librerias del ambito estandar.

iostream : entrada y salida

iomanip : manipuladores de entrada/salido con argumentos

fstream : flujos de archivos


sstream : flujos de cadenas (tipo c++)

strstream : flujos de cadenas (tipo c)

vector : contenedor para crear vectores

list : contenedor para crear listas

deque : contenedor para una cola de extremo doble

map : contenedor para grupo de pares (id,valor)

string : cadenas

Librerias de c. Estan versioneadas para la libreria estandar de c++ las siguientes: cstdlib,
cstdio, cerrno, cassert, cstdarg, cstring, ctime, csignal, cstddef, csetjmp, cmath, clocale,
climits, cfloat y cctype.

Operadores de bits: Otra opcion mas de c++


& AND

| OR

^ exclusive OR

~ complement

Figura: programar es como cocinar

Existen mas librerias standar y lo que es mejor, librerias muy potentes disponibles para
desarrollar programas mas complejos: creacion de interfaces de ventanas, comunicaciones,
etc..

El estilo A la hora de escribir codigo se pueden tomar muchas costumbres y vicios que no
facilitan la generacion de un estilo claro. De todas formas, dentro de un mismo proyecto seria
mejor mantener un mismo estilo. No debe ser una preocupacion, ya que existen programas
para formatear el codigo fuente, meter espacios tabulaciones, saltos de linea, etc.

""
Librerias

Screenshot Conio
Es una emulación de la libreria Conio.h de Borland para los
compiladores Visual C++ 6.0 y Dev C++.
Tamaño del archivo: 49 Kb
Numero de descargas: 496

Principio del formulario

code/librerias 123 Descargar librería

Final del formulario

Screenshot WinBGI
Es una emulación de la libreria Graphics.h de Borland para los
compiladores Visual C++ 6.0 y Dev C++.
Tamaño del archivo: 702 Kb
Numero de descargas: 566

Principio del formulario

code/librerias 124 Descargar librería

Final del formulario

Screenshot Bases
Libreria para la conversión de bases:
• Binario a Decimal
• Binario a Octal
• Binario a Hexadecimal
• Octal a Decimal
• Octal a Binario
• Octal a Hexadecimal
• Decimal a Binario
• Decimal a Hexadecimal
• Decimal a Octal
• Hexadecimal a Binario
• Hexadecimal a Octal
• Hexadecimal a Decimal
Libreria disponible para los compiladores Visual C++ 6.0 y Dev C+
+.
Tamaño del archivo: 213 Kb
Numero de descargas: 328

Principio del formulario

code/librerias 125 Descargar librería

Final del formulario

Screenshot FMOD 3.75


Libreria para el manejo de audio para el compilador Visual C++ 6.0.
[Pagina de Inicio]
Tamaño del archivo: 1958 Kb
Numero de descargas: 219

Principio del formulario

code/librerias 126 Descargar librería

Final del formulario

Screenshot OpenGL 2.0 + GLUT 3.76 + GLEW 1.4.0 + GLAUX


Libreria para el manejo de graficos en 3D para el compilador Visual
C++ 6.0.
[Pagina de Inicio]
Tamaño del archivo: 2534 Kb
Numero de descargas: 354

Principio del formulario

code/librerias 127 Descargar librería

Final del formulario

Screenshot SDL 1.2.11 + SDL_Image 1.2.5


Libreria para el manejo de graficos en 2D para el compilador Visual
C++ 6.0.
[Pagina de Inicio]
Tamaño del archivo: 859 Kb
Numero de descargas: 202

Principio del formulario


code/librerias 128 Descargar librería

Final del formulario

Screenshot MySQL
Libreria que permite el acceso a base de datos MySQL para los
compiladores Visual C++ 6.0 y Dev C++.
[Pagina de Inicio]
Tamaño del archivo: 4382 Kb
Numero de descargas: 196

Principio del formulario

code/librerias 137 Descargar librería

Final del formulario

Screenshot Image Button


Libreria que permite poner imagenes o iconos en los botones.
Libreria disponible para los compiladores Visual C++ 6.0, Visual C+
+ .NET 2005 y Dev C++.
[Pagina de Inicio]
Tamaño del archivo: 475 Kb
Numero de descargas: 187

Principio del formulario

code/librerias 139 Descargar librería

Final del formulario

Screenshot Image Menu


Libreria que permite poner diferente estilos al menu, por ejemplo
Office 2003, office 2007. Libreria disponible para los compiladores
Visual C++ 6.0, Visual C++ .NET 2005 y Dev C++.
[Pagina de Inicio]
Tamaño del archivo: 830 Kb
Numero de descargas: 157

Principio del formulario


code/librerias 140 Descargar librería

Final del formulario

Screenshot Hyperlink
Libreria que permite utilizar el control hyperlink y de esta manera
poder poner enlaces web o direcciones de correo en una caja de
dialogo. Libreria disponible para los compiladores Visual C++ .NET
2005 y Visual C++ 6.0.
[Pagina de Inicio]
Tamaño del archivo: 60 Kb
Numero de descargas: 100

Principio del formulario

code/librerias 141 Descargar librería

Final del formulario


Compiladores

Screenshot Turbo C++ 3.0


Es un compilador para realizar programas en C/C++ en MS-DOS.
[Pagina de Inicio]
Tamaño del archivo: 2902 Kb
Numero de descargas: 175

Principio del formulario

compiladores/ 129 Descargar compilador

Final del formulario

Screenshot Dev C++ 4.9.9.2


Es un entorno de desarrollo para el compilador Mingw que permite
realizar programas en C/C++ en consola y en Windows.

Principio del formulario

compiladores/ 130

Final del formulario

Screenshot Pellesc
Es un compilador basado en LCC que contiene su entorno de
desarrollo y editor de recursos, que permite realizar programas en
lenguaje C en consola y en Windows.

Principio del formulario

compiladores/ 131

Final del formulario

Screenshot Code Blocks 1.0


Es un excelente entorno de desarrollo para el compilador Mingw que
permite crear programas en C/C++ en modo consola o aplicaciones
Windows.

Principio del formulario


compiladores/ 161

Final del formulario

Screenshot Visual C++ .NET 2008 Express


Es un compilador que permite realizar aplicaciones en C/C++ en
consola y en windows, tambien contiene editor de recursos y permite
realizar interfaces graficas complejas utilizando Windows Forms.

Principio del formulario

compiladores/ 171

Final del formulario

S-ar putea să vă placă și