Programación Estructurada
Programación Estructurada
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
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
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.
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
== 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
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á
§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
<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)
<functional>
Parte de la STL relativa a Objetos-función ( 4.9.18f)
<iomanip> Manipuladores.
<iostream> Parte del a STL que contiene los algoritmos estándar de E/S.
<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 ( ).
<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).
<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
<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).
<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:
§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.
§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.
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
5.3).
§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");
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.
§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
Inicio.
(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.
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++.
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
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).
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.
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.
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>".
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.
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.
[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:
...
#include <iostream>
...
O mas simple:
...
#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.
...
namespace freedomia {
int contador;
namespace libertonia {
int acumulador;
int contador;
// vamos a probar
int main () {
freedomia::contador = 0;
::contador = 0;
acumulador = 0;
contador = 0;
using libertonia::contador;
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 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..
○
sstream : flujos de cadenas (tipo c++)
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.
| OR
^ exclusive OR
~ complement
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
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
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
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
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
compiladores/ 130
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.
compiladores/ 131
compiladores/ 171