<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lsuarezmtzjc</id>
	<title>EcuRed - Contribuciones del colaborador [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lsuarezmtzjc"/>
	<link rel="alternate" type="text/html" href="https://www.ecured.cu/Especial:Contribuciones/Lsuarezmtzjc"/>
	<updated>2026-05-09T18:46:34Z</updated>
	<subtitle>Contribuciones del colaborador</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454880</id>
		<title>Teoría de compiladores</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454880"/>
		<updated>2012-04-03T12:54:45Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Compilador&lt;br /&gt;
|imagen= compilador.png&lt;br /&gt;
|tamaño= 270px&lt;br /&gt;
|concepto= Programa informático cuya función es transformar código fuente legible para el humano a código de máquina que una [[CPU]] puede ejecutar. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Teoría de compilador'''&lt;br /&gt;
En la [[Comunicación|comunicación]] [[Hombre|hombre]]-máquina existe una dificultad real: las [[Computadora|computadoras]] operan sobre [[Bits|bits]] (ceros y unos) y registros y los hombres se entienden por medio de idiomas (lenguaje natural), o utilizan una noción científica determinada por el área de problemas en que trabaja, entre otras vías. &lt;br /&gt;
Los [[Lenguajes de Programación Web|lenguajes de programación]] son el vehículo de comunicación entre el hombre y la [[computadora]]. Un [[Lenguaje de Programación|lenguaje de programación]] es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una [[computadora]]. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático. Un programa fuente escrito en un [[Lenguaje de Programación|lenguaje de programación]]  necesita pasar por un proceso de conversión al lenguaje de maquina que entiende la [[computadora]], a ese proceso de conversión del programa fuente al [[Lenguaje|lenguaje]] o código de máquina se le llama proceso de compilación o simplemente compilación. Y al programa capaz de realizar ese proceso se le llama [[Compilador|compilador]] o traductor.&lt;br /&gt;
==Teoría de compilador==&lt;br /&gt;
===Conceptos básicos=== &lt;br /&gt;
Veamos informalmente algunos conceptos básicos. &lt;br /&gt;
*Lenguaje: Conjunto de [[Símbolos|símbolos]] y reglas que permiten la [[comunicación]], es decir, trasmitir una idea, un [[Mensaje|mensaje]]. &lt;br /&gt;
&lt;br /&gt;
*Léxico (vocabulario): Conjunto de palabras que forman parte de un lenguaje específico. &lt;br /&gt;
&lt;br /&gt;
*[[Gramática]]: Agrupa los [[Elementos de Infórmatica|elementos]] de forma, estructura y significado que permiten expresarse en un lenguaje determinado. &lt;br /&gt;
&lt;br /&gt;
*[[Sintaxis]]: Conjunto de reglas necesarias para construir [[Frases|frases]] correctas en un lenguaje. &lt;br /&gt;
&lt;br /&gt;
*[[Semántica]]: Significado de frases generadas por la [[sintaxis]] y el [[léxico]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de [[Programación|programación]]: Conjunto de símbolos y reglas que permiten la comunicación con un [[Computador|computador]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de alto [[Nivelación|nivel]]: Lenguaje que permite la comunicación de un [[computador]] mediante símbolos convencionales cercanos a un lenguaje natural. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de bajo nivel: Similar al lenguaje de máquina con pequeñas modificaciones [[nemotécnicas]] que facilitan su uso, por ejemplo el lenguaje [[ensamblador]]. &lt;br /&gt;
Lenguaje de Maquina: Combinación de dígitos [[binarios]] mediante los cuales un ordenador funciona.&lt;br /&gt;
&lt;br /&gt;
===Compiladores y traductores.=== &lt;br /&gt;
*[[Traductor]] es un programa que toma como entrada un programa escrito en un lenguaje de programación (lenguaje fuente) y produce como salida un programa en otro lenguaje (lenguaje objeto). El traductor se escribe en un lenguaje denominado lenguaje de implementación. &lt;br /&gt;
Cuando el lenguaje fuente es de alto nivel ([[Pascal]], C++, etc.) y el lenguaje objeto es un lenguaje de bajo nivel o de máquina, al traductor se le denomina compilador.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
El lenguaje de [[implementación]] puede ser en general cualquier lenguaje de programación, aunque existen lenguajes explícitamente diseñados para escribir compiladores (FSL, CDL, etc.). El criterio fundamental que se sigue para elegir un lenguaje de implementación es: “Este debe [[minimizar]] el esfuerzo de implementación y [[maximizar]] la calidad del compilador”. &lt;br /&gt;
Generalmente los traductores se representan a través de una T en la que se incluyen los lenguajes que intervienen en el [[proceso]].&lt;br /&gt;
*Intérprete por su parte es un programa que toma el [[Código fuente|código fuente]], lo analiza y a diferencia de los compiladores lo ejecuta directamente, sin generar un lenguaje objeto.&lt;br /&gt;
&lt;br /&gt;
===Estructura de un compilador.=== &lt;br /&gt;
El trabajo de un compilador consiste en tomar la cadena fuente del programa, determinar si es [[sintacticamente]] válida y, a la vez, generar un programa equivalente en un lenguaje que la computadora entienda. &lt;br /&gt;
El trabajo del compilador se puede dividir en diferentes partes:&lt;br /&gt;
 &lt;br /&gt;
Para un compilador en particular, el orden de los procesos puede variar y, en muchos casos, varios procesos pueden combinarse en una sola fase. En traductores reales el proceso anteriormente descrito no transita en la forma [[Linealidadlineal]] en la que aparece en el [[esquema]] propuesto en la figura, normalmente el centro del proceso de compilación gira alrededor del [[Analizador Sintáctico]] el cual es el encargado de activar cada una de las restantes fases según sea necesario. &lt;br /&gt;
Los [[módulos]] generales son: &lt;br /&gt;
# Análisis lexicológico ([[scanner]]) &lt;br /&gt;
# Análisis sintáctico ([[parser)]] &lt;br /&gt;
# Análisis semántico &lt;br /&gt;
# Generación de código intermedio &lt;br /&gt;
# [[Optimización de funciones|Optimización]] de código intermedio  &lt;br /&gt;
# Generación de código [[ejecutable]] &lt;br /&gt;
# Tabla de símbolos &lt;br /&gt;
# [[Gestión de errores]]&lt;br /&gt;
&lt;br /&gt;
==Análisis lexicológico.== &lt;br /&gt;
La entrada de un compilador es el [[código]] de un programa escrito en un lenguaje de programación. Dicho código no es más que una secuencia de símbolos pertenecientes al alfabeto del lenguaje de programación. El analizador lexicológico o scanner se encarga de tomarlos y agruparlos en entidades sintácticas simples o elementales denominadas [[Tokens|tokens]] o [[lexemas]]. &lt;br /&gt;
Las categorías de [[token]]s pueden variar de un lenguaje a otro, pero en general se distinguen las siguientes: &lt;br /&gt;
* palabras reservadas &lt;br /&gt;
* identificadores &lt;br /&gt;
* constantes numéricas y literales &lt;br /&gt;
* [[operadores]] &lt;br /&gt;
A cada token se le asigna una estructura [[lexicológica]] consistente en un par de la forma &amp;lt;tipo del token, info&amp;gt;. La primera componente es una categoría sintáctica como “constante”, “identificador”, “operador”, etc., y la segunda componente proporciona [[Información|información]] relacionada con el token en particular (valor de la constante, índice del símbolo en la tabla de símbolos, etc.). &lt;br /&gt;
Podemos afirmar, por lo tanto, que el scanner es un traductor cuya entrada es una cadena de símbolos (programa fuente) y cuya salida es una secuencia de estructuras lexicológicas o tokens. &lt;br /&gt;
&lt;br /&gt;
==Operaciones sobre la [[tabla de símbolos]].==&lt;br /&gt;
Una tarea fundamental en un compilador es la de almacenar los [[Identificadores|identificadores]] utilizados en un programa y sus atributos principales, de manera que en cualquier momento pueda conocerse de un identificador, su tipo, alcance, etc., para el caso de los procedimientos, la cantidad y tipo de los parámetros, etc. Esta [[Iformación|información]] se almacena generalmente en una estructura conocida como tabla de símbolos, la cual tiene una entrada para cada identificador y sus atributos. Los [[Tokens|tokens]] que representan constantes o identificadores se almacenan en la tabla de símbolos a medida que van apareciendo. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
1 	a 	Variable 	real &lt;br /&gt;
2 	b 	Variable 	real &lt;br /&gt;
3 	c 	Variable 	real &lt;br /&gt;
4 	7 	constante 	entera &lt;br /&gt;
&lt;br /&gt;
==Análisis sintáctico(parsing)== &lt;br /&gt;
El análisis sintáctico es un proceso en el cual se examina la secuencia de tokens para determinar si el orden de esa secuencia es correcto de acuerdo a ciertas convenciones estructurales (reglas) de la definición sintáctica del lenguaje. &lt;br /&gt;
La entrada del [[analizador sintáctico]] o parser es la secuencia de tokens generada por el scanner. El parser analiza solamente la primera componente de cada token; la segunda componente se utiliza en otros pasos. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Supongamos existen unas reglas que definen expresión de la forma siguiente: &lt;br /&gt;
exp -&amp;gt; exp + exp &lt;br /&gt;
exp -&amp;gt; exp / exp &lt;br /&gt;
exp -&amp;gt; id &lt;br /&gt;
exp -&amp;gt; const &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la [[Expresión algebraica|expresión]] &lt;br /&gt;
A + * B? &lt;br /&gt;
A + * B ⎯scanner ⎯&amp;gt;  id1 + * id2 ⎯parser ⎯&amp;gt;  Error: No cumple con la especificación sintáctica del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la expresión &lt;br /&gt;
A + B * 7? &lt;br /&gt;
A + B * 7 ⎯scanner ⎯&amp;gt;  id1 + id2 * 7 ⎯parser ⎯&amp;gt;  Sí, se cumple con la especificación sintáctica del lenguaje.&lt;br /&gt;
&lt;br /&gt;
Es necesario conocer la estructura sintáctica de una secuencia de [[Tokens|tokens]]. Por ejemplo, en una expresión A = B+C*7 en la que las variables A, B y C representan valores reales, la estructura sintáctica de esa expresión debe reflejar el hecho de que B y 7 deben multiplicarse antes de que se realice la suma y luego de hacer todas las operaciones se efectuará la [[asignación]]. Para ello, se agrupan los tokens en una estructura en forma de [[Árbol|árbol]], conocida como árbol sintáctico. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Veamos el árbol sintáctico para la secuencia: &lt;br /&gt;
id1 = id2 + id3 * 7 &lt;br /&gt;
Esta secuencia conduce a que se realicen las siguientes [[Operaciones bancarias|operaciones]]: &lt;br /&gt;
1. id3 se multiplique con 7 &lt;br /&gt;
2. el resultado de 1 se sume con id2&lt;br /&gt;
3. el resultado de 2 se almacene en id1&lt;br /&gt;
 &lt;br /&gt;
En el árbol sintáctico anterior los [[descendientes]] directos de cada [[Nodo|nodo]] representan las acciones a realizar y los valores para los cuales deben realizarse las acciones.&lt;br /&gt;
&lt;br /&gt;
==Análisis semántico.== &lt;br /&gt;
En el [[análisis semántico]] se detectan [[Errores en la transmisión de datos|errores]] relacionados con la validez del programa. Se puede decir que estos errores son de tipo sintáctico-semántico, pero no pueden ser detectados por el analizador sintáctico, ya que se relacionan con interdependencias entre las diferentes partes de un programa que no son reflejadas en un análisis gramatical. &lt;br /&gt;
El analizador semántico recibe la información resultado del análisis sintáctico que puede ser un árbol jerárquico con la información relativa a la organización de los tokens en la instrucción que se esta analizando. Ejemplo de errores que pueden ser detectados en el proceso de análisis semántico son los casos de [[compatibilidad]] entre la declaración de un identificador y su uso (chequeo de tipos), la concordancia entre la definición de una función y su activación o llamada, etc. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Retomemos el ejemplo anterior: id1 = id2 + id3 * 7 &lt;br /&gt;
Durante el análisis semántico de un lenguaje de fuerte chequeo de tipos el árbol sintáctico debe ser modificado para reflejar el análisis de los tipos de los datos. Note que haciendo un chequeo de tipos la constante 7, al ser una constante entera debe ser convertida a real para poder ser operada y las demás [[Variables|variables]] no tienen dificultad alguna para ser utilizadas al ser todas reales.&lt;br /&gt;
 &lt;br /&gt;
===[[Gestión de Memoria|Gestión]] e información de errores.=== &lt;br /&gt;
Si los compiladores tuvieran que procesar solamente programas correctos, su diseño e implementación se simplificaría en buena medida. Pero los programadores escriben programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a localizar e identificar los errores. &lt;br /&gt;
Los errores en un programa pueden clasificarse en 4 grandes grupos: &lt;br /&gt;
- lexicológicos (escribir mal un número, un símbolo no permitido, etc.) &lt;br /&gt;
- sintácticos (expresión aritmética con paréntesis no balanceados) &lt;br /&gt;
- semánticos (aplicar un operador a un operando incompatible) &lt;br /&gt;
- lógicos o de programación (ciclo infinito) &lt;br /&gt;
El analizador léxico detecta errores cuando los caracteres que restan de la entrada no forman ningún token válido en el lenguaje. Los errores referentes a que los tokens no cumplan con las reglas estructurales (sintaxis) del lenguaje se detectan en la fase de [[análisis sintáctico]]. Durante el análisis semántico el compilador trata de detectar estructuras que tengan una sintaxis correcta pero incorrecta semánticamente de acuerdo a las operaciones involucradas. Ejemplo si tratamos de sumar dos [[identificadores]], uno el nombre de un [[Arreglos|arreglo]] y el otro el nombre de un procedimiento. Las fases de análisis sintáctico y semántico manejan usualmente la mayor parte de los errores detectables por el compilador. &lt;br /&gt;
Como podemos apreciar en cada fase del proceso de compilación se pueden encontrar errores. Si embargo, después de detectado el error, la fase puede tratar el error, de manera que el compilador pueda continuar, permitiendo así que se puedan detectar errores posteriores. Un compilador que se detenga cuando encuentre el primer error no es muy eficaz. &lt;br /&gt;
El tratamiento de los errores durante el proceso de compilación (en cualquiera de sus fases) debe cumplir al menos los requisitos siguientes: &lt;br /&gt;
- reportar la presencia de los errores clara y precisamente &lt;br /&gt;
- recuperarse de los errores lo suficientemente rápido como para ser capaz de detectar los errores siguientes &lt;br /&gt;
- no demorar significativamente el procesamiento de los programas correctos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generación de código intermedio.=== &lt;br /&gt;
Después del análisis sintáctico y semántico muchos compiladores generan una representación explícita intermedia del código fuente. Dicha representación puede verse como la representación de un programa para una máquina abstracta. Ejemplo: MSIL, Java bytecode, Notación de cuádruplos, Notación polaca, etc. &lt;br /&gt;
El código intermedio debe tener dos características muy importantes: debe ser fácil de producir y fácil de traducir al programa objeto. &lt;br /&gt;
El árbol creado por el analizador semántico se utiliza para generar la traducción del programa fuente y de esta forma lograr la interpretación de las acciones asociadas a la sentencia o sentencias en curso. La traducción como se había mencionado puede ser a lenguaje de máquina, o a un lenguaje intermedio, como el lenguaje ensamblador. &lt;br /&gt;
Un método elegante y efectivo para generar el código intermedio a partir del árbol sintáctico es el denominado Traducción Sintáctica Directa. A cada nodo n se le asocia un código intermedio C(n). El código del nodo n se construye concatenando el código de sus descendientes. Luego, la traducción se hace de abajo hacia arriba.&lt;br /&gt;
===Optimización del código intermedio.=== &lt;br /&gt;
La fase de optimización se efectúa con el objetivo de mejorar la eficiencia del código intermedio. Algunas optimizaciones resultan triviales. Por ejemplo, un código semejante al generado en la tabla anterior, puede representarse en solo dos instrucciones. &lt;br /&gt;
&lt;br /&gt;
temp1 = id3 * 7.0 &lt;br /&gt;
id1 = id2 + temp1 &lt;br /&gt;
&lt;br /&gt;
El compilador puede deducir que la operación EntToReal(7) puede realizarse de una vez en la fase compilación así podemos eliminar dicha instrucción sustituyendo por 7.0 directamente. Además temp3 se usa solo una vez para trasmitir su valor a id1. De esa forma no hay ninguna objeción en sustituir id1 por temp3.&lt;br /&gt;
&lt;br /&gt;
===Generación del código objeto.=== &lt;br /&gt;
La fase final de un compilador es la de generación del código objeto, consistente en código máquina o código ensamblador. Lo primero es seleccionar localizaciones de memoria para cada variable usada en el programa. Las instrucciones intermedias se traducen a secuencias de instrucciones en código maquina que realicen la misma operación. Un aspecto crucial es la asignación de las variables a registros. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Las dos instrucciones obtenidas en son traducidas instrucciones en ensamblador. &lt;br /&gt;
&lt;br /&gt;
MOVF id3, R2 &lt;br /&gt;
MULF #7.0, R2 &lt;br /&gt;
MOVF id2, R1 &lt;br /&gt;
ADDF R2, R1 &lt;br /&gt;
MOVF R1, id1 &lt;br /&gt;
&lt;br /&gt;
Los primeros dos operados, determinan el origen y el destino respectivamente. El sufijo F de cada instrucción indica que se esta trabajando con números en coma flotante (reales). Este código mueve el contenido de la dirección id3 al registro 2, seguidamente lo multiplica por el número 7.0. El símbolo # indica que 7.0 debe ser tratado como una constante. La tercera instrucción mueve el contenido de id2 al registro 1 y lo adiciona al valor calculado previamente que esta almacenado en el registro 2. Finalmente el valor calculado en el registro 1 es movido a la dirección determinada por id1. &lt;br /&gt;
&lt;br /&gt;
==Representación de lenguajes.== &lt;br /&gt;
En general existen dos esquemas diferentes para definir un Lenguaje, los cuales se conocen como esquema generador y esquema reconocedor. En el caso de los esquemas generadores se trata de un mecanismo que nos permite “generar” las diferentes sentencias del lenguaje. En caso de los esquemas reconocedores se trata de un mecanismo que nos permite reconocer o verificar si cierta sentencia pertenece o no a un lenguaje. &lt;br /&gt;
Si un Lenguaje posee un número finito de cadenas, puede ser definido simplemente listando sus cadenas, pero ¿Cómo proceder para definir Lenguajes con un número infinito de Cadenas? &lt;br /&gt;
Para definir un lenguaje se puede utilizar una Gramática (esquema generador) o podemos utilizar Autómatas Finitos (esquema reconocedor). &lt;br /&gt;
===Definiciones Básicas.=== &lt;br /&gt;
Antes de abordar el concepto de lenguaje, veremos un conjunto de definiciones básicas relacionadas. &lt;br /&gt;
*Alfabeto (Σ): Se entiende por alfabeto un conjunto arbitrario, finito y no vacío, de símbolos. Entre los alfabetos más comunes podemos mencionar el alfabeto binario {0, 1}, el alfabeto latino {a, b, c, d, e, f, g, …}, etc. &lt;br /&gt;
*Cadena: Una cadena es una secuencia de símbolos de cierto alfabeto colocados uno a continuación del otro. &lt;br /&gt;
11001: constituye una cadena sobre el alfabeto {0, 1}. &lt;br /&gt;
abcd: constituye una cadena sobre el alfabeto de las letras latinas. &lt;br /&gt;
*Cadena Vacía: Una cadena vacía no es más que una cadena sin elementos, la cadena vacía se denota por e. &lt;br /&gt;
Notación: En lo que sigue asumiremos el siguiente convenio para denotar cadenas: &lt;br /&gt;
a, b, c, d, … representan símbolos. &lt;br /&gt;
y, u, v, w, … representan cadenas &lt;br /&gt;
an =aa…a n veces &lt;br /&gt;
a0 = e&lt;br /&gt;
&lt;br /&gt;
====Definición Formal de Cadena:====&lt;br /&gt;
Una cadena sobre un determinado alfabeto Σ se define como sigue: &lt;br /&gt;
# e (cadena vacía) es una cadena sobre Σ. &lt;br /&gt;
# Si x es una cadena sobre Σ, y a ∈ Σ entonces xa es una cadena sobre Σ, para todo a ∈ Σ. &lt;br /&gt;
# Cualquier otra cadena sobre Σ puede obtenerse, aplicando 1 y 2. &lt;br /&gt;
=====Concatenación de Cadenas:===== &lt;br /&gt;
Si x y y son cadenas sobre Σ, entonces xy es una cadena sobre Σ, que se denomina concatenación de x y y. &lt;br /&gt;
=====Reverso de una Cadena:=====&lt;br /&gt;
El reverso de una cadena x se denota xR, y es la cadena que se obtiene escribiendo los símbolos de x en sentido inverso.&lt;br /&gt;
=====Prefijos y Sufijos de una Cadena:=====&lt;br /&gt;
Sean x, y, z cadenas sobre Σ. Entonces x es un prefijo de la cadena xy y y es un sufijo de la cadena xy. Además y es una subcadena de la cadena xyz. Si x ≠ y y x es un prefijo de y entonces se dice que x es un prefijo propio. Análogamente se puede definir el concepto de sufijo propio. &lt;br /&gt;
=====Longitud de una Cadena:=====&lt;br /&gt;
La longitud de una cadena es el número de símbolos que la integran. Así decimos que la longitud de la cadena abc es 3, lo cual se denota en la forma siguiente: &lt;br /&gt;
⎟ abc ⎟ = 3 &lt;br /&gt;
Obviamente se tiene que ⎟ e ⎟ = 0. &lt;br /&gt;
=====Lenguaje:=====&lt;br /&gt;
Un lenguaje sobre Σ es un conjunto de cadenas sobre dicho alfabeto que obedece una cierta regla de formación. &lt;br /&gt;
=====Clausura de un Alfabeto:=====&lt;br /&gt;
El conjunto Σ* denota todas las cadenas sobre Σ, incluyendo la cadena vacía, este conjunto se denomina Clausura de Σ. &lt;br /&gt;
Por ejemplo, si Σ = {0,1} entonces Σ* = {e, 0, 1, 00, 01, 10, 11, 001,…} &lt;br /&gt;
Resulta evidente que si L es un cierto lenguaje sobre Σ, entonces L ⊆ Σ*. &lt;br /&gt;
El conjunto Σ+ se denomina Clausura Positiva de Σ y se define como:&lt;br /&gt;
Σ+ = Σ* - e &lt;br /&gt;
&lt;br /&gt;
===Operaciones sobre Lenguajes:===&lt;br /&gt;
Algunas de las operaciones anteriores sobre cadenas pueden ser generalizadas a los lenguajes, así podemos definir la concatenación o producto de lenguajes en la forma siguiente: &lt;br /&gt;
Sea L1 un lenguajes sobre Σ1 y L2 un lenguaje sobre Σ2, entonces el lenguaje L1L2 se denomina concatenación o producto de los lenguajes L1 y L2 y se define como sigue:&lt;br /&gt;
En forma análoga puede definirse la Clausura de un Lenguaje en la forma siguiente: &lt;br /&gt;
L0 = {e} &lt;br /&gt;
Ln = L Ln-1 para n ≥ 1 &lt;br /&gt;
L* = ∪ Ln para n ≥ 0 &lt;br /&gt;
Ejemplo: &lt;br /&gt;
(a) Ponga un ejemplo de cadena que pertenezca al lenguaje L = { 0 n1n | n&amp;gt;=1 } &lt;br /&gt;
Respuestas correctas: 01, 0011, 000111, 00001111, … &lt;br /&gt;
Respuestas incorrectas: 0, 1, 001, 10, 1100, 011, …&lt;br /&gt;
&lt;br /&gt;
==Concepto de gramática.==&lt;br /&gt;
La gramática es un ente o modelo matemático que permite especificar un lenguaje, es decir, es el conjunto de reglas capaces de generar todas las posibilidades combinatorias de ese lenguaje, y sólo las de dicho lenguaje, ya sea éste un lenguaje formal o un lenguaje natural. &lt;br /&gt;
Los objetivos de una gramática son: &lt;br /&gt;
*Definir si una sentencia pertenece o no al un lenguaje. &lt;br /&gt;
*Describir estructuralmente las sentencias del lenguaje. &lt;br /&gt;
En la definición formal de una Gramática se utilizan dos conjuntos disjuntos de símbolos: &lt;br /&gt;
N: Conjunto de símbolos no terminales (los cuales nos permiten representar combinaciones de símbolos). &lt;br /&gt;
Σ: Conjunto de símbolos terminales que se corresponde con el concepto de alfabeto anteriormente estudiado. &lt;br /&gt;
El centro de una gramática lo constituye un conjunto de “reglas de producción”&lt;br /&gt;
(P) o reglas de formación de cadenas, las cuales están formadas por elementos de la relación: &lt;br /&gt;
(N ∪ Σ )* N (N ∪ Σ )* → (N ∪ Σ )* &lt;br /&gt;
Definición: Una gramática es un cuádruplo G = { N, Σ, P, S } donde: &lt;br /&gt;
N: Conjunto de símbolos no terminales. &lt;br /&gt;
Σ: Conjunto de símbolos terminales. &lt;br /&gt;
P: Conjunto de Reglas de Producción.&lt;br /&gt;
S: Axioma o símbolo distinguido (S ∈ N) &lt;br /&gt;
 &lt;br /&gt;
===Definiciones relacionadas con el concepto de Gramáticas=== &lt;br /&gt;
Forma Sentencial: Una forma sentencial en una gramática se define en forma recursiva como sigue: &lt;br /&gt;
Sea G = { N, Σ, P, S } una gramática, entonces: &lt;br /&gt;
# S es una forma sentencial. &lt;br /&gt;
# Si αβλ es una forma sentencial y β→δ ∈ P entonces αδλ es una forma sentencial. &lt;br /&gt;
Sentencia: Una forma sentencial que solo contenga terminales se denomina sentencia. &lt;br /&gt;
Derivación: Sea G = { N, Σ, P, S } una gramática, la relación ⇒ (deriva directamente) se define como sigue: &lt;br /&gt;
Si αβλ ∈ ( N ∪ Σ )+ y β → δ ∈ P entonces αβλ ⇒ αδλ.&lt;br /&gt;
La derivación de longitud k que denotamos   significa que si  , entonces existe una secuencia de cadenas a = a0, a1,…,ak=β tal que tal que a = a0 ⇒ a1 ⇒ … ⇒ ak = β.&lt;br /&gt;
La relación  (deriva en forma no trivial) se define como la clausura positiva de ⇒, equivalente a   con k &amp;gt; 0&lt;br /&gt;
La relación ⇒ se define como la clausura de ⇒ , equivalente a   con k ≥ 0.&lt;br /&gt;
==Clasificación de Chomsky.== &lt;br /&gt;
De acuerdo con lo que hemos visto, toda gramática genera un único lenguaje, pero distintas gramáticas pueden generar el mismo lenguaje. &lt;br /&gt;
Por ejemplo, el lenguaje generado en el ejemplo 2.3 es igual al generado por la gramática del siguiente ejemplo. &lt;br /&gt;
Ejemplo : &lt;br /&gt;
G0 = ( { E, T, F }, { a, +, *, (, ) }, P, E ) &lt;br /&gt;
Donde: &lt;br /&gt;
Podríamos pensar en clasificar las gramáticas por el lenguaje que generan, por este motivo hacemos la siguiente definición. &lt;br /&gt;
Definición: Dos gramáticas se dicen débilmente equivalentes si generan el mismo lenguaje. &lt;br /&gt;
Sin embargo, al hacer esta clasificación nos encontramos con que el problema de saber si dos gramáticas generan el mismo lenguaje es indecible. No existe ningún algoritmo que acepte como entrada dos gramáticas y nos diga (la salida del algoritmo) si generan o no el mismo lenguaje. &lt;br /&gt;
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramática, más que en la naturaleza del lenguaje que generan. La siguiente clasificación se conoce como jerarquía de Chomsky y sigue esta dirección. &lt;br /&gt;
Sea G = ( N, Σ, P, S) una gramática:&lt;br /&gt;
# Si cada producción en P es de la forma A → xB ó A → x con A, B ∈ N y x ∈ Σ* o de la forma A→ Bx ó A → x con A, B ∈ N y x ∈ Σ* entonces la gramática G se denomina Regular Derecha o Regular la izquierda respectivamente, o de forma general Gramática Regular. &lt;br /&gt;
# Si cada producción en P es de la forma A → α donde A ∈ N y α ∈ (N ∪ Σ)∗ entonces la gramática G se denomina de Libre Contexto. &lt;br /&gt;
# Si cada producción en P es de la forma α → β donde |α| ≤ |β| y α contiene al menos un no terminal, entonces la gramática G se denomina Dependiente del Contexto. &lt;br /&gt;
# Si una gramática G no cumple las restricciones anteriores se denomina Gramática sin Restricciones. &lt;br /&gt;
&lt;br /&gt;
==Expresiones Regulares.== &lt;br /&gt;
Hasta ahora hemos visto un mecanismo muy poderoso para la representación de lenguajes, como son las gramáticas. Existe otro mecanismo para la representación de lenguajes, el cual, aunque no es tan general como las gramáticas, brinda grandes facilidades para la representación de ciertos lenguajes muy simples. En particular veremos más adelante que este mecanismo es muy útil para representar aquella parte de un lenguaje que es analizable por un analizador lexicográfico, es decir, palabras reservadas, identificadores, etc. &lt;br /&gt;
Este nuevo mecanismo de representación de lenguajes se conoce con el nombre de Expresiones Regulares. &lt;br /&gt;
Una expresión regular sobre un cierto alfabeto Σ puede ser definida en la forma siguiente: &lt;br /&gt;
#  e es una Expresión Regular sobre Σ. O sea, la cadena vacía es una expresión regular sobre cualquier alfabeto. &lt;br /&gt;
#  Si a es un símbolo perteneciente a Σ entonces a es una expresión regular que denota al conjunto o lenguaje {a}, o sea, el conjunto que contiene al elemento a. &lt;br /&gt;
#  Si r y s son expresiones regulares que denotan los lenguajes L(r) y L(s) entonces: &lt;br /&gt;
A) r | s, es una expresión regular que denota el lenguaje L(r) ∪ L(s). B) r. s, es una expresión que denota el lenguaje L(r). L(s) C) r* es una expresión regular que denota el lenguaje (L (r))* D) r+ es una expresión regular que denota el lenguaje (L (r))+ &lt;br /&gt;
&lt;br /&gt;
==Esquemas reconocedores de lenguajes formales. Autómatas finitos.==&lt;br /&gt;
&lt;br /&gt;
===Esquemas reconocedores.=== &lt;br /&gt;
Los Lenguajes, en general no finitos, pueden ser representados mediante esquemas generadores (expresiones regulares y gramáticas) o de esquemas reconocedores. A continuación analizaremos cómo representar lenguajes utilizando éste último tipo de esquema.&lt;br /&gt;
Un reconocedor para el lenguaje L es un programa (o mecanismo) que toma como entrada una cadena x y responde “si” si x pertenece al lenguaje L o “no”, si no pertenece. &lt;br /&gt;
De manera general un reconocedor lo podemos representar gráficamente de la siguiente forma:&lt;br /&gt;
 &lt;br /&gt;
Figura 1.1 Esquema general de un reconocedor &lt;br /&gt;
&lt;br /&gt;
Cinta de entrada: Es una secuencia de símbolos ai que pertenecen a un alfabeto Σ y constituyen la cadena a reconocer. Usualmente la secuencia puede terminar con un símbolo especial cuya función es la de marcar el fin de la cadena. &lt;br /&gt;
&lt;br /&gt;
Cabezal de lectura: Mecanismo que le permite al reconocedor obtener los símbolos de la cadena de entrada. El mismo puede moverse a la izquierda, a la derecha o quedarse estacionario en un momento determinado. &lt;br /&gt;
&lt;br /&gt;
Control de estado: Centro del reconocedor. A través de un conjunto finito de estados y una función de transición se describe cómo se comporta el reconocedor ante todos los símbolos del alfabeto del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Memoria: Dispositivo para almacenar información. La información está constituida por símbolos pertenecientes a un alfabeto de memoria y son utilizados por el reconocedor durante el proceso de análisis de una cadena. Este dispositivo se organiza con cierta estructura. &lt;br /&gt;
Existe una gran variedad de reconocedores: &lt;br /&gt;
# Autómatas finitos. &lt;br /&gt;
# Autómatas de Pila. &lt;br /&gt;
# Autómatas de frontera lineal &lt;br /&gt;
# Máquina de Turing. &lt;br /&gt;
&lt;br /&gt;
Los reconocedores que analizaremos en este curso, dada su relación con la fase de análisis léxico, y el reconocimiento de los tokens de un lenguaje, son los autómatas finitos.&lt;br /&gt;
&lt;br /&gt;
===Autómatas finitos.===&lt;br /&gt;
Un autómata finito o máquina de estado finito es una herramienta abstracta que se utiliza para reconocer un determinado lenguaje regular. Es un modelo matemático de un sistema que recibe una cadena constituida por caracteres de cierto alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.&lt;br /&gt;
Formalmente:&lt;br /&gt;
====Definición 1.==== &lt;br /&gt;
Autómata Finito.&lt;br /&gt;
Formalmente uma autómata finito está definido por una 5-tupla N.&lt;br /&gt;
N = ( S, Σ, δ, S0, F ).&lt;br /&gt;
Donde:&lt;br /&gt;
S: Es un conjunto finito de estados.&lt;br /&gt;
Σ: Alfabeto del lenguaje. Conjunto de símbolos de entrada del autómata.&lt;br /&gt;
δ: Función de transición definida como: δ: S x Σ ∪ { ∈ } → P(S).&lt;br /&gt;
S0: Es el estado inicial del autómata S0 ∈ S.&lt;br /&gt;
F: Es el conjunto de estados finales o de aceptación del autómata. F ⊆ S.&lt;br /&gt;
&lt;br /&gt;
==== Autómatas finitos determinista (AFD)====&lt;br /&gt;
Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado de salida y el carácter leído por el autómata.&lt;br /&gt;
Un AFD es un caso particular de AF en el cual se cumple:&lt;br /&gt;
# No existen e-transiciones.&lt;br /&gt;
# Para cualquier estado si y cualquier símbolo a ∈ Σ, existe al máximo una transición que salga de si.&lt;br /&gt;
Un AFD se denomina completo cuando tiene una transición por cada estado y cada carácter del alfabeto. Si no cumple esta condición se lo denomina incompleto.&lt;br /&gt;
La gran ventaja que aportan los Autómatas Finitos Deterministas viene dada por la simplicidad del mecanismo que simule el reconocimiento de una cadena. &lt;br /&gt;
&lt;br /&gt;
====Autómatas finitos no deterministas (AFND)====&lt;br /&gt;
Un autómata finito no determinista (AFND) es un autómata finito que presenta cero, una o más transiciones por el mismo carácter del alfabeto y se clasifican dos grupos: con e-transiciones y sin e-transiciones dependiendo de la existencia o no de una o más transiciones sin que el autómata lea el próximo carácter de la cadena que está analizando.&lt;br /&gt;
&lt;br /&gt;
===Construcción de autómatas finitos a partir de expresiones regulares===&lt;br /&gt;
Construir una expresión regular además de ser un proceso muy intuitivo constituye una forma cómoda de representar los lenguajes regulares. Pero tienen una gran desventaja y es que se hace inservible cuando queremos determinar computacionalmente si una determinada cadena pertenece o no al lenguaje representado por dicha expresión regular. Habría que generar todas las cadenas del lenguaje, o al menos una gran parte de ellas, lo que puede ser un proceso infinito.&lt;br /&gt;
Los lenguajes descriptos por expresiones regulares son los mismos lenguajes reconocidos por los autómatas finitos. Como se vio anteriormente una de las grandes ventajas de los autómatas finitos deterministas vienes dada por la simplicidad del mecanismo que simula el reconocimiento de una cadena.&lt;br /&gt;
Por otro lado existe un algoritmo para convertir una expresión regular en el autómata finito no determinístico correspondiente. El algoritmo, llamado construcción de Thompson, construye a partir de la expresión regular un AFND con transiciones vacías, es decir un autómata que contiene arcos rotulados con e. Luego este autómata con transiciones vacías se puede convertir en un autómata finito sin transiciones vacías que reconoce el mismo lenguaje.&lt;br /&gt;
&lt;br /&gt;
==Análisis Léxico==&lt;br /&gt;
&lt;br /&gt;
===Funcionamiento de un analizador léxico===&lt;br /&gt;
El analizador léxico es la primera fase de un compilador. Su función principal es leer los caracteres de entrada y producir como salida una secuencia de tokens que el parser luego utiliza en su análisis sintáctico. La interacción entre ambos componentes (analizador léxico y analizador sintáctico), representada en la Fig. 1, básicamente es de la siguiente forma: Ante un pedido de un token (mensaje “proximo token”), el analizador léxico lee una secuencia de caracteres del código fuente del programa hasta identificar un token, el cual es retornado como respuesta al pedido del analizador sintáctico.&lt;br /&gt;
&lt;br /&gt;
===Especificación de un Analizador Léxico===&lt;br /&gt;
Antes de implementar un Analizador Léxico para un lenguaje determinado, es necesario diseñar su especificación. Para ello hay que identificar primeramente la colección de tokens que compone el lenguaje. Cada token debe estar especificado mediante algún esquema generador o un esquema reconocedor, preferiblemente expresiones regulares. Luego es necesario Especificar el Diagrama de Transición del Analizador Léxico.&lt;br /&gt;
Cada uno de estos pasos será explicado en detalle, tomando como base un ejemplo.&lt;br /&gt;
&lt;br /&gt;
====Conceptos Preliminares: Tokens, Patrones y Lexemas.====&lt;br /&gt;
Cuando se aborda el tema de la especificación de un Analizador Léxico, se hace mención a términos como token, patrón y lexema, con sus respectivos significados. Observemos el ejemplo correspondiente a la Fig. 2. En general existe un conjunto de cadenas para las cuales se produce el mismo token como salida. Este conjunto de cadenas se describe mediante una regla llamada patrón y está asociada a un token en específico. Un lexema es una secuencia de [[caracteres]] del programa fuente que “matchea” con un patrón correspondiente a un token. Por ejemplo, en la siguiente sentencia correspondiente al lenguaje de programación Pascal&lt;br /&gt;
const pi = 3.1416;&lt;br /&gt;
la subcadena pi es un lexema para el token “identificador”.&lt;br /&gt;
Los lexemas que matchean con un patrón de un token representan [[cadenas]] del programa fuente que pueden ser manejadas en conjunto como una unidad léxica.&lt;br /&gt;
Dicha unidad léxica la representa el token, el cual, en las siguientes fases del proceso de compilación, constituirá un símbolo terminal en la gramática generadora del lenguaje.&lt;br /&gt;
En la mayoría de los lenguajes de programación constituyen tokens los siguientes conjuntos:&lt;br /&gt;
*palabras reservadas: cadenas predeterminadas por el lenguaje las cuales no se pueden usar como identificadores.&lt;br /&gt;
*operadores: Los cuales a su vez podrían dividirse en 4 tokens aritméticos, relacionales, lógicos, y de asignación.&lt;br /&gt;
*identificadores.&lt;br /&gt;
*constantes o literales: Los cuales a su vez podría dividirse en tres tokens, literales reales, literales enteras y literales de cadena.&lt;br /&gt;
*símbolos de puntuación: Aquí se incluyen los puntos, las comas, los paréntesis, las llaves, etc. Pueden dividirse en varios tokens, todo depende del significado sintáctico que tenga un determinado [[símbolo de puntuación]] en el lenguaje.&lt;br /&gt;
Los patrones pueden especificarse de varias formas. En la Fig. 2, el patrón del token const es la propia cadena const. El patrón del token relation es el conjunto de operadores relacionales de C. Para describir patrones para tokens más complejos se usa cualquier esquema generador o reconocedor de lenguajes. Generalmente se describen mediante expresiones regulares, aunque en ocasiones es conveniente también describirlos mediante un autómata finito.&lt;br /&gt;
&lt;br /&gt;
===== Atributos de un token=====&lt;br /&gt;
Para cada token identificado por el analizador léxico, es necesario almacenar otras informaciones como el [[lexema]], el número de línea de su primera aparición y otros datos que dependen del tipo de token (si el identificador es de un arreglo o de una función, en cada caso almacenar el [[Límite de una función|límite]] o la cantidad y los tipos de los parámetros, etc). Dichas [[Información|informaciones]] son necesarias para fases posteriores del proceso de compilación y son almacenadas en la tabla de símbolos del compilador.&lt;br /&gt;
Es por ello que usualmente un token tiene un solo atributo, el cual es un apuntador a la entrada de la tabla de símbolos donde está almacenada toda la información referente al token.&lt;br /&gt;
Por ejemplo, los tokens identificados en la siguiente sentencia de [[Fortrán]]&lt;br /&gt;
E = M * C ** 2&lt;br /&gt;
se pueden escribir como una secuencia de pares:&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para E&amp;gt;&lt;br /&gt;
&amp;lt;asig_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para M&amp;gt;&lt;br /&gt;
&amp;lt;mult_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para C&amp;gt;&lt;br /&gt;
&amp;lt;exp_op, &amp;gt;&lt;br /&gt;
&amp;lt;num, puntero a la entrada en la tabla de símbolos del ‘2’&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que en algunos pares no es necesario el valor del apuntador, pues la primera componente del par es suficiente para identificar el [[lexema]]. En este pequeño ejemplo, para el token num, el [[compilador]] puede almacenar en la tabla de símbolos la cadena que forma el número y el [[Puntero (C++)|puntero]] hacia esa entrada sería el atributo del token num.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
[http://eva.uci.cu Materiales de apoyo Universidad de las ciencias Informáticas]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://cplus.about.com/od/glossary/g/gloscompiled.htm About.com C/C++/C#]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.alegsa.com.ar/Dic/compilador.php Alegasa - Definición de Compilador]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Categoría:Telemática]][[Categoría:Informática]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454876</id>
		<title>Teoría de compiladores</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454876"/>
		<updated>2012-04-03T12:54:25Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Compilador&lt;br /&gt;
|imagen= compilador.png&lt;br /&gt;
|tamaño= 270px&lt;br /&gt;
|concepto= Programa informático cuya función es transformar código fuente legible para el humano a código de máquina que una [[CPU]] puede ejecutar. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Teoría de compilador'''&lt;br /&gt;
En la [[Comunicación|comunicación]] [[Hombre|hombre]]-máquina existe una dificultad real: las [[Computadora|computadoras]] operan sobre [[Bits|bits]] (ceros y unos) y registros y los hombres se entienden por medio de idiomas (lenguaje natural), o utilizan una noción científica determinada por el área de problemas en que trabaja, entre otras vías. &lt;br /&gt;
Los [[Lenguajes de Programación Web|lenguajes de programación]] son el vehículo de comunicación entre el hombre y la [[computadora]]. Un [[Lenguaje de Programación|lenguaje de programación]] es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una [[computadora]]. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático. Un programa fuente escrito en un [[Lenguaje de Programación|lenguaje de programación]]  necesita pasar por un proceso de conversión al lenguaje de maquina que entiende la [[computadora]], a ese proceso de conversión del programa fuente al [[Lenguaje|lenguaje]] o código de máquina se le llama proceso de compilación o simplemente compilación. Y al programa capaz de realizar ese proceso se le llama [[Compilador|compilador]] o traductor.&lt;br /&gt;
==Teoría de compilador==&lt;br /&gt;
===Conceptos básicos=== &lt;br /&gt;
Veamos informalmente algunos conceptos básicos. &lt;br /&gt;
*Lenguaje: Conjunto de [[Símbolos|símbolos]] y reglas que permiten la [[comunicación]], es decir, trasmitir una idea, un [[Mensaje|mensaje]]. &lt;br /&gt;
&lt;br /&gt;
*Léxico (vocabulario): Conjunto de palabras que forman parte de un lenguaje específico. &lt;br /&gt;
&lt;br /&gt;
*[[Gramática]]: Agrupa los [[Elementos de Infórmatica|elementos]] de forma, estructura y significado que permiten expresarse en un lenguaje determinado. &lt;br /&gt;
&lt;br /&gt;
*[[Sintaxis]]: Conjunto de reglas necesarias para construir [[Frases|frases]] correctas en un lenguaje. &lt;br /&gt;
&lt;br /&gt;
*[[Semántica]]: Significado de frases generadas por la [[sintaxis]] y el [[léxico]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de [[Programación|programación]]: Conjunto de símbolos y reglas que permiten la comunicación con un [[Computador|computador]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de alto [[Nivelación|nivel]]: Lenguaje que permite la comunicación de un [[computador]] mediante símbolos convencionales cercanos a un lenguaje natural. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de bajo nivel: Similar al lenguaje de máquina con pequeñas modificaciones [[nemotécnicas]] que facilitan su uso, por ejemplo el lenguaje [[ensamblador]]. &lt;br /&gt;
Lenguaje de Maquina: Combinación de dígitos [[binarios]] mediante los cuales un ordenador funciona.&lt;br /&gt;
&lt;br /&gt;
===Compiladores y traductores.=== &lt;br /&gt;
*[[Traductor]] es un programa que toma como entrada un programa escrito en un lenguaje de programación (lenguaje fuente) y produce como salida un programa en otro lenguaje (lenguaje objeto). El traductor se escribe en un lenguaje denominado lenguaje de implementación. &lt;br /&gt;
Cuando el lenguaje fuente es de alto nivel ([[Pascal]], C++, etc.) y el lenguaje objeto es un lenguaje de bajo nivel o de máquina, al traductor se le denomina compilador.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
El lenguaje de [[implementación]] puede ser en general cualquier lenguaje de programación, aunque existen lenguajes explícitamente diseñados para escribir compiladores (FSL, CDL, etc.). El criterio fundamental que se sigue para elegir un lenguaje de implementación es: “Este debe [[minimizar]] el esfuerzo de implementación y [[maximizar]] la calidad del compilador”. &lt;br /&gt;
Generalmente los traductores se representan a través de una T en la que se incluyen los lenguajes que intervienen en el [[proceso]].&lt;br /&gt;
*Intérprete por su parte es un programa que toma el [[Código fuente|código fuente]], lo analiza y a diferencia de los compiladores lo ejecuta directamente, sin generar un lenguaje objeto.&lt;br /&gt;
&lt;br /&gt;
===Estructura de un compilador.=== &lt;br /&gt;
El trabajo de un compilador consiste en tomar la cadena fuente del programa, determinar si es [[sintacticamente]] válida y, a la vez, generar un programa equivalente en un lenguaje que la computadora entienda. &lt;br /&gt;
El trabajo del compilador se puede dividir en diferentes partes:&lt;br /&gt;
 &lt;br /&gt;
Para un compilador en particular, el orden de los procesos puede variar y, en muchos casos, varios procesos pueden combinarse en una sola fase. En traductores reales el proceso anteriormente descrito no transita en la forma [[Linealidadlineal]] en la que aparece en el [[esquema]] propuesto en la figura, normalmente el centro del proceso de compilación gira alrededor del [[Analizador Sintáctico]] el cual es el encargado de activar cada una de las restantes fases según sea necesario. &lt;br /&gt;
Los [[módulos]] generales son: &lt;br /&gt;
# Análisis lexicológico ([[scanner]]) &lt;br /&gt;
# Análisis sintáctico ([[parser)]] &lt;br /&gt;
# Análisis semántico &lt;br /&gt;
# Generación de código intermedio &lt;br /&gt;
# [[Optimización de funciones|Optimización]] de código intermedio  &lt;br /&gt;
# Generación de código [[ejecutable]] &lt;br /&gt;
# Tabla de símbolos &lt;br /&gt;
# [[Gestión de errores]]&lt;br /&gt;
&lt;br /&gt;
==Análisis lexicológico.== &lt;br /&gt;
La entrada de un compilador es el [[código]] de un programa escrito en un lenguaje de programación. Dicho código no es más que una secuencia de símbolos pertenecientes al alfabeto del lenguaje de programación. El analizador lexicológico o scanner se encarga de tomarlos y agruparlos en entidades sintácticas simples o elementales denominadas [[Tokens|tokens]] o [[lexemas]]. &lt;br /&gt;
Las categorías de [[token]]s pueden variar de un lenguaje a otro, pero en general se distinguen las siguientes: &lt;br /&gt;
* palabras reservadas &lt;br /&gt;
* identificadores &lt;br /&gt;
* constantes numéricas y literales &lt;br /&gt;
* [[operadores]] &lt;br /&gt;
A cada token se le asigna una estructura [[lexicológica]] consistente en un par de la forma &amp;lt;tipo del token, info&amp;gt;. La primera componente es una categoría sintáctica como “constante”, “identificador”, “operador”, etc., y la segunda componente proporciona [[Información|información]] relacionada con el token en particular (valor de la constante, índice del símbolo en la tabla de símbolos, etc.). &lt;br /&gt;
Podemos afirmar, por lo tanto, que el scanner es un traductor cuya entrada es una cadena de símbolos (programa fuente) y cuya salida es una secuencia de estructuras lexicológicas o tokens. &lt;br /&gt;
&lt;br /&gt;
==Operaciones sobre la [[tabla de símbolos]].==&lt;br /&gt;
Una tarea fundamental en un compilador es la de almacenar los [[Identificadores|identificadores]] utilizados en un programa y sus atributos principales, de manera que en cualquier momento pueda conocerse de un identificador, su tipo, alcance, etc., para el caso de los procedimientos, la cantidad y tipo de los parámetros, etc. Esta [[Iformación|información]] se almacena generalmente en una estructura conocida como tabla de símbolos, la cual tiene una entrada para cada identificador y sus atributos. Los [[Tokens|tokens]] que representan constantes o identificadores se almacenan en la tabla de símbolos a medida que van apareciendo. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
1 	a 	Variable 	real &lt;br /&gt;
2 	b 	Variable 	real &lt;br /&gt;
3 	c 	Variable 	real &lt;br /&gt;
4 	7 	constante 	entera &lt;br /&gt;
&lt;br /&gt;
==Análisis sintáctico(parsing)== &lt;br /&gt;
El análisis sintáctico es un proceso en el cual se examina la secuencia de tokens para determinar si el orden de esa secuencia es correcto de acuerdo a ciertas convenciones estructurales (reglas) de la definición sintáctica del lenguaje. &lt;br /&gt;
La entrada del [[analizador sintáctico]] o parser es la secuencia de tokens generada por el scanner. El parser analiza solamente la primera componente de cada token; la segunda componente se utiliza en otros pasos. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Supongamos existen unas reglas que definen expresión de la forma siguiente: &lt;br /&gt;
exp -&amp;gt; exp + exp &lt;br /&gt;
exp -&amp;gt; exp / exp &lt;br /&gt;
exp -&amp;gt; id &lt;br /&gt;
exp -&amp;gt; const &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la [[Expresión algebraica|expresión]] &lt;br /&gt;
A + * B? &lt;br /&gt;
A + * B ⎯scanner ⎯&amp;gt;  id1 + * id2 ⎯parser ⎯&amp;gt;  Error: No cumple con la especificación sintáctica del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la expresión &lt;br /&gt;
A + B * 7? &lt;br /&gt;
A + B * 7 ⎯scanner ⎯&amp;gt;  id1 + id2 * 7 ⎯parser ⎯&amp;gt;  Sí, se cumple con la especificación sintáctica del lenguaje.&lt;br /&gt;
&lt;br /&gt;
Es necesario conocer la estructura sintáctica de una secuencia de [[Tokens|tokens]]. Por ejemplo, en una expresión A = B+C*7 en la que las variables A, B y C representan valores reales, la estructura sintáctica de esa expresión debe reflejar el hecho de que B y 7 deben multiplicarse antes de que se realice la suma y luego de hacer todas las operaciones se efectuará la [[asignación]]. Para ello, se agrupan los tokens en una estructura en forma de [[Árbol|árbol]], conocida como árbol sintáctico. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Veamos el árbol sintáctico para la secuencia: &lt;br /&gt;
id1 = id2 + id3 * 7 &lt;br /&gt;
Esta secuencia conduce a que se realicen las siguientes [[Operaciones bancarias|operaciones]]: &lt;br /&gt;
1. id3 se multiplique con 7 &lt;br /&gt;
2. el resultado de 1 se sume con id2&lt;br /&gt;
3. el resultado de 2 se almacene en id1&lt;br /&gt;
 &lt;br /&gt;
En el árbol sintáctico anterior los [[descendientes]] directos de cada [[Nodo|nodo]] representan las acciones a realizar y los valores para los cuales deben realizarse las acciones.&lt;br /&gt;
&lt;br /&gt;
==Análisis semántico.== &lt;br /&gt;
En el [[análisis semántico]] se detectan [[Errores en la transmisión de datos|errores]] relacionados con la validez del programa. Se puede decir que estos errores son de tipo sintáctico-semántico, pero no pueden ser detectados por el analizador sintáctico, ya que se relacionan con interdependencias entre las diferentes partes de un programa que no son reflejadas en un análisis gramatical. &lt;br /&gt;
El analizador semántico recibe la información resultado del análisis sintáctico que puede ser un árbol jerárquico con la información relativa a la organización de los tokens en la instrucción que se esta analizando. Ejemplo de errores que pueden ser detectados en el proceso de análisis semántico son los casos de [[compatibilidad]] entre la declaración de un identificador y su uso (chequeo de tipos), la concordancia entre la definición de una función y su activación o llamada, etc. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Retomemos el ejemplo anterior: id1 = id2 + id3 * 7 &lt;br /&gt;
Durante el análisis semántico de un lenguaje de fuerte chequeo de tipos el árbol sintáctico debe ser modificado para reflejar el análisis de los tipos de los datos. Note que haciendo un chequeo de tipos la constante 7, al ser una constante entera debe ser convertida a real para poder ser operada y las demás [[Variables|variables]] no tienen dificultad alguna para ser utilizadas al ser todas reales.&lt;br /&gt;
 &lt;br /&gt;
===[[Gestión de Memoria|Gestión]] e información de errores.=== &lt;br /&gt;
Si los compiladores tuvieran que procesar solamente programas correctos, su diseño e implementación se simplificaría en buena medida. Pero los programadores escriben programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a localizar e identificar los errores. &lt;br /&gt;
Los errores en un programa pueden clasificarse en 4 grandes grupos: &lt;br /&gt;
- lexicológicos (escribir mal un número, un símbolo no permitido, etc.) &lt;br /&gt;
- sintácticos (expresión aritmética con paréntesis no balanceados) &lt;br /&gt;
- semánticos (aplicar un operador a un operando incompatible) &lt;br /&gt;
- lógicos o de programación (ciclo infinito) &lt;br /&gt;
El analizador léxico detecta errores cuando los caracteres que restan de la entrada no forman ningún token válido en el lenguaje. Los errores referentes a que los tokens no cumplan con las reglas estructurales (sintaxis) del lenguaje se detectan en la fase de [[análisis sintáctico]]. Durante el análisis semántico el compilador trata de detectar estructuras que tengan una sintaxis correcta pero incorrecta semánticamente de acuerdo a las operaciones involucradas. Ejemplo si tratamos de sumar dos [[identificadores]], uno el nombre de un [[Arreglos|arreglo]] y el otro el nombre de un procedimiento. Las fases de análisis sintáctico y semántico manejan usualmente la mayor parte de los errores detectables por el compilador. &lt;br /&gt;
Como podemos apreciar en cada fase del proceso de compilación se pueden encontrar errores. Si embargo, después de detectado el error, la fase puede tratar el error, de manera que el compilador pueda continuar, permitiendo así que se puedan detectar errores posteriores. Un compilador que se detenga cuando encuentre el primer error no es muy eficaz. &lt;br /&gt;
El tratamiento de los errores durante el proceso de compilación (en cualquiera de sus fases) debe cumplir al menos los requisitos siguientes: &lt;br /&gt;
- reportar la presencia de los errores clara y precisamente &lt;br /&gt;
- recuperarse de los errores lo suficientemente rápido como para ser capaz de detectar los errores siguientes &lt;br /&gt;
- no demorar significativamente el procesamiento de los programas correctos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generación de código intermedio.=== &lt;br /&gt;
Después del análisis sintáctico y semántico muchos compiladores generan una representación explícita intermedia del código fuente. Dicha representación puede verse como la representación de un programa para una máquina abstracta. Ejemplo: MSIL, Java bytecode, Notación de cuádruplos, Notación polaca, etc. &lt;br /&gt;
El código intermedio debe tener dos características muy importantes: debe ser fácil de producir y fácil de traducir al programa objeto. &lt;br /&gt;
El árbol creado por el analizador semántico se utiliza para generar la traducción del programa fuente y de esta forma lograr la interpretación de las acciones asociadas a la sentencia o sentencias en curso. La traducción como se había mencionado puede ser a lenguaje de máquina, o a un lenguaje intermedio, como el lenguaje ensamblador. &lt;br /&gt;
Un método elegante y efectivo para generar el código intermedio a partir del árbol sintáctico es el denominado Traducción Sintáctica Directa. A cada nodo n se le asocia un código intermedio C(n). El código del nodo n se construye concatenando el código de sus descendientes. Luego, la traducción se hace de abajo hacia arriba.&lt;br /&gt;
===Optimización del código intermedio.=== &lt;br /&gt;
La fase de optimización se efectúa con el objetivo de mejorar la eficiencia del código intermedio. Algunas optimizaciones resultan triviales. Por ejemplo, un código semejante al generado en la tabla anterior, puede representarse en solo dos instrucciones. &lt;br /&gt;
&lt;br /&gt;
temp1 = id3 * 7.0 &lt;br /&gt;
id1 = id2 + temp1 &lt;br /&gt;
&lt;br /&gt;
El compilador puede deducir que la operación EntToReal(7) puede realizarse de una vez en la fase compilación así podemos eliminar dicha instrucción sustituyendo por 7.0 directamente. Además temp3 se usa solo una vez para trasmitir su valor a id1. De esa forma no hay ninguna objeción en sustituir id1 por temp3.&lt;br /&gt;
&lt;br /&gt;
===Generación del código objeto.=== &lt;br /&gt;
La fase final de un compilador es la de generación del código objeto, consistente en código máquina o código ensamblador. Lo primero es seleccionar localizaciones de memoria para cada variable usada en el programa. Las instrucciones intermedias se traducen a secuencias de instrucciones en código maquina que realicen la misma operación. Un aspecto crucial es la asignación de las variables a registros. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Las dos instrucciones obtenidas en son traducidas instrucciones en ensamblador. &lt;br /&gt;
&lt;br /&gt;
MOVF id3, R2 &lt;br /&gt;
MULF #7.0, R2 &lt;br /&gt;
MOVF id2, R1 &lt;br /&gt;
ADDF R2, R1 &lt;br /&gt;
MOVF R1, id1 &lt;br /&gt;
&lt;br /&gt;
Los primeros dos operados, determinan el origen y el destino respectivamente. El sufijo F de cada instrucción indica que se esta trabajando con números en coma flotante (reales). Este código mueve el contenido de la dirección id3 al registro 2, seguidamente lo multiplica por el número 7.0. El símbolo # indica que 7.0 debe ser tratado como una constante. La tercera instrucción mueve el contenido de id2 al registro 1 y lo adiciona al valor calculado previamente que esta almacenado en el registro 2. Finalmente el valor calculado en el registro 1 es movido a la dirección determinada por id1. &lt;br /&gt;
&lt;br /&gt;
==Representación de lenguajes.== &lt;br /&gt;
En general existen dos esquemas diferentes para definir un Lenguaje, los cuales se conocen como esquema generador y esquema reconocedor. En el caso de los esquemas generadores se trata de un mecanismo que nos permite “generar” las diferentes sentencias del lenguaje. En caso de los esquemas reconocedores se trata de un mecanismo que nos permite reconocer o verificar si cierta sentencia pertenece o no a un lenguaje. &lt;br /&gt;
Si un Lenguaje posee un número finito de cadenas, puede ser definido simplemente listando sus cadenas, pero ¿Cómo proceder para definir Lenguajes con un número infinito de Cadenas? &lt;br /&gt;
Para definir un lenguaje se puede utilizar una Gramática (esquema generador) o podemos utilizar Autómatas Finitos (esquema reconocedor). &lt;br /&gt;
===Definiciones Básicas.=== &lt;br /&gt;
Antes de abordar el concepto de lenguaje, veremos un conjunto de definiciones básicas relacionadas. &lt;br /&gt;
*Alfabeto (Σ): Se entiende por alfabeto un conjunto arbitrario, finito y no vacío, de símbolos. Entre los alfabetos más comunes podemos mencionar el alfabeto binario {0, 1}, el alfabeto latino {a, b, c, d, e, f, g, …}, etc. &lt;br /&gt;
*Cadena: Una cadena es una secuencia de símbolos de cierto alfabeto colocados uno a continuación del otro. &lt;br /&gt;
11001: constituye una cadena sobre el alfabeto {0, 1}. &lt;br /&gt;
abcd: constituye una cadena sobre el alfabeto de las letras latinas. &lt;br /&gt;
*Cadena Vacía: Una cadena vacía no es más que una cadena sin elementos, la cadena vacía se denota por e. &lt;br /&gt;
Notación: En lo que sigue asumiremos el siguiente convenio para denotar cadenas: &lt;br /&gt;
a, b, c, d, … representan símbolos. &lt;br /&gt;
y, u, v, w, … representan cadenas &lt;br /&gt;
an =aa…a n veces &lt;br /&gt;
a0 = e&lt;br /&gt;
&lt;br /&gt;
====Definición Formal de Cadena:====&lt;br /&gt;
Una cadena sobre un determinado alfabeto Σ se define como sigue: &lt;br /&gt;
# e (cadena vacía) es una cadena sobre Σ. &lt;br /&gt;
# Si x es una cadena sobre Σ, y a ∈ Σ entonces xa es una cadena sobre Σ, para todo a ∈ Σ. &lt;br /&gt;
# Cualquier otra cadena sobre Σ puede obtenerse, aplicando 1 y 2. &lt;br /&gt;
=====Concatenación de Cadenas:===== &lt;br /&gt;
Si x y y son cadenas sobre Σ, entonces xy es una cadena sobre Σ, que se denomina concatenación de x y y. &lt;br /&gt;
=====Reverso de una Cadena:=====&lt;br /&gt;
El reverso de una cadena x se denota xR, y es la cadena que se obtiene escribiendo los símbolos de x en sentido inverso.&lt;br /&gt;
=====Prefijos y Sufijos de una Cadena:=====&lt;br /&gt;
Sean x, y, z cadenas sobre Σ. Entonces x es un prefijo de la cadena xy y y es un sufijo de la cadena xy. Además y es una subcadena de la cadena xyz. Si x ≠ y y x es un prefijo de y entonces se dice que x es un prefijo propio. Análogamente se puede definir el concepto de sufijo propio. &lt;br /&gt;
=====Longitud de una Cadena:=====&lt;br /&gt;
La longitud de una cadena es el número de símbolos que la integran. Así decimos que la longitud de la cadena abc es 3, lo cual se denota en la forma siguiente: &lt;br /&gt;
⎟ abc ⎟ = 3 &lt;br /&gt;
Obviamente se tiene que ⎟ e ⎟ = 0. &lt;br /&gt;
=====Lenguaje:=====&lt;br /&gt;
Un lenguaje sobre Σ es un conjunto de cadenas sobre dicho alfabeto que obedece una cierta regla de formación. &lt;br /&gt;
=====Clausura de un Alfabeto:=====&lt;br /&gt;
El conjunto Σ* denota todas las cadenas sobre Σ, incluyendo la cadena vacía, este conjunto se denomina Clausura de Σ. &lt;br /&gt;
Por ejemplo, si Σ = {0,1} entonces Σ* = {e, 0, 1, 00, 01, 10, 11, 001,…} &lt;br /&gt;
Resulta evidente que si L es un cierto lenguaje sobre Σ, entonces L ⊆ Σ*. &lt;br /&gt;
El conjunto Σ+ se denomina Clausura Positiva de Σ y se define como:&lt;br /&gt;
Σ+ = Σ* - e &lt;br /&gt;
&lt;br /&gt;
===Operaciones sobre Lenguajes:===&lt;br /&gt;
Algunas de las operaciones anteriores sobre cadenas pueden ser generalizadas a los lenguajes, así podemos definir la concatenación o producto de lenguajes en la forma siguiente: &lt;br /&gt;
Sea L1 un lenguajes sobre Σ1 y L2 un lenguaje sobre Σ2, entonces el lenguaje L1L2 se denomina concatenación o producto de los lenguajes L1 y L2 y se define como sigue:&lt;br /&gt;
En forma análoga puede definirse la Clausura de un Lenguaje en la forma siguiente: &lt;br /&gt;
L0 = {e} &lt;br /&gt;
Ln = L Ln-1 para n ≥ 1 &lt;br /&gt;
L* = ∪ Ln para n ≥ 0 &lt;br /&gt;
Ejemplo: &lt;br /&gt;
(a) Ponga un ejemplo de cadena que pertenezca al lenguaje L = { 0 n1n | n&amp;gt;=1 } &lt;br /&gt;
Respuestas correctas: 01, 0011, 000111, 00001111, … &lt;br /&gt;
Respuestas incorrectas: 0, 1, 001, 10, 1100, 011, …&lt;br /&gt;
&lt;br /&gt;
==Concepto de gramática.==&lt;br /&gt;
La gramática es un ente o modelo matemático que permite especificar un lenguaje, es decir, es el conjunto de reglas capaces de generar todas las posibilidades combinatorias de ese lenguaje, y sólo las de dicho lenguaje, ya sea éste un lenguaje formal o un lenguaje natural. &lt;br /&gt;
Los objetivos de una gramática son: &lt;br /&gt;
*Definir si una sentencia pertenece o no al un lenguaje. &lt;br /&gt;
*Describir estructuralmente las sentencias del lenguaje. &lt;br /&gt;
En la definición formal de una Gramática se utilizan dos conjuntos disjuntos de símbolos: &lt;br /&gt;
N: Conjunto de símbolos no terminales (los cuales nos permiten representar combinaciones de símbolos). &lt;br /&gt;
Σ: Conjunto de símbolos terminales que se corresponde con el concepto de alfabeto anteriormente estudiado. &lt;br /&gt;
El centro de una gramática lo constituye un conjunto de “reglas de producción”&lt;br /&gt;
(P) o reglas de formación de cadenas, las cuales están formadas por elementos de la relación: &lt;br /&gt;
(N ∪ Σ )* N (N ∪ Σ )* → (N ∪ Σ )* &lt;br /&gt;
Definición: Una gramática es un cuádruplo G = { N, Σ, P, S } donde: &lt;br /&gt;
N: Conjunto de símbolos no terminales. &lt;br /&gt;
Σ: Conjunto de símbolos terminales. &lt;br /&gt;
P: Conjunto de Reglas de Producción.&lt;br /&gt;
S: Axioma o símbolo distinguido (S ∈ N) &lt;br /&gt;
 &lt;br /&gt;
===Definiciones relacionadas con el concepto de Gramáticas=== &lt;br /&gt;
Forma Sentencial: Una forma sentencial en una gramática se define en forma recursiva como sigue: &lt;br /&gt;
Sea G = { N, Σ, P, S } una gramática, entonces: &lt;br /&gt;
# S es una forma sentencial. &lt;br /&gt;
# Si αβλ es una forma sentencial y β→δ ∈ P entonces αδλ es una forma sentencial. &lt;br /&gt;
Sentencia: Una forma sentencial que solo contenga terminales se denomina sentencia. &lt;br /&gt;
Derivación: Sea G = { N, Σ, P, S } una gramática, la relación ⇒ (deriva directamente) se define como sigue: &lt;br /&gt;
Si αβλ ∈ ( N ∪ Σ )+ y β → δ ∈ P entonces αβλ ⇒ αδλ.&lt;br /&gt;
La derivación de longitud k que denotamos   significa que si  , entonces existe una secuencia de cadenas a = a0, a1,…,ak=β tal que tal que a = a0 ⇒ a1 ⇒ … ⇒ ak = β.&lt;br /&gt;
La relación  (deriva en forma no trivial) se define como la clausura positiva de ⇒, equivalente a   con k &amp;gt; 0&lt;br /&gt;
La relación ⇒ se define como la clausura de ⇒ , equivalente a   con k ≥ 0.&lt;br /&gt;
==Clasificación de Chomsky.== &lt;br /&gt;
De acuerdo con lo que hemos visto, toda gramática genera un único lenguaje, pero distintas gramáticas pueden generar el mismo lenguaje. &lt;br /&gt;
Por ejemplo, el lenguaje generado en el ejemplo 2.3 es igual al generado por la gramática del siguiente ejemplo. &lt;br /&gt;
Ejemplo : &lt;br /&gt;
G0 = ( { E, T, F }, { a, +, *, (, ) }, P, E ) &lt;br /&gt;
Donde: &lt;br /&gt;
Podríamos pensar en clasificar las gramáticas por el lenguaje que generan, por este motivo hacemos la siguiente definición. &lt;br /&gt;
Definición: Dos gramáticas se dicen débilmente equivalentes si generan el mismo lenguaje. &lt;br /&gt;
Sin embargo, al hacer esta clasificación nos encontramos con que el problema de saber si dos gramáticas generan el mismo lenguaje es indecible. No existe ningún algoritmo que acepte como entrada dos gramáticas y nos diga (la salida del algoritmo) si generan o no el mismo lenguaje. &lt;br /&gt;
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramática, más que en la naturaleza del lenguaje que generan. La siguiente clasificación se conoce como jerarquía de Chomsky y sigue esta dirección. &lt;br /&gt;
Sea G = ( N, Σ, P, S) una gramática:&lt;br /&gt;
# Si cada producción en P es de la forma A → xB ó A → x con A, B ∈ N y x ∈ Σ* o de la forma A→ Bx ó A → x con A, B ∈ N y x ∈ Σ* entonces la gramática G se denomina Regular Derecha o Regular la izquierda respectivamente, o de forma general Gramática Regular. &lt;br /&gt;
# Si cada producción en P es de la forma A → α donde A ∈ N y α ∈ (N ∪ Σ)∗ entonces la gramática G se denomina de Libre Contexto. &lt;br /&gt;
# Si cada producción en P es de la forma α → β donde |α| ≤ |β| y α contiene al menos un no terminal, entonces la gramática G se denomina Dependiente del Contexto. &lt;br /&gt;
# Si una gramática G no cumple las restricciones anteriores se denomina Gramática sin Restricciones. &lt;br /&gt;
&lt;br /&gt;
==Expresiones Regulares.== &lt;br /&gt;
Hasta ahora hemos visto un mecanismo muy poderoso para la representación de lenguajes, como son las gramáticas. Existe otro mecanismo para la representación de lenguajes, el cual, aunque no es tan general como las gramáticas, brinda grandes facilidades para la representación de ciertos lenguajes muy simples. En particular veremos más adelante que este mecanismo es muy útil para representar aquella parte de un lenguaje que es analizable por un analizador lexicográfico, es decir, palabras reservadas, identificadores, etc. &lt;br /&gt;
Este nuevo mecanismo de representación de lenguajes se conoce con el nombre de Expresiones Regulares. &lt;br /&gt;
Una expresión regular sobre un cierto alfabeto Σ puede ser definida en la forma siguiente: &lt;br /&gt;
#  e es una Expresión Regular sobre Σ. O sea, la cadena vacía es una expresión regular sobre cualquier alfabeto. &lt;br /&gt;
#  Si a es un símbolo perteneciente a Σ entonces a es una expresión regular que denota al conjunto o lenguaje {a}, o sea, el conjunto que contiene al elemento a. &lt;br /&gt;
#  Si r y s son expresiones regulares que denotan los lenguajes L(r) y L(s) entonces: &lt;br /&gt;
A) r | s, es una expresión regular que denota el lenguaje L(r) ∪ L(s). B) r. s, es una expresión que denota el lenguaje L(r). L(s) C) r* es una expresión regular que denota el lenguaje (L (r))* D) r+ es una expresión regular que denota el lenguaje (L (r))+ &lt;br /&gt;
&lt;br /&gt;
==Esquemas reconocedores de lenguajes formales. Autómatas finitos.==&lt;br /&gt;
&lt;br /&gt;
===Esquemas reconocedores.=== &lt;br /&gt;
Los Lenguajes, en general no finitos, pueden ser representados mediante esquemas generadores (expresiones regulares y gramáticas) o de esquemas reconocedores. A continuación analizaremos cómo representar lenguajes utilizando éste último tipo de esquema.&lt;br /&gt;
Un reconocedor para el lenguaje L es un programa (o mecanismo) que toma como entrada una cadena x y responde “si” si x pertenece al lenguaje L o “no”, si no pertenece. &lt;br /&gt;
De manera general un reconocedor lo podemos representar gráficamente de la siguiente forma:&lt;br /&gt;
 &lt;br /&gt;
Figura 1.1 Esquema general de un reconocedor &lt;br /&gt;
&lt;br /&gt;
Cinta de entrada: Es una secuencia de símbolos ai que pertenecen a un alfabeto Σ y constituyen la cadena a reconocer. Usualmente la secuencia puede terminar con un símbolo especial cuya función es la de marcar el fin de la cadena. &lt;br /&gt;
&lt;br /&gt;
Cabezal de lectura: Mecanismo que le permite al reconocedor obtener los símbolos de la cadena de entrada. El mismo puede moverse a la izquierda, a la derecha o quedarse estacionario en un momento determinado. &lt;br /&gt;
&lt;br /&gt;
Control de estado: Centro del reconocedor. A través de un conjunto finito de estados y una función de transición se describe cómo se comporta el reconocedor ante todos los símbolos del alfabeto del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Memoria: Dispositivo para almacenar información. La información está constituida por símbolos pertenecientes a un alfabeto de memoria y son utilizados por el reconocedor durante el proceso de análisis de una cadena. Este dispositivo se organiza con cierta estructura. &lt;br /&gt;
Existe una gran variedad de reconocedores: &lt;br /&gt;
# Autómatas finitos. &lt;br /&gt;
# Autómatas de Pila. &lt;br /&gt;
# Autómatas de frontera lineal &lt;br /&gt;
# Máquina de Turing. &lt;br /&gt;
&lt;br /&gt;
Los reconocedores que analizaremos en este curso, dada su relación con la fase de análisis léxico, y el reconocimiento de los tokens de un lenguaje, son los autómatas finitos.&lt;br /&gt;
&lt;br /&gt;
===Autómatas finitos.===&lt;br /&gt;
Un autómata finito o máquina de estado finito es una herramienta abstracta que se utiliza para reconocer un determinado lenguaje regular. Es un modelo matemático de un sistema que recibe una cadena constituida por caracteres de cierto alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.&lt;br /&gt;
Formalmente:&lt;br /&gt;
====Definición 1.==== &lt;br /&gt;
Autómata Finito.&lt;br /&gt;
Formalmente uma autómata finito está definido por una 5-tupla N.&lt;br /&gt;
N = ( S, Σ, δ, S0, F ).&lt;br /&gt;
Donde:&lt;br /&gt;
S: Es un conjunto finito de estados.&lt;br /&gt;
Σ: Alfabeto del lenguaje. Conjunto de símbolos de entrada del autómata.&lt;br /&gt;
δ: Función de transición definida como: δ: S x Σ ∪ { ∈ } → P(S).&lt;br /&gt;
S0: Es el estado inicial del autómata S0 ∈ S.&lt;br /&gt;
F: Es el conjunto de estados finales o de aceptación del autómata. F ⊆ S.&lt;br /&gt;
&lt;br /&gt;
==== Autómatas finitos determinista (AFD)====&lt;br /&gt;
Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado de salida y el carácter leído por el autómata.&lt;br /&gt;
Un AFD es un caso particular de AF en el cual se cumple:&lt;br /&gt;
# No existen e-transiciones.&lt;br /&gt;
# Para cualquier estado si y cualquier símbolo a ∈ Σ, existe al máximo una transición que salga de si.&lt;br /&gt;
Un AFD se denomina completo cuando tiene una transición por cada estado y cada carácter del alfabeto. Si no cumple esta condición se lo denomina incompleto.&lt;br /&gt;
La gran ventaja que aportan los Autómatas Finitos Deterministas viene dada por la simplicidad del mecanismo que simule el reconocimiento de una cadena. &lt;br /&gt;
&lt;br /&gt;
====Autómatas finitos no deterministas (AFND)====&lt;br /&gt;
Un autómata finito no determinista (AFND) es un autómata finito que presenta cero, una o más transiciones por el mismo carácter del alfabeto y se clasifican dos grupos: con e-transiciones y sin e-transiciones dependiendo de la existencia o no de una o más transiciones sin que el autómata lea el próximo carácter de la cadena que está analizando.&lt;br /&gt;
&lt;br /&gt;
===Construcción de autómatas finitos a partir de expresiones regulares===&lt;br /&gt;
Construir una expresión regular además de ser un proceso muy intuitivo constituye una forma cómoda de representar los lenguajes regulares. Pero tienen una gran desventaja y es que se hace inservible cuando queremos determinar computacionalmente si una determinada cadena pertenece o no al lenguaje representado por dicha expresión regular. Habría que generar todas las cadenas del lenguaje, o al menos una gran parte de ellas, lo que puede ser un proceso infinito.&lt;br /&gt;
Los lenguajes descriptos por expresiones regulares son los mismos lenguajes reconocidos por los autómatas finitos. Como se vio anteriormente una de las grandes ventajas de los autómatas finitos deterministas vienes dada por la simplicidad del mecanismo que simula el reconocimiento de una cadena.&lt;br /&gt;
Por otro lado existe un algoritmo para convertir una expresión regular en el autómata finito no determinístico correspondiente. El algoritmo, llamado construcción de Thompson, construye a partir de la expresión regular un AFND con transiciones vacías, es decir un autómata que contiene arcos rotulados con e. Luego este autómata con transiciones vacías se puede convertir en un autómata finito sin transiciones vacías que reconoce el mismo lenguaje.&lt;br /&gt;
&lt;br /&gt;
==Análisis Léxico==&lt;br /&gt;
&lt;br /&gt;
===Funcionamiento de un analizador léxico===&lt;br /&gt;
El analizador léxico es la primera fase de un compilador. Su función principal es leer los caracteres de entrada y producir como salida una secuencia de tokens que el parser luego utiliza en su análisis sintáctico. La interacción entre ambos componentes (analizador léxico y analizador sintáctico), representada en la Fig. 1, básicamente es de la siguiente forma: Ante un pedido de un token (mensaje “proximo token”), el analizador léxico lee una secuencia de caracteres del código fuente del programa hasta identificar un token, el cual es retornado como respuesta al pedido del analizador sintáctico.&lt;br /&gt;
&lt;br /&gt;
===Especificación de un Analizador Léxico===&lt;br /&gt;
Antes de implementar un Analizador Léxico para un lenguaje determinado, es necesario diseñar su especificación. Para ello hay que identificar primeramente la colección de tokens que compone el lenguaje. Cada token debe estar especificado mediante algún esquema generador o un esquema reconocedor, preferiblemente expresiones regulares. Luego es necesario Especificar el Diagrama de Transición del Analizador Léxico.&lt;br /&gt;
Cada uno de estos pasos será explicado en detalle, tomando como base un ejemplo.&lt;br /&gt;
&lt;br /&gt;
====Conceptos Preliminares: Tokens, Patrones y Lexemas.====&lt;br /&gt;
Cuando se aborda el tema de la especificación de un Analizador Léxico, se hace mención a términos como token, patrón y lexema, con sus respectivos significados. Observemos el ejemplo correspondiente a la Fig. 2. En general existe un conjunto de cadenas para las cuales se produce el mismo token como salida. Este conjunto de cadenas se describe mediante una regla llamada patrón y está asociada a un token en específico. Un lexema es una secuencia de [[caracteres]] del programa fuente que “matchea” con un patrón correspondiente a un token. Por ejemplo, en la siguiente sentencia correspondiente al lenguaje de programación Pascal&lt;br /&gt;
const pi = 3.1416;&lt;br /&gt;
la subcadena pi es un lexema para el token “identificador”.&lt;br /&gt;
Los lexemas que matchean con un patrón de un token representan [[cadenas]] del programa fuente que pueden ser manejadas en conjunto como una unidad léxica.&lt;br /&gt;
Dicha unidad léxica la representa el token, el cual, en las siguientes fases del proceso de compilación, constituirá un símbolo terminal en la gramática generadora del lenguaje.&lt;br /&gt;
En la mayoría de los lenguajes de programación constituyen tokens los siguientes conjuntos:&lt;br /&gt;
*palabras reservadas: cadenas predeterminadas por el lenguaje las cuales no se pueden usar como identificadores.&lt;br /&gt;
*operadores: Los cuales a su vez podrían dividirse en 4 tokens aritméticos, relacionales, lógicos, y de asignación.&lt;br /&gt;
*identificadores.&lt;br /&gt;
*constantes o literales: Los cuales a su vez podría dividirse en tres tokens, literales reales, literales enteras y literales de cadena.&lt;br /&gt;
*símbolos de puntuación: Aquí se incluyen los puntos, las comas, los paréntesis, las llaves, etc. Pueden dividirse en varios tokens, todo depende del significado sintáctico que tenga un determinado [[símbolo de puntuación]] en el lenguaje.&lt;br /&gt;
Los patrones pueden especificarse de varias formas. En la Fig. 2, el patrón del token const es la propia cadena const. El patrón del token relation es el conjunto de operadores relacionales de C. Para describir patrones para tokens más complejos se usa cualquier esquema generador o reconocedor de lenguajes. Generalmente se describen mediante expresiones regulares, aunque en ocasiones es conveniente también describirlos mediante un autómata finito.&lt;br /&gt;
&lt;br /&gt;
===== Atributos de un token=====&lt;br /&gt;
Para cada token identificado por el analizador léxico, es necesario almacenar otras informaciones como el [[lexema]], el número de línea de su primera aparición y otros datos que dependen del tipo de token (si el identificador es de un arreglo o de una función, en cada caso almacenar el [[Límite de una función|límite]] o la cantidad y los tipos de los parámetros, etc). Dichas [[Información|informaciones]] son necesarias para fases posteriores del proceso de compilación y son almacenadas en la tabla de símbolos del compilador.&lt;br /&gt;
Es por ello que usualmente un token tiene un solo atributo, el cual es un apuntador a la entrada de la tabla de símbolos donde está almacenada toda la información referente al token.&lt;br /&gt;
Por ejemplo, los tokens identificados en la siguiente sentencia de [[Fortrán]]&lt;br /&gt;
E = M * C ** 2&lt;br /&gt;
se pueden escribir como una secuencia de pares:&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para E&amp;gt;&lt;br /&gt;
&amp;lt;asig_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para M&amp;gt;&lt;br /&gt;
&amp;lt;mult_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para C&amp;gt;&lt;br /&gt;
&amp;lt;exp_op, &amp;gt;&lt;br /&gt;
&amp;lt;num, puntero a la entrada en la tabla de símbolos del ‘2’&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que en algunos pares no es necesario el valor del apuntador, pues la primera componente del par es suficiente para identificar el [[lexema]]. En este pequeño ejemplo, para el token num, el [[compilador]] puede almacenar en la tabla de símbolos la cadena que forma el número y el [[Puntero (C++)|puntero]] hacia esa entrada sería el atributo del token num.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
[http://eva.uci.cu Materiales de apoyo Universidad de las ciencias Informáticas]&lt;br /&gt;
[http://cplus.about.com/od/glossary/g/gloscompiled.htm About.com C/C++/C#]&lt;br /&gt;
[http://www.alegsa.com.ar/Dic/compilador.php Alegasa - Definición de Compilador]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Telemática]][[Categoría:Informática]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454869</id>
		<title>Teoría de compiladores</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454869"/>
		<updated>2012-04-03T12:52:04Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Compilador&lt;br /&gt;
|imagen= compilador.png&lt;br /&gt;
|tamaño= 270px&lt;br /&gt;
|concepto= Programa informático cuya función es transformar código fuente legible para el humano a código de máquina que una [[CPU]] puede ejecutar. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Teoría de compilador'''&lt;br /&gt;
En la [[Comunicación|comunicación]] [[Hombre|hombre]]-máquina existe una dificultad real: las [[Computadora|computadoras]] operan sobre [[Bits|bits]] (ceros y unos) y registros y los hombres se entienden por medio de idiomas (lenguaje natural), o utilizan una noción científica determinada por el área de problemas en que trabaja, entre otras vías. &lt;br /&gt;
Los [[Lenguajes de Programación Web|lenguajes de programación]] son el vehículo de comunicación entre el hombre y la [[computadora]]. Un [[Lenguaje de Programación|lenguaje de programación]] es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una [[computadora]]. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático. Un programa fuente escrito en un [[Lenguaje de Programación|lenguaje de programación]]  necesita pasar por un proceso de conversión al lenguaje de maquina que entiende la [[computadora]], a ese proceso de conversión del programa fuente al [[Lenguaje|lenguaje]] o código de máquina se le llama proceso de compilación o simplemente compilación. Y al programa capaz de realizar ese proceso se le llama [[Compilador|compilador]] o traductor.&lt;br /&gt;
==Teoría de compilador==&lt;br /&gt;
===Conceptos básicos=== &lt;br /&gt;
Veamos informalmente algunos conceptos básicos. &lt;br /&gt;
*Lenguaje: Conjunto de [[Símbolos|símbolos]] y reglas que permiten la [[comunicación]], es decir, trasmitir una idea, un [[Mensaje|mensaje]]. &lt;br /&gt;
&lt;br /&gt;
*Léxico (vocabulario): Conjunto de palabras que forman parte de un lenguaje específico. &lt;br /&gt;
&lt;br /&gt;
*[[Gramática]]: Agrupa los [[Elementos de Infórmatica|elementos]] de forma, estructura y significado que permiten expresarse en un lenguaje determinado. &lt;br /&gt;
&lt;br /&gt;
*[[Sintaxis]]: Conjunto de reglas necesarias para construir [[Frases|frases]] correctas en un lenguaje. &lt;br /&gt;
&lt;br /&gt;
*[[Semántica]]: Significado de frases generadas por la [[sintaxis]] y el [[léxico]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de [[Programación|programación]]: Conjunto de símbolos y reglas que permiten la comunicación con un [[Computador|computador]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de alto [[Nivelación|nivel]]: Lenguaje que permite la comunicación de un [[computador]] mediante símbolos convencionales cercanos a un lenguaje natural. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de bajo nivel: Similar al lenguaje de máquina con pequeñas modificaciones [[nemotécnicas]] que facilitan su uso, por ejemplo el lenguaje [[ensamblador]]. &lt;br /&gt;
Lenguaje de Maquina: Combinación de dígitos [[binarios]] mediante los cuales un ordenador funciona.&lt;br /&gt;
&lt;br /&gt;
===Compiladores y traductores.=== &lt;br /&gt;
*[[Traductor]] es un programa que toma como entrada un programa escrito en un lenguaje de programación (lenguaje fuente) y produce como salida un programa en otro lenguaje (lenguaje objeto). El traductor se escribe en un lenguaje denominado lenguaje de implementación. &lt;br /&gt;
Cuando el lenguaje fuente es de alto nivel ([[Pascal]], C++, etc.) y el lenguaje objeto es un lenguaje de bajo nivel o de máquina, al traductor se le denomina compilador.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
El lenguaje de [[implementación]] puede ser en general cualquier lenguaje de programación, aunque existen lenguajes explícitamente diseñados para escribir compiladores (FSL, CDL, etc.). El criterio fundamental que se sigue para elegir un lenguaje de implementación es: “Este debe [[minimizar]] el esfuerzo de implementación y [[maximizar]] la calidad del compilador”. &lt;br /&gt;
Generalmente los traductores se representan a través de una T en la que se incluyen los lenguajes que intervienen en el [[proceso]].&lt;br /&gt;
*Intérprete por su parte es un programa que toma el [[Código fuente|código fuente]], lo analiza y a diferencia de los compiladores lo ejecuta directamente, sin generar un lenguaje objeto.&lt;br /&gt;
&lt;br /&gt;
===Estructura de un compilador.=== &lt;br /&gt;
El trabajo de un compilador consiste en tomar la cadena fuente del programa, determinar si es [[sintacticamente]] válida y, a la vez, generar un programa equivalente en un lenguaje que la computadora entienda. &lt;br /&gt;
El trabajo del compilador se puede dividir en diferentes partes:&lt;br /&gt;
 &lt;br /&gt;
Para un compilador en particular, el orden de los procesos puede variar y, en muchos casos, varios procesos pueden combinarse en una sola fase. En traductores reales el proceso anteriormente descrito no transita en la forma [[Linealidadlineal]] en la que aparece en el [[esquema]] propuesto en la figura, normalmente el centro del proceso de compilación gira alrededor del [[Analizador Sintáctico]] el cual es el encargado de activar cada una de las restantes fases según sea necesario. &lt;br /&gt;
Los [[módulos]] generales son: &lt;br /&gt;
# Análisis lexicológico ([[scanner]]) &lt;br /&gt;
# Análisis sintáctico ([[parser)]] &lt;br /&gt;
# Análisis semántico &lt;br /&gt;
# Generación de código intermedio &lt;br /&gt;
# [[Optimización de funciones|Optimización]] de código intermedio  &lt;br /&gt;
# Generación de código [[ejecutable]] &lt;br /&gt;
# Tabla de símbolos &lt;br /&gt;
# [[Gestión de errores]]&lt;br /&gt;
&lt;br /&gt;
==Análisis lexicológico.== &lt;br /&gt;
La entrada de un compilador es el [[código]] de un programa escrito en un lenguaje de programación. Dicho código no es más que una secuencia de símbolos pertenecientes al alfabeto del lenguaje de programación. El analizador lexicológico o scanner se encarga de tomarlos y agruparlos en entidades sintácticas simples o elementales denominadas [[Tokens|tokens]] o [[lexemas]]. &lt;br /&gt;
Las categorías de [[token]]s pueden variar de un lenguaje a otro, pero en general se distinguen las siguientes: &lt;br /&gt;
* palabras reservadas &lt;br /&gt;
* identificadores &lt;br /&gt;
* constantes numéricas y literales &lt;br /&gt;
* [[operadores]] &lt;br /&gt;
A cada token se le asigna una estructura [[lexicológica]] consistente en un par de la forma &amp;lt;tipo del token, info&amp;gt;. La primera componente es una categoría sintáctica como “constante”, “identificador”, “operador”, etc., y la segunda componente proporciona [[Información|información]] relacionada con el token en particular (valor de la constante, índice del símbolo en la tabla de símbolos, etc.). &lt;br /&gt;
Podemos afirmar, por lo tanto, que el scanner es un traductor cuya entrada es una cadena de símbolos (programa fuente) y cuya salida es una secuencia de estructuras lexicológicas o tokens. &lt;br /&gt;
&lt;br /&gt;
==Operaciones sobre la [[tabla de símbolos]].==&lt;br /&gt;
Una tarea fundamental en un compilador es la de almacenar los [[Identificadores|identificadores]] utilizados en un programa y sus atributos principales, de manera que en cualquier momento pueda conocerse de un identificador, su tipo, alcance, etc., para el caso de los procedimientos, la cantidad y tipo de los parámetros, etc. Esta [[Iformación|información]] se almacena generalmente en una estructura conocida como tabla de símbolos, la cual tiene una entrada para cada identificador y sus atributos. Los [[Tokens|tokens]] que representan constantes o identificadores se almacenan en la tabla de símbolos a medida que van apareciendo. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
1 	a 	Variable 	real &lt;br /&gt;
2 	b 	Variable 	real &lt;br /&gt;
3 	c 	Variable 	real &lt;br /&gt;
4 	7 	constante 	entera &lt;br /&gt;
&lt;br /&gt;
==Análisis sintáctico(parsing)== &lt;br /&gt;
El análisis sintáctico es un proceso en el cual se examina la secuencia de tokens para determinar si el orden de esa secuencia es correcto de acuerdo a ciertas convenciones estructurales (reglas) de la definición sintáctica del lenguaje. &lt;br /&gt;
La entrada del [[analizador sintáctico]] o parser es la secuencia de tokens generada por el scanner. El parser analiza solamente la primera componente de cada token; la segunda componente se utiliza en otros pasos. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Supongamos existen unas reglas que definen expresión de la forma siguiente: &lt;br /&gt;
exp -&amp;gt; exp + exp &lt;br /&gt;
exp -&amp;gt; exp / exp &lt;br /&gt;
exp -&amp;gt; id &lt;br /&gt;
exp -&amp;gt; const &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la [[Expresión algebraica|expresión]] &lt;br /&gt;
A + * B? &lt;br /&gt;
A + * B ⎯scanner ⎯&amp;gt;  id1 + * id2 ⎯parser ⎯&amp;gt;  Error: No cumple con la especificación sintáctica del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la expresión &lt;br /&gt;
A + B * 7? &lt;br /&gt;
A + B * 7 ⎯scanner ⎯&amp;gt;  id1 + id2 * 7 ⎯parser ⎯&amp;gt;  Sí, se cumple con la especificación sintáctica del lenguaje.&lt;br /&gt;
&lt;br /&gt;
Es necesario conocer la estructura sintáctica de una secuencia de [[Tokens|tokens]]. Por ejemplo, en una expresión A = B+C*7 en la que las variables A, B y C representan valores reales, la estructura sintáctica de esa expresión debe reflejar el hecho de que B y 7 deben multiplicarse antes de que se realice la suma y luego de hacer todas las operaciones se efectuará la [[asignación]]. Para ello, se agrupan los tokens en una estructura en forma de [[Árbol|árbol]], conocida como árbol sintáctico. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Veamos el árbol sintáctico para la secuencia: &lt;br /&gt;
id1 = id2 + id3 * 7 &lt;br /&gt;
Esta secuencia conduce a que se realicen las siguientes [[Operaciones bancarias|operaciones]]: &lt;br /&gt;
1. id3 se multiplique con 7 &lt;br /&gt;
2. el resultado de 1 se sume con id2&lt;br /&gt;
3. el resultado de 2 se almacene en id1&lt;br /&gt;
 &lt;br /&gt;
En el árbol sintáctico anterior los [[descendientes]] directos de cada [[Nodo|nodo]] representan las acciones a realizar y los valores para los cuales deben realizarse las acciones.&lt;br /&gt;
&lt;br /&gt;
==Análisis semántico.== &lt;br /&gt;
En el [[análisis semántico]] se detectan [[Errores en la transmisión de datos|errores]] relacionados con la validez del programa. Se puede decir que estos errores son de tipo sintáctico-semántico, pero no pueden ser detectados por el analizador sintáctico, ya que se relacionan con interdependencias entre las diferentes partes de un programa que no son reflejadas en un análisis gramatical. &lt;br /&gt;
El analizador semántico recibe la información resultado del análisis sintáctico que puede ser un árbol jerárquico con la información relativa a la organización de los tokens en la instrucción que se esta analizando. Ejemplo de errores que pueden ser detectados en el proceso de análisis semántico son los casos de [[compatibilidad]] entre la declaración de un identificador y su uso (chequeo de tipos), la concordancia entre la definición de una función y su activación o llamada, etc. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Retomemos el ejemplo anterior: id1 = id2 + id3 * 7 &lt;br /&gt;
Durante el análisis semántico de un lenguaje de fuerte chequeo de tipos el árbol sintáctico debe ser modificado para reflejar el análisis de los tipos de los datos. Note que haciendo un chequeo de tipos la constante 7, al ser una constante entera debe ser convertida a real para poder ser operada y las demás [[Variables|variables]] no tienen dificultad alguna para ser utilizadas al ser todas reales.&lt;br /&gt;
 &lt;br /&gt;
===[[Gestión de Memoria|Gestión]] e información de errores.=== &lt;br /&gt;
Si los compiladores tuvieran que procesar solamente programas correctos, su diseño e implementación se simplificaría en buena medida. Pero los programadores escriben programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a localizar e identificar los errores. &lt;br /&gt;
Los errores en un programa pueden clasificarse en 4 grandes grupos: &lt;br /&gt;
- lexicológicos (escribir mal un número, un símbolo no permitido, etc.) &lt;br /&gt;
- sintácticos (expresión aritmética con paréntesis no balanceados) &lt;br /&gt;
- semánticos (aplicar un operador a un operando incompatible) &lt;br /&gt;
- lógicos o de programación (ciclo infinito) &lt;br /&gt;
El analizador léxico detecta errores cuando los caracteres que restan de la entrada no forman ningún token válido en el lenguaje. Los errores referentes a que los tokens no cumplan con las reglas estructurales (sintaxis) del lenguaje se detectan en la fase de [[análisis sintáctico]]. Durante el análisis semántico el compilador trata de detectar estructuras que tengan una sintaxis correcta pero incorrecta semánticamente de acuerdo a las operaciones involucradas. Ejemplo si tratamos de sumar dos [[identificadores]], uno el nombre de un [[Arreglos|arreglo]] y el otro el nombre de un procedimiento. Las fases de análisis sintáctico y semántico manejan usualmente la mayor parte de los errores detectables por el compilador. &lt;br /&gt;
Como podemos apreciar en cada fase del proceso de compilación se pueden encontrar errores. Si embargo, después de detectado el error, la fase puede tratar el error, de manera que el compilador pueda continuar, permitiendo así que se puedan detectar errores posteriores. Un compilador que se detenga cuando encuentre el primer error no es muy eficaz. &lt;br /&gt;
El tratamiento de los errores durante el proceso de compilación (en cualquiera de sus fases) debe cumplir al menos los requisitos siguientes: &lt;br /&gt;
- reportar la presencia de los errores clara y precisamente &lt;br /&gt;
- recuperarse de los errores lo suficientemente rápido como para ser capaz de detectar los errores siguientes &lt;br /&gt;
- no demorar significativamente el procesamiento de los programas correctos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generación de código intermedio.=== &lt;br /&gt;
Después del análisis sintáctico y semántico muchos compiladores generan una representación explícita intermedia del código fuente. Dicha representación puede verse como la representación de un programa para una máquina abstracta. Ejemplo: MSIL, Java bytecode, Notación de cuádruplos, Notación polaca, etc. &lt;br /&gt;
El código intermedio debe tener dos características muy importantes: debe ser fácil de producir y fácil de traducir al programa objeto. &lt;br /&gt;
El árbol creado por el analizador semántico se utiliza para generar la traducción del programa fuente y de esta forma lograr la interpretación de las acciones asociadas a la sentencia o sentencias en curso. La traducción como se había mencionado puede ser a lenguaje de máquina, o a un lenguaje intermedio, como el lenguaje ensamblador. &lt;br /&gt;
Un método elegante y efectivo para generar el código intermedio a partir del árbol sintáctico es el denominado Traducción Sintáctica Directa. A cada nodo n se le asocia un código intermedio C(n). El código del nodo n se construye concatenando el código de sus descendientes. Luego, la traducción se hace de abajo hacia arriba.&lt;br /&gt;
===Optimización del código intermedio.=== &lt;br /&gt;
La fase de optimización se efectúa con el objetivo de mejorar la eficiencia del código intermedio. Algunas optimizaciones resultan triviales. Por ejemplo, un código semejante al generado en la tabla anterior, puede representarse en solo dos instrucciones. &lt;br /&gt;
&lt;br /&gt;
temp1 = id3 * 7.0 &lt;br /&gt;
id1 = id2 + temp1 &lt;br /&gt;
&lt;br /&gt;
El compilador puede deducir que la operación EntToReal(7) puede realizarse de una vez en la fase compilación así podemos eliminar dicha instrucción sustituyendo por 7.0 directamente. Además temp3 se usa solo una vez para trasmitir su valor a id1. De esa forma no hay ninguna objeción en sustituir id1 por temp3.&lt;br /&gt;
&lt;br /&gt;
===Generación del código objeto.=== &lt;br /&gt;
La fase final de un compilador es la de generación del código objeto, consistente en código máquina o código ensamblador. Lo primero es seleccionar localizaciones de memoria para cada variable usada en el programa. Las instrucciones intermedias se traducen a secuencias de instrucciones en código maquina que realicen la misma operación. Un aspecto crucial es la asignación de las variables a registros. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Las dos instrucciones obtenidas en son traducidas instrucciones en ensamblador. &lt;br /&gt;
&lt;br /&gt;
MOVF id3, R2 &lt;br /&gt;
MULF #7.0, R2 &lt;br /&gt;
MOVF id2, R1 &lt;br /&gt;
ADDF R2, R1 &lt;br /&gt;
MOVF R1, id1 &lt;br /&gt;
&lt;br /&gt;
Los primeros dos operados, determinan el origen y el destino respectivamente. El sufijo F de cada instrucción indica que se esta trabajando con números en coma flotante (reales). Este código mueve el contenido de la dirección id3 al registro 2, seguidamente lo multiplica por el número 7.0. El símbolo # indica que 7.0 debe ser tratado como una constante. La tercera instrucción mueve el contenido de id2 al registro 1 y lo adiciona al valor calculado previamente que esta almacenado en el registro 2. Finalmente el valor calculado en el registro 1 es movido a la dirección determinada por id1. &lt;br /&gt;
&lt;br /&gt;
==Representación de lenguajes.== &lt;br /&gt;
En general existen dos esquemas diferentes para definir un Lenguaje, los cuales se conocen como esquema generador y esquema reconocedor. En el caso de los esquemas generadores se trata de un mecanismo que nos permite “generar” las diferentes sentencias del lenguaje. En caso de los esquemas reconocedores se trata de un mecanismo que nos permite reconocer o verificar si cierta sentencia pertenece o no a un lenguaje. &lt;br /&gt;
Si un Lenguaje posee un número finito de cadenas, puede ser definido simplemente listando sus cadenas, pero ¿Cómo proceder para definir Lenguajes con un número infinito de Cadenas? &lt;br /&gt;
Para definir un lenguaje se puede utilizar una Gramática (esquema generador) o podemos utilizar Autómatas Finitos (esquema reconocedor). &lt;br /&gt;
===Definiciones Básicas.=== &lt;br /&gt;
Antes de abordar el concepto de lenguaje, veremos un conjunto de definiciones básicas relacionadas. &lt;br /&gt;
*Alfabeto (Σ): Se entiende por alfabeto un conjunto arbitrario, finito y no vacío, de símbolos. Entre los alfabetos más comunes podemos mencionar el alfabeto binario {0, 1}, el alfabeto latino {a, b, c, d, e, f, g, …}, etc. &lt;br /&gt;
*Cadena: Una cadena es una secuencia de símbolos de cierto alfabeto colocados uno a continuación del otro. &lt;br /&gt;
11001: constituye una cadena sobre el alfabeto {0, 1}. &lt;br /&gt;
abcd: constituye una cadena sobre el alfabeto de las letras latinas. &lt;br /&gt;
*Cadena Vacía: Una cadena vacía no es más que una cadena sin elementos, la cadena vacía se denota por e. &lt;br /&gt;
Notación: En lo que sigue asumiremos el siguiente convenio para denotar cadenas: &lt;br /&gt;
a, b, c, d, … representan símbolos. &lt;br /&gt;
y, u, v, w, … representan cadenas &lt;br /&gt;
an =aa…a n veces &lt;br /&gt;
a0 = e&lt;br /&gt;
&lt;br /&gt;
====Definición Formal de Cadena:====&lt;br /&gt;
Una cadena sobre un determinado alfabeto Σ se define como sigue: &lt;br /&gt;
# e (cadena vacía) es una cadena sobre Σ. &lt;br /&gt;
# Si x es una cadena sobre Σ, y a ∈ Σ entonces xa es una cadena sobre Σ, para todo a ∈ Σ. &lt;br /&gt;
# Cualquier otra cadena sobre Σ puede obtenerse, aplicando 1 y 2. &lt;br /&gt;
=====Concatenación de Cadenas:===== &lt;br /&gt;
Si x y y son cadenas sobre Σ, entonces xy es una cadena sobre Σ, que se denomina concatenación de x y y. &lt;br /&gt;
=====Reverso de una Cadena:=====&lt;br /&gt;
El reverso de una cadena x se denota xR, y es la cadena que se obtiene escribiendo los símbolos de x en sentido inverso.&lt;br /&gt;
=====Prefijos y Sufijos de una Cadena:=====&lt;br /&gt;
Sean x, y, z cadenas sobre Σ. Entonces x es un prefijo de la cadena xy y y es un sufijo de la cadena xy. Además y es una subcadena de la cadena xyz. Si x ≠ y y x es un prefijo de y entonces se dice que x es un prefijo propio. Análogamente se puede definir el concepto de sufijo propio. &lt;br /&gt;
=====Longitud de una Cadena:=====&lt;br /&gt;
La longitud de una cadena es el número de símbolos que la integran. Así decimos que la longitud de la cadena abc es 3, lo cual se denota en la forma siguiente: &lt;br /&gt;
⎟ abc ⎟ = 3 &lt;br /&gt;
Obviamente se tiene que ⎟ e ⎟ = 0. &lt;br /&gt;
=====Lenguaje:=====&lt;br /&gt;
Un lenguaje sobre Σ es un conjunto de cadenas sobre dicho alfabeto que obedece una cierta regla de formación. &lt;br /&gt;
=====Clausura de un Alfabeto:=====&lt;br /&gt;
El conjunto Σ* denota todas las cadenas sobre Σ, incluyendo la cadena vacía, este conjunto se denomina Clausura de Σ. &lt;br /&gt;
Por ejemplo, si Σ = {0,1} entonces Σ* = {e, 0, 1, 00, 01, 10, 11, 001,…} &lt;br /&gt;
Resulta evidente que si L es un cierto lenguaje sobre Σ, entonces L ⊆ Σ*. &lt;br /&gt;
El conjunto Σ+ se denomina Clausura Positiva de Σ y se define como:&lt;br /&gt;
Σ+ = Σ* - e &lt;br /&gt;
&lt;br /&gt;
===Operaciones sobre Lenguajes:===&lt;br /&gt;
Algunas de las operaciones anteriores sobre cadenas pueden ser generalizadas a los lenguajes, así podemos definir la concatenación o producto de lenguajes en la forma siguiente: &lt;br /&gt;
Sea L1 un lenguajes sobre Σ1 y L2 un lenguaje sobre Σ2, entonces el lenguaje L1L2 se denomina concatenación o producto de los lenguajes L1 y L2 y se define como sigue:&lt;br /&gt;
En forma análoga puede definirse la Clausura de un Lenguaje en la forma siguiente: &lt;br /&gt;
L0 = {e} &lt;br /&gt;
Ln = L Ln-1 para n ≥ 1 &lt;br /&gt;
L* = ∪ Ln para n ≥ 0 &lt;br /&gt;
Ejemplo: &lt;br /&gt;
(a) Ponga un ejemplo de cadena que pertenezca al lenguaje L = { 0 n1n | n&amp;gt;=1 } &lt;br /&gt;
Respuestas correctas: 01, 0011, 000111, 00001111, … &lt;br /&gt;
Respuestas incorrectas: 0, 1, 001, 10, 1100, 011, …&lt;br /&gt;
&lt;br /&gt;
==Concepto de gramática.==&lt;br /&gt;
La gramática es un ente o modelo matemático que permite especificar un lenguaje, es decir, es el conjunto de reglas capaces de generar todas las posibilidades combinatorias de ese lenguaje, y sólo las de dicho lenguaje, ya sea éste un lenguaje formal o un lenguaje natural. &lt;br /&gt;
Los objetivos de una gramática son: &lt;br /&gt;
*Definir si una sentencia pertenece o no al un lenguaje. &lt;br /&gt;
*Describir estructuralmente las sentencias del lenguaje. &lt;br /&gt;
En la definición formal de una Gramática se utilizan dos conjuntos disjuntos de símbolos: &lt;br /&gt;
N: Conjunto de símbolos no terminales (los cuales nos permiten representar combinaciones de símbolos). &lt;br /&gt;
Σ: Conjunto de símbolos terminales que se corresponde con el concepto de alfabeto anteriormente estudiado. &lt;br /&gt;
El centro de una gramática lo constituye un conjunto de “reglas de producción”&lt;br /&gt;
(P) o reglas de formación de cadenas, las cuales están formadas por elementos de la relación: &lt;br /&gt;
(N ∪ Σ )* N (N ∪ Σ )* → (N ∪ Σ )* &lt;br /&gt;
Definición: Una gramática es un cuádruplo G = { N, Σ, P, S } donde: &lt;br /&gt;
N: Conjunto de símbolos no terminales. &lt;br /&gt;
Σ: Conjunto de símbolos terminales. &lt;br /&gt;
P: Conjunto de Reglas de Producción.&lt;br /&gt;
S: Axioma o símbolo distinguido (S ∈ N) &lt;br /&gt;
 &lt;br /&gt;
===Definiciones relacionadas con el concepto de Gramáticas=== &lt;br /&gt;
Forma Sentencial: Una forma sentencial en una gramática se define en forma recursiva como sigue: &lt;br /&gt;
Sea G = { N, Σ, P, S } una gramática, entonces: &lt;br /&gt;
# S es una forma sentencial. &lt;br /&gt;
# Si αβλ es una forma sentencial y β→δ ∈ P entonces αδλ es una forma sentencial. &lt;br /&gt;
Sentencia: Una forma sentencial que solo contenga terminales se denomina sentencia. &lt;br /&gt;
Derivación: Sea G = { N, Σ, P, S } una gramática, la relación ⇒ (deriva directamente) se define como sigue: &lt;br /&gt;
Si αβλ ∈ ( N ∪ Σ )+ y β → δ ∈ P entonces αβλ ⇒ αδλ.&lt;br /&gt;
La derivación de longitud k que denotamos   significa que si  , entonces existe una secuencia de cadenas a = a0, a1,…,ak=β tal que tal que a = a0 ⇒ a1 ⇒ … ⇒ ak = β.&lt;br /&gt;
La relación  (deriva en forma no trivial) se define como la clausura positiva de ⇒, equivalente a   con k &amp;gt; 0&lt;br /&gt;
La relación ⇒ se define como la clausura de ⇒ , equivalente a   con k ≥ 0.&lt;br /&gt;
==Clasificación de Chomsky.== &lt;br /&gt;
De acuerdo con lo que hemos visto, toda gramática genera un único lenguaje, pero distintas gramáticas pueden generar el mismo lenguaje. &lt;br /&gt;
Por ejemplo, el lenguaje generado en el ejemplo 2.3 es igual al generado por la gramática del siguiente ejemplo. &lt;br /&gt;
Ejemplo : &lt;br /&gt;
G0 = ( { E, T, F }, { a, +, *, (, ) }, P, E ) &lt;br /&gt;
Donde: &lt;br /&gt;
Podríamos pensar en clasificar las gramáticas por el lenguaje que generan, por este motivo hacemos la siguiente definición. &lt;br /&gt;
Definición: Dos gramáticas se dicen débilmente equivalentes si generan el mismo lenguaje. &lt;br /&gt;
Sin embargo, al hacer esta clasificación nos encontramos con que el problema de saber si dos gramáticas generan el mismo lenguaje es indecible. No existe ningún algoritmo que acepte como entrada dos gramáticas y nos diga (la salida del algoritmo) si generan o no el mismo lenguaje. &lt;br /&gt;
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramática, más que en la naturaleza del lenguaje que generan. La siguiente clasificación se conoce como jerarquía de Chomsky y sigue esta dirección. &lt;br /&gt;
Sea G = ( N, Σ, P, S) una gramática:&lt;br /&gt;
# Si cada producción en P es de la forma A → xB ó A → x con A, B ∈ N y x ∈ Σ* o de la forma A→ Bx ó A → x con A, B ∈ N y x ∈ Σ* entonces la gramática G se denomina Regular Derecha o Regular la izquierda respectivamente, o de forma general Gramática Regular. &lt;br /&gt;
# Si cada producción en P es de la forma A → α donde A ∈ N y α ∈ (N ∪ Σ)∗ entonces la gramática G se denomina de Libre Contexto. &lt;br /&gt;
# Si cada producción en P es de la forma α → β donde |α| ≤ |β| y α contiene al menos un no terminal, entonces la gramática G se denomina Dependiente del Contexto. &lt;br /&gt;
# Si una gramática G no cumple las restricciones anteriores se denomina Gramática sin Restricciones. &lt;br /&gt;
&lt;br /&gt;
==Expresiones Regulares.== &lt;br /&gt;
Hasta ahora hemos visto un mecanismo muy poderoso para la representación de lenguajes, como son las gramáticas. Existe otro mecanismo para la representación de lenguajes, el cual, aunque no es tan general como las gramáticas, brinda grandes facilidades para la representación de ciertos lenguajes muy simples. En particular veremos más adelante que este mecanismo es muy útil para representar aquella parte de un lenguaje que es analizable por un analizador lexicográfico, es decir, palabras reservadas, identificadores, etc. &lt;br /&gt;
Este nuevo mecanismo de representación de lenguajes se conoce con el nombre de Expresiones Regulares. &lt;br /&gt;
Una expresión regular sobre un cierto alfabeto Σ puede ser definida en la forma siguiente: &lt;br /&gt;
#  e es una Expresión Regular sobre Σ. O sea, la cadena vacía es una expresión regular sobre cualquier alfabeto. &lt;br /&gt;
#  Si a es un símbolo perteneciente a Σ entonces a es una expresión regular que denota al conjunto o lenguaje {a}, o sea, el conjunto que contiene al elemento a. &lt;br /&gt;
#  Si r y s son expresiones regulares que denotan los lenguajes L(r) y L(s) entonces: &lt;br /&gt;
A) r | s, es una expresión regular que denota el lenguaje L(r) ∪ L(s). B) r. s, es una expresión que denota el lenguaje L(r). L(s) C) r* es una expresión regular que denota el lenguaje (L (r))* D) r+ es una expresión regular que denota el lenguaje (L (r))+ &lt;br /&gt;
&lt;br /&gt;
==Esquemas reconocedores de lenguajes formales. Autómatas finitos.==&lt;br /&gt;
&lt;br /&gt;
===Esquemas reconocedores.=== &lt;br /&gt;
Los Lenguajes, en general no finitos, pueden ser representados mediante esquemas generadores (expresiones regulares y gramáticas) o de esquemas reconocedores. A continuación analizaremos cómo representar lenguajes utilizando éste último tipo de esquema.&lt;br /&gt;
Un reconocedor para el lenguaje L es un programa (o mecanismo) que toma como entrada una cadena x y responde “si” si x pertenece al lenguaje L o “no”, si no pertenece. &lt;br /&gt;
De manera general un reconocedor lo podemos representar gráficamente de la siguiente forma:&lt;br /&gt;
 &lt;br /&gt;
Figura 1.1 Esquema general de un reconocedor &lt;br /&gt;
&lt;br /&gt;
Cinta de entrada: Es una secuencia de símbolos ai que pertenecen a un alfabeto Σ y constituyen la cadena a reconocer. Usualmente la secuencia puede terminar con un símbolo especial cuya función es la de marcar el fin de la cadena. &lt;br /&gt;
&lt;br /&gt;
Cabezal de lectura: Mecanismo que le permite al reconocedor obtener los símbolos de la cadena de entrada. El mismo puede moverse a la izquierda, a la derecha o quedarse estacionario en un momento determinado. &lt;br /&gt;
&lt;br /&gt;
Control de estado: Centro del reconocedor. A través de un conjunto finito de estados y una función de transición se describe cómo se comporta el reconocedor ante todos los símbolos del alfabeto del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Memoria: Dispositivo para almacenar información. La información está constituida por símbolos pertenecientes a un alfabeto de memoria y son utilizados por el reconocedor durante el proceso de análisis de una cadena. Este dispositivo se organiza con cierta estructura. &lt;br /&gt;
Existe una gran variedad de reconocedores: &lt;br /&gt;
# Autómatas finitos. &lt;br /&gt;
# Autómatas de Pila. &lt;br /&gt;
# Autómatas de frontera lineal &lt;br /&gt;
# Máquina de Turing. &lt;br /&gt;
&lt;br /&gt;
Los reconocedores que analizaremos en este curso, dada su relación con la fase de análisis léxico, y el reconocimiento de los tokens de un lenguaje, son los autómatas finitos.&lt;br /&gt;
&lt;br /&gt;
===Autómatas finitos.===&lt;br /&gt;
Un autómata finito o máquina de estado finito es una herramienta abstracta que se utiliza para reconocer un determinado lenguaje regular. Es un modelo matemático de un sistema que recibe una cadena constituida por caracteres de cierto alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.&lt;br /&gt;
Formalmente:&lt;br /&gt;
====Definición 1.==== &lt;br /&gt;
Autómata Finito.&lt;br /&gt;
Formalmente uma autómata finito está definido por una 5-tupla N.&lt;br /&gt;
N = ( S, Σ, δ, S0, F ).&lt;br /&gt;
Donde:&lt;br /&gt;
S: Es un conjunto finito de estados.&lt;br /&gt;
Σ: Alfabeto del lenguaje. Conjunto de símbolos de entrada del autómata.&lt;br /&gt;
δ: Función de transición definida como: δ: S x Σ ∪ { ∈ } → P(S).&lt;br /&gt;
S0: Es el estado inicial del autómata S0 ∈ S.&lt;br /&gt;
F: Es el conjunto de estados finales o de aceptación del autómata. F ⊆ S.&lt;br /&gt;
&lt;br /&gt;
==== Autómatas finitos determinista (AFD)====&lt;br /&gt;
Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado de salida y el carácter leído por el autómata.&lt;br /&gt;
Un AFD es un caso particular de AF en el cual se cumple:&lt;br /&gt;
# No existen e-transiciones.&lt;br /&gt;
# Para cualquier estado si y cualquier símbolo a ∈ Σ, existe al máximo una transición que salga de si.&lt;br /&gt;
Un AFD se denomina completo cuando tiene una transición por cada estado y cada carácter del alfabeto. Si no cumple esta condición se lo denomina incompleto.&lt;br /&gt;
La gran ventaja que aportan los Autómatas Finitos Deterministas viene dada por la simplicidad del mecanismo que simule el reconocimiento de una cadena. &lt;br /&gt;
&lt;br /&gt;
====Autómatas finitos no deterministas (AFND)====&lt;br /&gt;
Un autómata finito no determinista (AFND) es un autómata finito que presenta cero, una o más transiciones por el mismo carácter del alfabeto y se clasifican dos grupos: con e-transiciones y sin e-transiciones dependiendo de la existencia o no de una o más transiciones sin que el autómata lea el próximo carácter de la cadena que está analizando.&lt;br /&gt;
&lt;br /&gt;
===Construcción de autómatas finitos a partir de expresiones regulares===&lt;br /&gt;
Construir una expresión regular además de ser un proceso muy intuitivo constituye una forma cómoda de representar los lenguajes regulares. Pero tienen una gran desventaja y es que se hace inservible cuando queremos determinar computacionalmente si una determinada cadena pertenece o no al lenguaje representado por dicha expresión regular. Habría que generar todas las cadenas del lenguaje, o al menos una gran parte de ellas, lo que puede ser un proceso infinito.&lt;br /&gt;
Los lenguajes descriptos por expresiones regulares son los mismos lenguajes reconocidos por los autómatas finitos. Como se vio anteriormente una de las grandes ventajas de los autómatas finitos deterministas vienes dada por la simplicidad del mecanismo que simula el reconocimiento de una cadena.&lt;br /&gt;
Por otro lado existe un algoritmo para convertir una expresión regular en el autómata finito no determinístico correspondiente. El algoritmo, llamado construcción de Thompson, construye a partir de la expresión regular un AFND con transiciones vacías, es decir un autómata que contiene arcos rotulados con e. Luego este autómata con transiciones vacías se puede convertir en un autómata finito sin transiciones vacías que reconoce el mismo lenguaje.&lt;br /&gt;
&lt;br /&gt;
==Análisis Léxico==&lt;br /&gt;
&lt;br /&gt;
===Funcionamiento de un analizador léxico===&lt;br /&gt;
El analizador léxico es la primera fase de un compilador. Su función principal es leer los caracteres de entrada y producir como salida una secuencia de tokens que el parser luego utiliza en su análisis sintáctico. La interacción entre ambos componentes (analizador léxico y analizador sintáctico), representada en la Fig. 1, básicamente es de la siguiente forma: Ante un pedido de un token (mensaje “proximo token”), el analizador léxico lee una secuencia de caracteres del código fuente del programa hasta identificar un token, el cual es retornado como respuesta al pedido del analizador sintáctico.&lt;br /&gt;
&lt;br /&gt;
===Especificación de un Analizador Léxico===&lt;br /&gt;
Antes de implementar un Analizador Léxico para un lenguaje determinado, es necesario diseñar su especificación. Para ello hay que identificar primeramente la colección de tokens que compone el lenguaje. Cada token debe estar especificado mediante algún esquema generador o un esquema reconocedor, preferiblemente expresiones regulares. Luego es necesario Especificar el Diagrama de Transición del Analizador Léxico.&lt;br /&gt;
Cada uno de estos pasos será explicado en detalle, tomando como base un ejemplo.&lt;br /&gt;
&lt;br /&gt;
====Conceptos Preliminares: Tokens, Patrones y Lexemas.====&lt;br /&gt;
Cuando se aborda el tema de la especificación de un Analizador Léxico, se hace mención a términos como token, patrón y lexema, con sus respectivos significados. Observemos el ejemplo correspondiente a la Fig. 2. En general existe un conjunto de cadenas para las cuales se produce el mismo token como salida. Este conjunto de cadenas se describe mediante una regla llamada patrón y está asociada a un token en específico. Un lexema es una secuencia de [[caracteres]] del programa fuente que “matchea” con un patrón correspondiente a un token. Por ejemplo, en la siguiente sentencia correspondiente al lenguaje de programación Pascal&lt;br /&gt;
const pi = 3.1416;&lt;br /&gt;
la subcadena pi es un lexema para el token “identificador”.&lt;br /&gt;
Los lexemas que matchean con un patrón de un token representan [[cadenas]] del programa fuente que pueden ser manejadas en conjunto como una unidad léxica.&lt;br /&gt;
Dicha unidad léxica la representa el token, el cual, en las siguientes fases del proceso de compilación, constituirá un símbolo terminal en la gramática generadora del lenguaje.&lt;br /&gt;
En la mayoría de los lenguajes de programación constituyen tokens los siguientes conjuntos:&lt;br /&gt;
*palabras reservadas: cadenas predeterminadas por el lenguaje las cuales no se pueden usar como identificadores.&lt;br /&gt;
*operadores: Los cuales a su vez podrían dividirse en 4 tokens aritméticos, relacionales, lógicos, y de asignación.&lt;br /&gt;
*identificadores.&lt;br /&gt;
*constantes o literales: Los cuales a su vez podría dividirse en tres tokens, literales reales, literales enteras y literales de cadena.&lt;br /&gt;
*símbolos de puntuación: Aquí se incluyen los puntos, las comas, los paréntesis, las llaves, etc. Pueden dividirse en varios tokens, todo depende del significado sintáctico que tenga un determinado [[símbolo de puntuación]] en el lenguaje.&lt;br /&gt;
Los patrones pueden especificarse de varias formas. En la Fig. 2, el patrón del token const es la propia cadena const. El patrón del token relation es el conjunto de operadores relacionales de C. Para describir patrones para tokens más complejos se usa cualquier esquema generador o reconocedor de lenguajes. Generalmente se describen mediante expresiones regulares, aunque en ocasiones es conveniente también describirlos mediante un autómata finito.&lt;br /&gt;
&lt;br /&gt;
===== Atributos de un token=====&lt;br /&gt;
Para cada token identificado por el analizador léxico, es necesario almacenar otras informaciones como el [[lexema]], el número de línea de su primera aparición y otros datos que dependen del tipo de token (si el identificador es de un arreglo o de una función, en cada caso almacenar el [[Límite de una función|límite]] o la cantidad y los tipos de los parámetros, etc). Dichas [[Información|informaciones]] son necesarias para fases posteriores del proceso de compilación y son almacenadas en la tabla de símbolos del compilador.&lt;br /&gt;
Es por ello que usualmente un token tiene un solo atributo, el cual es un apuntador a la entrada de la tabla de símbolos donde está almacenada toda la información referente al token.&lt;br /&gt;
Por ejemplo, los tokens identificados en la siguiente sentencia de [[Fortrán]]&lt;br /&gt;
E = M * C ** 2&lt;br /&gt;
se pueden escribir como una secuencia de pares:&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para E&amp;gt;&lt;br /&gt;
&amp;lt;asig_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para M&amp;gt;&lt;br /&gt;
&amp;lt;mult_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para C&amp;gt;&lt;br /&gt;
&amp;lt;exp_op, &amp;gt;&lt;br /&gt;
&amp;lt;num, puntero a la entrada en la tabla de símbolos del ‘2’&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que en algunos pares no es necesario el valor del apuntador, pues la primera componente del par es suficiente para identificar el [[lexema]]. En este pequeño ejemplo, para el token num, el [[compilador]] puede almacenar en la tabla de símbolos la cadena que forma el número y el [[Puntero (C++)|puntero]] hacia esa entrada sería el atributo del token num.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
[http://eva.uci.cu Materiales de apoyo Universidad de las ciencias Informáticas]&lt;br /&gt;
[[Categoría:Telemática]][[Categoría:Informática]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Compilador.png&amp;diff=1454823</id>
		<title>Archivo:Compilador.png</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Compilador.png&amp;diff=1454823"/>
		<updated>2012-04-03T12:40:52Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: Fases de un compilador&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sumario ==&lt;br /&gt;
Fases de un compilador&lt;br /&gt;
== Estado de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454804</id>
		<title>Teoría de compiladores</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Teor%C3%ADa_de_compiladores&amp;diff=1454804"/>
		<updated>2012-04-03T12:35:09Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Compilador&lt;br /&gt;
|imagen= compilador.gif&lt;br /&gt;
|tamaño= 260px&lt;br /&gt;
|concepto=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Teoría de compilador'''&lt;br /&gt;
En la [[Comunicación|comunicación]] [[Hombre|hombre]]-máquina existe una dificultad real: las [[Computadora|computadoras]] operan sobre [[Bits|bits]] (ceros y unos) y registros y los hombres se entienden por medio de idiomas (lenguaje natural), o utilizan una noción científica determinada por el área de problemas en que trabaja, entre otras vías. &lt;br /&gt;
Los [[Lenguajes de Programación Web|lenguajes de programación]] son el vehículo de comunicación entre el hombre y la [[computadora]]. Un [[Lenguaje de Programación|lenguaje de programación]] es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una [[computadora]]. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático. Un programa fuente escrito en un [[Lenguaje de Programación|lenguaje de programación]]  necesita pasar por un proceso de conversión al lenguaje de maquina que entiende la [[computadora]], a ese proceso de conversión del programa fuente al [[Lenguaje|lenguaje]] o código de máquina se le llama proceso de compilación o simplemente compilación. Y al programa capaz de realizar ese proceso se le llama [[Compilador|compilador]] o traductor.&lt;br /&gt;
==Teoría de compilador==&lt;br /&gt;
===Conceptos básicos=== &lt;br /&gt;
Veamos informalmente algunos conceptos básicos. &lt;br /&gt;
*Lenguaje: Conjunto de [[Símbolos|símbolos]] y reglas que permiten la [[comunicación]], es decir, trasmitir una idea, un [[Mensaje|mensaje]]. &lt;br /&gt;
&lt;br /&gt;
*Léxico (vocabulario): Conjunto de palabras que forman parte de un lenguaje específico. &lt;br /&gt;
&lt;br /&gt;
*[[Gramática]]: Agrupa los [[Elementos de Infórmatica|elementos]] de forma, estructura y significado que permiten expresarse en un lenguaje determinado. &lt;br /&gt;
&lt;br /&gt;
*[[Sintaxis]]: Conjunto de reglas necesarias para construir [[Frases|frases]] correctas en un lenguaje. &lt;br /&gt;
&lt;br /&gt;
*[[Semántica]]: Significado de frases generadas por la [[sintaxis]] y el [[léxico]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de [[Programación|programación]]: Conjunto de símbolos y reglas que permiten la comunicación con un [[Computador|computador]]. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de alto [[Nivelación|nivel]]: Lenguaje que permite la comunicación de un [[computador]] mediante símbolos convencionales cercanos a un lenguaje natural. &lt;br /&gt;
&lt;br /&gt;
*Lenguaje de bajo nivel: Similar al lenguaje de máquina con pequeñas modificaciones [[nemotécnicas]] que facilitan su uso, por ejemplo el lenguaje [[ensamblador]]. &lt;br /&gt;
Lenguaje de Maquina: Combinación de dígitos [[binarios]] mediante los cuales un ordenador funciona.&lt;br /&gt;
&lt;br /&gt;
===Compiladores y traductores.=== &lt;br /&gt;
*[[Traductor]] es un programa que toma como entrada un programa escrito en un lenguaje de programación (lenguaje fuente) y produce como salida un programa en otro lenguaje (lenguaje objeto). El traductor se escribe en un lenguaje denominado lenguaje de implementación. &lt;br /&gt;
Cuando el lenguaje fuente es de alto nivel ([[Pascal]], C++, etc.) y el lenguaje objeto es un lenguaje de bajo nivel o de máquina, al traductor se le denomina compilador.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
El lenguaje de [[implementación]] puede ser en general cualquier lenguaje de programación, aunque existen lenguajes explícitamente diseñados para escribir compiladores (FSL, CDL, etc.). El criterio fundamental que se sigue para elegir un lenguaje de implementación es: “Este debe [[minimizar]] el esfuerzo de implementación y [[maximizar]] la calidad del compilador”. &lt;br /&gt;
Generalmente los traductores se representan a través de una T en la que se incluyen los lenguajes que intervienen en el [[proceso]].&lt;br /&gt;
*Intérprete por su parte es un programa que toma el [[Código fuente|código fuente]], lo analiza y a diferencia de los compiladores lo ejecuta directamente, sin generar un lenguaje objeto.&lt;br /&gt;
&lt;br /&gt;
===Estructura de un compilador.=== &lt;br /&gt;
El trabajo de un compilador consiste en tomar la cadena fuente del programa, determinar si es [[sintacticamente]] válida y, a la vez, generar un programa equivalente en un lenguaje que la computadora entienda. &lt;br /&gt;
El trabajo del compilador se puede dividir en diferentes partes:&lt;br /&gt;
 &lt;br /&gt;
Para un compilador en particular, el orden de los procesos puede variar y, en muchos casos, varios procesos pueden combinarse en una sola fase. En traductores reales el proceso anteriormente descrito no transita en la forma [[Linealidadlineal]] en la que aparece en el [[esquema]] propuesto en la figura, normalmente el centro del proceso de compilación gira alrededor del [[Analizador Sintáctico]] el cual es el encargado de activar cada una de las restantes fases según sea necesario. &lt;br /&gt;
Los [[módulos]] generales son: &lt;br /&gt;
# Análisis lexicológico ([[scanner]]) &lt;br /&gt;
# Análisis sintáctico ([[parser)]] &lt;br /&gt;
# Análisis semántico &lt;br /&gt;
# Generación de código intermedio &lt;br /&gt;
# [[Optimización de funciones|Optimización]] de código intermedio  &lt;br /&gt;
# Generación de código [[ejecutable]] &lt;br /&gt;
# Tabla de símbolos &lt;br /&gt;
# [[Gestión de errores]]&lt;br /&gt;
&lt;br /&gt;
==Análisis lexicológico.== &lt;br /&gt;
La entrada de un compilador es el [[código]] de un programa escrito en un lenguaje de programación. Dicho código no es más que una secuencia de símbolos pertenecientes al alfabeto del lenguaje de programación. El analizador lexicológico o scanner se encarga de tomarlos y agruparlos en entidades sintácticas simples o elementales denominadas [[Tokens|tokens]] o [[lexemas]]. &lt;br /&gt;
Las categorías de [[token]]s pueden variar de un lenguaje a otro, pero en general se distinguen las siguientes: &lt;br /&gt;
* palabras reservadas &lt;br /&gt;
* identificadores &lt;br /&gt;
* constantes numéricas y literales &lt;br /&gt;
* [[operadores]] &lt;br /&gt;
A cada token se le asigna una estructura [[lexicológica]] consistente en un par de la forma &amp;lt;tipo del token, info&amp;gt;. La primera componente es una categoría sintáctica como “constante”, “identificador”, “operador”, etc., y la segunda componente proporciona [[Información|información]] relacionada con el token en particular (valor de la constante, índice del símbolo en la tabla de símbolos, etc.). &lt;br /&gt;
Podemos afirmar, por lo tanto, que el scanner es un traductor cuya entrada es una cadena de símbolos (programa fuente) y cuya salida es una secuencia de estructuras lexicológicas o tokens. &lt;br /&gt;
&lt;br /&gt;
==Operaciones sobre la [[tabla de símbolos]].==&lt;br /&gt;
Una tarea fundamental en un compilador es la de almacenar los [[Identificadores|identificadores]] utilizados en un programa y sus atributos principales, de manera que en cualquier momento pueda conocerse de un identificador, su tipo, alcance, etc., para el caso de los procedimientos, la cantidad y tipo de los parámetros, etc. Esta [[Iformación|información]] se almacena generalmente en una estructura conocida como tabla de símbolos, la cual tiene una entrada para cada identificador y sus atributos. Los [[Tokens|tokens]] que representan constantes o identificadores se almacenan en la tabla de símbolos a medida que van apareciendo. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
1 	a 	Variable 	real &lt;br /&gt;
2 	b 	Variable 	real &lt;br /&gt;
3 	c 	Variable 	real &lt;br /&gt;
4 	7 	constante 	entera &lt;br /&gt;
&lt;br /&gt;
==Análisis sintáctico(parsing)== &lt;br /&gt;
El análisis sintáctico es un proceso en el cual se examina la secuencia de tokens para determinar si el orden de esa secuencia es correcto de acuerdo a ciertas convenciones estructurales (reglas) de la definición sintáctica del lenguaje. &lt;br /&gt;
La entrada del [[analizador sintáctico]] o parser es la secuencia de tokens generada por el scanner. El parser analiza solamente la primera componente de cada token; la segunda componente se utiliza en otros pasos. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Supongamos existen unas reglas que definen expresión de la forma siguiente: &lt;br /&gt;
exp -&amp;gt; exp + exp &lt;br /&gt;
exp -&amp;gt; exp / exp &lt;br /&gt;
exp -&amp;gt; id &lt;br /&gt;
exp -&amp;gt; const &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la [[Expresión algebraica|expresión]] &lt;br /&gt;
A + * B? &lt;br /&gt;
A + * B ⎯scanner ⎯&amp;gt;  id1 + * id2 ⎯parser ⎯&amp;gt;  Error: No cumple con la especificación sintáctica del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Qué resultado se obtendría del proceso de análisis sintáctico de la expresión &lt;br /&gt;
A + B * 7? &lt;br /&gt;
A + B * 7 ⎯scanner ⎯&amp;gt;  id1 + id2 * 7 ⎯parser ⎯&amp;gt;  Sí, se cumple con la especificación sintáctica del lenguaje.&lt;br /&gt;
&lt;br /&gt;
Es necesario conocer la estructura sintáctica de una secuencia de [[Tokens|tokens]]. Por ejemplo, en una expresión A = B+C*7 en la que las variables A, B y C representan valores reales, la estructura sintáctica de esa expresión debe reflejar el hecho de que B y 7 deben multiplicarse antes de que se realice la suma y luego de hacer todas las operaciones se efectuará la [[asignación]]. Para ello, se agrupan los tokens en una estructura en forma de [[Árbol|árbol]], conocida como árbol sintáctico. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Veamos el árbol sintáctico para la secuencia: &lt;br /&gt;
id1 = id2 + id3 * 7 &lt;br /&gt;
Esta secuencia conduce a que se realicen las siguientes [[Operaciones bancarias|operaciones]]: &lt;br /&gt;
1. id3 se multiplique con 7 &lt;br /&gt;
2. el resultado de 1 se sume con id2&lt;br /&gt;
3. el resultado de 2 se almacene en id1&lt;br /&gt;
 &lt;br /&gt;
En el árbol sintáctico anterior los [[descendientes]] directos de cada [[Nodo|nodo]] representan las acciones a realizar y los valores para los cuales deben realizarse las acciones.&lt;br /&gt;
&lt;br /&gt;
==Análisis semántico.== &lt;br /&gt;
En el [[análisis semántico]] se detectan [[Errores en la transmisión de datos|errores]] relacionados con la validez del programa. Se puede decir que estos errores son de tipo sintáctico-semántico, pero no pueden ser detectados por el analizador sintáctico, ya que se relacionan con interdependencias entre las diferentes partes de un programa que no son reflejadas en un análisis gramatical. &lt;br /&gt;
El analizador semántico recibe la información resultado del análisis sintáctico que puede ser un árbol jerárquico con la información relativa a la organización de los tokens en la instrucción que se esta analizando. Ejemplo de errores que pueden ser detectados en el proceso de análisis semántico son los casos de [[compatibilidad]] entre la declaración de un identificador y su uso (chequeo de tipos), la concordancia entre la definición de una función y su activación o llamada, etc. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Retomemos el ejemplo anterior: id1 = id2 + id3 * 7 &lt;br /&gt;
Durante el análisis semántico de un lenguaje de fuerte chequeo de tipos el árbol sintáctico debe ser modificado para reflejar el análisis de los tipos de los datos. Note que haciendo un chequeo de tipos la constante 7, al ser una constante entera debe ser convertida a real para poder ser operada y las demás [[Variables|variables]] no tienen dificultad alguna para ser utilizadas al ser todas reales.&lt;br /&gt;
 &lt;br /&gt;
===[[Gestión de Memoria|Gestión]] e información de errores.=== &lt;br /&gt;
Si los compiladores tuvieran que procesar solamente programas correctos, su diseño e implementación se simplificaría en buena medida. Pero los programadores escriben programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a localizar e identificar los errores. &lt;br /&gt;
Los errores en un programa pueden clasificarse en 4 grandes grupos: &lt;br /&gt;
- lexicológicos (escribir mal un número, un símbolo no permitido, etc.) &lt;br /&gt;
- sintácticos (expresión aritmética con paréntesis no balanceados) &lt;br /&gt;
- semánticos (aplicar un operador a un operando incompatible) &lt;br /&gt;
- lógicos o de programación (ciclo infinito) &lt;br /&gt;
El analizador léxico detecta errores cuando los caracteres que restan de la entrada no forman ningún token válido en el lenguaje. Los errores referentes a que los tokens no cumplan con las reglas estructurales (sintaxis) del lenguaje se detectan en la fase de [[análisis sintáctico]]. Durante el análisis semántico el compilador trata de detectar estructuras que tengan una sintaxis correcta pero incorrecta semánticamente de acuerdo a las operaciones involucradas. Ejemplo si tratamos de sumar dos [[identificadores]], uno el nombre de un [[Arreglos|arreglo]] y el otro el nombre de un procedimiento. Las fases de análisis sintáctico y semántico manejan usualmente la mayor parte de los errores detectables por el compilador. &lt;br /&gt;
Como podemos apreciar en cada fase del proceso de compilación se pueden encontrar errores. Si embargo, después de detectado el error, la fase puede tratar el error, de manera que el compilador pueda continuar, permitiendo así que se puedan detectar errores posteriores. Un compilador que se detenga cuando encuentre el primer error no es muy eficaz. &lt;br /&gt;
El tratamiento de los errores durante el proceso de compilación (en cualquiera de sus fases) debe cumplir al menos los requisitos siguientes: &lt;br /&gt;
- reportar la presencia de los errores clara y precisamente &lt;br /&gt;
- recuperarse de los errores lo suficientemente rápido como para ser capaz de detectar los errores siguientes &lt;br /&gt;
- no demorar significativamente el procesamiento de los programas correctos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generación de código intermedio.=== &lt;br /&gt;
Después del análisis sintáctico y semántico muchos compiladores generan una representación explícita intermedia del código fuente. Dicha representación puede verse como la representación de un programa para una máquina abstracta. Ejemplo: MSIL, Java bytecode, Notación de cuádruplos, Notación polaca, etc. &lt;br /&gt;
El código intermedio debe tener dos características muy importantes: debe ser fácil de producir y fácil de traducir al programa objeto. &lt;br /&gt;
El árbol creado por el analizador semántico se utiliza para generar la traducción del programa fuente y de esta forma lograr la interpretación de las acciones asociadas a la sentencia o sentencias en curso. La traducción como se había mencionado puede ser a lenguaje de máquina, o a un lenguaje intermedio, como el lenguaje ensamblador. &lt;br /&gt;
Un método elegante y efectivo para generar el código intermedio a partir del árbol sintáctico es el denominado Traducción Sintáctica Directa. A cada nodo n se le asocia un código intermedio C(n). El código del nodo n se construye concatenando el código de sus descendientes. Luego, la traducción se hace de abajo hacia arriba.&lt;br /&gt;
===Optimización del código intermedio.=== &lt;br /&gt;
La fase de optimización se efectúa con el objetivo de mejorar la eficiencia del código intermedio. Algunas optimizaciones resultan triviales. Por ejemplo, un código semejante al generado en la tabla anterior, puede representarse en solo dos instrucciones. &lt;br /&gt;
&lt;br /&gt;
temp1 = id3 * 7.0 &lt;br /&gt;
id1 = id2 + temp1 &lt;br /&gt;
&lt;br /&gt;
El compilador puede deducir que la operación EntToReal(7) puede realizarse de una vez en la fase compilación así podemos eliminar dicha instrucción sustituyendo por 7.0 directamente. Además temp3 se usa solo una vez para trasmitir su valor a id1. De esa forma no hay ninguna objeción en sustituir id1 por temp3.&lt;br /&gt;
&lt;br /&gt;
===Generación del código objeto.=== &lt;br /&gt;
La fase final de un compilador es la de generación del código objeto, consistente en código máquina o código ensamblador. Lo primero es seleccionar localizaciones de memoria para cada variable usada en el programa. Las instrucciones intermedias se traducen a secuencias de instrucciones en código maquina que realicen la misma operación. Un aspecto crucial es la asignación de las variables a registros. &lt;br /&gt;
&lt;br /&gt;
Ejemplo: &lt;br /&gt;
Las dos instrucciones obtenidas en son traducidas instrucciones en ensamblador. &lt;br /&gt;
&lt;br /&gt;
MOVF id3, R2 &lt;br /&gt;
MULF #7.0, R2 &lt;br /&gt;
MOVF id2, R1 &lt;br /&gt;
ADDF R2, R1 &lt;br /&gt;
MOVF R1, id1 &lt;br /&gt;
&lt;br /&gt;
Los primeros dos operados, determinan el origen y el destino respectivamente. El sufijo F de cada instrucción indica que se esta trabajando con números en coma flotante (reales). Este código mueve el contenido de la dirección id3 al registro 2, seguidamente lo multiplica por el número 7.0. El símbolo # indica que 7.0 debe ser tratado como una constante. La tercera instrucción mueve el contenido de id2 al registro 1 y lo adiciona al valor calculado previamente que esta almacenado en el registro 2. Finalmente el valor calculado en el registro 1 es movido a la dirección determinada por id1. &lt;br /&gt;
&lt;br /&gt;
==Representación de lenguajes.== &lt;br /&gt;
En general existen dos esquemas diferentes para definir un Lenguaje, los cuales se conocen como esquema generador y esquema reconocedor. En el caso de los esquemas generadores se trata de un mecanismo que nos permite “generar” las diferentes sentencias del lenguaje. En caso de los esquemas reconocedores se trata de un mecanismo que nos permite reconocer o verificar si cierta sentencia pertenece o no a un lenguaje. &lt;br /&gt;
Si un Lenguaje posee un número finito de cadenas, puede ser definido simplemente listando sus cadenas, pero ¿Cómo proceder para definir Lenguajes con un número infinito de Cadenas? &lt;br /&gt;
Para definir un lenguaje se puede utilizar una Gramática (esquema generador) o podemos utilizar Autómatas Finitos (esquema reconocedor). &lt;br /&gt;
===Definiciones Básicas.=== &lt;br /&gt;
Antes de abordar el concepto de lenguaje, veremos un conjunto de definiciones básicas relacionadas. &lt;br /&gt;
*Alfabeto (Σ): Se entiende por alfabeto un conjunto arbitrario, finito y no vacío, de símbolos. Entre los alfabetos más comunes podemos mencionar el alfabeto binario {0, 1}, el alfabeto latino {a, b, c, d, e, f, g, …}, etc. &lt;br /&gt;
*Cadena: Una cadena es una secuencia de símbolos de cierto alfabeto colocados uno a continuación del otro. &lt;br /&gt;
11001: constituye una cadena sobre el alfabeto {0, 1}. &lt;br /&gt;
abcd: constituye una cadena sobre el alfabeto de las letras latinas. &lt;br /&gt;
*Cadena Vacía: Una cadena vacía no es más que una cadena sin elementos, la cadena vacía se denota por e. &lt;br /&gt;
Notación: En lo que sigue asumiremos el siguiente convenio para denotar cadenas: &lt;br /&gt;
a, b, c, d, … representan símbolos. &lt;br /&gt;
y, u, v, w, … representan cadenas &lt;br /&gt;
an =aa…a n veces &lt;br /&gt;
a0 = e&lt;br /&gt;
&lt;br /&gt;
====Definición Formal de Cadena:====&lt;br /&gt;
Una cadena sobre un determinado alfabeto Σ se define como sigue: &lt;br /&gt;
# e (cadena vacía) es una cadena sobre Σ. &lt;br /&gt;
# Si x es una cadena sobre Σ, y a ∈ Σ entonces xa es una cadena sobre Σ, para todo a ∈ Σ. &lt;br /&gt;
# Cualquier otra cadena sobre Σ puede obtenerse, aplicando 1 y 2. &lt;br /&gt;
=====Concatenación de Cadenas:===== &lt;br /&gt;
Si x y y son cadenas sobre Σ, entonces xy es una cadena sobre Σ, que se denomina concatenación de x y y. &lt;br /&gt;
=====Reverso de una Cadena:=====&lt;br /&gt;
El reverso de una cadena x se denota xR, y es la cadena que se obtiene escribiendo los símbolos de x en sentido inverso.&lt;br /&gt;
=====Prefijos y Sufijos de una Cadena:=====&lt;br /&gt;
Sean x, y, z cadenas sobre Σ. Entonces x es un prefijo de la cadena xy y y es un sufijo de la cadena xy. Además y es una subcadena de la cadena xyz. Si x ≠ y y x es un prefijo de y entonces se dice que x es un prefijo propio. Análogamente se puede definir el concepto de sufijo propio. &lt;br /&gt;
=====Longitud de una Cadena:=====&lt;br /&gt;
La longitud de una cadena es el número de símbolos que la integran. Así decimos que la longitud de la cadena abc es 3, lo cual se denota en la forma siguiente: &lt;br /&gt;
⎟ abc ⎟ = 3 &lt;br /&gt;
Obviamente se tiene que ⎟ e ⎟ = 0. &lt;br /&gt;
=====Lenguaje:=====&lt;br /&gt;
Un lenguaje sobre Σ es un conjunto de cadenas sobre dicho alfabeto que obedece una cierta regla de formación. &lt;br /&gt;
=====Clausura de un Alfabeto:=====&lt;br /&gt;
El conjunto Σ* denota todas las cadenas sobre Σ, incluyendo la cadena vacía, este conjunto se denomina Clausura de Σ. &lt;br /&gt;
Por ejemplo, si Σ = {0,1} entonces Σ* = {e, 0, 1, 00, 01, 10, 11, 001,…} &lt;br /&gt;
Resulta evidente que si L es un cierto lenguaje sobre Σ, entonces L ⊆ Σ*. &lt;br /&gt;
El conjunto Σ+ se denomina Clausura Positiva de Σ y se define como:&lt;br /&gt;
Σ+ = Σ* - e &lt;br /&gt;
&lt;br /&gt;
===Operaciones sobre Lenguajes:===&lt;br /&gt;
Algunas de las operaciones anteriores sobre cadenas pueden ser generalizadas a los lenguajes, así podemos definir la concatenación o producto de lenguajes en la forma siguiente: &lt;br /&gt;
Sea L1 un lenguajes sobre Σ1 y L2 un lenguaje sobre Σ2, entonces el lenguaje L1L2 se denomina concatenación o producto de los lenguajes L1 y L2 y se define como sigue:&lt;br /&gt;
En forma análoga puede definirse la Clausura de un Lenguaje en la forma siguiente: &lt;br /&gt;
L0 = {e} &lt;br /&gt;
Ln = L Ln-1 para n ≥ 1 &lt;br /&gt;
L* = ∪ Ln para n ≥ 0 &lt;br /&gt;
Ejemplo: &lt;br /&gt;
(a) Ponga un ejemplo de cadena que pertenezca al lenguaje L = { 0 n1n | n&amp;gt;=1 } &lt;br /&gt;
Respuestas correctas: 01, 0011, 000111, 00001111, … &lt;br /&gt;
Respuestas incorrectas: 0, 1, 001, 10, 1100, 011, …&lt;br /&gt;
&lt;br /&gt;
==Concepto de gramática.==&lt;br /&gt;
La gramática es un ente o modelo matemático que permite especificar un lenguaje, es decir, es el conjunto de reglas capaces de generar todas las posibilidades combinatorias de ese lenguaje, y sólo las de dicho lenguaje, ya sea éste un lenguaje formal o un lenguaje natural. &lt;br /&gt;
Los objetivos de una gramática son: &lt;br /&gt;
*Definir si una sentencia pertenece o no al un lenguaje. &lt;br /&gt;
*Describir estructuralmente las sentencias del lenguaje. &lt;br /&gt;
En la definición formal de una Gramática se utilizan dos conjuntos disjuntos de símbolos: &lt;br /&gt;
N: Conjunto de símbolos no terminales (los cuales nos permiten representar combinaciones de símbolos). &lt;br /&gt;
Σ: Conjunto de símbolos terminales que se corresponde con el concepto de alfabeto anteriormente estudiado. &lt;br /&gt;
El centro de una gramática lo constituye un conjunto de “reglas de producción”&lt;br /&gt;
(P) o reglas de formación de cadenas, las cuales están formadas por elementos de la relación: &lt;br /&gt;
(N ∪ Σ )* N (N ∪ Σ )* → (N ∪ Σ )* &lt;br /&gt;
Definición: Una gramática es un cuádruplo G = { N, Σ, P, S } donde: &lt;br /&gt;
N: Conjunto de símbolos no terminales. &lt;br /&gt;
Σ: Conjunto de símbolos terminales. &lt;br /&gt;
P: Conjunto de Reglas de Producción.&lt;br /&gt;
S: Axioma o símbolo distinguido (S ∈ N) &lt;br /&gt;
 &lt;br /&gt;
===Definiciones relacionadas con el concepto de Gramáticas=== &lt;br /&gt;
Forma Sentencial: Una forma sentencial en una gramática se define en forma recursiva como sigue: &lt;br /&gt;
Sea G = { N, Σ, P, S } una gramática, entonces: &lt;br /&gt;
# S es una forma sentencial. &lt;br /&gt;
# Si αβλ es una forma sentencial y β→δ ∈ P entonces αδλ es una forma sentencial. &lt;br /&gt;
Sentencia: Una forma sentencial que solo contenga terminales se denomina sentencia. &lt;br /&gt;
Derivación: Sea G = { N, Σ, P, S } una gramática, la relación ⇒ (deriva directamente) se define como sigue: &lt;br /&gt;
Si αβλ ∈ ( N ∪ Σ )+ y β → δ ∈ P entonces αβλ ⇒ αδλ.&lt;br /&gt;
La derivación de longitud k que denotamos   significa que si  , entonces existe una secuencia de cadenas a = a0, a1,…,ak=β tal que tal que a = a0 ⇒ a1 ⇒ … ⇒ ak = β.&lt;br /&gt;
La relación  (deriva en forma no trivial) se define como la clausura positiva de ⇒, equivalente a   con k &amp;gt; 0&lt;br /&gt;
La relación ⇒ se define como la clausura de ⇒ , equivalente a   con k ≥ 0.&lt;br /&gt;
==Clasificación de Chomsky.== &lt;br /&gt;
De acuerdo con lo que hemos visto, toda gramática genera un único lenguaje, pero distintas gramáticas pueden generar el mismo lenguaje. &lt;br /&gt;
Por ejemplo, el lenguaje generado en el ejemplo 2.3 es igual al generado por la gramática del siguiente ejemplo. &lt;br /&gt;
Ejemplo : &lt;br /&gt;
G0 = ( { E, T, F }, { a, +, *, (, ) }, P, E ) &lt;br /&gt;
Donde: &lt;br /&gt;
Podríamos pensar en clasificar las gramáticas por el lenguaje que generan, por este motivo hacemos la siguiente definición. &lt;br /&gt;
Definición: Dos gramáticas se dicen débilmente equivalentes si generan el mismo lenguaje. &lt;br /&gt;
Sin embargo, al hacer esta clasificación nos encontramos con que el problema de saber si dos gramáticas generan el mismo lenguaje es indecible. No existe ningún algoritmo que acepte como entrada dos gramáticas y nos diga (la salida del algoritmo) si generan o no el mismo lenguaje. &lt;br /&gt;
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramática, más que en la naturaleza del lenguaje que generan. La siguiente clasificación se conoce como jerarquía de Chomsky y sigue esta dirección. &lt;br /&gt;
Sea G = ( N, Σ, P, S) una gramática:&lt;br /&gt;
# Si cada producción en P es de la forma A → xB ó A → x con A, B ∈ N y x ∈ Σ* o de la forma A→ Bx ó A → x con A, B ∈ N y x ∈ Σ* entonces la gramática G se denomina Regular Derecha o Regular la izquierda respectivamente, o de forma general Gramática Regular. &lt;br /&gt;
# Si cada producción en P es de la forma A → α donde A ∈ N y α ∈ (N ∪ Σ)∗ entonces la gramática G se denomina de Libre Contexto. &lt;br /&gt;
# Si cada producción en P es de la forma α → β donde |α| ≤ |β| y α contiene al menos un no terminal, entonces la gramática G se denomina Dependiente del Contexto. &lt;br /&gt;
# Si una gramática G no cumple las restricciones anteriores se denomina Gramática sin Restricciones. &lt;br /&gt;
&lt;br /&gt;
==Expresiones Regulares.== &lt;br /&gt;
Hasta ahora hemos visto un mecanismo muy poderoso para la representación de lenguajes, como son las gramáticas. Existe otro mecanismo para la representación de lenguajes, el cual, aunque no es tan general como las gramáticas, brinda grandes facilidades para la representación de ciertos lenguajes muy simples. En particular veremos más adelante que este mecanismo es muy útil para representar aquella parte de un lenguaje que es analizable por un analizador lexicográfico, es decir, palabras reservadas, identificadores, etc. &lt;br /&gt;
Este nuevo mecanismo de representación de lenguajes se conoce con el nombre de Expresiones Regulares. &lt;br /&gt;
Una expresión regular sobre un cierto alfabeto Σ puede ser definida en la forma siguiente: &lt;br /&gt;
#  e es una Expresión Regular sobre Σ. O sea, la cadena vacía es una expresión regular sobre cualquier alfabeto. &lt;br /&gt;
#  Si a es un símbolo perteneciente a Σ entonces a es una expresión regular que denota al conjunto o lenguaje {a}, o sea, el conjunto que contiene al elemento a. &lt;br /&gt;
#  Si r y s son expresiones regulares que denotan los lenguajes L(r) y L(s) entonces: &lt;br /&gt;
A) r | s, es una expresión regular que denota el lenguaje L(r) ∪ L(s). B) r. s, es una expresión que denota el lenguaje L(r). L(s) C) r* es una expresión regular que denota el lenguaje (L (r))* D) r+ es una expresión regular que denota el lenguaje (L (r))+ &lt;br /&gt;
&lt;br /&gt;
==Esquemas reconocedores de lenguajes formales. Autómatas finitos.==&lt;br /&gt;
&lt;br /&gt;
===Esquemas reconocedores.=== &lt;br /&gt;
Los Lenguajes, en general no finitos, pueden ser representados mediante esquemas generadores (expresiones regulares y gramáticas) o de esquemas reconocedores. A continuación analizaremos cómo representar lenguajes utilizando éste último tipo de esquema.&lt;br /&gt;
Un reconocedor para el lenguaje L es un programa (o mecanismo) que toma como entrada una cadena x y responde “si” si x pertenece al lenguaje L o “no”, si no pertenece. &lt;br /&gt;
De manera general un reconocedor lo podemos representar gráficamente de la siguiente forma:&lt;br /&gt;
 &lt;br /&gt;
Figura 1.1 Esquema general de un reconocedor &lt;br /&gt;
&lt;br /&gt;
Cinta de entrada: Es una secuencia de símbolos ai que pertenecen a un alfabeto Σ y constituyen la cadena a reconocer. Usualmente la secuencia puede terminar con un símbolo especial cuya función es la de marcar el fin de la cadena. &lt;br /&gt;
&lt;br /&gt;
Cabezal de lectura: Mecanismo que le permite al reconocedor obtener los símbolos de la cadena de entrada. El mismo puede moverse a la izquierda, a la derecha o quedarse estacionario en un momento determinado. &lt;br /&gt;
&lt;br /&gt;
Control de estado: Centro del reconocedor. A través de un conjunto finito de estados y una función de transición se describe cómo se comporta el reconocedor ante todos los símbolos del alfabeto del lenguaje. &lt;br /&gt;
&lt;br /&gt;
Memoria: Dispositivo para almacenar información. La información está constituida por símbolos pertenecientes a un alfabeto de memoria y son utilizados por el reconocedor durante el proceso de análisis de una cadena. Este dispositivo se organiza con cierta estructura. &lt;br /&gt;
Existe una gran variedad de reconocedores: &lt;br /&gt;
# Autómatas finitos. &lt;br /&gt;
# Autómatas de Pila. &lt;br /&gt;
# Autómatas de frontera lineal &lt;br /&gt;
# Máquina de Turing. &lt;br /&gt;
&lt;br /&gt;
Los reconocedores que analizaremos en este curso, dada su relación con la fase de análisis léxico, y el reconocimiento de los tokens de un lenguaje, son los autómatas finitos.&lt;br /&gt;
&lt;br /&gt;
===Autómatas finitos.===&lt;br /&gt;
Un autómata finito o máquina de estado finito es una herramienta abstracta que se utiliza para reconocer un determinado lenguaje regular. Es un modelo matemático de un sistema que recibe una cadena constituida por caracteres de cierto alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.&lt;br /&gt;
Formalmente:&lt;br /&gt;
====Definición 1.==== &lt;br /&gt;
Autómata Finito.&lt;br /&gt;
Formalmente uma autómata finito está definido por una 5-tupla N.&lt;br /&gt;
N = ( S, Σ, δ, S0, F ).&lt;br /&gt;
Donde:&lt;br /&gt;
S: Es un conjunto finito de estados.&lt;br /&gt;
Σ: Alfabeto del lenguaje. Conjunto de símbolos de entrada del autómata.&lt;br /&gt;
δ: Función de transición definida como: δ: S x Σ ∪ { ∈ } → P(S).&lt;br /&gt;
S0: Es el estado inicial del autómata S0 ∈ S.&lt;br /&gt;
F: Es el conjunto de estados finales o de aceptación del autómata. F ⊆ S.&lt;br /&gt;
&lt;br /&gt;
==== Autómatas finitos determinista (AFD)====&lt;br /&gt;
Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado de salida y el carácter leído por el autómata.&lt;br /&gt;
Un AFD es un caso particular de AF en el cual se cumple:&lt;br /&gt;
# No existen e-transiciones.&lt;br /&gt;
# Para cualquier estado si y cualquier símbolo a ∈ Σ, existe al máximo una transición que salga de si.&lt;br /&gt;
Un AFD se denomina completo cuando tiene una transición por cada estado y cada carácter del alfabeto. Si no cumple esta condición se lo denomina incompleto.&lt;br /&gt;
La gran ventaja que aportan los Autómatas Finitos Deterministas viene dada por la simplicidad del mecanismo que simule el reconocimiento de una cadena. &lt;br /&gt;
&lt;br /&gt;
====Autómatas finitos no deterministas (AFND)====&lt;br /&gt;
Un autómata finito no determinista (AFND) es un autómata finito que presenta cero, una o más transiciones por el mismo carácter del alfabeto y se clasifican dos grupos: con e-transiciones y sin e-transiciones dependiendo de la existencia o no de una o más transiciones sin que el autómata lea el próximo carácter de la cadena que está analizando.&lt;br /&gt;
&lt;br /&gt;
===Construcción de autómatas finitos a partir de expresiones regulares===&lt;br /&gt;
Construir una expresión regular además de ser un proceso muy intuitivo constituye una forma cómoda de representar los lenguajes regulares. Pero tienen una gran desventaja y es que se hace inservible cuando queremos determinar computacionalmente si una determinada cadena pertenece o no al lenguaje representado por dicha expresión regular. Habría que generar todas las cadenas del lenguaje, o al menos una gran parte de ellas, lo que puede ser un proceso infinito.&lt;br /&gt;
Los lenguajes descriptos por expresiones regulares son los mismos lenguajes reconocidos por los autómatas finitos. Como se vio anteriormente una de las grandes ventajas de los autómatas finitos deterministas vienes dada por la simplicidad del mecanismo que simula el reconocimiento de una cadena.&lt;br /&gt;
Por otro lado existe un algoritmo para convertir una expresión regular en el autómata finito no determinístico correspondiente. El algoritmo, llamado construcción de Thompson, construye a partir de la expresión regular un AFND con transiciones vacías, es decir un autómata que contiene arcos rotulados con e. Luego este autómata con transiciones vacías se puede convertir en un autómata finito sin transiciones vacías que reconoce el mismo lenguaje.&lt;br /&gt;
&lt;br /&gt;
==Análisis Léxico==&lt;br /&gt;
&lt;br /&gt;
===Funcionamiento de un analizador léxico===&lt;br /&gt;
El analizador léxico es la primera fase de un compilador. Su función principal es leer los caracteres de entrada y producir como salida una secuencia de tokens que el parser luego utiliza en su análisis sintáctico. La interacción entre ambos componentes (analizador léxico y analizador sintáctico), representada en la Fig. 1, básicamente es de la siguiente forma: Ante un pedido de un token (mensaje “proximo token”), el analizador léxico lee una secuencia de caracteres del código fuente del programa hasta identificar un token, el cual es retornado como respuesta al pedido del analizador sintáctico.&lt;br /&gt;
&lt;br /&gt;
===Especificación de un Analizador Léxico===&lt;br /&gt;
Antes de implementar un Analizador Léxico para un lenguaje determinado, es necesario diseñar su especificación. Para ello hay que identificar primeramente la colección de tokens que compone el lenguaje. Cada token debe estar especificado mediante algún esquema generador o un esquema reconocedor, preferiblemente expresiones regulares. Luego es necesario Especificar el Diagrama de Transición del Analizador Léxico.&lt;br /&gt;
Cada uno de estos pasos será explicado en detalle, tomando como base un ejemplo.&lt;br /&gt;
&lt;br /&gt;
====Conceptos Preliminares: Tokens, Patrones y Lexemas.====&lt;br /&gt;
Cuando se aborda el tema de la especificación de un Analizador Léxico, se hace mención a términos como token, patrón y lexema, con sus respectivos significados. Observemos el ejemplo correspondiente a la Fig. 2. En general existe un conjunto de cadenas para las cuales se produce el mismo token como salida. Este conjunto de cadenas se describe mediante una regla llamada patrón y está asociada a un token en específico. Un lexema es una secuencia de [[caracteres]] del programa fuente que “matchea” con un patrón correspondiente a un token. Por ejemplo, en la siguiente sentencia correspondiente al lenguaje de programación Pascal&lt;br /&gt;
const pi = 3.1416;&lt;br /&gt;
la subcadena pi es un lexema para el token “identificador”.&lt;br /&gt;
Los lexemas que matchean con un patrón de un token representan [[cadenas]] del programa fuente que pueden ser manejadas en conjunto como una unidad léxica.&lt;br /&gt;
Dicha unidad léxica la representa el token, el cual, en las siguientes fases del proceso de compilación, constituirá un símbolo terminal en la gramática generadora del lenguaje.&lt;br /&gt;
En la mayoría de los lenguajes de programación constituyen tokens los siguientes conjuntos:&lt;br /&gt;
*palabras reservadas: cadenas predeterminadas por el lenguaje las cuales no se pueden usar como identificadores.&lt;br /&gt;
*operadores: Los cuales a su vez podrían dividirse en 4 tokens aritméticos, relacionales, lógicos, y de asignación.&lt;br /&gt;
*identificadores.&lt;br /&gt;
*constantes o literales: Los cuales a su vez podría dividirse en tres tokens, literales reales, literales enteras y literales de cadena.&lt;br /&gt;
*símbolos de puntuación: Aquí se incluyen los puntos, las comas, los paréntesis, las llaves, etc. Pueden dividirse en varios tokens, todo depende del significado sintáctico que tenga un determinado [[símbolo de puntuación]] en el lenguaje.&lt;br /&gt;
Los patrones pueden especificarse de varias formas. En la Fig. 2, el patrón del token const es la propia cadena const. El patrón del token relation es el conjunto de operadores relacionales de C. Para describir patrones para tokens más complejos se usa cualquier esquema generador o reconocedor de lenguajes. Generalmente se describen mediante expresiones regulares, aunque en ocasiones es conveniente también describirlos mediante un autómata finito.&lt;br /&gt;
&lt;br /&gt;
===== Atributos de un token=====&lt;br /&gt;
Para cada token identificado por el analizador léxico, es necesario almacenar otras informaciones como el [[lexema]], el número de línea de su primera aparición y otros datos que dependen del tipo de token (si el identificador es de un arreglo o de una función, en cada caso almacenar el [[Límite de una función|límite]] o la cantidad y los tipos de los parámetros, etc). Dichas [[Información|informaciones]] son necesarias para fases posteriores del proceso de compilación y son almacenadas en la tabla de símbolos del compilador.&lt;br /&gt;
Es por ello que usualmente un token tiene un solo atributo, el cual es un apuntador a la entrada de la tabla de símbolos donde está almacenada toda la información referente al token.&lt;br /&gt;
Por ejemplo, los tokens identificados en la siguiente sentencia de [[Fortrán]]&lt;br /&gt;
E = M * C ** 2&lt;br /&gt;
se pueden escribir como una secuencia de pares:&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para E&amp;gt;&lt;br /&gt;
&amp;lt;asig_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para M&amp;gt;&lt;br /&gt;
&amp;lt;mult_op, &amp;gt;&lt;br /&gt;
&amp;lt;id, puntero a la entrada en la tabla de símbolos para C&amp;gt;&lt;br /&gt;
&amp;lt;exp_op, &amp;gt;&lt;br /&gt;
&amp;lt;num, puntero a la entrada en la tabla de símbolos del ‘2’&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que en algunos pares no es necesario el valor del apuntador, pues la primera componente del par es suficiente para identificar el [[lexema]]. En este pequeño ejemplo, para el token num, el [[compilador]] puede almacenar en la tabla de símbolos la cadena que forma el número y el [[Puntero (C++)|puntero]] hacia esa entrada sería el atributo del token num.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
[http://eva.uci.cu Materiales de apoyo Universidad de las ciencias Informáticas]&lt;br /&gt;
[[Categoría:Telemática]][[Categoría:Informática]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=1228916</id>
		<title>Usuario:Lsuarezmtzjc</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=1228916"/>
		<updated>2011-12-02T15:42:40Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Contribuciones realizadas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
{{Ficha_Usuario_(avanzada)&lt;br /&gt;
|imagen= Lsuarez.png&lt;br /&gt;
|apellidos= Suárez Izquierdo&lt;br /&gt;
|nombre= Leodán&lt;br /&gt;
|nivel= Universitario&lt;br /&gt;
|título= Ingeniero en Ciencias Informáticas.&lt;br /&gt;
|postgrado= No&lt;br /&gt;
|temas= Software, Hardware, Programación, Tecnologías.&lt;br /&gt;
|institución= {{Usuario:Etiquetas/JCCE}}&lt;br /&gt;
|municipio= [[Colón]]&lt;br /&gt;
|provincia= [[Matanzas]]&lt;br /&gt;
|país=Cuba&lt;br /&gt;
|seguimiento=&lt;br /&gt;
|colaboradores=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;width: 148px; height: 68px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Acerca de mi.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/Mozilla}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/EcuRed}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
'''Leodán Suárez Izquierdo''', instructor de Joven Club de Computación y Electrónica Colón I, Matanzas. &lt;br /&gt;
&lt;br /&gt;
== Contribuciones realizadas ==&lt;br /&gt;
&lt;br /&gt;
*[[Xbox]]&lt;br /&gt;
*[[Turbo Boost]]&lt;br /&gt;
*[[X86]]&lt;br /&gt;
*[[SSE]] &lt;br /&gt;
*[[SSE2]]&lt;br /&gt;
*[[SSE3]]&lt;br /&gt;
*[[SSSE3]]&lt;br /&gt;
*[[SSE4]]&lt;br /&gt;
*[[SpeedStep]]&lt;br /&gt;
*[[Intel Atom]]&lt;br /&gt;
&lt;br /&gt;
== Artículos en desarrollo  ==&lt;br /&gt;
*[[Virtualización x86]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228895</id>
		<title>Intel Atom</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228895"/>
		<updated>2011-12-02T15:40:19Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel® Atom™.&lt;br /&gt;
| imagen          = intel-atom.jpg&lt;br /&gt;
| pie         = Microprocesador Intel® Atom™.&lt;br /&gt;
| fecha-invención = [[2 de marzo]] de [[2008]].&lt;br /&gt;
| nombre-inventor = [[Intel]].&lt;br /&gt;
| conn1           = Socket 441-ball µFCBGA (Micro-FCBGA)&lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = [[Intel Corporation]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel® Atom™''' es el nombre de una nueva familia de [[microprocesadores]] [[x86]] y [[x86-64]] de [[Intel]] basado en la microarquitectura de [[45 nm]] y [[32 nm]], de consumo eficiente de energía diseñados específicamente para dispositivos móviles para [[Internet]] (Mobile Internet Devices, [[MID]], por sus siglas en inglés) y una nueva clase de computadoras económicas y sencillas centradas en Internet.&lt;br /&gt;
&lt;br /&gt;
==Desarrollo cronológico==&lt;br /&gt;
*[[Marzo]] de [[2008]] Dispositivos móviles para Internet: &lt;br /&gt;
Se anuncian los primeros procesadores Intel Atom, con el fin de habilitar una nueva generación de dispositivos complementarios potentes y eficaces en el consumo de energía para acceder a Internet.&lt;br /&gt;
*[[Septiembre]] de [[2009]] Dispositivos electrónicos de consumo:&lt;br /&gt;
[[Intel]] anuncia el nuevo procesador Intel Atom CE4100 de 45 nm que proporciona el innovador [[SoC]] a una familia de procesadores de medios para dispositivos electrónicos de consumo, diseñados para la [[TV]] interactiva.&lt;br /&gt;
*[[Enero]] de [[2010]] [[Netbooks]]:&lt;br /&gt;
Intel anuncia su nuevo procesador Intel Atom, que integra un controlador de memoria y tecnología de gráficos en la [[CPU]]. Gracias a ello, se reduce el consumo de energía y se aumenta el desempeño en los sistemas más pequeños.&lt;br /&gt;
*[[Mayo]] de [[2010]] [[Smartphones]] y [[Tablets]]:&lt;br /&gt;
Los procesadores Intel Atom más recientes logran reducir de manera extraordinaria el consumo de energía, a la par que mantienen el desempeño y permiten crear formatos delgados e innovadores, tales como tablets, laptops y smartphones.&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Estos nuevos chips, originalmente con los nombres en código [[Silverthorne]] y [[Diamondville]], se manufacturarán con el proceso de [[45 nm]] líder de [[Intel]] con tecnología de compuerta metálica [[Hi-K]]. Los chips tienen un consumo de energía promedio en un rango de 0.6 – 2.5 [[watts]] y hasta 2.13 [[GHz]], dependiendo del diseño y de las necesidades del cliente. En comparación, los chips [[Core 2 Duo]] móviles de alto rendimiento tienen un consumo de energía promedio en el rango de 35-watts.&lt;br /&gt;
===Especificaciones===&lt;br /&gt;
*[[Frecuencia del reloj]] del [[CPU]]: 600 MHz a 2,13 GHz.&lt;br /&gt;
*Velocidad de [[FSB]]: 400 [[MT/s]] a 667 MT/s.&lt;br /&gt;
*Soporte de memorias: [[Sigle-Channel]] [[DDR2]]/[[DDR3]] 667Mhz hasta 2GB.&lt;br /&gt;
*Conjunto de instrucciones: [[MMX]], [[SSE]], [[SSE2]], [[SSE3]], [[x86]], [[x86-64]] (no para las series [[N2xx]] y [[Z5xx]]).&lt;br /&gt;
*Cantidad de Núcleos e hilos: 1/2, 2/4.&lt;br /&gt;
*Intel® Smart Cache: 512 KB L2.&lt;br /&gt;
*Gráfico integrado: Intel® Graphics Media Acelerator 3150. &lt;br /&gt;
*[[Zócalo]]: 441-ball µFCBGA (Micro-FCBGA).&lt;br /&gt;
*Núcleos: [[Silverthorne]], [[Diamondville]], [[Pineview]], [[Lincroft]].&lt;br /&gt;
&lt;br /&gt;
==Véase también==&lt;br /&gt;
*[[x86]]&lt;br /&gt;
*[[Intel]]&lt;br /&gt;
*[[Intel Centrino]]&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
*[http://www.cpubenchmark.net/cpu_lookup.php?cpu=Intel+Atom+N450+%40+1.66GHz Cpubenchmarks.net]&lt;br /&gt;
*[http://www.intel.com/espanol/pressroom/releases/2008/0303.htm Intel.com]&lt;br /&gt;
*[http://www.intel.com/espanol/technology/atom/ Intel.con-Technology]&lt;br /&gt;
*[http://www.anandtech.com/showdoc.aspx?i=3276&amp;amp;p=9 Anandtech.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228883</id>
		<title>Intel Atom</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228883"/>
		<updated>2011-12-02T15:39:16Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Desarrollo}}&lt;br /&gt;
{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel® Atom™.&lt;br /&gt;
| imagen          = intel-atom.jpg&lt;br /&gt;
| pie         = Microprocesador Intel® Atom™.&lt;br /&gt;
| fecha-invención = [[2 de marzo]] de [[2008]].&lt;br /&gt;
| nombre-inventor = [[Intel]].&lt;br /&gt;
| conn1           = Socket 441-ball µFCBGA (Micro-FCBGA)&lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = [[Intel Corporation]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel® Atom™''' es el nombre de una nueva familia de [[microprocesadores]] [[x86]] y [[x86-64]] de [[Intel]] basado en la microarquitectura de [[45 nm]] y [[32 nm]], de consumo eficiente de energía diseñados específicamente para dispositivos móviles para [[Internet]] (Mobile Internet Devices, [[MID]], por sus siglas en inglés) y una nueva clase de computadoras económicas y sencillas centradas en Internet.&lt;br /&gt;
&lt;br /&gt;
==Desarrollo cronológico==&lt;br /&gt;
*[[Marzo]] de [[2008]] Dispositivos móviles para Internet: &lt;br /&gt;
Se anuncian los primeros procesadores Intel Atom, con el fin de habilitar una nueva generación de dispositivos complementarios potentes y eficaces en el consumo de energía para acceder a Internet.&lt;br /&gt;
*[[Septiembre]] de [[2009]] Dispositivos electrónicos de consumo:&lt;br /&gt;
[[Intel]] anuncia el nuevo procesador Intel Atom CE4100 de 45 nm que proporciona el innovador [[SoC]] a una familia de procesadores de medios para dispositivos electrónicos de consumo, diseñados para la [[TV]] interactiva.&lt;br /&gt;
*[[Enero]] de [[2010]] [[Netbooks]]:&lt;br /&gt;
Intel anuncia su nuevo procesador Intel Atom, que integra un controlador de memoria y tecnología de gráficos en la [[CPU]]. Gracias a ello, se reduce el consumo de energía y se aumenta el desempeño en los sistemas más pequeños.&lt;br /&gt;
*[[Mayo]] de [[2010]] [[Smartphones]] y [[Tablets]]:&lt;br /&gt;
Los procesadores Intel Atom más recientes logran reducir de manera extraordinaria el consumo de energía, a la par que mantienen el desempeño y permiten crear formatos delgados e innovadores, tales como tablets, laptops y smartphones.&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Estos nuevos chips, originalmente con los nombres en código [[Silverthorne]] y [[Diamondville]], se manufacturarán con el proceso de [[45 nm]] líder de [[Intel]] con tecnología de compuerta metálica [[Hi-K]]. Los chips tienen un consumo de energía promedio en un rango de 0.6 – 2.5 [[watts]] y hasta 2.13 [[GHz]], dependiendo del diseño y de las necesidades del cliente. En comparación, los chips [[Core 2 Duo]] móviles de alto rendimiento tienen un consumo de energía promedio en el rango de 35-watts.&lt;br /&gt;
===Especificaciones===&lt;br /&gt;
*[[Frecuencia del reloj]] del [[CPU]]: 600 MHz a 2,13 GHz.&lt;br /&gt;
*Velocidad de [[FSB]]: 400 [[MT/s]] a 667 MT/s.&lt;br /&gt;
*Soporte de memorias: [[Sigle-Channel]] [[DDR2]]/[[DDR3]] 667Mhz hasta 2GB.&lt;br /&gt;
*Conjunto de instrucciones: [[MMX]], [[SSE]], [[SSE2]], [[SSE3]], [[x86]], [[x86-64]] (no para las series [[N2xx]] y [[Z5xx]]).&lt;br /&gt;
*Cantidad de Núcleos e hilos: 1/2, 2/4.&lt;br /&gt;
*Intel® Smart Cache: 512 KB L2.&lt;br /&gt;
*Gráfico integrado: Intel® Graphics Media Acelerator 3150. &lt;br /&gt;
*[[Zócalo]]: 441-ball µFCBGA (Micro-FCBGA).&lt;br /&gt;
*Núcleos: [[Silverthorne]], [[Diamondville]], [[Pineview]], [[Lincroft]].&lt;br /&gt;
&lt;br /&gt;
==Véase también==&lt;br /&gt;
*[[x86]]&lt;br /&gt;
*[[Intel]]&lt;br /&gt;
*[[Intel Centrino]]&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
*[http://www.cpubenchmark.net/cpu_lookup.php?cpu=Intel+Atom+N450+%40+1.66GHz Cpubenchmarks.net]&lt;br /&gt;
*[http://www.intel.com/espanol/pressroom/releases/2008/0303.htm Intel.com]&lt;br /&gt;
*[http://www.intel.com/espanol/technology/atom/ Intel.con-Technology]&lt;br /&gt;
*[http://www.anandtech.com/showdoc.aspx?i=3276&amp;amp;p=9 Anandtech.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228807</id>
		<title>Intel Atom</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228807"/>
		<updated>2011-12-02T14:13:23Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Desarrollo}}&lt;br /&gt;
{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel® Atom™.&lt;br /&gt;
| imagen          = intel-atom.jpg&lt;br /&gt;
| pie         = Microprocesador Intel® Atom™.&lt;br /&gt;
| fecha-invención = [[2 de marzo]] de [[2008]].&lt;br /&gt;
| nombre-inventor = [[Intel]].&lt;br /&gt;
| conn1           = Socket 441-ball µFCBGA (Micro-FCBGA)&lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = [[Intel Corporation]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel® Atom™''' es el nombre de una nueva familia de [[microprocesadores]] [[x86]] y [[x86-64]] de [[Intel]] basado en la microarquitectura de [[45 nm]] y [[32 nm]], de consumo eficiente de energía diseñados específicamente para dispositivos móviles para [[Internet]] (Mobile Internet Devices, [[MID]], por sus siglas en inglés) y una nueva clase de computadoras económicas y sencillas centradas en Internet.&lt;br /&gt;
&lt;br /&gt;
==Desarrollo cronológico==&lt;br /&gt;
*[[Marzo]] de [[2008]] Dispositivos móviles para Internet: &lt;br /&gt;
Se anuncian los primeros procesadores Intel Atom, con el fin de habilitar una nueva generación de dispositivos complementarios potentes y eficaces en el consumo de energía para acceder a Internet.&lt;br /&gt;
*[[Septiembre]] de [[2009]] Dispositivos electrónicos de consumo:&lt;br /&gt;
[[Intel]] anuncia el nuevo procesador Intel Atom CE4100 de 45 nm que proporciona el innovador [[SoC]] a una familia de procesadores de medios para dispositivos electrónicos de consumo, diseñados para la [[TV]] interactiva.&lt;br /&gt;
*[[Enero]] de [[2010]] [[Netbooks]]:&lt;br /&gt;
Intel anuncia su nuevo procesador Intel Atom, que integra un controlador de memoria y tecnología de gráficos en la [[CPU]]. Gracias a ello, se reduce el consumo de energía y se aumenta el desempeño en los sistemas más pequeños.&lt;br /&gt;
*[[Mayo]] de [[2010]] [[Smartphones]] y [[Tablets]]:&lt;br /&gt;
Los procesadores Intel Atom más recientes logran reducir de manera extraordinaria el consumo de energía, a la par que mantienen el desempeño y permiten crear formatos delgados e innovadores, tales como tablets, laptops y smartphones.&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Estos nuevos chips, originalmente con los nombres en código [[Silverthorne]] y [[Diamondville]], se manufacturarán con el proceso de [[45 nm]] líder de [[Intel]] con tecnología de compuerta metálica [[Hi-K]]. Los chips tienen un consumo de energía promedio en un rango de 0.6 – 2.5 [[watts]] y hasta 2.13 [[GHz]], dependiendo del diseño y de las necesidades del cliente. En comparación, los chips [[Core 2 Duo]] móviles de alto rendimiento tienen un consumo de energía promedio en el rango de 35-watts.&lt;br /&gt;
===Especificaciones===&lt;br /&gt;
*[[Frecuencia del reloj]] del [[CPU]]: 600 MHz a 2,13 GHz.&lt;br /&gt;
*Velocidad de [[FSB]]: 400 [[MT/s]] a 667 MT/s.&lt;br /&gt;
*Soporte de memorias: [[Sigle-Channel]] [[DDR2]]/[[DDR3]] 667Mhz hasta 2GB.&lt;br /&gt;
*Conjunto de instrucciones: [[MMX]], [[SSE]], [[SSE2]], [[SSE3]], [[x86]], [[x86-64]] (no para las series [[N2xx]] y [[Z5xx]]).&lt;br /&gt;
*Cantidad de Núcleos e hilos: 1/2, 2/4.&lt;br /&gt;
*Intel® Smart Cache: 512 KB L2.&lt;br /&gt;
*Gráfico integrado: Intel® Graphics Media Acelerator 3150. &lt;br /&gt;
*[[Zócalo]]: 441-ball µFCBGA (Micro-FCBGA).&lt;br /&gt;
*Núcleos: [[Silverthorne]], [[Diamondville]], [[Pineview]], [[Lincroft]].&lt;br /&gt;
&lt;br /&gt;
==Véase también==&lt;br /&gt;
*[[x86]]&lt;br /&gt;
*[[Intel]]&lt;br /&gt;
*[[Intel Centrino]]&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
*http://www.cpubenchmark.net/cpu_lookup.php?cpu=Intel+Atom+N450+%40+1.66GHz&lt;br /&gt;
*http://www.intel.com/espanol/pressroom/releases/2008/0303.htm&lt;br /&gt;
*http://www.intel.com/espanol/technology/atom/&lt;br /&gt;
http://www.anandtech.com/showdoc.aspx?i=3276&amp;amp;p=9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Intel-atom.jpg&amp;diff=1228451</id>
		<title>Archivo:Intel-atom.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Intel-atom.jpg&amp;diff=1228451"/>
		<updated>2011-12-02T13:31:53Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sumario ==&lt;br /&gt;
&lt;br /&gt;
== Estado de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228437</id>
		<title>Intel Atom</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Atom&amp;diff=1228437"/>
		<updated>2011-12-02T13:29:49Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: Página creada con '{{Desarrollo}} {{Ficha Hardware | nombre          = Intel® Atom™. | imagen          = Una imagen para mostrar en el infobox. | pie         = Pie de la imagen. | fecha-invenci...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Desarrollo}}&lt;br /&gt;
{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel® Atom™.&lt;br /&gt;
| imagen          = Una imagen para mostrar en el infobox.&lt;br /&gt;
| pie         = Pie de la imagen.&lt;br /&gt;
| fecha-invención = Fecha de Invención.&lt;br /&gt;
| nombre-inventor = Nombre del Inventor.&lt;br /&gt;
| conn1           = A que se conecta el dispositivo. (rango 1-3)&lt;br /&gt;
| via1_1          = Posible interface para conexión. (rango 1-9)&lt;br /&gt;
| nombre-clase    = Nombre de subclase.&lt;br /&gt;
| clase1          = Primer valor en la subclase. (rango 1-5)&lt;br /&gt;
| manuf1          = Fabricantes comunes del dispositivo. (rango 1-5)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel® Atom™''' es el nombre de una nueva familia de [[microprocesadores]] [[x86]] y [[x86-64]] de [[Intel]] basado en la microarquitectura de [[45nm]] y [[32nm]], de consumo eficiente de energía diseñados específicamente para dispositivos móviles para [[Internet]] (Mobile Internet Devices, [[MID]], por sus siglas en inglés) y una nueva clase de computadoras económicas y sencillas centradas en Internet.&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218299</id>
		<title>Tortuga de ciénaga común</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218299"/>
		<updated>2011-11-29T20:22:13Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Animal&lt;br /&gt;
|nombre=Tortuga de Ciénaga Común&lt;br /&gt;
|imagen=tortuga de cienaga comun.jpeg&lt;br /&gt;
|nombre científico=Kinosternon subrubrum&lt;br /&gt;
|reino=[[Animalia]]&lt;br /&gt;
|filo=[[Chordata]]&lt;br /&gt;
|clase=Reptilia&lt;br /&gt;
|orden=[[Testudines]]&lt;br /&gt;
|familia=Kinosternidae&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Tortuga de Ciénaga Común''' (Kinosternon subrubrum) es una de las Tortugas de Ciénaga (Familia Kinosternidae) en el género Kinosternon. Esta tortuga es natural de los [[Estados Unidos]]. Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== Distribución: ==&lt;br /&gt;
Esta tortuga es natural de los Estados Unidos. Su distribución comprende desde los estados de Connecticut e Illinois hasta la costa del [[Golfo de México]], desde [[Florida]] hasta [[Texas]]. Se le considera común en ciertas partes.&lt;br /&gt;
 &lt;br /&gt;
== Hábitat: ==&lt;br /&gt;
Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== ALIMENTACIÓN: ==&lt;br /&gt;
Ponen de tres a cinco huevos. Una hembra puede poner varias veces en un año. La incubación toma de tres a cuatro meses.&lt;br /&gt;
 &lt;br /&gt;
== Descripción: ==&lt;br /&gt;
El carapacho logra una longitud de 7.5 a 12.4 cm. El peto tiene dos charnelas.&lt;br /&gt;
 &lt;br /&gt;
== Otros nombres:==&lt;br /&gt;
A la Tortuga de Ciénaga Común también se le llama “Tortuga de Cieno” y “Morrocoy Común”.&lt;br /&gt;
En inglés se le conoce por “Common Mud Turtle”.&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/index.htm  www.damisela.com]&lt;br /&gt;
*[http://www.grupos.emagister.com www.grupos.emagister]&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/taxa.htm toxonomia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ecología_animal]] [[Category:Reptiles]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218307</id>
		<title>Tortuga de ciénaga común</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218307"/>
		<updated>2011-11-29T19:05:31Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* ALIMENTACIÓN: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Animal&lt;br /&gt;
|nombre=Tortuga de Ciénaga Común&lt;br /&gt;
|imagen=tortuga de cienaga comun.jpeg&lt;br /&gt;
|nombre científico=Kinosternon subrubrum&lt;br /&gt;
|reino=[[Animalia]]&lt;br /&gt;
|filo=[[Chordata]]&lt;br /&gt;
|clase=Reptilia&lt;br /&gt;
|orden=[[Testudines]]&lt;br /&gt;
|familia=Kinosternidae&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Tortuga de Ciénaga Común''' (Kinosternon subrubrum) es una de las Tortugas de Ciénaga (Familia Kinosternidae) en el género Kinosternon. Esta tortuga es natural de los [[Estados Unidos]]. Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== Distribución: ==&lt;br /&gt;
Esta tortuga es natural de los Estados Unidos. Su distribución comprende desde los estados de Connecticut e Illinois hasta la costa del [[Golfo de México]], desde [[Florida]] hasta [[Texas]]. Se le considera común en ciertas partes.&lt;br /&gt;
 &lt;br /&gt;
== Hábitat: ==&lt;br /&gt;
Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== Alimentación: ==&lt;br /&gt;
Ponen de tres a cinco huevos. Una hembra puede poner varias veces en un año. La incubación toma de tres a cuatro meses.&lt;br /&gt;
&lt;br /&gt;
== Descripción: ==&lt;br /&gt;
El carapacho logra una longitud de 7.5 a 12.4 cm. El peto tiene dos charnelas.&lt;br /&gt;
 &lt;br /&gt;
== Otros nombres:==&lt;br /&gt;
A la Tortuga de Ciénaga Común también se le llama “Tortuga de Cieno” y “Morrocoy Común”.&lt;br /&gt;
En inglés se le conoce por “Common Mud Turtle”.&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/index.htm  www.damisela.com]&lt;br /&gt;
*[http://www.grupos.emagister.com www.grupos.emagister]&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/taxa.htm toxonomia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ecología_animal]] [[Category:Reptiles]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218277</id>
		<title>Tortuga de ciénaga común</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Tortuga_de_ci%C3%A9naga_com%C3%BAn&amp;diff=1218277"/>
		<updated>2011-11-29T19:03:14Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Animal&lt;br /&gt;
|nombre=Tortuga de Ciénaga Común&lt;br /&gt;
|imagen=tortuga de cienaga comun.jpeg&lt;br /&gt;
|nombre científico=Kinosternon subrubrum&lt;br /&gt;
|reino=[[Animalia]]&lt;br /&gt;
|filo=[[Chordata]]&lt;br /&gt;
|clase=Reptilia&lt;br /&gt;
|orden=[[Testudines]]&lt;br /&gt;
|familia=Kinosternidae&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Tortuga de Ciénaga Común''' (Kinosternon subrubrum) es una de las Tortugas de Ciénaga (Familia Kinosternidae) en el género Kinosternon. Esta tortuga es natural de los [[Estados Unidos]]. Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== DISTRIBUCIÓN: ==&lt;br /&gt;
Esta tortuga es natural de los Estados Unidos. Su distribución comprende desde los estados de Connecticut e Illinois hasta la costa del [[Golfo de México]], desde [[Florida]] hasta [[Texas]]. Se le considera común en ciertas partes.&lt;br /&gt;
 &lt;br /&gt;
== HÁBITAT: ==&lt;br /&gt;
Habita en los depósitos de agua de poca corriente con fondos fangosos y mucha vegetación acuática.&lt;br /&gt;
 &lt;br /&gt;
== ALIMENTACIÓN: ==&lt;br /&gt;
Ponen de tres a cinco huevos. Una hembra puede poner varias veces en un año. La incubación toma de tres a cuatro meses.&lt;br /&gt;
 &lt;br /&gt;
DESCRIPCIÓN:&lt;br /&gt;
El carapacho logra una longitud de 7.5 a 12.4 cm. El peto tiene dos charnelas.&lt;br /&gt;
 &lt;br /&gt;
OTROS NOMBRES:&lt;br /&gt;
A la Tortuga de Ciénaga Común también se le llama “Tortuga de Cieno” y “Morrocoy Común”.&lt;br /&gt;
En inglés se le conoce por “Common Mud Turtle”.&lt;br /&gt;
== Fuente ==&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/index.htm  www.damisela.com]&lt;br /&gt;
*[http://www.grupos.emagister.com www.grupos.emagister]&lt;br /&gt;
*[http://www.damisela.com/zoo/rep/tortugas/cripto/kino/subrubrum/taxa.htm toxonomia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ecología_animal]] [[Category:Reptiles]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Steve_Jobs&amp;diff=1203985</id>
		<title>Steve Jobs</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Steve_Jobs&amp;diff=1203985"/>
		<updated>2011-11-25T16:26:33Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
{{Ficha Persona&lt;br /&gt;
|nombre       = Steven Paul Jobs&lt;br /&gt;
|nombre completo = Steven Paul Jobs&lt;br /&gt;
|otros nombres = &lt;br /&gt;
|imagen       = Jobs_steve.jpg&lt;br /&gt;
|descripción  = Informático y empresario estadounidense.&lt;br /&gt;
|fecha de nacimiento = [[24 de febrero]] de [[1955]]&lt;br /&gt;
|lugar de nacimiento = [[Los Altos]], [[California]], {{Bandera2|Estados Unidos}}&lt;br /&gt;
|fecha de fallecimiento = [[5 de octubre]] de [[2011]] &amp;lt;ref name=&amp;quot;cubadebate&amp;quot;&amp;gt;[http://www.cubadebate.cu/noticias/2011/10/05/murio-steve-jobs-fundador-de-apple/ Murió Steve Jobs, fundador de Apple]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|lugar de fallecimiento = [[Los Ángeles]], [[California]], {{Bandera2|Estados Unidos}}&lt;br /&gt;
|causa muerte = Cáncer&lt;br /&gt;
|residencia   = &lt;br /&gt;
|nacionalidad = &lt;br /&gt;
|ciudadania   = &lt;br /&gt;
|educación    = &lt;br /&gt;
|alma máter   = [[Universidad de Berkeley]]&lt;br /&gt;
|ocupación    = Informático&lt;br /&gt;
|conocido     = &lt;br /&gt;
|titulo       = Presidente de [[Apple Computer]]&lt;br /&gt;
|termino      = [[1996]] - [[2011]]&lt;br /&gt;
|predecesor   = [[Michael Spindler]]&lt;br /&gt;
|sucesor      = [[Tim Cook]]&lt;br /&gt;
|partido político = &lt;br /&gt;
|cónyuge      = [[Laurene Powell]]&lt;br /&gt;
|hijos        = &lt;br /&gt;
|padres       = &lt;br /&gt;
|familiares   = &lt;br /&gt;
|obras        = &lt;br /&gt;
|premios      = &lt;br /&gt;
|web          = &lt;br /&gt;
}}'''Steven Paul Jobs.''' Informático y empresario estadounidense. Padre del primer ordenador personal (el [[Apple I]]) y fundador de [[Apple Computer]], probablemente la empresa más innovadora del sector, este mago de la [[informática|Informática]] es una de figuras más influyentes de la escena tecnológica actual.&lt;br /&gt;
&lt;br /&gt;
== Síntesis biográfica ==&lt;br /&gt;
&lt;br /&gt;
=== inicios===&lt;br /&gt;
&lt;br /&gt;
Nació en [[Los Altos]], [[California]], [[Estados Unidos]] el [[24 de febrero]] de [[1955]]. De pequeño (con menos de un año) fue adoptado por un electricista, Paul, también californiano, que junto a la esposa, Clara, le educaron lo mejor que pudieron. Los padres biológicos se sabe que el padre era [[egipcio|Egipcio]] la [[madre|Madre]] [[americana|Americana]].&lt;br /&gt;
&lt;br /&gt;
Al terminar el bachiller en el instituto [[Homestead High School]] de [[Mountain View]], ingresó en la [[Reed College]] en [[Portland]], [[Oregón]], pero abandonó los estudios universitarios un semestre más tarde. En esa usó [[drogas|Drogas]] y se interesó por la [[filosofía|Filosofía]] y la contracultura, llegando a viajar a la [[India]] en busca de [[iluminación|Iluminación]] espiritual.&lt;br /&gt;
&lt;br /&gt;
=== Inicios profesionales ===&lt;br /&gt;
&lt;br /&gt;
Tras unas prácticas en la empresa [[Hewlett-Packard]] en Palo Alto, en [[1974]] Jobs fue contratado por [[Atari Inc]] con solo 19 años como diseñador de videojuegos (aunque por un breve periodo de tiempo).&lt;br /&gt;
&lt;br /&gt;
De vuelta a [[California]] pasa a integrar el elitista grupo de [[Homebrew Computer Club]] al que pertenecía [[Stephen Wozniak|Wozniak]]. Fue entonces cuando Wozniak y él se pusieron manos a la obra para fabricar un ordenador personal a petición de Jobs, ya que a este último no le entusiasmaba eso de crear gadgets. Corría el año 1976 y ambos se encontraban estudiando en la [[Universidad de Berkeley]]. Después de presentar su invento en la Universidad y ver su éxito, comienzan a fabricar ordenadores a mano en el garaje de la casa de Jobs, después de vender algunas de sus posesiones más preciadas (Jobs vendió su Volkswagen y Wozniak su calculadora científica HP) con la intención de dedicarse a la venta de ordenadores personales, de esta manera nacía la [[Apple I]].&lt;br /&gt;
&lt;br /&gt;
=== Apple Computer ===&lt;br /&gt;
&lt;br /&gt;
En [[1976]], con el dinero obtenido en la venta de la furgoneta Volkswagen, fundaron la empresa [[Apple Computer]], con sede en el garaje de la familia Jobs. Steve Jobs eligió el nombre Apple como un recuerdo de los tiempos en que trabajaba en la recolección de su fruta favorita, la manzana.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Old_applel_ogo.jpg|200px|thumb|right|Primer logotipo de Apple]]El nombre de Apple no tiene otro significado para Jobs salvo que la manzana es su fruta favorita; aunque rondan informaciones en la red que afirman que Jobs eligió ese nombre para honrar un fantástico verano que pasó en Oregon en el que trabajó en la huerta. El logotipo original de Apple era poco imaginativo, mostrando a alguien debajo de un manzano, pero al poco se les ocurrió presentar la manzana del arco iris, que ha permanecido como la marca mas conocida en la industria IT. Con el paso del tiempo, la manzanita evolucionó y se convirtió en un diseño mucho más moderno y de mejor estética.&lt;br /&gt;
&lt;br /&gt;
==== Apple I ====&lt;br /&gt;
&lt;br /&gt;
Tras vender 25 unidades de [[Apple I]] en una tienda de &amp;quot;Do it yourself&amp;quot;, en la que consiguió que se los pagaran al contado, convirtió el garaje de la casa de sus padres (2066 Crist Drive de Los Altos, California) en la zona de montaje de ordenadores, y la sala de estar en la zona de embalaje y recepción. A lo largo de la última mitad de [[1976]], Wozniak ya estaba preparando una sorpresa: la [[Apple II]], cuyas características principales se resumían en un diseño más elegante y una máquina totalmente ensamblada que apenas pesaba 5 kilogramos y medio. Así, Jobs lideraba una revolución de hardware reduciendo considerablemente el tamaño del ordenador a una pequeña caja. [[Lisa]], fue el primer ordenador personal fabricado en serie por la compañía Apple con un interfaz gráfico para el usuario (GUI), que salió al mercado en mayo de [[1977]].&lt;br /&gt;
&lt;br /&gt;
==== Apple II ====&lt;br /&gt;
&lt;br /&gt;
El [[Apple II]] se convirtió en el primer ordenador de consumo masivo. Los pedidos llovieron y Apple pasó a ser la empresa de mayor crecimiento en Estados Unidos. Tres años después, Apple salió a la Bolsa con un precio de 22 dólares por acción, lo que convirtió a Jobs y Wozniak en millonarios. Por entonces, Jobs adquirió la fama de hombre genial, dotado de una creatividad que le permitía construir un ordenador y a la vez comercializarlo.&lt;br /&gt;
&lt;br /&gt;
Al público le gustaba su diseño, su innovación y su fiabilidad. El crecimiento de la empresa fue tan rápido que en [[1983]] la Apple ya facturaba 2000 millones de dólares, y como dato curioso Apple II se estuvo vendiendo en el mercado hasta el año 93, convirtiéndose en el ordenador más longevo de la historia. Además aparece por primera vez en la historia de los ordenadores la utilísima papelera.&lt;br /&gt;
&lt;br /&gt;
==== Macintosh ====&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Jobs_wozniak.jpg|200px|thumb|right|Steve Jobs y Wozniak hacia [[1977]]]]En diciembre de [[1979]] Jobs y su equipo visitaron el centro de investigación de Xerox donde tuvieron conocimiento de un prototipo que funcionaba con un entorno gráfico y un ratón. Esta visita le dio una idea revolucionaria; cogió a su equipo de ingenieros, se mudaron a un edificio que llamaron Siberia, colgaron una bandera pirata y se pusieron a trabajar 90 horas semanales en el ordenador que iba a cambiar para siempre la informática personal: el [[Macintosh]]. Era un ordenador sencillo, limpio, divertido. Tenía un sistema gráfico conocido como &amp;quot;WYSIWYG&amp;quot; (What You See is What You Get, lo que ves es lo que tienes) que permitía trabajar a través de iconos, algo impensable en esos momentos; mostraba un reloj cuando había que esperar y una bomba cuando el sistema se caía. La revolución. El Mac se convirtió en símbolo de la juventud, de rebeldía y de modernidad. Se puso de moda.&lt;br /&gt;
&lt;br /&gt;
Macintosh sería el primer ordenador asequible y fácil de manejar sin necesidad de saber informática, por lo que a Jobs se le considera el verdadero creador del concepto de [[PC]] (&amp;quot;Personal Computer&amp;quot;, ordenador personal). El lanzamiento del Macintosh en [[1984]] supuso un vuelco en la industria informática. Su gran innovación fue la introducción del ratón para desarrollar funciones haciendo clic sobre las ventanas que se abren en la pantalla, lo que facilita la interacción entre el usuario y el ordenador. En este sentido, Jobs realizó una gran contribución a la introducción de los ordenadores personales en la enseñanza.&lt;br /&gt;
&lt;br /&gt;
==== Cambios en Apple Computer ====&lt;br /&gt;
&lt;br /&gt;
Pero las ilusiones puestas en Macintosh no se materializaron tal y como pensaban, más que nada porque no habían tenido en cuenta a la competencia y la importancia de la compatibilidad. Y es que en [[1981]] [[IBM]] saca también al mercado su primer ordenador personal o PC. Los clónicos de IBM con el sistema operativo de [[Microsoft]] en su interior ([[MS-DOS]]) comenzaron a venderse como rosquillas, ya que funcionaban como se suponía que debía funcionar un ordenador y no de la forma transgresora que presentaba Jobs. Y Apple jamás se recuperaría de esta crisis. Los Pcs compatibles coparían el 90% del mercado, mientras que Apple se tuvo que conformar con el 10% restante, teniendo que retirar además una desastrosa [[Apple III]] que salió técnicamente defectuosa. Se retiraron más de 14.000 máquinas y posteriormente lanzarían la [[Apple III Plus]] ([[1983]]) que tan solo estuvo en el mercado durante 4 meses. Su mejora, por tanto, llegó demasiado tarde y el público la rechazó.&lt;br /&gt;
&lt;br /&gt;
Con el ánimo de mantener la competitividad de su empresa, Jobs decidió reclutar para la presidencia de Apple al entonces presidente de [[Pepsi Co.]], [[John Sculley]], sin saber que éste le acabaría echándole de su propia empresa.&lt;br /&gt;
 &lt;br /&gt;
Sculley, un ejecutivo de la vieja guardia, chocaba con la rebeldía y las maneras heterodoxas de Jobs. Las discusiones entre Sculley y Jobs se sucedían día sí día también, así que este solicitó el apoyo del Consejo de Administración quién le dio toda su confianza, y le permitió quitar responsabilidad de mando a Jobs, dejando Apple en mayo de [[1985]], quedándose la manzana sin su corazón, como comentaron algunos. Jobs tenía 31 años.&lt;br /&gt;
&lt;br /&gt;
=== NextStep Inc ===&lt;br /&gt;
&lt;br /&gt;
El resultado de ambos conflictos personales fue que Wozniak se marchó de Apple en [[1985]], año en que fueron despedidos 1200 empleados a raíz de una amplia reestructuración en la empresa, y Jobs dimitió para fundar la empresa [[NeXT Corporation]] en [[1989]].&lt;br /&gt;
&lt;br /&gt;
El mismo año NextStep lanzó su primer ordenador, repleto de funciones extraordinarias pero que no resultó rentable por su elevado precio y su incompatibilidad con la mayoría de los sistemas en el mercado. Finalmente, el visionario Jobs cerró la división de ordenadores en [[1993]], con el mérito de haber creado el aparato con el que el programador británico [[Tim Berners-Lee]] ideó la [[World Wibe Web]], que sería la base del desarrollo y popularización de [[Internet]]. &lt;br /&gt;
&lt;br /&gt;
En [[1991]] Steve se casó con [[Laurene Powell]] con la que tuvo 4 hijos.&lt;br /&gt;
&lt;br /&gt;
Tras la creación de NeXT Corporation Jobs compró a [[George Lucas]] por 50 millones de dólares la división de animación de su imperio [[Lucas Film]]. Así nacieron en los [[Pixar|Estudios de Animación Pixar]], que recibieron un premio de la Academia de Cine por la película de animación por ordenador [[Tin Toy]] en [[1989]]. &lt;br /&gt;
&lt;br /&gt;
En [[1995]] Pixar lanzó [[Toy Story]], una producción conjunta con [[Walt Disney]] que ya forma parte de la historia del cine por ser el primer largometraje realizado íntegramente por ordenador. La película fue un éxito de taquilla y obtuvo un Oscar de la Academia de [[Hollywood]]. Bichos fue el siguiente gran éxito de Pixar.&lt;br /&gt;
&lt;br /&gt;
=== Apple y Microsoft ===&lt;br /&gt;
&lt;br /&gt;
Entretanto, Apple decaía tras el lanzamiento de los ordenadores compatibles IBM equipados con el sistema operativo [[Windows]], de [[Microsoft]], que según varios expertos se inspiró en el Macintosh de Apple. La enemistad entre Steve Jobs y [[Bill Gates]], dos personalidades contrapuestas, fue el tema de una película televisiva titulada ''Piratas del Silicon Valley'', producida en [[1998]] por la cadena TNT. &lt;br /&gt;
&lt;br /&gt;
=== Regreso a Apple ===&lt;br /&gt;
&lt;br /&gt;
En 1993 con una fuerte caída en la rentabilidad de Apple, Sculley, se vió obligado a renunciar, siendo reemplazado por [[Michael Spindler|Michael &amp;quot;Diesel&amp;quot; Spindler]] que permaneció en Apple hasta [[1996]], época en la que Apple mantenía pérdidas de miles de millones de dólares y su cuota de mercado había bajado al 3–4%. &lt;br /&gt;
&lt;br /&gt;
En diciembre de [[1996]] Apple decidió comprar Next, lo que supuso la vuelta de Jobs a la empresa con un cargo de asesor interino, por el que Jobs, voluntariamente, no recibía ningún salario. La dimisión del presidente de Apple encumbró nuevamente a Jobs al frente de la compañía. En agosto de [[1997]], un mes antes de su nombramiento como presidente provisional de Apple, Jobs anunció un acuerdo con su hasta entonces rival Microsoft, que decidió invertir 150 millones de dólares en Apple. Las dos compañías acabaron comprendiendo que se necesitaban y se complementaban, pues Microsoft es el principal fabricante de programas para Macintosh, y Apple uno de los principales testigos del juicio antimonopolio contra la empresa de Bill Gates en EE.UU. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Steve_Jobs_iMac.jpg|200px|thumb|right|Jobs mostrando una iMac]]En [[1998]], Jobs volvió a dar la vuelta al mercado informático con el lanzamiento del [[iMac]], un PC compacto y transparente, que además de su diseño vanguardista está preparado para navegar en Internet. Su éxito de ventas ha colocado a Apple nuevamente entre los cinco mayores fabricantes de ordenadores personales de EE.UU, con una revalorización de sus acciones en un 50%. El iMac fue un ordenador revolucionario, no sólo por sus cualidades técnicas, sino sobre todo por su innovador diseño. Diseño que trasladaría posteriormente a los ordenadores portátiles con el lanzamiento del [[iBook]] (septiembre de [[1999]]).&lt;br /&gt;
&lt;br /&gt;
El mercado profesional fue el siguiente objetivo de Apple. En septiembre de 1999 llegaron los primeros [[Ordenador G4|G4]], ordenadores dedicados especialmente a los campos de diseño gráfico y multimedia. Su complemento en equipos portátiles fue el [[Titanium]]. Con motivo de la [[MacWorld Expo]] de [[2001]] se produce el lanzamiento del [[Powerbook G4]]. En [[2002]] se verían avances tales como el iMac de 17 pulgadas o el [[Power Mac G4]] con procesador dual.&lt;br /&gt;
&lt;br /&gt;
En [[2003]] se puso en marcha en internet una campaña para convencer a Jobs de que se presentara como candidato a Presidente de los [[Estados Unidos]]. La campaña no fracasó por falta de interés, ya que la web tuvo más de 10 000 visitas en 10 minutos, sino porque Jobs no estaba interesado en la propuesta. Dijo sentirse muy halagado por el apoyo, pero afirmó que no tenía tiempo para ello. Apple, con Jobs a la cabeza, lidera actualmente la revolución de la música digital con su reproductor de música portátil [[iPod]] y la tienda online de música [[iTunes]].&lt;br /&gt;
&lt;br /&gt;
A partir del año [[2000]] en que se publica la beta pública original del sistema operativo Mac OS y a excepción de dicha versión y la del Mac OS X Server 1.0, han sido publicadas diferentes versiones del Mac OS X todas con nombres de grandes felinos, estos nombres son a lo interno de Apple:&lt;br /&gt;
&lt;br /&gt;
*10.0(Cheetah, Leopardo pequeño)&lt;br /&gt;
*10.1(Puma,Puma )&lt;br /&gt;
*10.2(Jaguar, Jaguar)&lt;br /&gt;
*10.3(Panther, Pantera)&lt;br /&gt;
*10.4(Tiger, Tigre)&lt;br /&gt;
*10.5(Leopard, Leopardo)&lt;br /&gt;
*10.6(Snow Leopard, Leopardo nieve)&lt;br /&gt;
*10.7(Lion, Leon)&lt;br /&gt;
&lt;br /&gt;
En el [[2004]] se le detecta a Jobs un tumor cancerígeno en el páncreas. Jobs fue operador a finales de julio de ese año en una operación sin complicaciones, y de la que volvió a la normalidad apenas un mes después.&lt;br /&gt;
&lt;br /&gt;
== Premios y reconocimientos ==&lt;br /&gt;
&lt;br /&gt;
*En reconocimiento a su pionero trabajo en el mundo de la tecnología fue galardonado con la Medalla Nacional de Tecnología en [[1985]] por el Presidente [[Ronald Reagan]], y obtuvo el [[Premio Jefferson]] al servicio público en [[1987]].&lt;br /&gt;
*En [[1989]] fue nombrado &amp;quot;Empresario de la Década&amp;quot; en una revista.&lt;br /&gt;
*Candidato al [[Premio Príncipe de Asturias]] de Investigación Científica y Técnica en [[2004]].&lt;br /&gt;
*En 2004 obtuvo el Premio al Visionario del Año en los premios Billboard de entretenimiento digital y Apple fue reconocida como Marca del Año.&lt;br /&gt;
&lt;br /&gt;
== Años finales y muerte ==&lt;br /&gt;
&lt;br /&gt;
En el [[2009]], Jobs se sometió a un transplante de hígado y, aunque regresó al trabajo,debió alejarse finalmente de él a inicios del [[2011]] y depositar en [[Tim Cook]] la dirección de su compañía.&lt;br /&gt;
&lt;br /&gt;
El [[5 de octubre]] de [[2011]] se daba a conocer al mundo de la muerte de Jobs debido al cáncer. El [http://www.apple.com/ sitio web de Apple] daba a conocer un mensaje en su honor: {{Sistema:Cita|Apple ha perdido a un genio creativo y visionario y el mundo ha perdido a un asombroso ser humano. Aquellos de nosotros que hemos tenido la suficiente fortuna de conocer y trabajar con Steve, hemos perdido a un querido amigo y un&lt;br /&gt;
mentor inspirador. Steve deja atrás una compañía que solo él pudo haber construido y su espíritu será siempre la base de Apple.&amp;lt;ref name=&amp;quot;cubadebate&amp;quot;/&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Murió a los 56 años, en su casa en Palo Alto, [[California]], cerca de las 15.00 hora local. El certificado indica dictado por el Departamento de Salud Pública del Condado Santa Clara como: &amp;quot;paro respiratorio&amp;quot; como la causa inmediatde la muerte con &amp;quot;metástasis de tumor neuroendocrino de páncreas&amp;quot; como la condición subyacente que provocó los problemas respiratorios. Fue sepultado el [[viernes]] [[7 de octubre]] del 2011, en un [[Cementerio]] no confesional en Palo Alto. Estaba rodeado por la esposa y familia cercana cuando falleció.&lt;br /&gt;
&lt;br /&gt;
== Otros aspectos de la vida de Jobs ==&lt;br /&gt;
&lt;br /&gt;
Al morir un hombre famoso salen a la luz publica una serie de aspectos que hasta ese entonces eran desconocidas, a continución se relacionan algunas de ellas.&lt;br /&gt;
&lt;br /&gt;
=== Raices desconocidas=== &lt;br /&gt;
&lt;br /&gt;
Según Business Insider, el padre biológico era un estudiante de postgrado de origen sirio llamado Abdulfattah Jandali. Jobs nació de la relación de Jandali con una compañera de clase, Joanne Carole Schieble. Como eran demasiado jóvenes, lo dieron en adopción, al hogar de Paul y Clara Jobs. Siendo adulto se enteró de que la novelista [[Mona Simpson]] (Mona Jandali al nacer), era su hermana pequeña. Tras reunirse, se convirtieron en íntimos, como reconoció la propia Mona en varias entrevistas.&lt;br /&gt;
&lt;br /&gt;
Antes de que naciese el primer hijo, negó la paternidad aduciendo que era estéril, pero posteriormente reconoció al hijo y se convirtió en un gran padre.&lt;br /&gt;
&lt;br /&gt;
=== Otras curiosidades=== &lt;br /&gt;
&lt;br /&gt;
A diferencia de los otros grandes gurús de la tecnología, como [[Bill Gates]] y [[Mark Zuckerberg]], Jobs nunca terminó la universidad. Pasó por el Reed College de Portland ([[Oregón]]), pero lo dejó tras un semestre. Sin embargo, eso no le impidió ser el creador de uno de los juegos más populares y adictivos de todos los tiempos, el [[Breackout]]; diseñó para la primera generación de [[Atari]] este divertido programa, en el que moviendo una barra y con la ayuda de una [[pelota]] se rompe una especie de ladrillos. &lt;br /&gt;
&lt;br /&gt;
===Economía de Jobs===&lt;br /&gt;
&lt;br /&gt;
A pesar de ser el Director Ejecutivo de la compañía más valiosa del mundo, Steve Jobs se atribuyó un salario pírrico y cómico de 1 dólar anual, desde [[1997]], año que alcanzó el cargo. Poseía antes de fallecer 5,5 millones de acciones en Apple, valoradas cada una en 377,64 dólares ayer, lo que suponen poco más de 2.000 millones de dólares. Deja tras de sí una vasta fortuna. Ocupaba el puesto número 110 entre las personas más ricas del mundo en 2011, con un valor neto de 8.300 millones de dólares.&lt;br /&gt;
&lt;br /&gt;
===Monje===&lt;br /&gt;
&lt;br /&gt;
Ya adulto decide hacerse pescetariano —es decir, come lo mismo que un vegetariano, además de pescado— y cambió su fe por el budismo zen, hasta el punto de que ha confesado que en alguna ocasión pensó en ir a un monasterio y hacerse monje. Sin embargo, parece que su renovada espiritualidad no ha cambiado la decisión de romper con los programas benéficos de Apple.&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
&lt;br /&gt;
*[http://www.es.finance.yahoo.com/noticias/Diez-cosas-no-sabes-Steve-economia-2247958005.html?x=0Diez Cosas que no sabes de Steve Jobs]. Consultado el 8 de octubre de 2011&lt;br /&gt;
&lt;br /&gt;
==Referencia==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.biografiasyvidas.com/biografia/j/jobs.htm Biografía de Steve Jobs]&lt;br /&gt;
*[http://www.laflecha.net/perfiles/tecnologia/steve_jobs Un genio con carisma: Steve Jobs]&lt;br /&gt;
*[http://es.noticias.yahoo.com/steve-jobs-muri%C3%B3-paro-respiratorio-y-un-tumor-051717658.html &lt;br /&gt;
Steve Jobs murió de paro respiratorio y de un tumor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Informático]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=892132</id>
		<title>Usuario:Lsuarezmtzjc</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=892132"/>
		<updated>2011-09-12T15:59:15Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Contribuciones realizadas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
{{Ficha_Usuario_(avanzada)&lt;br /&gt;
|imagen= Lsuarez.png&lt;br /&gt;
|apellidos= Suárez Izquierdo&lt;br /&gt;
|nombre= Leodán&lt;br /&gt;
|nivel= Universitario&lt;br /&gt;
|título= Ingeniero en Ciencias Informáticas.&lt;br /&gt;
|postgrado= No&lt;br /&gt;
|temas= Software, Hardware, Programación, Tecnologías.&lt;br /&gt;
|institución= {{Usuario:Etiquetas/JCCE}}&lt;br /&gt;
|municipio= [[Colón]]&lt;br /&gt;
|provincia= [[Matanzas]]&lt;br /&gt;
|país=Cuba&lt;br /&gt;
|seguimiento=&lt;br /&gt;
|colaboradores=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;width: 148px; height: 68px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Acerca de mi.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/Mozilla}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/EcuRed}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
'''Leodán Suárez Izquierdo''', instructor de Joven Club de Computación y Electrónica Colón I, Matanzas. &lt;br /&gt;
&lt;br /&gt;
== Contribuciones realizadas ==&lt;br /&gt;
&lt;br /&gt;
*[[Xbox]]&lt;br /&gt;
*[[Turbo Boost]]&lt;br /&gt;
*[[X86]]&lt;br /&gt;
*[[SSE]] &lt;br /&gt;
*[[SSE2]]&lt;br /&gt;
*[[SSE3]]&lt;br /&gt;
*[[SSSE3]]&lt;br /&gt;
*[[SSE4]]&lt;br /&gt;
*[[SpeedStep]]&lt;br /&gt;
&lt;br /&gt;
== Artículos en desarrollo  ==&lt;br /&gt;
*[[Virtualización x86]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=892120</id>
		<title>Usuario:Lsuarezmtzjc</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuario:Lsuarezmtzjc&amp;diff=892120"/>
		<updated>2011-09-12T15:58:13Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
{{Ficha_Usuario_(avanzada)&lt;br /&gt;
|imagen= Lsuarez.png&lt;br /&gt;
|apellidos= Suárez Izquierdo&lt;br /&gt;
|nombre= Leodán&lt;br /&gt;
|nivel= Universitario&lt;br /&gt;
|título= Ingeniero en Ciencias Informáticas.&lt;br /&gt;
|postgrado= No&lt;br /&gt;
|temas= Software, Hardware, Programación, Tecnologías.&lt;br /&gt;
|institución= {{Usuario:Etiquetas/JCCE}}&lt;br /&gt;
|municipio= [[Colón]]&lt;br /&gt;
|provincia= [[Matanzas]]&lt;br /&gt;
|país=Cuba&lt;br /&gt;
|seguimiento=&lt;br /&gt;
|colaboradores=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;width: 148px; height: 68px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Acerca de mi.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/Mozilla}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Usuario:Etiquetas/EcuRed}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
'''Leodán Suárez Izquierdo''', instructor de Joven Club de Computación y Electrónica Colón I, Matanzas. &lt;br /&gt;
&lt;br /&gt;
== Contribuciones realizadas ==&lt;br /&gt;
&lt;br /&gt;
*[[Xbox]]&lt;br /&gt;
*[[Turbo Boost]]&lt;br /&gt;
*[[X86]]&lt;br /&gt;
*[[SSE]] &lt;br /&gt;
*[[SSE2]]&lt;br /&gt;
*[[SSE3]]&lt;br /&gt;
*[[SSSE3]]&lt;br /&gt;
*[[SSE4]]&lt;br /&gt;
&lt;br /&gt;
*[[Intel SpeedStep]]&lt;br /&gt;
&lt;br /&gt;
== Artículos en desarrollo  ==&lt;br /&gt;
*[[Virtualización x86]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=892075</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=892075"/>
		<updated>2011-09-12T15:54:43Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Ventajas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre = Intel SpeedStep Technology.&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''SpeedStep Technology''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador. A veces Enhanced Intel SpeedStep es abreviado en ocasiones como EIST.&lt;br /&gt;
&lt;br /&gt;
==Causas de su implementación==&lt;br /&gt;
Por la necesidad inmediata de extender la vida útil de las baterías para las computadoras portátiles, [[Intel]] incluyó Intel SpeedStep Technology en sus procesadores [[Centrino]]. Esta versión de dicha tecnología solo era capáz de reducir los ciclos del procesador móvil al estar funcionando desconectado el equipo de la red [[CA]].&lt;br /&gt;
Posteriormente fue mejorada, siendo su nuevo nombre Enhanced SpeedStep Technology que ya era capaz de aumentar o disminuir la velocidad según la demanda de las aplicaciones en ejecución.&lt;br /&gt;
&lt;br /&gt;
==Ventajas==&lt;br /&gt;
*Ahorro de energía.&lt;br /&gt;
*Aumento en la vida útil del procesador.&lt;br /&gt;
*Reducción de temperatura dentro del gabinete.&lt;br /&gt;
*Reducción de ruido. Cuando se activa SpeedStep el procesador sufre un descenso de temperatura, esto hace que el ventilador del disipador baja sus revoluciones, generando de esta manera menos ruido. Algunas Mother pueden controlar las revoluciones incluso de los ventilador agregados al gabinete.&lt;br /&gt;
&lt;br /&gt;
==Desventajas==&lt;br /&gt;
*Se cononce que al estar activada disminuye la efectividad cuando se realiza [[Overclocking]].&lt;br /&gt;
*[[Microsoft]] ha repotado deficiencias a la hora de reproducir videos cuando está activado SpeedStep o su equivalente ([[AMD now!]])&lt;br /&gt;
 &lt;br /&gt;
==Sistemas operativos que la soportan==&lt;br /&gt;
*Desde los sistemas operativos [[Windows]] de antaño hasta [[Windows 2000]] solo soportan esta tecnología instalando un driver facilitado por Intel.&lt;br /&gt;
*[[Windows XP]] incluye en su consola de administración de energía el trabajo con SpeedStep.&lt;br /&gt;
*[[Linux]] da soporte completo a tecnología desde su kernel 2.6.&lt;br /&gt;
*[[Mac OS]] da soporte completo en su kernel.&lt;br /&gt;
*[[Solaris]] tiene soporte completo desde [[OpenSolaris]] SXDE 9/07.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
*[http://www.phoronix.com/scan.php?page=article&amp;amp;item=397&amp;amp;num=1 Phoronix] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891967</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891967"/>
		<updated>2011-09-12T15:45:15Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre = Intel SpeedStep Technology.&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''SpeedStep Technology''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador. A veces Enhanced Intel SpeedStep es abreviado en ocasiones como EIST.&lt;br /&gt;
&lt;br /&gt;
==Causas de su implementación==&lt;br /&gt;
Por la necesidad inmediata de extender la vida útil de las baterías para las computadoras portátiles, [[Intel]] incluyó Intel SpeedStep Technology en sus procesadores [[Centrino]]. Esta versión de dicha tecnología solo era capáz de reducir los ciclos del procesador móvil al estar funcionando desconectado el equipo de la red [[CA]].&lt;br /&gt;
Posteriormente fue mejorada, siendo su nuevo nombre Enhanced SpeedStep Technology que ya era capaz de aumentar o disminuir la velocidad según la demanda de las aplicaciones en ejecución.&lt;br /&gt;
&lt;br /&gt;
==Ventajas==&lt;br /&gt;
*Ahorro de energía.&lt;br /&gt;
*Aumento en la vida útil del procesador.&lt;br /&gt;
*Reducción de temperatura dentro del gabinete.&lt;br /&gt;
*Reducción de ruido. Cuando se activa SpeedStep el procesador sufre un descenso de temperatura, esto hace que el ventilador del disipador baja sus revoluciones, generando de esta manera menos ruido. Algunas Mother pueden controlar las revoluciones incluso de los ventilador agregados al gabinete.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Desventajas==&lt;br /&gt;
*Se cononce que al estar activada disminuye la efectividad cuando se realiza [[Overclocking]].&lt;br /&gt;
*[[Microsoft]] ha repotado deficiencias a la hora de reproducir videos cuando está activado SpeedStep o su equivalente ([[AMD now!]])&lt;br /&gt;
 &lt;br /&gt;
==Sistemas operativos que la soportan==&lt;br /&gt;
*Desde los sistemas operativos [[Windows]] de antaño hasta [[Windows 2000]] solo soportan esta tecnología instalando un driver facilitado por Intel.&lt;br /&gt;
*[[Windows XP]] incluye en su consola de administración de energía el trabajo con SpeedStep.&lt;br /&gt;
*[[Linux]] da soporte completo a tecnología desde su kernel 2.6.&lt;br /&gt;
*[[MacOS]] da soporte completo en su kernel.&lt;br /&gt;
*[[Solaris]] tiene soporte completo desde [[OpenSolaris]] SXDE 9/07.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=892030</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=892030"/>
		<updated>2011-09-12T15:40:51Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre = Intel SpeedStep Technology.&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''SpeedStep Technology''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador. A veces Enhanced Intel SpeedStep es abreviado en ocasiones como EIST.&lt;br /&gt;
&lt;br /&gt;
==Causas de su implementación==&lt;br /&gt;
Por la necesidad inmediata de extender la vida útil de las baterías para las computadoras portátiles, [[Intel]] incluyó Intel SpeedStep Technology en sus procesadores [[Centrino]]. Esta versión de dicha tecnología solo era capáz de reducir los ciclos del procesador móvil al estar funcionando desconectado el equipo de la red [[CA]].&lt;br /&gt;
Posteriormente fue mejorada, siendo su nuevo nombre Enhanced SpeedStep Technology que ya era capaz de aumentar o disminuir la velocidad según la demanda de las aplicaciones en ejecución.&lt;br /&gt;
&lt;br /&gt;
==Ventajas==&lt;br /&gt;
*Ahorro de energía.&lt;br /&gt;
*Aumento en la vida útil del procesador.&lt;br /&gt;
*Reducción de temperatura dentro del gabinete.&lt;br /&gt;
*Reducción de ruido. Cuando se activa SpeedStep el procesador sufre un descenso de temperatura, esto hace que el ventilador del disipador baja sus revoluciones, generando de esta manera menos ruido. Algunas Mother pueden controlar las revoluciones incluso de los ventilador agregados al gabinete.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Desventajas==&lt;br /&gt;
*Se cononce que al estar activada disminuye la efectividad cuando se realiza [[Overclocking]].&lt;br /&gt;
*[[Microsoft]] ha repotado deficiencias a la hora de reproducir videos cuando está activado SpeedStep o su equivalente ([[AMD now!]])&lt;br /&gt;
 &lt;br /&gt;
==Sistemas operativos que la soportan==&lt;br /&gt;
*Desde los sistemas operativos [[Windows]] de antaño hasta [[Windows 2000]] solo soportan esta tecnología instalando un driver facilitado por Intel.&lt;br /&gt;
*[[Windows XP]] incluye en su consola de administración de energía el trabajo con SpeedStep.&lt;br /&gt;
*[[Linux]] da soporte completo a tecnología desde su kernel 2.6.&lt;br /&gt;
*[[Mac OS]] da soporte completo en su kernel.&lt;br /&gt;
*[[Solaris]] tiene soporte completo desde [[OpenSolaris]] SXDE 9/07.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
*[http://www.phoronix.com/scan.php?page=article&amp;amp;item=397&amp;amp;num=1 Phoronix] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891684</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891684"/>
		<updated>2011-09-12T15:04:49Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
{{Ficha Hardware&lt;br /&gt;
| nombre = Intel SpeedStep Technology.&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''SpeedStep Technology''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador. A veces Enhanced Intel SpeedStep es abreviado en ocasiones como EIST.&lt;br /&gt;
&lt;br /&gt;
==Causas de su implementación==&lt;br /&gt;
Por la necesidad inmediata de extender la vida útil de las baterías para las computadoras portátiles, [[Intel]] incluyó Intel SpeedStep Technology en sus procesadores [[Centrino]]. Esta versión de dicha tecnología solo era capáz de reducir los ciclos del procesador móvil al estar funcionando desconectado el equipo de la red [[CA]].&lt;br /&gt;
Posteriormente fue mejorada, siendo su nuevo nombre Enhanced SpeedStep Technology que ya era capaz de aumentar o disminuir la velocidad según la demanda de las aplicaciones en ejecución.&lt;br /&gt;
&lt;br /&gt;
==Funcionamiento==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891299</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=891299"/>
		<updated>2011-09-12T14:19:07Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: Enhanced Intel SpeedStep trasladada a SpeedStep: mal clasificado&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre = Enhanced Intel SpeedStep Technology(EIST).&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''Enhanced Intel SpeedStep Technology (EIST)''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Enhanced_Intel_SpeedStep&amp;diff=891300</id>
		<title>Enhanced Intel SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Enhanced_Intel_SpeedStep&amp;diff=891300"/>
		<updated>2011-09-12T14:19:07Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: Enhanced Intel SpeedStep trasladada a SpeedStep: mal clasificado&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECCIÓN [[SpeedStep]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Cadenas_de_Caracteres_en_C%2B%2B&amp;diff=702128</id>
		<title>Cadenas de Caracteres en C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Cadenas_de_Caracteres_en_C%2B%2B&amp;diff=702128"/>
		<updated>2011-06-29T13:56:15Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Uso de strcnpy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Cadenas de Caracteres.&lt;br /&gt;
|imagen=Cadena_de_caracteres.JPG&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto=Una cadena en [[C++]] es un conjunto de caracteres, o valores de tipo &amp;quot;char&amp;quot;, terminados con el carácter nulo. Internamente se almacenan en posiciones consecutivas de [[memoria]].&lt;br /&gt;
}}&lt;br /&gt;
'''Cadena de caracteres.'''Una cadena en C++  es un conjunto de caracteres, o valores de tipo &amp;quot;char&amp;quot;, terminados con  el carácter nulo. Internamente se almacenan en posiciones consecutivas  de memoria en forma de arreglo.&lt;br /&gt;
&lt;br /&gt;
==Estructura==&lt;br /&gt;
Este tipo de estructuras recibe un tratamiento especial, y es de gran utilidad y de uso continuo.   &lt;br /&gt;
La manera de definir una cadena es la siguiente: &lt;br /&gt;
char &amp;lt;identificador&amp;gt; [&amp;lt;longitud máxima&amp;gt;]; &lt;br /&gt;
Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo, de modo que si queremos almacenar la cadena &amp;quot;HOLA&amp;quot;, tendremos que declarar la cadena como:&lt;br /&gt;
char Saludo[5]; &lt;br /&gt;
Cuatro caracteres para &amp;quot;HOLA&amp;quot; y uno extra para el carácter '\000'.&lt;br /&gt;
También nos será posible hacer referencia a cada uno de los caracteres individuales que componen la cadena, simplemente indicando la posición. Por ejemplo el tercer carácter de nuestra cadena de ejemplo será la 'L', podemos hacer referencia a él como Saludo[2]. Los índices tomarán valores empezando en el cero, así el primer carácter de nuestra cadena sería Saludo[0], que es la 'H'. &lt;br /&gt;
Una cadena puede almacenar informaciones como nombres de personas, mensajes de error, números de teléfono, etc. &lt;br /&gt;
El tratamiento de las cadenas de caracteres resulta muy importante, debido a la gran cantidad de información que ellas almacenan y su valor semántico. Algunas de las operaciones más importantes con cadenas, son:&lt;br /&gt;
&lt;br /&gt;
* Copia de una cadena&lt;br /&gt;
* Cálculo de la longitud,&lt;br /&gt;
* Comparación,&lt;br /&gt;
* Concatenación,&lt;br /&gt;
* Extracción de subcadenas,&lt;br /&gt;
* Búsqueda de información dentro de las cadenas,&lt;br /&gt;
* Conversiones&lt;br /&gt;
&lt;br /&gt;
Que se muestran a continuación, según las contenidas en la biblioteca llamada string (string.h).&lt;br /&gt;
Copia de cadenas&lt;br /&gt;
Esta operación brinda la posibilidad de copiar el valor de una cadena para una variable de cadena dada. Con&lt;br /&gt;
stpcpy(var_cadena, cadena2)&lt;br /&gt;
se copia el valor de cadena2 para var_cadena.&lt;br /&gt;
Ejemplo: El siguiente programa muestra la copia de la cadena frase1 a la cadena frase2.&lt;br /&gt;
===Uso de strcpy===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
void main()&lt;br /&gt;
{ &lt;br /&gt;
   char frase1[] = &amp;quot;Copiando cadena&amp;quot;;&lt;br /&gt;
   char frase2[80];&lt;br /&gt;
   strcpy(frase2,frase1);&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Cadena # 1: &amp;quot; &amp;lt;&amp;lt; frase1 &amp;lt;&amp;lt; endl;&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Cadena # 2: &amp;quot; &amp;lt;&amp;lt; frase2 &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la cadena fuente es de longitud mayor que la cadena destino, se cae en el gravísimo error de sobrescribir después del final de la cadena fuente.&lt;br /&gt;
Una variante de esta función y que ayuda a eliminar el efecto colateral arriba expresado es utilizar la función strncpy, &lt;br /&gt;
stpncpy(var_cadena, cadena2, cantidad)&lt;br /&gt;
que posee un tercer parámetro (cantidad) para indicar cuántos caracteres serán transferidos. Una vez transferidos los caracteres, debe escribirse en la cadena destino el carácter null.&lt;br /&gt;
&lt;br /&gt;
===Uso de strcnpy===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{ &lt;br /&gt;
   char destino[10];&lt;br /&gt;
   char origen[] = &amp;quot;abcdefghi&amp;quot;;&lt;br /&gt;
   strncpy(destino, origen, 3);&lt;br /&gt;
   destino[3] = '\0'; //Si esto no se hace, la salida es imprevisible&lt;br /&gt;
   cout &amp;lt;&amp;lt; destino&amp;lt;&amp;lt; '\n'; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La salida sería: &lt;br /&gt;
abc &amp;lt;br&amp;gt;Es bueno destacar que si una cadena se define con un constructor corriente de arreglo, como en:&amp;lt;br&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
char cadena[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
no resultaría posible hacer: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
cadena = &amp;quot;casa&amp;quot;;   // ERROR &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
pues, como sabemos, no es posible aplicar el operador de asignación para arreglos completos. Entonces usaríamos: &lt;br /&gt;
strcpy(cadena, &amp;quot;casa&amp;quot;);   &lt;br /&gt;
lo cual es mejor que la solución de copiar de una cadena para otra carácter a carácter:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
for(i = 0; i &amp;lt; strlen(cadena2); i++)&lt;br /&gt;
var_cadena[i] = cadena2[i];&lt;br /&gt;
var_cadena[i] = '\0'; // carácter nulo de terminación&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Bibliografía==&lt;br /&gt;
&lt;br /&gt;
*Addison Wesley - C++ Network Programming Volume I - Mastering Complexity with ACE and Patterns&lt;br /&gt;
*Como programar en C y C++ Tomo I&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
[[Category:Herramientas_de_programación]][[Category:Programación]][[Category:Estructura_de_datos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Cadenas_de_Caracteres_en_C%2B%2B&amp;diff=702114</id>
		<title>Cadenas de Caracteres en C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Cadenas_de_Caracteres_en_C%2B%2B&amp;diff=702114"/>
		<updated>2011-06-29T13:52:26Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Cadenas de Caracteres.&lt;br /&gt;
|imagen=Cadena_de_caracteres.JPG&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto=Una cadena en [[C++]] es un conjunto de caracteres, o valores de tipo &amp;quot;char&amp;quot;, terminados con el carácter nulo. Internamente se almacenan en posiciones consecutivas de [[memoria]].&lt;br /&gt;
}}&lt;br /&gt;
'''Cadena de caracteres.'''Una cadena en C++  es un conjunto de caracteres, o valores de tipo &amp;quot;char&amp;quot;, terminados con  el carácter nulo. Internamente se almacenan en posiciones consecutivas  de memoria en forma de arreglo.&lt;br /&gt;
&lt;br /&gt;
==Estructura==&lt;br /&gt;
Este tipo de estructuras recibe un tratamiento especial, y es de gran utilidad y de uso continuo.   &lt;br /&gt;
La manera de definir una cadena es la siguiente: &lt;br /&gt;
char &amp;lt;identificador&amp;gt; [&amp;lt;longitud máxima&amp;gt;]; &lt;br /&gt;
Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo, de modo que si queremos almacenar la cadena &amp;quot;HOLA&amp;quot;, tendremos que declarar la cadena como:&lt;br /&gt;
char Saludo[5]; &lt;br /&gt;
Cuatro caracteres para &amp;quot;HOLA&amp;quot; y uno extra para el carácter '\000'.&lt;br /&gt;
También nos será posible hacer referencia a cada uno de los caracteres individuales que componen la cadena, simplemente indicando la posición. Por ejemplo el tercer carácter de nuestra cadena de ejemplo será la 'L', podemos hacer referencia a él como Saludo[2]. Los índices tomarán valores empezando en el cero, así el primer carácter de nuestra cadena sería Saludo[0], que es la 'H'. &lt;br /&gt;
Una cadena puede almacenar informaciones como nombres de personas, mensajes de error, números de teléfono, etc. &lt;br /&gt;
El tratamiento de las cadenas de caracteres resulta muy importante, debido a la gran cantidad de información que ellas almacenan y su valor semántico. Algunas de las operaciones más importantes con cadenas, son:&lt;br /&gt;
&lt;br /&gt;
* Copia de una cadena&lt;br /&gt;
* Cálculo de la longitud,&lt;br /&gt;
* Comparación,&lt;br /&gt;
* Concatenación,&lt;br /&gt;
* Extracción de subcadenas,&lt;br /&gt;
* Búsqueda de información dentro de las cadenas,&lt;br /&gt;
* Conversiones&lt;br /&gt;
&lt;br /&gt;
Que se muestran a continuación, según las contenidas en la biblioteca llamada string (string.h).&lt;br /&gt;
Copia de cadenas&lt;br /&gt;
Esta operación brinda la posibilidad de copiar el valor de una cadena para una variable de cadena dada. Con&lt;br /&gt;
stpcpy(var_cadena, cadena2)&lt;br /&gt;
se copia el valor de cadena2 para var_cadena.&lt;br /&gt;
Ejemplo: El siguiente programa muestra la copia de la cadena frase1 a la cadena frase2.&lt;br /&gt;
===Uso de strcpy===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
void main()&lt;br /&gt;
{ &lt;br /&gt;
   char frase1[] = &amp;quot;Copiando cadena&amp;quot;;&lt;br /&gt;
   char frase2[80];&lt;br /&gt;
   strcpy(frase2,frase1);&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Cadena # 1: &amp;quot; &amp;lt;&amp;lt; frase1 &amp;lt;&amp;lt; endl;&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Cadena # 2: &amp;quot; &amp;lt;&amp;lt; frase2 &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la cadena fuente es de longitud mayor que la cadena destino, se cae en el gravísimo error de sobrescribir después del final de la cadena fuente.&lt;br /&gt;
Una variante de esta función y que ayuda a eliminar el efecto colateral arriba expresado es utilizar la función strncpy, &lt;br /&gt;
stpncpy(var_cadena, cadena2, cantidad)&lt;br /&gt;
que posee un tercer parámetro (cantidad) para indicar cuántos caracteres serán transferidos. Una vez transferidos los caracteres, debe escribirse en la cadena destino el carácter null.&lt;br /&gt;
&lt;br /&gt;
===Uso de strcnpy===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{ &lt;br /&gt;
   char destino[10];&lt;br /&gt;
   char origen[] = &amp;quot;abcdefghi&amp;quot;;&lt;br /&gt;
   strncpy(destino, origen, 3);&lt;br /&gt;
   destino[3] = '\0'; //Si esto no se hace, la salida es imprevisible&lt;br /&gt;
   cout &amp;lt;&amp;lt; destino&amp;lt;&amp;lt; '\n'; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
La salida sería: &lt;br /&gt;
abc&lt;br /&gt;
Es bueno destacar que si una cadena se define con un constructor corriente de arreglo, como en:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
char cadena[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
no resultaría posible hacer: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
cadena = &amp;quot;casa&amp;quot;;   // ERROR &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
pues, como sabemos, no es posible aplicar el operador de asignación para arreglos completos. Entonces usaríamos: &lt;br /&gt;
strcpy(cadena, &amp;quot;casa&amp;quot;);   &lt;br /&gt;
lo cual es mejor que la solución de copiar de una cadena para otra carácter a carácter:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
for(i = 0; i &amp;lt; strlen(cadena2); i++)&lt;br /&gt;
var_cadena[i] = cadena2[i];&lt;br /&gt;
var_cadena[i] = '\0'; // carácter nulo de terminación&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Bibliografía==&lt;br /&gt;
&lt;br /&gt;
*Addison Wesley - C++ Network Programming Volume I - Mastering Complexity with ACE and Patterns&lt;br /&gt;
*Como programar en C y C++ Tomo I&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
*[http://c.conclase.net C con Clase]&lt;br /&gt;
&lt;br /&gt;
[[Category:Herramientas_de_programación]][[Category:Programación]][[Category:Estructura_de_datos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649890</id>
		<title>Ficheros en C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649890"/>
		<updated>2011-06-09T15:09:26Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Ficheros en C++&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= Es una colección de elementos lógicamente relacionados y almacenados en memoria secundaria. A más bajo nivel, un fichero es una secuencia de bits almacenado en algún dispositivo externo (como por ejemplo uno de memoria secundaria).&lt;br /&gt;
}}'''Ficheros en C++'''. Es simplemente un flujo externo que se puede abrir para entrada (dando lugar a un flujo de archivo de entrada que, para simplificar, llamaremos simplemente archivo o fichero de entrada), para salida (dando lugar a un flujo de archivo de salida que, para simplificar, llamaremos simplemente archivo o fichero de salida) o para entrada-salida(archivo o fichero de entrada-salida o archivo de E/S).&lt;br /&gt;
&lt;br /&gt;
== Definición, apertura y cierre de ficheros ==&lt;br /&gt;
*Declaración de Variables de tipo &amp;quot;Fichero&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ifstream descriptor;             // Para fichero de entrada&lt;br /&gt;
|-&lt;br /&gt;
| ofstream descriptor;            // Para ficheros de salida&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Apertura de [[Ficheros]] de Texto (supongamos TCadena nombre)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombre);                // Apertura para Lectura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre);   //Apertura para Escritura. (borra el contenido si lo hubiera)&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::app);             //Apertura para añadir datos al final&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombreios::in ios::out);  //Apertura para Lectura y Escritura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::in ios::out); //Apertura para Lectura y Escritura&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Cierre de ficheros: Un fichero anteriormente abierto y con un descriptor asociado a él debe ser cerrado con el fin de liberar los recursos asociados a él de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
descriptor.close( )&lt;br /&gt;
&lt;br /&gt;
== Detección de fin de fichero y otras funciones==&lt;br /&gt;
*La función eof() que devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso. REQUIERE LECTURA ADELANTADA: Para que la función eof() devuelva un valor de verdad (actualizado).&lt;br /&gt;
*La funcioón fail() devuelve true si existe un error en una operación de flujo asociada al fichero.&lt;br /&gt;
*La función bad() devuelve true si el flujo está corrupto.&lt;br /&gt;
*La función good() que devuelve true si no existe un error en una operación de flujo y false en caso contrario.&lt;br /&gt;
Antes de empezar a leer o escribir en un fichero es siempre conveniente verificar que la operación de apertura se realizó con éxito.&lt;br /&gt;
&lt;br /&gt;
== Ficheros de texto==&lt;br /&gt;
&lt;br /&gt;
La lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores y al igual que se realiza sobre los flujos estándares cin y cout.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
&lt;br /&gt;
*[[Ciencia de la Información]]&lt;br /&gt;
*[[C++]]&lt;br /&gt;
*[[Puntero (C++)]]&lt;br /&gt;
*[[Constructor (C++)]]&lt;br /&gt;
*[[Programación de Computadoras]]&lt;br /&gt;
*[[Programación Orientada a Objetos]]&lt;br /&gt;
*[[Historia del Lenguaje C]]&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
&lt;br /&gt;
*Laboratorio de Programación 1º A E.T.S.I. Informática Gestión&lt;br /&gt;
*[http://www.lcc.uma.es/~pastrana/LP/curso0405/P13_05.pdf Clase Práctica: Ficheros en C++]&lt;br /&gt;
*[http://www.forosuse.org/forosuse/showthread.php?t=3530 Foro Suse]&lt;br /&gt;
*[http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/c-y-c------/respuestas/2373771/c-ficheros Todos Expertos]&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]] [[Category: Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649868</id>
		<title>Ficheros en C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649868"/>
		<updated>2011-06-09T15:04:43Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Normalizar}}&lt;br /&gt;
{{Definición&lt;br /&gt;
|nombre= Ficheros en C++&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= Es una colección de elementos lógicamente relacionados y almacenados en memoria secundaria. A más bajo nivel, un fichero es una secuencia de bits almacenado en algún dispositivo externo (como por ejemplo uno de memoria secundaria).&lt;br /&gt;
}}'''Ficheros en C++'''. Es simplemente un flujo externo que se puede abrir para entrada (dando lugar a un flujo de archivo de entrada que, para simplificar, llamaremos simplemente archivo o fichero de entrada), para salida (dando lugar a un flujo de archivo de salida que, para simplificar, llamaremos simplemente archivo o fichero de salida) o para entrada-salida(archivo o fichero de entrada-salida o archivo de E/S).&lt;br /&gt;
&lt;br /&gt;
== Definición, apertura y cierre de ficheros ==&lt;br /&gt;
*Declaración de Variables de tipo &amp;quot;Fichero&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ifstream descriptor;             // Para fichero de entrada&lt;br /&gt;
|-&lt;br /&gt;
| ofstream descriptor;            // Para ficheros de salida&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Apertura de [[Ficheros]] de Texto (supongamos TCadena nombre)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombre);                // Apertura para Lectura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre);   //Apertura para Escritura. (borra el contenido si lo hubiera)&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::app);             //Apertura para añadir datos al final&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombreios::in ios::out);  //Apertura para Lectura y Escritura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::in ios::out); //Apertura para Lectura y Escritura&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Cierre de ficheros: Un fichero anteriormente abierto y con un descriptor asociado a él debe ser cerrado con el fin de liberar los recursos asociados a él de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
descriptor.close( )&lt;br /&gt;
&lt;br /&gt;
== Detección de fin de fichero y otras funciones==&lt;br /&gt;
*La función eof() que devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso. REQUIERE LECTURA ADELANTADA: Para que la función eof() devuelva un valor de verdad (actualizado).&lt;br /&gt;
*La funcioón fail() devuelve true si existe un error en una operación de flujo asociada al fichero.&lt;br /&gt;
*La función bad() devuelve true si el flujo está corrupto.&lt;br /&gt;
*La función good() que devuelve true si no existe un error en una operación de flujo y false en caso contrario.&lt;br /&gt;
Antes de empezar a leer o escribir en un fichero es siempre conveniente verificar que la operación de apertura se realizó con éxito.&lt;br /&gt;
&lt;br /&gt;
== Ficheros de texto==&lt;br /&gt;
&lt;br /&gt;
La lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores y al igual que se realiza sobre los flujos estándares cin y cout.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
&lt;br /&gt;
*[[Ciencia de la Información]]&lt;br /&gt;
*[[C++]]&lt;br /&gt;
*[[Puntero (C++)]]&lt;br /&gt;
*[[Constructor (C++)]]&lt;br /&gt;
*[[Programación de Computadoras]]&lt;br /&gt;
*[[Programación Orientada a Objetos]]&lt;br /&gt;
*[[Historia del Lenguaje C]]&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
&lt;br /&gt;
*Laboratorio de Programación 1º A E.T.S.I. Informática Gestión&lt;br /&gt;
*[http://www.lcc.uma.es/~pastrana/LP/curso0405/P13_05.pdf Clase Práctica: Ficheros en C++]&lt;br /&gt;
*[http://www.forosuse.org/forosuse/showthread.php?t=3530 Foro Suse]&lt;br /&gt;
*[http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/c-y-c------/respuestas/2373771/c-ficheros Todos Expertos]&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]] [[Category: Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649855</id>
		<title>Ficheros en C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Ficheros_en_C%2B%2B&amp;diff=649855"/>
		<updated>2011-06-09T15:03:02Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Normalizar}}&lt;br /&gt;
{{Definición&lt;br /&gt;
|nombre= Ficheros en C++&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= Es una colección de elementos lógicamente relacionados y almacenados en memoria secundaria. A más bajo nivel, un fichero es una secuencia de bits almacenado en algún dispositivo externo (como por ejemplo uno de memoria secundaria).&lt;br /&gt;
}}'''Ficheros en C++'''. Es simplemente un flujo externo que se puede abrir para entrada (dando lugar a un flujo de archivo de entrada que, para simplificar, llamaremos simplemente archivo o fichero de entrada), para salida (dando lugar a un flujo de archivo de salida que, para simplificar, llamaremos simplemente archivo o fichero de salida) o para entrada-salida(archivo o fichero de entrada-salida o archivo de E/S).&lt;br /&gt;
&lt;br /&gt;
== Definición, apertura y cierre de ficheros ==&lt;br /&gt;
*Declaración de Variables de tipo &amp;quot;Fichero&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ifstream descriptor;             // Para fichero de entrada&lt;br /&gt;
|-&lt;br /&gt;
| ofstream descriptor;            // Para ficheros de salida&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Apertura de [[Ficheros]] de Texto (supongamos TCadena nombre)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombre);                // Apertura para Lectura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre);   //Apertura para Escritura. (borra el contenido si lo hubiera)&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::app);             //Apertura para añadir datos al final&lt;br /&gt;
|-&lt;br /&gt;
| in.open(nombreios::in ios::out);  //Apertura para Lectura y Escritura&lt;br /&gt;
|-&lt;br /&gt;
| out.open(nombre,ios::in ios::out); //Apertura para Lectura y Escritura&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Cierre de ficheros: Un fichero anteriormente abierto y con un descriptor asociado a él debe ser cerrado con el fin de liberar los recursos asociados a él de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
descriptor.close( )&lt;br /&gt;
&lt;br /&gt;
== Detección de fin de fichero y otras funciones==&lt;br /&gt;
*La función eof() que devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso. REQUIERE LECTURA ADELANTADA: Para que la función eof() devuelva un valor de verdad (actualizado).&lt;br /&gt;
*La funcioón fail() devuelve true si existe un error en una operación de flujo asociada al fichero.&lt;br /&gt;
*La función bad() devuelve true si el flujo está corrupto.&lt;br /&gt;
*La función good() que devuelve true si no existe un error en una operación de flujo y false en caso contrario.&lt;br /&gt;
Antes de empezar a leer o escribir en un fichero es siempre conveniente verificar que la operación de apertura se realizó con éxito.&lt;br /&gt;
&lt;br /&gt;
== Ficheros de texto==&lt;br /&gt;
&lt;br /&gt;
La lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores y al igual que se realiza sobre los flujos estándares cin y cout.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
&lt;br /&gt;
*[[Ciencia de la Información]]&lt;br /&gt;
*[[C++]]&lt;br /&gt;
*[[Puntero (C++)]]&lt;br /&gt;
*[[Constructor (C++)]]&lt;br /&gt;
*[[Programación de Computadoras]]&lt;br /&gt;
*[[Programación Orientada a Objetos]]&lt;br /&gt;
*[[Historia del Lenguaje C]]&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
&lt;br /&gt;
*Laboratorio de Programación 1º A E.T.S.I. Informática Gestión&lt;br /&gt;
*[www.lcc.uma.es/~pastrana/LP/curso0405/P13_05.pdf Clase Práctica: Ficheros en C++]&lt;br /&gt;
*[www.forosuse.org/forosuse/showthread.php?t=3530 Foro Suse]&lt;br /&gt;
*[www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/c-y-c------/respuestas/2373771/c-ficheros Todos Expertos]&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]] [[Category: Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634805</id>
		<title>Blue-ray</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634805"/>
		<updated>2011-06-02T18:22:22Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Blu-ray Disc&lt;br /&gt;
|imagen=BlueD.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto=Blu-ray, también conocido como Blu-ray Disc o BD, es un formato de disco óptico de nueva generación de gran capacidad.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Blu-ray'''. También conocido como '''Blu-ray Disc''' o '''BD''', es un formato de [[disco óptico]] de nueva generación de 12 cm de diámetro (igual que el [[CD]] y el [[DVD]]) para vídeo de gran definición y almacenamiento de datos de alta densidad. Su capacidad de almacenamiento llega a 25 [[gigabyte|GB]] a una capa y a 50 GB a doble capa, aunque los hay de mayor capacidad. La videoconsola [[PlayStation 3]] puede leer discos de hasta doble capa, y se ha confirmado que está lista para recibir el disco de 16 capas a razón de 400 GB &lt;br /&gt;
&lt;br /&gt;
==La Competencia ==&lt;br /&gt;
&lt;br /&gt;
El Blu-ray se impuso a su competidor, el [[HD DVD]], en la [[Guerra de formatos de disco ópticos de alta definición|guerra de formatos]], iniciada para cambiar el estándar [[DVD]], como en su día ocurrió entre el [[VHS]] y el [[Betamax]], o el [[fonógrafo]] y el [[gramófono]]. &lt;br /&gt;
&lt;br /&gt;
Aunque otros apuntan que el sucesor del DVD no será un disco óptico, sino la [[tarjeta de memoria]]. No obstante, se está trabajando en el [[HVD]] o Disco holográfico versátil con 3,9 [[Terabyte|TB]]. El límite de capacidad en las tarjetas de formato SD/MMC está ya en 128 GB, teniendo la ventaja de ser regrabables al menos durante 5 años. &lt;br /&gt;
&lt;br /&gt;
En febrero de 2008, después de la caída de muchos apoyos al HD DVD, [[Toshiba]] decidió abandonar la fabricación de reproductores y las investigaciones para mejorar su formato. &lt;br /&gt;
&lt;br /&gt;
Existe un tercer formato, el [[HD-VMD]], que también debe ser nombrado, ya que también está enfocado a ofrecer alta definición. Su principal desventaja es que no cuenta con el apoyo de las grandes compañías y es desconocido por gran parte del público. Por eso su principal apuesta es ofrecer lo mismo que las otras tecnologías a un precio más asequible, por ello parte de la tecnología del DVD ([[láser]] rojo). En un futuro, cuando la tecnología sobre el láser azul sea fiable y barata, tienen previsto adaptarse a ella.&lt;br /&gt;
&lt;br /&gt;
== Principio de Funcionamiento ==&lt;br /&gt;
&lt;br /&gt;
El disco Blu-ray hace uso de un rayo láser de color azul con una longitud de onda de 405 [[nanómetro]]s, a diferencia del láser rojo utilizado en lectores de DVD, que tiene una longitud de onda de 650 nanómetros. Esto, junto con otros avances tecnológicos, permite almacenar sustancialmente más [[información]] que el DVD en un disco de las mismas dimensiones y aspecto externo.&lt;br /&gt;
&lt;br /&gt;
Blu-ray obtiene su nombre del color azul del rayo láser (''blue ray'' significa ''rayo azul''). La letra ''e'' de la palabra original ''blue'' fue eliminada debido a que, en algunos países, no se puede registrar para un nombre comercial una palabra común. Fue desarrollado en conjunto por un grupo de compañías tecnológicas llamado Blu-Ray Disc Association (BDA), liderado por [[Sony]] y [[Philips]], &lt;br /&gt;
&lt;br /&gt;
El DVD ofreció en su momento una alta calidad, ya que era capaz de dar una resolución de 720x480 ([[NTSC]]) o 720x576 ([[PAL]]), lo que es ampliamente superado por la capacidad de alta definición ofrecida por el Blu-ray, que es de 1920x1080 (1080p). Este último es el formato utilizado por los estudios para archivar sus producciones, que anteriormente se convertía al formato que se quisiese exportar. Esto ya no será necesario, con lo que la industria del cine digital no tendrá que gastar esfuerzo y tiempo en el cambio de resolución de películas, lo que abaratará en menor medida costos&lt;br /&gt;
&lt;br /&gt;
== Capacidad y velocidad ==&lt;br /&gt;
Una capa de disco Blu-ray puede contener alrededor de 25 [[Gigabyte|GB]] o cerca de 6 horas de vídeo de alta definición más audio; también está en el mercado el disco de doble capa, que puede contener aproximadamente 50 GB. La velocidad de transferencia de datos es de 36 [[Mbit/s]] (54Mbps para BD-ROM), pero ya están en desarrollo prototipos a velocidad de transferencia 2x (el doble, 72Mbit por segundo). Ya está disponible el BD-RE (formato reescribible) estándar, así como los formatos BD-R (grabable) y el BD-ROM, como parte de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;|Velocidad de la unidad&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Velocidad de trasferencia&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Tiempo teórico de escritura (minutos)&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Mbit/s]]||MB/s||Una capa||Doble capa&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|1×||36 ||4,5 ||90||180&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|2×||72 ||9 ||45 ||90&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|4×||144 ||18 ||22,5 ||45&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|6×||216 ||27 ||15 ||30&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|8× ||288 ||36 ||11,25 ||22,5&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|12×&lt;br /&gt;
||432 ||54 ||7,5 ||15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
El 19 de mayo de 2005 [[TDK]] anunció un prototipo de disco Blu-ray de cuatro capas de 100 GB. &lt;br /&gt;
El 3 de octubre de 2007 [[Hitachi]] anunció que había desarrollado un prototipo de BD-ROM de 100 GB que, a diferencia de la versión de TDK y [[Panasonic]], era compatible con los lectores disponibles en el mercado y solo requerían una actualización de ''[[firmware]]''. Hitachi también comentó que está desarrollando una versión de 200 GB de capacidad. El reciente avance de Pioneer le permitió crear un disco Blu-ray de 20 capas con una capacidad total de 500 GB, aunque no sería compatible con las unidades lectoras ya disponibles en el mercado, como haría Hitachi.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
El tamaño del ''punto'' mínimo en el que un láser puede ser enfocado está limitado por la &lt;br /&gt;
[[difracción]], y depende de la [[longitud de onda]] del haz de luz y de la [[apertura numérica]] de la lente utilizada para enfocarlo. En el caso del láser azul-violeta utilizado en los discos Blu-ray, la longitud de onda es menor con respecto a tecnologías anteriores, aumentando por lo tanto la apertura numérica (0,85, comparado con 0,6 para DVD). Con ello, y gracias a un sistema de lentes duales y a una cubierta protectora más delgada, el rayo láser puede enfocar de forma mucho más precisa en la superficie del disco. Dicho de otra forma, los puntos de información legibles en el disco son mucho más pequeños y, por tanto, el mismo espacio puede contener mucha más información. Por último, además de las mejoras en la tecnología óptica, estos discos incorporan un sistema mejorado de codificación de datos que permite empaquetar aún más información.&lt;br /&gt;
&lt;br /&gt;
El DVD tenía dos problemas que se intentaron resolver con la tecnología Blu-Ray, por ello la &lt;br /&gt;
estructura es distinta. En primer lugar, para la lectura en el DVD el láser debe atravesar la capa de [[policarbonato]] de 0,6mm en la que el láser se puede difractar en dos haces de luz. Si esta difracción es alta, por ejemplo si estuviera rayado, impide la lectura del disco. Pero dicho disco, al tener una capa de sólo 0,1mm se evita este problema, ya que tiene menos recorrido hasta la capa de datos; además, esta capa es resistente a rayaduras. En segundo lugar, si el disco estuviera inclinado, en el caso del DVD, por igual motivo que el anterior problema, la distorsión del rayo láser haría que leyese en una posición equivocada, dando lugar a errores. Gracias a la cercanía de la lente y la rápida convergencia del láser la distorsión es inferior, pudiéndose evitar posibles errores de lectura. &lt;br /&gt;
&lt;br /&gt;
Otra característica importante de los discos Blu-ray es su resistencia a las rayaduras y la &lt;br /&gt;
suciedad. La delgada separación entre la capa de lectura y la superficie del disco hacía estos discos más propensos a las rayaduras y suciedad que un DVD normal. Es por ello que se pensó primero en comercializarlos en una especie de carcasa o ''Caddy''. La idea fue desechada gracias a la elaboración por parte de [[TDK]] de un sustrato protector llamado [[Durabis]], que no solo compensa la fragilidad, sino que le otorga una protección extra contra las rayaduras a dicho disco. Existen también discos DVD con esta protección, pero no es tan necesaria debido al mayor espesor de la capa que separa los datos de la superficie del disco, 0,6mm.&lt;br /&gt;
&lt;br /&gt;
== Códigos de región ==&lt;br /&gt;
Cada disco de Blu-ray contiene uno o más códigos de región, los cuales denotan el lugar o las áreas del mundo a la que cada distribución está dirigida. En ocasiones, los códigos de región son llamados ''zonas''. Las especificaciones de cada equipo reproductor indican qué zona pueden reproducir.&lt;br /&gt;
&lt;br /&gt;
En teoría, esto permite que los estudios cinematográficos controlen varios aspectos del &lt;br /&gt;
lanzamiento, los cuales incluyen el contenido, la fecha y el precio, basados en la adquisición por regiones. En la práctica, varios reproductores permiten reproducir cualquier disco, o pueden ser modificados para dicho propósito. Distinto al cifrado de datos, los códigos de región permiten el bloqueo regional, que fue originado en la industria de los [[videojuegos]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;background: #f0f0f0;&amp;quot; | Código de Región !! style=&amp;quot;background: #f0f0f0;&amp;quot; | Área&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | A/1 || [[América]], [[Asia Oriental]] (excepto China continental y Mongolia), el &lt;br /&gt;
sudeste de Asia y otros países&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | B/2 || [[África]], Asia sudoccidental, [[Europa]] (con excepción de &lt;br /&gt;
[[Bielorusia]], [[Rusia]] y [[Ucrania]]), [[Oriente Medio]], [[Oceanía]] y otros países.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | C/3 || Asia central, Asia oriental ([[China]] continental y [[Mongolia]] &lt;br /&gt;
solamente), el sur de Asia, [[Eurasia]] central (incluida Rusia), y otros países.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoy en día, muchos reproductores multiregión logran desbloquear el bloqueo regional y el RCE por medio de la identificación y selección de la región compatible por el Blu-Ray, o permitiendo al usuario seleccionar una región en particular. Otros simplemente se saltan el chequeo de la región por completo. Algunos manufacturadores de reproductores de ahora proveen información libremente sobre cómo deshabilitar el bloqueo regional y, en algunos modelos recientes, aparece que ha sido deshabilitado por defecto.&lt;br /&gt;
&lt;br /&gt;
Esta práctica, para muchas personas, es una violación a los acuerdos comerciales de la &lt;br /&gt;
[[Organización Mundial del Comercio]], aunque no hay leyes que hayan sido definidas en esta área.&lt;br /&gt;
&lt;br /&gt;
== Códecs y BD-J ==&lt;br /&gt;
El Blu-ray soporta los mismos sistemas de archivo que sus predecesores, como el [[Universal Disk Format|UDF]] y el [[ISO 9660]]. Gracias a su capacidad de almacenamiento, el vídeo es de alta definición y audio de hasta 8 canales. Soporta los formatos de compresión [[MPEG-2]], [[MPEG-4]] y [[VC-1]]. Los formatos [[MPEG-4 AVC]] y [[SMPTE VC-1]] implementan algoritmos de compresión más avanzados que permiten ofrecer gran calidad (a un nivel similar).&lt;br /&gt;
&lt;br /&gt;
El formato [[MPEG-2]] se mantiene por retrocompatibilidad; es casi obsoleto (comparado con los otros), pero aun así se ha utilizado para codificar la mayor parte de las primeras películas que han salido en formato Blu-Ray. Esto es debido a que el MPEG-4 AVC tiene altos requerimientos, consumo de recursos y alto tiempo de codificación.&lt;br /&gt;
&lt;br /&gt;
El SMPTE VC-1 pertenece a un consorcio de compañías dominado por Microsoft. Esto hace que el grado de implantación del códec sea desigual, favoreciendo al [[HD DVD]]. A pesar de esto, [[Microsoft]] ha hecho un esfuerzo notable realizando seminarios para las compañías del sector, lo que ha aumentado la aceptación del VC-1.&lt;br /&gt;
&lt;br /&gt;
Es novedosa la inclusión de la plataforma Java en el estándar de las películas grabadas en Blu-ray. Esta plataforma, que ha recibido el nombre de [[BD-J]] (Blu-ray Disc Java), permite más libertad a los desarrolladores para incluir contenidos en la película. No es sólo la capacidad de desplegar un menú en cualquier momento de la reproducción, o la posibilidad de incrustar aplicaciones en el disco. También se proyecta la posibilidad de descargar contenidos adicionales desde Internet al disco. Por ejemplo, subtítulos en determinados idiomas, contenidos especiales, escenas cortadas, entre otros. Por otro lado, hay detractores que dicen que es innecesariamente complejo y las regalías por su uso son excesivas.&lt;br /&gt;
&lt;br /&gt;
Los códecs de compresión de audio soportados por Blu-ray son [[LPCM]] (sin compresión), [[DTS]], [[Dolby Digital]], [[Dolby True HD]] y [[DTS-HD]] Master Audio (hay más, pero éstos son los principales). Los tres primeros se mantienen por retrocompatibilidad respecto al DVD al igual que los de vídeo. Los dos últimos representan una gran mejora, ya que permiten la compresión sin pérdidas (en la siguiente tabla pueden ver cómo mantienen la misma frecuencia de muestreo con una alta tasa de transferencia).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !!LPCM!!DTS!!Dolby Digital!!DD True HD!!DTS-HD&lt;br /&gt;
|-&lt;br /&gt;
|Tasa de transferencia || 27Mbps || 1536Kbps || 640Kbps || 18Mbps || &lt;br /&gt;
18Mbps (HD DVD) 24,5Mbps (Blu-ray)&lt;br /&gt;
|-&lt;br /&gt;
|Canales discretos || 8 || 8 || 6 || 8 || 8&lt;br /&gt;
|-&lt;br /&gt;
|Cuantificación || 24b || 24b || 24b || 24b || 24b&lt;br /&gt;
|-&lt;br /&gt;
|Frecuencia de muestreo || 192KHz || 48KHz || 48KHz || 192KHz || &lt;br /&gt;
192KHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protecciones anticopia ==&lt;br /&gt;
Los sistemas Blu-ray incorporan cuatro sistemas anticopia: [[AACS]], [[BD+]] [[Rom-Mark]], [[SPDG]] e [[ICT]].&lt;br /&gt;
&lt;br /&gt;
=== AACS ===&lt;br /&gt;
El AACS es una mejora respecto al [[Content Scrambling System|CSS]] del [[DVD]], producto de la iniciativa de [[Disney]], Sony, [[Microsoft]], [[IBM]], [[Intel]], [[Panasonic]], [[Toshiba]] y [[Warner Brothers]]. Su principal función es el control de la distribución de contenidos. Una de sus consecuencias es que este método anticopia crea una lista negra de grabadores. Este sistema permite dar una clave para cada modelo de grabador. Esto facilita el seguimiento de qué claves son descifradas y qué grabadores permiten las copias; la consecuencia sería revocar la clave y no incluirla en siguientes reproductores, garantizando la incompatibilidad con el grabador. Esta posibilidad ha despertado gran controversia, ya que si se lleva a cabo, usuarios que nunca le dieron un uso ilegal verían cómo su grabador queda inutilizado. Por ahora han anunciado que sólo se centrarán en reproductores industriales que sean usados para la copia masiva. El sistema, en teoría, podría permitir incluso suministrar a cada reproductor individual un conjunto de claves con lo que se podría revocar las claves para dicho sistema impidiendo la reproducción sólo en él.&lt;br /&gt;
&lt;br /&gt;
En un principio, la Asociación de Discos Blu-Ray decidió incorporar la restrictiva copia gestionada &lt;br /&gt;
(MC). Inmediatamente, las compañías informáticas involucradas protestaron debido a su alta &lt;br /&gt;
restricción. Al final decidieron que el control de distribución de contenidos sería copia &lt;br /&gt;
gestionada obligatoria (MMC), usada en el [[HD DVD]], y que permite al menos una copia de un disco para enviarla a otros dispositivos. En esta decisión influyó el hecho de que HD DVD lo hubiese adoptado ya que el usuario podría decantarse por un sistema menos restrictivo en este aspecto.&lt;br /&gt;
&lt;br /&gt;
=== BD+ y Rom-Mark ===&lt;br /&gt;
Los discos Blu-ray tienen en su estándar un sistema anticopia exclusivo denominado [[BD+]]. Este sistema permite cambiar dinámicamente las claves para la protección criptográfica de los BD originales. Si una de estas claves es descubierta, los fabricantes no tienen más que cambiar la clave, de forma que las nuevas unidades del producto no puedan ser pirateadas con dicha clave descubierta. A petición de [[HP]], se añadió la posibilidad de que un usuario pueda comprar dichas claves para realizar un número limitado de copias del disco que ha comprado, quitando derechos de copia a los usuarios que utilizan este formato. El BD+ puede comprobar también si el ''hardware'' ha sido modificado e impedir la reproducción.&lt;br /&gt;
&lt;br /&gt;
También se ha acordado que los BD lleven una marca de agua digital. Bajo el nombre de Rom-Mark, esta tecnología estará presente en todos los discos originales y requiere un componente especial de ''hardware'' licenciado en grabadores específicos para poder insertar la marca de agua durante la copia. Todos los lectores de Blu-ray deben buscar esa marca. De esta manera, la [[BDA]] pretende frenar la copia masiva de este disco.&lt;br /&gt;
&lt;br /&gt;
=== SPDG ===&lt;br /&gt;
SPDG son las siglas de ''Self-Protecting Digital Content'', y es un programa que se incluirá en los reproductores. Tiene un comportamiento similar al de un sistema operativo, y evitará que los grabadores puedan grabar las películas que estén siendo visionadas. Esta también tiene su polémica, no solo por el extremismo de la política anticopia, sino porque puede suponer una grave vulnerabilidad, ya que los sistemas operativos son sensibles ante virus informáticos.&lt;br /&gt;
&lt;br /&gt;
=== ICT ===&lt;br /&gt;
[[ICT]], siglas del término inglés ''Image Constraint Token'', es una señal que evita que los &lt;br /&gt;
contenidos de alta definición viajen en soportes no cifrados y, por consiguiente, susceptibles de ser copiados. En la práctica, lo que hace es limitar la salida de vídeo a la resolución de 960x540 si el cable que va del reproductor a la televisión es analógico, aunque la televisión soporte alta definición. El ICT no es obligatorio, cada compañía decide libremente si añadirlo o no a sus títulos. Por ejemplo, [[Warner]] está a favor de su uso, mientras que Fox está en contra.&lt;br /&gt;
&lt;br /&gt;
== Retrocompatibilidad ==&lt;br /&gt;
La [[BDA]] aconseja que los reproductores de BR también reproduzcan [[DVD]], para que sean compatibles con la anterior definición. Hoy se pueden encontrar reproductores híbridos de CD, DVD, HD-DVD y Blu-ray. [[JVC]] (Victor Company of Japan) está desarrollando un ''combo'' DVD/BD de tres capas que permitiría tener en el mismo disco el estándar DVD y el BD. De esta forma se podría comprar una película que se puede ver en los reproductores de DVD actuales y, además, tener alta definición si se introduce en un reproductor Blu-ray. Dos de las capas corresponderían a un DVD de doble capa (8,6 GB) y la tercera capa correspondería al Blu-ray.&lt;br /&gt;
&lt;br /&gt;
A pesar de lo anterior, sí que hay cierta incompatibilidad insalvable, de momento. Dicho problema proviene de las cadenas de montaje. Los fabricantes se han visto obligados a realizar una gran inversión en sus máquinas para poder comenzar a crear discos Blu-ray. Esto es debido a la gran diferencia de tecnología entre este disco y el DVD, sobre todo a la capa especial de protección de los primeros. Se emplean 5 segundos en producir un Blu-ray.&lt;br /&gt;
Existe la posibilidad de crear Blu-rays híbridos: aquellos que tengan dos capas, dedicando una a ser de tipo [[DVD]]. Al principio, los estudios asociados decidieron que no sacarían títulos en esta modalidad. Pero el competidor [[HD DVD]] sí sacó títulos con esta posibilidad, lo que permite ir comprando películas a los usuarios para ver en su reproductor de DVD, y más tarde en su reproductor de HD DVD. Los estudios Blu-Ray se retractaron, y desde finales de 2006 ya existen lanzamientos en esta modalidad.&lt;br /&gt;
&lt;br /&gt;
== HD Ready, Full-HD y HDMI ==&lt;br /&gt;
&lt;br /&gt;
Este apartado trata de remarcar la diferencia entre compatibilidad y adaptación y cómo sacar el máximo partido a la alta definición del Blu-ray. Se dice por compatibilidad cualquier televisor que permita reproducir el contenido de dicho disco . Esta se logra con dispositivos que lleven el logotipo [[HD ready|HD Ready]] o 1080i, lo cual no quiere decir que se le saque el máximo partido a la alta definición puesto que sólo garantiza que la resolución mínima sea de 720 líneas en panorámico (1280x720) con búsqueda progresiva (si es en modo escalado garantiza 1920x1080). Si lo que queremos es alta definición con una resolución de 1920x1080 en modo progresivo deberán encontrarse aquellos dispositivos marcados bajo el logotipo de [[Full-HD]] o 1080p.&lt;br /&gt;
&lt;br /&gt;
La adaptación significa una conversión que implica una pérdida en la señal de audio y/o vídeo. En esta última entra el [[HDMI]], un conector que permite el envío de la señal nativa de alta definición (1920x1080, 24fps y búsqueda progresiva) para garantizar la máxima fluidez y calidad de las escenas. Cualquier otra conexión, ya sea analógica o digital tendrá que adaptarse con las lógicas consecuencias. Aún disponiendo de conector HDMI, es aconsejable buscar aquellos dispositivos que lleven la versión 1.3, ya que es la única que de momento admite todos los formatos de audio y vídeo y duplica la tasa de transferencia respecto a su versión 1.2. Cualquier conector y medio que se utilice para conectar el reproductor con el dispositivo de visionado deberá ser compatible con [[HDCP]] (HDMI lo es) so pena de que convertirá la señal antes de su salida a calidad DVD. Como se puede observar aquellos que se decidan por la alta definición deben buscar reproductores con conectores HDMI 1.3 y dispositivos con Full-HD. &lt;br /&gt;
&lt;br /&gt;
Se puede observar cómo la tecnología del Blu-ray permite una mayor tasa de transferencia para el vídeo. Esta diferencia no ha sido aprovechada en muchos casos debido a varios factores. En primer lugar la tasa es variable y depende de la compañía elegir cuál va usar, no necesariamente la máxima. Segundo, la tasa puede tener otras utilidades aparte de la transmisión del vídeo. Último, influye el ''códec'' utilizado, las compañías utilizaron en sus primeros lanzamientos el [[MPEG-2]] lo que hizo que no solo la calidad sea inferior a lo esperado en una reproducción de alta definición, sino que estaba por debajo de su competidor el [[HD DVD]] que desde el principio codificó principalmente en [[VC-1]]. La tasa de transferencia para audio también es más alta en Blu-ray que en HD DVD.&lt;br /&gt;
&lt;br /&gt;
En la tabla no se puede apreciar, pero para entender las diferencias entre el Blu-ray y HD DVD hay que darse cuenta de que mientras que la primera es una nueva tecnología que busca el aumento de prestaciones, el segundo quiere mejorar el soporte DVD sin aumentar considerablemente los costes. &lt;br /&gt;
&lt;br /&gt;
El HD DVD por tanto tiene a su favor que bastaron unas pocas modificaciones en los equipos de producción de DVD mientras que en Blu-ray ha sido necesaria la instalación de nuevos y caros equipos de producción. Es por eso que en los precios ese disco tiene mucho que perder ya que los costes son más altos, lo que se refleja por ejemplo en los lectores. Los lectores HD DVD cuestan en torno a la mitad que los Blu-ray, aunque ya en el 2007 esta diferencia bajó. Por el contrario las películas tienen un coste similar.&lt;br /&gt;
&lt;br /&gt;
En cuanto a los títulos híbridos (DVD y alta definición) parece mejor el sistema Blu-ray que permite asignar cada formato a una capa sin cambiar de cara. En HD DVD se asigna por caras con lo que se hace necesario cambiarlo. Además el soporte híbrido está limitado a dos formatos (dos caras) mientras que en dicho disco se pueden tantos como capas haya (aunque por ahora no tiene sentido añadir otros formatos existe la posibilidad de hacerlo en el futuro).&lt;br /&gt;
&lt;br /&gt;
== Blu-ray híbridos ==&lt;br /&gt;
&lt;br /&gt;
Sony está trabajando en un disco híbrido Blu-ray que incluya contenidos jugables al mismo tiempo que películas en alta definición. Esta atractiva opción seguramente supondrá un buen empujón a la trayectoria de [[PS3]]. John Koller director de marketing de la organización, informo que esto se lograra gracias dicha tecnología, debido a su exclusividad para dicha consola, definitivamente &amp;quot;cumplirá con las expectativas de venta&amp;quot; informo Koller.&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.blu-raydisc.com/ Asociación del disco Blu-ray]&lt;br /&gt;
* [http://www.blu-ray.com/ Completa página sobre el formato Blu-Ray] &lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.masadelante.com/faqs/tipos-de-dvd masadelante.com]&lt;br /&gt;
* [http://arstechnica.com/news.ars/post/20050810-5194.html Artículo sobre Blu-ray en Ars Technica] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]][[Category:Hardware_multimedia_y_gráfico]][[Category:Dispositivos_de_almacenamiento]][[Category:Discos_ópticos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634802</id>
		<title>Blue-ray</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634802"/>
		<updated>2011-06-02T18:21:47Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Blu-ray Disc&lt;br /&gt;
|imagen=BlueD.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto=Blu-ray, también conocido como Blu-ray Disc o BD, es un formato de disco óptico de nueva generación gran capacidad.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Blu-ray'''. También conocido como '''Blu-ray Disc''' o '''BD''', es un formato de [[disco óptico]] de nueva generación de 12 cm de diámetro (igual que el [[CD]] y el [[DVD]]) para vídeo de gran definición y almacenamiento de datos de alta densidad. Su capacidad de almacenamiento llega a 25 [[gigabyte|GB]] a una capa y a 50 GB a doble capa, aunque los hay de mayor capacidad. La videoconsola [[PlayStation 3]] puede leer discos de hasta doble capa, y se ha confirmado que está lista para recibir el disco de 16 capas a razón de 400 GB &lt;br /&gt;
&lt;br /&gt;
==La Competencia ==&lt;br /&gt;
&lt;br /&gt;
El Blu-ray se impuso a su competidor, el [[HD DVD]], en la [[Guerra de formatos de disco ópticos de alta definición|guerra de formatos]], iniciada para cambiar el estándar [[DVD]], como en su día ocurrió entre el [[VHS]] y el [[Betamax]], o el [[fonógrafo]] y el [[gramófono]]. &lt;br /&gt;
&lt;br /&gt;
Aunque otros apuntan que el sucesor del DVD no será un disco óptico, sino la [[tarjeta de memoria]]. No obstante, se está trabajando en el [[HVD]] o Disco holográfico versátil con 3,9 [[Terabyte|TB]]. El límite de capacidad en las tarjetas de formato SD/MMC está ya en 128 GB, teniendo la ventaja de ser regrabables al menos durante 5 años. &lt;br /&gt;
&lt;br /&gt;
En febrero de 2008, después de la caída de muchos apoyos al HD DVD, [[Toshiba]] decidió abandonar la fabricación de reproductores y las investigaciones para mejorar su formato. &lt;br /&gt;
&lt;br /&gt;
Existe un tercer formato, el [[HD-VMD]], que también debe ser nombrado, ya que también está enfocado a ofrecer alta definición. Su principal desventaja es que no cuenta con el apoyo de las grandes compañías y es desconocido por gran parte del público. Por eso su principal apuesta es ofrecer lo mismo que las otras tecnologías a un precio más asequible, por ello parte de la tecnología del DVD ([[láser]] rojo). En un futuro, cuando la tecnología sobre el láser azul sea fiable y barata, tienen previsto adaptarse a ella.&lt;br /&gt;
&lt;br /&gt;
== Principio de Funcionamiento ==&lt;br /&gt;
&lt;br /&gt;
El disco Blu-ray hace uso de un rayo láser de color azul con una longitud de onda de 405 [[nanómetro]]s, a diferencia del láser rojo utilizado en lectores de DVD, que tiene una longitud de onda de 650 nanómetros. Esto, junto con otros avances tecnológicos, permite almacenar sustancialmente más [[información]] que el DVD en un disco de las mismas dimensiones y aspecto externo.&lt;br /&gt;
&lt;br /&gt;
Blu-ray obtiene su nombre del color azul del rayo láser (''blue ray'' significa ''rayo azul''). La letra ''e'' de la palabra original ''blue'' fue eliminada debido a que, en algunos países, no se puede registrar para un nombre comercial una palabra común. Fue desarrollado en conjunto por un grupo de compañías tecnológicas llamado Blu-Ray Disc Association (BDA), liderado por [[Sony]] y [[Philips]], &lt;br /&gt;
&lt;br /&gt;
El DVD ofreció en su momento una alta calidad, ya que era capaz de dar una resolución de 720x480 ([[NTSC]]) o 720x576 ([[PAL]]), lo que es ampliamente superado por la capacidad de alta definición ofrecida por el Blu-ray, que es de 1920x1080 (1080p). Este último es el formato utilizado por los estudios para archivar sus producciones, que anteriormente se convertía al formato que se quisiese exportar. Esto ya no será necesario, con lo que la industria del cine digital no tendrá que gastar esfuerzo y tiempo en el cambio de resolución de películas, lo que abaratará en menor medida costos&lt;br /&gt;
&lt;br /&gt;
== Capacidad y velocidad ==&lt;br /&gt;
Una capa de disco Blu-ray puede contener alrededor de 25 [[Gigabyte|GB]] o cerca de 6 horas de vídeo de alta definición más audio; también está en el mercado el disco de doble capa, que puede contener aproximadamente 50 GB. La velocidad de transferencia de datos es de 36 [[Mbit/s]] (54Mbps para BD-ROM), pero ya están en desarrollo prototipos a velocidad de transferencia 2x (el doble, 72Mbit por segundo). Ya está disponible el BD-RE (formato reescribible) estándar, así como los formatos BD-R (grabable) y el BD-ROM, como parte de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;|Velocidad de la unidad&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Velocidad de trasferencia&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Tiempo teórico de escritura (minutos)&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Mbit/s]]||MB/s||Una capa||Doble capa&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|1×||36 ||4,5 ||90||180&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|2×||72 ||9 ||45 ||90&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|4×||144 ||18 ||22,5 ||45&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|6×||216 ||27 ||15 ||30&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|8× ||288 ||36 ||11,25 ||22,5&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|12×&lt;br /&gt;
||432 ||54 ||7,5 ||15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
El 19 de mayo de 2005 [[TDK]] anunció un prototipo de disco Blu-ray de cuatro capas de 100 GB. &lt;br /&gt;
El 3 de octubre de 2007 [[Hitachi]] anunció que había desarrollado un prototipo de BD-ROM de 100 GB que, a diferencia de la versión de TDK y [[Panasonic]], era compatible con los lectores disponibles en el mercado y solo requerían una actualización de ''[[firmware]]''. Hitachi también comentó que está desarrollando una versión de 200 GB de capacidad. El reciente avance de Pioneer le permitió crear un disco Blu-ray de 20 capas con una capacidad total de 500 GB, aunque no sería compatible con las unidades lectoras ya disponibles en el mercado, como haría Hitachi.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
El tamaño del ''punto'' mínimo en el que un láser puede ser enfocado está limitado por la &lt;br /&gt;
[[difracción]], y depende de la [[longitud de onda]] del haz de luz y de la [[apertura numérica]] de la lente utilizada para enfocarlo. En el caso del láser azul-violeta utilizado en los discos Blu-ray, la longitud de onda es menor con respecto a tecnologías anteriores, aumentando por lo tanto la apertura numérica (0,85, comparado con 0,6 para DVD). Con ello, y gracias a un sistema de lentes duales y a una cubierta protectora más delgada, el rayo láser puede enfocar de forma mucho más precisa en la superficie del disco. Dicho de otra forma, los puntos de información legibles en el disco son mucho más pequeños y, por tanto, el mismo espacio puede contener mucha más información. Por último, además de las mejoras en la tecnología óptica, estos discos incorporan un sistema mejorado de codificación de datos que permite empaquetar aún más información.&lt;br /&gt;
&lt;br /&gt;
El DVD tenía dos problemas que se intentaron resolver con la tecnología Blu-Ray, por ello la &lt;br /&gt;
estructura es distinta. En primer lugar, para la lectura en el DVD el láser debe atravesar la capa de [[policarbonato]] de 0,6mm en la que el láser se puede difractar en dos haces de luz. Si esta difracción es alta, por ejemplo si estuviera rayado, impide la lectura del disco. Pero dicho disco, al tener una capa de sólo 0,1mm se evita este problema, ya que tiene menos recorrido hasta la capa de datos; además, esta capa es resistente a rayaduras. En segundo lugar, si el disco estuviera inclinado, en el caso del DVD, por igual motivo que el anterior problema, la distorsión del rayo láser haría que leyese en una posición equivocada, dando lugar a errores. Gracias a la cercanía de la lente y la rápida convergencia del láser la distorsión es inferior, pudiéndose evitar posibles errores de lectura. &lt;br /&gt;
&lt;br /&gt;
Otra característica importante de los discos Blu-ray es su resistencia a las rayaduras y la &lt;br /&gt;
suciedad. La delgada separación entre la capa de lectura y la superficie del disco hacía estos discos más propensos a las rayaduras y suciedad que un DVD normal. Es por ello que se pensó primero en comercializarlos en una especie de carcasa o ''Caddy''. La idea fue desechada gracias a la elaboración por parte de [[TDK]] de un sustrato protector llamado [[Durabis]], que no solo compensa la fragilidad, sino que le otorga una protección extra contra las rayaduras a dicho disco. Existen también discos DVD con esta protección, pero no es tan necesaria debido al mayor espesor de la capa que separa los datos de la superficie del disco, 0,6mm.&lt;br /&gt;
&lt;br /&gt;
== Códigos de región ==&lt;br /&gt;
Cada disco de Blu-ray contiene uno o más códigos de región, los cuales denotan el lugar o las áreas del mundo a la que cada distribución está dirigida. En ocasiones, los códigos de región son llamados ''zonas''. Las especificaciones de cada equipo reproductor indican qué zona pueden reproducir.&lt;br /&gt;
&lt;br /&gt;
En teoría, esto permite que los estudios cinematográficos controlen varios aspectos del &lt;br /&gt;
lanzamiento, los cuales incluyen el contenido, la fecha y el precio, basados en la adquisición por regiones. En la práctica, varios reproductores permiten reproducir cualquier disco, o pueden ser modificados para dicho propósito. Distinto al cifrado de datos, los códigos de región permiten el bloqueo regional, que fue originado en la industria de los [[videojuegos]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;background: #f0f0f0;&amp;quot; | Código de Región !! style=&amp;quot;background: #f0f0f0;&amp;quot; | Área&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | A/1 || [[América]], [[Asia Oriental]] (excepto China continental y Mongolia), el &lt;br /&gt;
sudeste de Asia y otros países&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | B/2 || [[África]], Asia sudoccidental, [[Europa]] (con excepción de &lt;br /&gt;
[[Bielorusia]], [[Rusia]] y [[Ucrania]]), [[Oriente Medio]], [[Oceanía]] y otros países.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | C/3 || Asia central, Asia oriental ([[China]] continental y [[Mongolia]] &lt;br /&gt;
solamente), el sur de Asia, [[Eurasia]] central (incluida Rusia), y otros países.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoy en día, muchos reproductores multiregión logran desbloquear el bloqueo regional y el RCE por medio de la identificación y selección de la región compatible por el Blu-Ray, o permitiendo al usuario seleccionar una región en particular. Otros simplemente se saltan el chequeo de la región por completo. Algunos manufacturadores de reproductores de ahora proveen información libremente sobre cómo deshabilitar el bloqueo regional y, en algunos modelos recientes, aparece que ha sido deshabilitado por defecto.&lt;br /&gt;
&lt;br /&gt;
Esta práctica, para muchas personas, es una violación a los acuerdos comerciales de la &lt;br /&gt;
[[Organización Mundial del Comercio]], aunque no hay leyes que hayan sido definidas en esta área.&lt;br /&gt;
&lt;br /&gt;
== Códecs y BD-J ==&lt;br /&gt;
El Blu-ray soporta los mismos sistemas de archivo que sus predecesores, como el [[Universal Disk Format|UDF]] y el [[ISO 9660]]. Gracias a su capacidad de almacenamiento, el vídeo es de alta definición y audio de hasta 8 canales. Soporta los formatos de compresión [[MPEG-2]], [[MPEG-4]] y [[VC-1]]. Los formatos [[MPEG-4 AVC]] y [[SMPTE VC-1]] implementan algoritmos de compresión más avanzados que permiten ofrecer gran calidad (a un nivel similar).&lt;br /&gt;
&lt;br /&gt;
El formato [[MPEG-2]] se mantiene por retrocompatibilidad; es casi obsoleto (comparado con los otros), pero aun así se ha utilizado para codificar la mayor parte de las primeras películas que han salido en formato Blu-Ray. Esto es debido a que el MPEG-4 AVC tiene altos requerimientos, consumo de recursos y alto tiempo de codificación.&lt;br /&gt;
&lt;br /&gt;
El SMPTE VC-1 pertenece a un consorcio de compañías dominado por Microsoft. Esto hace que el grado de implantación del códec sea desigual, favoreciendo al [[HD DVD]]. A pesar de esto, [[Microsoft]] ha hecho un esfuerzo notable realizando seminarios para las compañías del sector, lo que ha aumentado la aceptación del VC-1.&lt;br /&gt;
&lt;br /&gt;
Es novedosa la inclusión de la plataforma Java en el estándar de las películas grabadas en Blu-ray. Esta plataforma, que ha recibido el nombre de [[BD-J]] (Blu-ray Disc Java), permite más libertad a los desarrolladores para incluir contenidos en la película. No es sólo la capacidad de desplegar un menú en cualquier momento de la reproducción, o la posibilidad de incrustar aplicaciones en el disco. También se proyecta la posibilidad de descargar contenidos adicionales desde Internet al disco. Por ejemplo, subtítulos en determinados idiomas, contenidos especiales, escenas cortadas, entre otros. Por otro lado, hay detractores que dicen que es innecesariamente complejo y las regalías por su uso son excesivas.&lt;br /&gt;
&lt;br /&gt;
Los códecs de compresión de audio soportados por Blu-ray son [[LPCM]] (sin compresión), [[DTS]], [[Dolby Digital]], [[Dolby True HD]] y [[DTS-HD]] Master Audio (hay más, pero éstos son los principales). Los tres primeros se mantienen por retrocompatibilidad respecto al DVD al igual que los de vídeo. Los dos últimos representan una gran mejora, ya que permiten la compresión sin pérdidas (en la siguiente tabla pueden ver cómo mantienen la misma frecuencia de muestreo con una alta tasa de transferencia).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !!LPCM!!DTS!!Dolby Digital!!DD True HD!!DTS-HD&lt;br /&gt;
|-&lt;br /&gt;
|Tasa de transferencia || 27Mbps || 1536Kbps || 640Kbps || 18Mbps || &lt;br /&gt;
18Mbps (HD DVD) 24,5Mbps (Blu-ray)&lt;br /&gt;
|-&lt;br /&gt;
|Canales discretos || 8 || 8 || 6 || 8 || 8&lt;br /&gt;
|-&lt;br /&gt;
|Cuantificación || 24b || 24b || 24b || 24b || 24b&lt;br /&gt;
|-&lt;br /&gt;
|Frecuencia de muestreo || 192KHz || 48KHz || 48KHz || 192KHz || &lt;br /&gt;
192KHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protecciones anticopia ==&lt;br /&gt;
Los sistemas Blu-ray incorporan cuatro sistemas anticopia: [[AACS]], [[BD+]] [[Rom-Mark]], [[SPDG]] e [[ICT]].&lt;br /&gt;
&lt;br /&gt;
=== AACS ===&lt;br /&gt;
El AACS es una mejora respecto al [[Content Scrambling System|CSS]] del [[DVD]], producto de la iniciativa de [[Disney]], Sony, [[Microsoft]], [[IBM]], [[Intel]], [[Panasonic]], [[Toshiba]] y [[Warner Brothers]]. Su principal función es el control de la distribución de contenidos. Una de sus consecuencias es que este método anticopia crea una lista negra de grabadores. Este sistema permite dar una clave para cada modelo de grabador. Esto facilita el seguimiento de qué claves son descifradas y qué grabadores permiten las copias; la consecuencia sería revocar la clave y no incluirla en siguientes reproductores, garantizando la incompatibilidad con el grabador. Esta posibilidad ha despertado gran controversia, ya que si se lleva a cabo, usuarios que nunca le dieron un uso ilegal verían cómo su grabador queda inutilizado. Por ahora han anunciado que sólo se centrarán en reproductores industriales que sean usados para la copia masiva. El sistema, en teoría, podría permitir incluso suministrar a cada reproductor individual un conjunto de claves con lo que se podría revocar las claves para dicho sistema impidiendo la reproducción sólo en él.&lt;br /&gt;
&lt;br /&gt;
En un principio, la Asociación de Discos Blu-Ray decidió incorporar la restrictiva copia gestionada &lt;br /&gt;
(MC). Inmediatamente, las compañías informáticas involucradas protestaron debido a su alta &lt;br /&gt;
restricción. Al final decidieron que el control de distribución de contenidos sería copia &lt;br /&gt;
gestionada obligatoria (MMC), usada en el [[HD DVD]], y que permite al menos una copia de un disco para enviarla a otros dispositivos. En esta decisión influyó el hecho de que HD DVD lo hubiese adoptado ya que el usuario podría decantarse por un sistema menos restrictivo en este aspecto.&lt;br /&gt;
&lt;br /&gt;
=== BD+ y Rom-Mark ===&lt;br /&gt;
Los discos Blu-ray tienen en su estándar un sistema anticopia exclusivo denominado [[BD+]]. Este sistema permite cambiar dinámicamente las claves para la protección criptográfica de los BD originales. Si una de estas claves es descubierta, los fabricantes no tienen más que cambiar la clave, de forma que las nuevas unidades del producto no puedan ser pirateadas con dicha clave descubierta. A petición de [[HP]], se añadió la posibilidad de que un usuario pueda comprar dichas claves para realizar un número limitado de copias del disco que ha comprado, quitando derechos de copia a los usuarios que utilizan este formato. El BD+ puede comprobar también si el ''hardware'' ha sido modificado e impedir la reproducción.&lt;br /&gt;
&lt;br /&gt;
También se ha acordado que los BD lleven una marca de agua digital. Bajo el nombre de Rom-Mark, esta tecnología estará presente en todos los discos originales y requiere un componente especial de ''hardware'' licenciado en grabadores específicos para poder insertar la marca de agua durante la copia. Todos los lectores de Blu-ray deben buscar esa marca. De esta manera, la [[BDA]] pretende frenar la copia masiva de este disco.&lt;br /&gt;
&lt;br /&gt;
=== SPDG ===&lt;br /&gt;
SPDG son las siglas de ''Self-Protecting Digital Content'', y es un programa que se incluirá en los reproductores. Tiene un comportamiento similar al de un sistema operativo, y evitará que los grabadores puedan grabar las películas que estén siendo visionadas. Esta también tiene su polémica, no solo por el extremismo de la política anticopia, sino porque puede suponer una grave vulnerabilidad, ya que los sistemas operativos son sensibles ante virus informáticos.&lt;br /&gt;
&lt;br /&gt;
=== ICT ===&lt;br /&gt;
[[ICT]], siglas del término inglés ''Image Constraint Token'', es una señal que evita que los &lt;br /&gt;
contenidos de alta definición viajen en soportes no cifrados y, por consiguiente, susceptibles de ser copiados. En la práctica, lo que hace es limitar la salida de vídeo a la resolución de 960x540 si el cable que va del reproductor a la televisión es analógico, aunque la televisión soporte alta definición. El ICT no es obligatorio, cada compañía decide libremente si añadirlo o no a sus títulos. Por ejemplo, [[Warner]] está a favor de su uso, mientras que Fox está en contra.&lt;br /&gt;
&lt;br /&gt;
== Retrocompatibilidad ==&lt;br /&gt;
La [[BDA]] aconseja que los reproductores de BR también reproduzcan [[DVD]], para que sean compatibles con la anterior definición. Hoy se pueden encontrar reproductores híbridos de CD, DVD, HD-DVD y Blu-ray. [[JVC]] (Victor Company of Japan) está desarrollando un ''combo'' DVD/BD de tres capas que permitiría tener en el mismo disco el estándar DVD y el BD. De esta forma se podría comprar una película que se puede ver en los reproductores de DVD actuales y, además, tener alta definición si se introduce en un reproductor Blu-ray. Dos de las capas corresponderían a un DVD de doble capa (8,6 GB) y la tercera capa correspondería al Blu-ray.&lt;br /&gt;
&lt;br /&gt;
A pesar de lo anterior, sí que hay cierta incompatibilidad insalvable, de momento. Dicho problema proviene de las cadenas de montaje. Los fabricantes se han visto obligados a realizar una gran inversión en sus máquinas para poder comenzar a crear discos Blu-ray. Esto es debido a la gran diferencia de tecnología entre este disco y el DVD, sobre todo a la capa especial de protección de los primeros. Se emplean 5 segundos en producir un Blu-ray.&lt;br /&gt;
Existe la posibilidad de crear Blu-rays híbridos: aquellos que tengan dos capas, dedicando una a ser de tipo [[DVD]]. Al principio, los estudios asociados decidieron que no sacarían títulos en esta modalidad. Pero el competidor [[HD DVD]] sí sacó títulos con esta posibilidad, lo que permite ir comprando películas a los usuarios para ver en su reproductor de DVD, y más tarde en su reproductor de HD DVD. Los estudios Blu-Ray se retractaron, y desde finales de 2006 ya existen lanzamientos en esta modalidad.&lt;br /&gt;
&lt;br /&gt;
== HD Ready, Full-HD y HDMI ==&lt;br /&gt;
&lt;br /&gt;
Este apartado trata de remarcar la diferencia entre compatibilidad y adaptación y cómo sacar el máximo partido a la alta definición del Blu-ray. Se dice por compatibilidad cualquier televisor que permita reproducir el contenido de dicho disco . Esta se logra con dispositivos que lleven el logotipo [[HD ready|HD Ready]] o 1080i, lo cual no quiere decir que se le saque el máximo partido a la alta definición puesto que sólo garantiza que la resolución mínima sea de 720 líneas en panorámico (1280x720) con búsqueda progresiva (si es en modo escalado garantiza 1920x1080). Si lo que queremos es alta definición con una resolución de 1920x1080 en modo progresivo deberán encontrarse aquellos dispositivos marcados bajo el logotipo de [[Full-HD]] o 1080p.&lt;br /&gt;
&lt;br /&gt;
La adaptación significa una conversión que implica una pérdida en la señal de audio y/o vídeo. En esta última entra el [[HDMI]], un conector que permite el envío de la señal nativa de alta definición (1920x1080, 24fps y búsqueda progresiva) para garantizar la máxima fluidez y calidad de las escenas. Cualquier otra conexión, ya sea analógica o digital tendrá que adaptarse con las lógicas consecuencias. Aún disponiendo de conector HDMI, es aconsejable buscar aquellos dispositivos que lleven la versión 1.3, ya que es la única que de momento admite todos los formatos de audio y vídeo y duplica la tasa de transferencia respecto a su versión 1.2. Cualquier conector y medio que se utilice para conectar el reproductor con el dispositivo de visionado deberá ser compatible con [[HDCP]] (HDMI lo es) so pena de que convertirá la señal antes de su salida a calidad DVD. Como se puede observar aquellos que se decidan por la alta definición deben buscar reproductores con conectores HDMI 1.3 y dispositivos con Full-HD. &lt;br /&gt;
&lt;br /&gt;
Se puede observar cómo la tecnología del Blu-ray permite una mayor tasa de transferencia para el vídeo. Esta diferencia no ha sido aprovechada en muchos casos debido a varios factores. En primer lugar la tasa es variable y depende de la compañía elegir cuál va usar, no necesariamente la máxima. Segundo, la tasa puede tener otras utilidades aparte de la transmisión del vídeo. Último, influye el ''códec'' utilizado, las compañías utilizaron en sus primeros lanzamientos el [[MPEG-2]] lo que hizo que no solo la calidad sea inferior a lo esperado en una reproducción de alta definición, sino que estaba por debajo de su competidor el [[HD DVD]] que desde el principio codificó principalmente en [[VC-1]]. La tasa de transferencia para audio también es más alta en Blu-ray que en HD DVD.&lt;br /&gt;
&lt;br /&gt;
En la tabla no se puede apreciar, pero para entender las diferencias entre el Blu-ray y HD DVD hay que darse cuenta de que mientras que la primera es una nueva tecnología que busca el aumento de prestaciones, el segundo quiere mejorar el soporte DVD sin aumentar considerablemente los costes. &lt;br /&gt;
&lt;br /&gt;
El HD DVD por tanto tiene a su favor que bastaron unas pocas modificaciones en los equipos de producción de DVD mientras que en Blu-ray ha sido necesaria la instalación de nuevos y caros equipos de producción. Es por eso que en los precios ese disco tiene mucho que perder ya que los costes son más altos, lo que se refleja por ejemplo en los lectores. Los lectores HD DVD cuestan en torno a la mitad que los Blu-ray, aunque ya en el 2007 esta diferencia bajó. Por el contrario las películas tienen un coste similar.&lt;br /&gt;
&lt;br /&gt;
En cuanto a los títulos híbridos (DVD y alta definición) parece mejor el sistema Blu-ray que permite asignar cada formato a una capa sin cambiar de cara. En HD DVD se asigna por caras con lo que se hace necesario cambiarlo. Además el soporte híbrido está limitado a dos formatos (dos caras) mientras que en dicho disco se pueden tantos como capas haya (aunque por ahora no tiene sentido añadir otros formatos existe la posibilidad de hacerlo en el futuro).&lt;br /&gt;
&lt;br /&gt;
== Blu-ray híbridos ==&lt;br /&gt;
&lt;br /&gt;
Sony está trabajando en un disco híbrido Blu-ray que incluya contenidos jugables al mismo tiempo que películas en alta definición. Esta atractiva opción seguramente supondrá un buen empujón a la trayectoria de [[PS3]]. John Koller director de marketing de la organización, informo que esto se lograra gracias dicha tecnología, debido a su exclusividad para dicha consola, definitivamente &amp;quot;cumplirá con las expectativas de venta&amp;quot; informo Koller.&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.blu-raydisc.com/ Asociación del disco Blu-ray]&lt;br /&gt;
* [http://www.blu-ray.com/ Completa página sobre el formato Blu-Ray] &lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.masadelante.com/faqs/tipos-de-dvd masadelante.com]&lt;br /&gt;
* [http://arstechnica.com/news.ars/post/20050810-5194.html Artículo sobre Blu-ray en Ars Technica] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]][[Category:Hardware_multimedia_y_gráfico]][[Category:Dispositivos_de_almacenamiento]][[Category:Discos_ópticos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634767</id>
		<title>Blue-ray</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634767"/>
		<updated>2011-06-02T18:14:14Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Normalizar}}&lt;br /&gt;
{{Objeto&lt;br /&gt;
|nombre=Blu-ray Disc&lt;br /&gt;
|imagen=BlueD.jpg&lt;br /&gt;
|descripcion=La sigla de BD corresponde a Blu-ray Disc.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Blu-ray'''. También conocido como '''Blu-ray Disc''' o '''BD''', es un formato de [[disco óptico]] de nueva generación de 12 cm de diámetro (igual que el [[CD]] y el [[DVD]]) para vídeo de gran definición y almacenamiento de datos de alta densidad. Su capacidad de almacenamiento llega a 25 [[gigabyte|GB]] a una capa y a 50 GB a doble capa, aunque los hay de mayor capacidad. La videoconsola [[PlayStation 3]] puede leer discos de hasta doble capa, y se ha confirmado que está lista para recibir el disco de 16 capas a razón de 400 GB &lt;br /&gt;
&lt;br /&gt;
==La Competencia ==&lt;br /&gt;
&lt;br /&gt;
El Blu-ray se impuso a su competidor, el [[HD DVD]], en la [[Guerra de formatos de disco ópticos de alta definición|guerra de formatos]], iniciada para cambiar el estándar [[DVD]], como en su día ocurrió entre el [[VHS]] y el [[Betamax]], o el [[fonógrafo]] y el [[gramófono]]. &lt;br /&gt;
&lt;br /&gt;
Aunque otros apuntan que el sucesor del DVD no será un disco óptico, sino la [[tarjeta de memoria]]. No obstante, se está trabajando en el [[HVD]] o Disco holográfico versátil con 3,9 [[Terabyte|TB]]. El límite de capacidad en las tarjetas de formato SD/MMC está ya en 128 GB, teniendo la ventaja de ser regrabables al menos durante 5 años. &lt;br /&gt;
&lt;br /&gt;
En febrero de 2008, después de la caída de muchos apoyos al HD DVD, [[Toshiba]] decidió abandonar la fabricación de reproductores y las investigaciones para mejorar su formato. &lt;br /&gt;
&lt;br /&gt;
Existe un tercer formato, el [[HD-VMD]], que también debe ser nombrado, ya que también está enfocado a ofrecer alta definición. Su principal desventaja es que no cuenta con el apoyo de las grandes compañías y es desconocido por gran parte del público. Por eso su principal apuesta es ofrecer lo mismo que las otras tecnologías a un precio más asequible, por ello parte de la tecnología del DVD ([[láser]] rojo). En un futuro, cuando la tecnología sobre el láser azul sea fiable y barata, tienen previsto adaptarse a ella.&lt;br /&gt;
&lt;br /&gt;
== Principio de Funcionamiento ==&lt;br /&gt;
&lt;br /&gt;
El disco Blu-ray hace uso de un rayo láser de color azul con una longitud de onda de 405 [[nanómetro]]s, a diferencia del láser rojo utilizado en lectores de DVD, que tiene una longitud de onda de 650 nanómetros. Esto, junto con otros avances tecnológicos, permite almacenar sustancialmente más [[información]] que el DVD en un disco de las mismas dimensiones y aspecto externo.&lt;br /&gt;
&lt;br /&gt;
Blu-ray obtiene su nombre del color azul del rayo láser (''blue ray'' significa ''rayo azul''). La letra ''e'' de la palabra original ''blue'' fue eliminada debido a que, en algunos países, no se puede registrar para un nombre comercial una palabra común. Fue desarrollado en conjunto por un grupo de compañías tecnológicas llamado Blu-Ray Disc Association (BDA), liderado por [[Sony]] y [[Philips]], &lt;br /&gt;
&lt;br /&gt;
El DVD ofreció en su momento una alta calidad, ya que era capaz de dar una resolución de 720x480 ([[NTSC]]) o 720x576 ([[PAL]]), lo que es ampliamente superado por la capacidad de alta definición ofrecida por el Blu-ray, que es de 1920x1080 (1080p). Este último es el formato utilizado por los estudios para archivar sus producciones, que anteriormente se convertía al formato que se quisiese exportar. Esto ya no será necesario, con lo que la industria del cine digital no tendrá que gastar esfuerzo y tiempo en el cambio de resolución de películas, lo que abaratará en menor medida costos&lt;br /&gt;
&lt;br /&gt;
== Capacidad y velocidad ==&lt;br /&gt;
Una capa de disco Blu-ray puede contener alrededor de 25 [[Gigabyte|GB]] o cerca de 6 horas de vídeo de alta definición más audio; también está en el mercado el disco de doble capa, que puede contener aproximadamente 50 GB. La velocidad de transferencia de datos es de 36 [[Mbit/s]] (54Mbps para BD-ROM), pero ya están en desarrollo prototipos a velocidad de transferencia 2x (el doble, 72Mbit por segundo). Ya está disponible el BD-RE (formato reescribible) estándar, así como los formatos BD-R (grabable) y el BD-ROM, como parte de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;|Velocidad de la unidad&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Velocidad de trasferencia&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Tiempo teórico de escritura (minutos)&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Mbit/s]]||MB/s||Una capa||Doble capa&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|1×||36 ||4,5 ||90||180&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|2×||72 ||9 ||45 ||90&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|4×||144 ||18 ||22,5 ||45&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|6×||216 ||27 ||15 ||30&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|8× ||288 ||36 ||11,25 ||22,5&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|12×&lt;br /&gt;
||432 ||54 ||7,5 ||15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
El 19 de mayo de 2005 [[TDK]] anunció un prototipo de disco Blu-ray de cuatro capas de 100 GB. &lt;br /&gt;
El 3 de octubre de 2007 [[Hitachi]] anunció que había desarrollado un prototipo de BD-ROM de 100 GB que, a diferencia de la versión de TDK y [[Panasonic]], era compatible con los lectores disponibles en el mercado y solo requerían una actualización de ''[[firmware]]''. Hitachi también comentó que está desarrollando una versión de 200 GB de capacidad. El reciente avance de Pioneer le permitió crear un disco Blu-ray de 20 capas con una capacidad total de 500 GB, aunque no sería compatible con las unidades lectoras ya disponibles en el mercado, como haría Hitachi.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
El tamaño del ''punto'' mínimo en el que un láser puede ser enfocado está limitado por la &lt;br /&gt;
[[difracción]], y depende de la [[longitud de onda]] del haz de luz y de la [[apertura numérica]] de la lente utilizada para enfocarlo. En el caso del láser azul-violeta utilizado en los discos Blu-ray, la longitud de onda es menor con respecto a tecnologías anteriores, aumentando por lo tanto la apertura numérica (0,85, comparado con 0,6 para DVD). Con ello, y gracias a un sistema de lentes duales y a una cubierta protectora más delgada, el rayo láser puede enfocar de forma mucho más precisa en la superficie del disco. Dicho de otra forma, los puntos de información legibles en el disco son mucho más pequeños y, por tanto, el mismo espacio puede contener mucha más información. Por último, además de las mejoras en la tecnología óptica, estos discos incorporan un sistema mejorado de codificación de datos que permite empaquetar aún más información.&lt;br /&gt;
&lt;br /&gt;
El DVD tenía dos problemas que se intentaron resolver con la tecnología Blu-Ray, por ello la &lt;br /&gt;
estructura es distinta. En primer lugar, para la lectura en el DVD el láser debe atravesar la capa de [[policarbonato]] de 0,6mm en la que el láser se puede difractar en dos haces de luz. Si esta difracción es alta, por ejemplo si estuviera rayado, impide la lectura del disco. Pero dicho disco, al tener una capa de sólo 0,1mm se evita este problema, ya que tiene menos recorrido hasta la capa de datos; además, esta capa es resistente a rayaduras. En segundo lugar, si el disco estuviera inclinado, en el caso del DVD, por igual motivo que el anterior problema, la distorsión del rayo láser haría que leyese en una posición equivocada, dando lugar a errores. Gracias a la cercanía de la lente y la rápida convergencia del láser la distorsión es inferior, pudiéndose evitar posibles errores de lectura. &lt;br /&gt;
&lt;br /&gt;
Otra característica importante de los discos Blu-ray es su resistencia a las rayaduras y la &lt;br /&gt;
suciedad. La delgada separación entre la capa de lectura y la superficie del disco hacía estos discos más propensos a las rayaduras y suciedad que un DVD normal. Es por ello que se pensó primero en comercializarlos en una especie de carcasa o ''Caddy''. La idea fue desechada gracias a la elaboración por parte de [[TDK]] de un sustrato protector llamado [[Durabis]], que no solo compensa la fragilidad, sino que le otorga una protección extra contra las rayaduras a dicho disco. Existen también discos DVD con esta protección, pero no es tan necesaria debido al mayor espesor de la capa que separa los datos de la superficie del disco, 0,6mm.&lt;br /&gt;
&lt;br /&gt;
== Códigos de región ==&lt;br /&gt;
Cada disco de Blu-ray contiene uno o más códigos de región, los cuales denotan el lugar o las áreas del mundo a la que cada distribución está dirigida. En ocasiones, los códigos de región son llamados ''zonas''. Las especificaciones de cada equipo reproductor indican qué zona pueden reproducir.&lt;br /&gt;
&lt;br /&gt;
En teoría, esto permite que los estudios cinematográficos controlen varios aspectos del &lt;br /&gt;
lanzamiento, los cuales incluyen el contenido, la fecha y el precio, basados en la adquisición por regiones. En la práctica, varios reproductores permiten reproducir cualquier disco, o pueden ser modificados para dicho propósito. Distinto al cifrado de datos, los códigos de región permiten el bloqueo regional, que fue originado en la industria de los [[videojuegos]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;background: #f0f0f0;&amp;quot; | Código de Región !! style=&amp;quot;background: #f0f0f0;&amp;quot; | Área&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | A/1 || [[América]], [[Asia Oriental]] (excepto China continental y Mongolia), el &lt;br /&gt;
sudeste de Asia y otros países&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | B/2 || [[África]], Asia sudoccidental, [[Europa]] (con excepción de &lt;br /&gt;
[[Bielorusia]], [[Rusia]] y [[Ucrania]]), [[Oriente Medio]], [[Oceanía]] y otros países.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | C/3 || Asia central, Asia oriental ([[China]] continental y [[Mongolia]] &lt;br /&gt;
solamente), el sur de Asia, [[Eurasia]] central (incluida Rusia), y otros países.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoy en día, muchos reproductores multiregión logran desbloquear el bloqueo regional y el RCE por medio de la identificación y selección de la región compatible por el Blu-Ray, o permitiendo al usuario seleccionar una región en particular. Otros simplemente se saltan el chequeo de la región por completo. Algunos manufacturadores de reproductores de ahora proveen información libremente sobre cómo deshabilitar el bloqueo regional y, en algunos modelos recientes, aparece que ha sido deshabilitado por defecto.&lt;br /&gt;
&lt;br /&gt;
Esta práctica, para muchas personas, es una violación a los acuerdos comerciales de la &lt;br /&gt;
[[Organización Mundial del Comercio]], aunque no hay leyes que hayan sido definidas en esta área.&lt;br /&gt;
&lt;br /&gt;
== Códecs y BD-J ==&lt;br /&gt;
El Blu-ray soporta los mismos sistemas de archivo que sus predecesores, como el [[Universal Disk Format|UDF]] y el [[ISO 9660]]. Gracias a su capacidad de almacenamiento, el vídeo es de alta definición y audio de hasta 8 canales. Soporta los formatos de compresión [[MPEG-2]], [[MPEG-4]] y [[VC-1]]. Los formatos [[MPEG-4 AVC]] y [[SMPTE VC-1]] implementan algoritmos de compresión más avanzados que permiten ofrecer gran calidad (a un nivel similar).&lt;br /&gt;
&lt;br /&gt;
El formato [[MPEG-2]] se mantiene por retrocompatibilidad; es casi obsoleto (comparado con los otros), pero aun así se ha utilizado para codificar la mayor parte de las primeras películas que han salido en formato Blu-Ray. Esto es debido a que el MPEG-4 AVC tiene altos requerimientos, consumo de recursos y alto tiempo de codificación.&lt;br /&gt;
&lt;br /&gt;
El SMPTE VC-1 pertenece a un consorcio de compañías dominado por Microsoft. Esto hace que el grado de implantación del códec sea desigual, favoreciendo al [[HD DVD]]. A pesar de esto, [[Microsoft]] ha hecho un esfuerzo notable realizando seminarios para las compañías del sector, lo que ha aumentado la aceptación del VC-1.&lt;br /&gt;
&lt;br /&gt;
Es novedosa la inclusión de la plataforma Java en el estándar de las películas grabadas en Blu-ray. Esta plataforma, que ha recibido el nombre de [[BD-J]] (Blu-ray Disc Java), permite más libertad a los desarrolladores para incluir contenidos en la película. No es sólo la capacidad de desplegar un menú en cualquier momento de la reproducción, o la posibilidad de incrustar aplicaciones en el disco. También se proyecta la posibilidad de descargar contenidos adicionales desde Internet al disco. Por ejemplo, subtítulos en determinados idiomas, contenidos especiales, escenas cortadas, entre otros. Por otro lado, hay detractores que dicen que es innecesariamente complejo y las regalías por su uso son excesivas.&lt;br /&gt;
&lt;br /&gt;
Los códecs de compresión de audio soportados por Blu-ray son [[LPCM]] (sin compresión), [[DTS]], [[Dolby Digital]], [[Dolby True HD]] y [[DTS-HD]] Master Audio (hay más, pero éstos son los principales). Los tres primeros se mantienen por retrocompatibilidad respecto al DVD al igual que los de vídeo. Los dos últimos representan una gran mejora, ya que permiten la compresión sin pérdidas (en la siguiente tabla pueden ver cómo mantienen la misma frecuencia de muestreo con una alta tasa de transferencia).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !!LPCM!!DTS!!Dolby Digital!!DD True HD!!DTS-HD&lt;br /&gt;
|-&lt;br /&gt;
|Tasa de transferencia || 27Mbps || 1536Kbps || 640Kbps || 18Mbps || &lt;br /&gt;
18Mbps (HD DVD) 24,5Mbps (Blu-ray)&lt;br /&gt;
|-&lt;br /&gt;
|Canales discretos || 8 || 8 || 6 || 8 || 8&lt;br /&gt;
|-&lt;br /&gt;
|Cuantificación || 24b || 24b || 24b || 24b || 24b&lt;br /&gt;
|-&lt;br /&gt;
|Frecuencia de muestreo || 192KHz || 48KHz || 48KHz || 192KHz || &lt;br /&gt;
192KHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protecciones anticopia ==&lt;br /&gt;
Los sistemas Blu-ray incorporan cuatro sistemas anticopia: [[AACS]], [[BD+]] [[Rom-Mark]], [[SPDG]] e [[ICT]].&lt;br /&gt;
&lt;br /&gt;
=== AACS ===&lt;br /&gt;
El AACS es una mejora respecto al [[Content Scrambling System|CSS]] del [[DVD]], producto de la iniciativa de [[Disney]], Sony, [[Microsoft]], [[IBM]], [[Intel]], [[Panasonic]], [[Toshiba]] y [[Warner Brothers]]. Su principal función es el control de la distribución de contenidos. Una de sus consecuencias es que este método anticopia crea una lista negra de grabadores. Este sistema permite dar una clave para cada modelo de grabador. Esto facilita el seguimiento de qué claves son descifradas y qué grabadores permiten las copias; la consecuencia sería revocar la clave y no incluirla en siguientes reproductores, garantizando la incompatibilidad con el grabador. Esta posibilidad ha despertado gran controversia, ya que si se lleva a cabo, usuarios que nunca le dieron un uso ilegal verían cómo su grabador queda inutilizado. Por ahora han anunciado que sólo se centrarán en reproductores industriales que sean usados para la copia masiva. El sistema, en teoría, podría permitir incluso suministrar a cada reproductor individual un conjunto de claves con lo que se podría revocar las claves para dicho sistema impidiendo la reproducción sólo en él.&lt;br /&gt;
&lt;br /&gt;
En un principio, la Asociación de Discos Blu-Ray decidió incorporar la restrictiva copia gestionada &lt;br /&gt;
(MC). Inmediatamente, las compañías informáticas involucradas protestaron debido a su alta &lt;br /&gt;
restricción. Al final decidieron que el control de distribución de contenidos sería copia &lt;br /&gt;
gestionada obligatoria (MMC), usada en el [[HD DVD]], y que permite al menos una copia de un disco para enviarla a otros dispositivos. En esta decisión influyó el hecho de que HD DVD lo hubiese adoptado ya que el usuario podría decantarse por un sistema menos restrictivo en este aspecto.&lt;br /&gt;
&lt;br /&gt;
=== BD+ y Rom-Mark ===&lt;br /&gt;
Los discos Blu-ray tienen en su estándar un sistema anticopia exclusivo denominado [[BD+]]. Este sistema permite cambiar dinámicamente las claves para la protección criptográfica de los BD originales. Si una de estas claves es descubierta, los fabricantes no tienen más que cambiar la clave, de forma que las nuevas unidades del producto no puedan ser pirateadas con dicha clave descubierta. A petición de [[HP]], se añadió la posibilidad de que un usuario pueda comprar dichas claves para realizar un número limitado de copias del disco que ha comprado, quitando derechos de copia a los usuarios que utilizan este formato. El BD+ puede comprobar también si el ''hardware'' ha sido modificado e impedir la reproducción.&lt;br /&gt;
&lt;br /&gt;
También se ha acordado que los BD lleven una marca de agua digital. Bajo el nombre de Rom-Mark, esta tecnología estará presente en todos los discos originales y requiere un componente especial de ''hardware'' licenciado en grabadores específicos para poder insertar la marca de agua durante la copia. Todos los lectores de Blu-ray deben buscar esa marca. De esta manera, la [[BDA]] pretende frenar la copia masiva de este disco.&lt;br /&gt;
&lt;br /&gt;
=== SPDG ===&lt;br /&gt;
SPDG son las siglas de ''Self-Protecting Digital Content'', y es un programa que se incluirá en los reproductores. Tiene un comportamiento similar al de un sistema operativo, y evitará que los grabadores puedan grabar las películas que estén siendo visionadas. Esta también tiene su polémica, no solo por el extremismo de la política anticopia, sino porque puede suponer una grave vulnerabilidad, ya que los sistemas operativos son sensibles ante virus informáticos.&lt;br /&gt;
&lt;br /&gt;
=== ICT ===&lt;br /&gt;
[[ICT]], siglas del término inglés ''Image Constraint Token'', es una señal que evita que los &lt;br /&gt;
contenidos de alta definición viajen en soportes no cifrados y, por consiguiente, susceptibles de ser copiados. En la práctica, lo que hace es limitar la salida de vídeo a la resolución de 960x540 si el cable que va del reproductor a la televisión es analógico, aunque la televisión soporte alta definición. El ICT no es obligatorio, cada compañía decide libremente si añadirlo o no a sus títulos. Por ejemplo, [[Warner]] está a favor de su uso, mientras que Fox está en contra.&lt;br /&gt;
&lt;br /&gt;
== Retrocompatibilidad ==&lt;br /&gt;
La [[BDA]] aconseja que los reproductores de BR también reproduzcan [[DVD]], para que sean compatibles con la anterior definición. Hoy se pueden encontrar reproductores híbridos de CD, DVD, HD-DVD y Blu-ray. [[JVC]] (Victor Company of Japan) está desarrollando un ''combo'' DVD/BD de tres capas que permitiría tener en el mismo disco el estándar DVD y el BD. De esta forma se podría comprar una película que se puede ver en los reproductores de DVD actuales y, además, tener alta definición si se introduce en un reproductor Blu-ray. Dos de las capas corresponderían a un DVD de doble capa (8,6 GB) y la tercera capa correspondería al Blu-ray.&lt;br /&gt;
&lt;br /&gt;
A pesar de lo anterior, sí que hay cierta incompatibilidad insalvable, de momento. Dicho problema proviene de las cadenas de montaje. Los fabricantes se han visto obligados a realizar una gran inversión en sus máquinas para poder comenzar a crear discos Blu-ray. Esto es debido a la gran diferencia de tecnología entre este disco y el DVD, sobre todo a la capa especial de protección de los primeros. Se emplean 5 segundos en producir un Blu-ray.&lt;br /&gt;
Existe la posibilidad de crear Blu-rays híbridos: aquellos que tengan dos capas, dedicando una a ser de tipo [[DVD]]. Al principio, los estudios asociados decidieron que no sacarían títulos en esta modalidad. Pero el competidor [[HD DVD]] sí sacó títulos con esta posibilidad, lo que permite ir comprando películas a los usuarios para ver en su reproductor de DVD, y más tarde en su reproductor de HD DVD. Los estudios Blu-Ray se retractaron, y desde finales de 2006 ya existen lanzamientos en esta modalidad.&lt;br /&gt;
&lt;br /&gt;
== HD Ready, Full-HD y HDMI ==&lt;br /&gt;
&lt;br /&gt;
Este apartado trata de remarcar la diferencia entre compatibilidad y adaptación y cómo sacar el máximo partido a la alta definición del Blu-ray. Se dice por compatibilidad cualquier televisor que permita reproducir el contenido de dicho disco . Esta se logra con dispositivos que lleven el logotipo [[HD ready|HD Ready]] o 1080i, lo cual no quiere decir que se le saque el máximo partido a la alta definición puesto que sólo garantiza que la resolución mínima sea de 720 líneas en panorámico (1280x720) con búsqueda progresiva (si es en modo escalado garantiza 1920x1080). Si lo que queremos es alta definición con una resolución de 1920x1080 en modo progresivo deberán encontrarse aquellos dispositivos marcados bajo el logotipo de [[Full-HD]] o 1080p.&lt;br /&gt;
&lt;br /&gt;
La adaptación significa una conversión que implica una pérdida en la señal de audio y/o vídeo. En esta última entra el [[HDMI]], un conector que permite el envío de la señal nativa de alta definición (1920x1080, 24fps y búsqueda progresiva) para garantizar la máxima fluidez y calidad de las escenas. Cualquier otra conexión, ya sea analógica o digital tendrá que adaptarse con las lógicas consecuencias. Aún disponiendo de conector HDMI, es aconsejable buscar aquellos dispositivos que lleven la versión 1.3, ya que es la única que de momento admite todos los formatos de audio y vídeo y duplica la tasa de transferencia respecto a su versión 1.2. Cualquier conector y medio que se utilice para conectar el reproductor con el dispositivo de visionado deberá ser compatible con [[HDCP]] (HDMI lo es) so pena de que convertirá la señal antes de su salida a calidad DVD. Como se puede observar aquellos que se decidan por la alta definición deben buscar reproductores con conectores HDMI 1.3 y dispositivos con Full-HD. &lt;br /&gt;
&lt;br /&gt;
Se puede observar cómo la tecnología del Blu-ray permite una mayor tasa de transferencia para el vídeo. Esta diferencia no ha sido aprovechada en muchos casos debido a varios factores. En primer lugar la tasa es variable y depende de la compañía elegir cuál va usar, no necesariamente la máxima. Segundo, la tasa puede tener otras utilidades aparte de la transmisión del vídeo. Último, influye el ''códec'' utilizado, las compañías utilizaron en sus primeros lanzamientos el [[MPEG-2]] lo que hizo que no solo la calidad sea inferior a lo esperado en una reproducción de alta definición, sino que estaba por debajo de su competidor el [[HD DVD]] que desde el principio codificó principalmente en [[VC-1]]. La tasa de transferencia para audio también es más alta en Blu-ray que en HD DVD.&lt;br /&gt;
&lt;br /&gt;
En la tabla no se puede apreciar, pero para entender las diferencias entre el Blu-ray y HD DVD hay que darse cuenta de que mientras que la primera es una nueva tecnología que busca el aumento de prestaciones, el segundo quiere mejorar el soporte DVD sin aumentar considerablemente los costes. &lt;br /&gt;
&lt;br /&gt;
El HD DVD por tanto tiene a su favor que bastaron unas pocas modificaciones en los equipos de producción de DVD mientras que en Blu-ray ha sido necesaria la instalación de nuevos y caros equipos de producción. Es por eso que en los precios ese disco tiene mucho que perder ya que los costes son más altos, lo que se refleja por ejemplo en los lectores. Los lectores HD DVD cuestan en torno a la mitad que los Blu-ray, aunque ya en el 2007 esta diferencia bajó. Por el contrario las películas tienen un coste similar.&lt;br /&gt;
&lt;br /&gt;
En cuanto a los títulos híbridos (DVD y alta definición) parece mejor el sistema Blu-ray que permite asignar cada formato a una capa sin cambiar de cara. En HD DVD se asigna por caras con lo que se hace necesario cambiarlo. Además el soporte híbrido está limitado a dos formatos (dos caras) mientras que en dicho disco se pueden tantos como capas haya (aunque por ahora no tiene sentido añadir otros formatos existe la posibilidad de hacerlo en el futuro).&lt;br /&gt;
&lt;br /&gt;
== Blu-ray híbridos ==&lt;br /&gt;
&lt;br /&gt;
Sony está trabajando en un disco híbrido Blu-ray que incluya contenidos jugables al mismo tiempo que películas en alta definición. Esta atractiva opción seguramente supondrá un buen empujón a la trayectoria de [[PS3]]. John Koller director de marketing de la organización, informo que esto se lograra gracias dicha tecnología, debido a su exclusividad para dicha consola, definitivamente &amp;quot;cumplirá con las expectativas de venta&amp;quot; informo Koller.&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.blu-raydisc.com/ Asociación del disco Blu-ray]&lt;br /&gt;
* [http://www.blu-ray.com/ Completa página sobre el formato Blu-Ray] &lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.masadelante.com/faqs/tipos-de-dvd masadelante.com]&lt;br /&gt;
* [http://arstechnica.com/news.ars/post/20050810-5194.html Artículo sobre Blu-ray en Ars Technica] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]][[Category:Hardware_multimedia_y_gráfico]][[Category:Dispositivos_de_almacenamiento]][[Category:Discos_ópticos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634754</id>
		<title>Blue-ray</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Blue-ray&amp;diff=634754"/>
		<updated>2011-06-02T18:11:17Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Normalizar}}&lt;br /&gt;
{{Objeto&lt;br /&gt;
|nombre=Blu-ray Disc&lt;br /&gt;
|imagen=BlueD.jpg&lt;br /&gt;
|descripcion=La sigla de BD corresponde a Blu-ray Disc.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Blu-ray'''. También conocido como '''Blu-ray Disc''' o '''BD''', es un formato de [[disco óptico]] de nueva generación de 12 cm de diámetro (igual que el [[CD]] y el [[DVD]]) para vídeo de gran definición y almacenamiento de datos de alta densidad. Su capacidad de almacenamiento llega a 25 [[gigabyte|GB]] a una capa y a 50 GB a doble capa, aunque los hay de mayor capacidad. La videoconsola [[PlayStation 3]] puede leer discos de hasta doble capa, y se ha confirmado que está lista para recibir el disco de 16 capas a razón de 400 GB &lt;br /&gt;
&lt;br /&gt;
==La Competencia ==&lt;br /&gt;
&lt;br /&gt;
El Blu-ray se impuso a su competidor, el [[HD DVD]], en la [[Guerra de formatos de disco ópticos de alta definición|guerra de formatos]], iniciada para cambiar el estándar [[DVD]], como en su día ocurrió entre el [[VHS]] y el [[Betamax]], o el [[fonógrafo]] y el [[gramófono]]. &lt;br /&gt;
&lt;br /&gt;
Aunque otros apuntan que el sucesor del DVD no será un disco óptico, sino la [[tarjeta de memoria]]. No obstante, se está trabajando en el [[HVD]] o Disco holográfico versátil con 3,9 [[Terabyte|TB]]. El límite de capacidad en las tarjetas de formato SD/MMC está ya en 128 GB, teniendo la ventaja de ser regrabables al menos durante 5 años. &lt;br /&gt;
&lt;br /&gt;
En febrero de 2008, después de la caída de muchos apoyos al HD DVD, [[Toshiba]] decidió abandonar la fabricación de reproductores y las investigaciones para mejorar su formato. &lt;br /&gt;
&lt;br /&gt;
Existe un tercer formato, el [[HD-VMD]], que también debe ser nombrado, ya que también está enfocado a ofrecer alta definición. Su principal desventaja es que no cuenta con el apoyo de las grandes compañías y es desconocido por gran parte del público. Por eso su principal apuesta es ofrecer lo mismo que las otras tecnologías a un precio más asequible, por ello parte de la tecnología del DVD ([[láser]] rojo). En un futuro, cuando la tecnología sobre el láser azul sea fiable y barata, tienen previsto adaptarse a ella.&lt;br /&gt;
&lt;br /&gt;
== Principio de Funcionamiento ==&lt;br /&gt;
&lt;br /&gt;
El disco Blu-ray hace uso de un rayo láser de color azul con una longitud de onda de 405 [[nanómetro]]s, a diferencia del láser rojo utilizado en lectores de DVD, que tiene una longitud de onda de 650 nanómetros. Esto, junto con otros avances tecnológicos, permite almacenar sustancialmente más [[información]] que el DVD en un disco de las mismas dimensiones y aspecto externo.&lt;br /&gt;
&lt;br /&gt;
Blu-ray obtiene su nombre del color azul del rayo láser (''blue ray'' significa ''rayo azul''). La letra ''e'' de la palabra original ''blue'' fue eliminada debido a que, en algunos países, no se puede registrar para un nombre comercial una palabra común. Fue desarrollado en conjunto por un grupo de compañías tecnológicas llamado Blu-Ray Disc Association (BDA), liderado por [[Sony]] y [[Philips]], &lt;br /&gt;
&lt;br /&gt;
El DVD ofreció en su momento una alta calidad, ya que era capaz de dar una resolución de 720x480 ([[NTSC]]) o 720x576 ([[PAL]]), lo que es ampliamente superado por la capacidad de alta definición ofrecida por el Blu-ray, que es de 1920x1080 (1080p). Este último es el formato utilizado por los estudios para archivar sus producciones, que anteriormente se convertía al formato que se quisiese exportar. Esto ya no será necesario, con lo que la industria del cine digital no tendrá que gastar esfuerzo y tiempo en el cambio de resolución de películas, lo que abaratará en menor medida costos&lt;br /&gt;
&lt;br /&gt;
== Capacidad y velocidad ==&lt;br /&gt;
Una capa de disco Blu-ray puede contener alrededor de 25 [[Gigabyte|GB]] o cerca de 6 horas de vídeo de alta definición más audio; también está en el mercado el disco de doble capa, que puede contener aproximadamente 50 GB. La velocidad de transferencia de datos es de 36 [[Mbit/s]] (54Mbps para BD-ROM), pero ya están en desarrollo prototipos a velocidad de transferencia 2x (el doble, 72Mbit por segundo). Ya está disponible el BD-RE (formato reescribible) estándar, así como los formatos BD-R (grabable) y el BD-ROM, como parte de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;|Velocidad de la unidad&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Velocidad de trasferencia&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot;|Tiempo teórico de escritura (minutos)&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[Mbit/s]]||MB/s||Una capa||Doble capa&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|1×||36 ||4,5 ||90||180&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|2×||72 ||9 ||45 ||90&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|4×||144 ||18 ||22,5 ||45&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|6×||216 ||27 ||15 ||30&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|8× ||288 ||36 ||11,25 ||22,5&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|12×&lt;br /&gt;
||432 ||54 ||7,5 ||15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
El 19 de mayo de 2005 [[TDK]] anunció un prototipo de disco Blu-ray de cuatro capas de 100 GB. &lt;br /&gt;
El 3 de octubre de 2007 [[Hitachi]] anunció que había desarrollado un prototipo de BD-ROM de 100 GB que, a diferencia de la versión de TDK y [[Panasonic]], era compatible con los lectores disponibles en el mercado y solo requerían una actualización de ''[[firmware]]''. Hitachi también comentó que está desarrollando una versión de 200 GB de capacidad. El reciente avance de Pioneer le permitió crear un disco Blu-ray de 20 capas con una capacidad total de 500 GB, aunque no sería compatible con las unidades lectoras ya disponibles en el mercado, como haría Hitachi.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
El tamaño del ''punto'' mínimo en el que un láser puede ser enfocado está limitado por la &lt;br /&gt;
[[difracción]], y depende de la [[longitud de onda]] del haz de luz y de la [[apertura numérica]] de la lente utilizada para enfocarlo. En el caso del láser azul-violeta utilizado en los discos Blu-ray, la longitud de onda es menor con respecto a tecnologías anteriores, aumentando por lo tanto la apertura numérica (0,85, comparado con 0,6 para DVD). Con ello, y gracias a un sistema de lentes duales y a una cubierta protectora más delgada, el rayo láser puede enfocar de forma mucho más precisa en la superficie del disco. Dicho de otra forma, los puntos de información legibles en el disco son mucho más pequeños y, por tanto, el mismo espacio puede contener mucha más información. Por último, además de las mejoras en la tecnología óptica, estos discos incorporan un sistema mejorado de codificación de datos que permite empaquetar aún más información.&lt;br /&gt;
&lt;br /&gt;
El DVD tenía dos problemas que se intentaron resolver con la tecnología Blu-Ray, por ello la &lt;br /&gt;
estructura es distinta. En primer lugar, para la lectura en el DVD el láser debe atravesar la capa de [[policarbonato]] de 0,6mm en la que el láser se puede difractar en dos haces de luz. Si esta difracción es alta, por ejemplo si estuviera rayado, impide la lectura del disco. Pero dicho disco, al tener una capa de sólo 0,1mm se evita este problema, ya que tiene menos recorrido hasta la capa de datos; además, esta capa es resistente a rayaduras. En segundo lugar, si el disco estuviera inclinado, en el caso del DVD, por igual motivo que el anterior problema, la distorsión del rayo láser haría que leyese en una posición equivocada, dando lugar a errores. Gracias a la cercanía de la lente y la rápida convergencia del láser la distorsión es inferior, pudiéndose evitar posibles errores de lectura. &lt;br /&gt;
&lt;br /&gt;
Otra característica importante de los discos Blu-ray es su resistencia a las rayaduras y la &lt;br /&gt;
suciedad. La delgada separación entre la capa de lectura y la superficie del disco hacía estos discos más propensos a las rayaduras y suciedad que un DVD normal. Es por ello que se pensó primero en comercializarlos en una especie de carcasa o ''Caddy''. La idea fue desechada gracias a la elaboración por parte de [[TDK]] de un sustrato protector llamado [[Durabis]], que no solo compensa la fragilidad, sino que le otorga una protección extra contra las rayaduras a dicho disco. Existen también discos DVD con esta protección, pero no es tan necesaria debido al mayor espesor de la capa que separa los datos de la superficie del disco, 0,6mm.&lt;br /&gt;
&lt;br /&gt;
== Códigos de región ==&lt;br /&gt;
Cada disco de Blu-ray contiene uno o más códigos de región, los cuales denotan el lugar o las áreas del mundo a la que cada distribución está dirigida. En ocasiones, los códigos de región son llamados ''zonas''. Las especificaciones de cada equipo reproductor indican qué zona pueden reproducir.&lt;br /&gt;
&lt;br /&gt;
En teoría, esto permite que los estudios cinematográficos controlen varios aspectos del &lt;br /&gt;
lanzamiento, los cuales incluyen el contenido, la fecha y el precio, basados en la adquisición por regiones. En la práctica, varios reproductores permiten reproducir cualquier disco, o pueden ser modificados para dicho propósito. Distinto al cifrado de datos, los códigos de región permiten el bloqueo regional, que fue originado en la industria de los [[videojuegos]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;background: #f0f0f0;&amp;quot; | Código de Región !! style=&amp;quot;background: #f0f0f0;&amp;quot; | Área&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | A/1 || [[América]], [[Asia Oriental]] (excepto China continental y Mongolia), el &lt;br /&gt;
sudeste de Asia y otros países&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | B/2 || [[África]], Asia sudoccidental, [[Europa]] (con excepción de &lt;br /&gt;
[[Bielorusia]], [[Rusia]] y [[Ucrania]]), [[Oriente Medio]], [[Oceanía]] y otros países.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | C/3 || Asia central, Asia oriental ([[China]] continental y [[Mongolia]] &lt;br /&gt;
solamente), el sur de Asia, [[Eurasia]] central (incluida Rusia), y otros países.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoy en día, muchos reproductores multiregión logran desbloquear el bloqueo regional y el RCE por medio de la identificación y selección de la región compatible por el Blu-Ray, o permitiendo al usuario seleccionar una región en particular. Otros simplemente se saltan el chequeo de la región por completo. Algunos manufacturadores de reproductores de ahora proveen información libremente sobre cómo deshabilitar el bloqueo regional y, en algunos modelos recientes, aparece que ha sido deshabilitado por defecto.&lt;br /&gt;
&lt;br /&gt;
Esta práctica, para muchas personas, es una violación a los acuerdos comerciales de la &lt;br /&gt;
[[Organización Mundial del Comercio]], aunque no hay leyes que hayan sido definidas en esta área.&lt;br /&gt;
&lt;br /&gt;
== Códecs y BD-J ==&lt;br /&gt;
El Blu-ray soporta los mismos sistemas de archivo que sus predecesores, como el [[Universal Disk Format|UDF]] y el [[ISO 9660]]. Gracias a su capacidad de almacenamiento, el vídeo es de alta definición y audio de hasta 8 canales. Soporta los formatos de compresión [[MPEG-2]], [[MPEG-4]] y [[VC-1]]. Los formatos [[MPEG-4 AVC]] y [[SMPTE VC-1]] implementan algoritmos de compresión más avanzados que permiten ofrecer gran calidad (a un nivel similar).&lt;br /&gt;
&lt;br /&gt;
El formato [[MPEG-2]] se mantiene por retrocompatibilidad; es casi obsoleto (comparado con los otros), pero aun así se ha utilizado para codificar la mayor parte de las primeras películas que han salido en formato Blu-Ray. Esto es debido a que el MPEG-4 AVC tiene altos requerimientos, consumo de recursos y alto tiempo de codificación.&lt;br /&gt;
&lt;br /&gt;
El SMPTE VC-1 pertenece a un consorcio de compañías dominado por Microsoft. Esto hace que el grado de implantación del códec sea desigual, favoreciendo al [[HD DVD]]. A pesar de esto, [[Microsoft]] ha hecho un esfuerzo notable realizando seminarios para las compañías del sector, lo que ha aumentado la aceptación del VC-1.&lt;br /&gt;
&lt;br /&gt;
Es novedosa la inclusión de la plataforma Java en el estándar de las películas grabadas en Blu-ray. Esta plataforma, que ha recibido el nombre de [[BD-J]] (Blu-ray Disc Java), permite más libertad a los desarrolladores para incluir contenidos en la película. No es sólo la capacidad de desplegar un menú en cualquier momento de la reproducción, o la posibilidad de incrustar aplicaciones en el disco. También se proyecta la posibilidad de descargar contenidos adicionales desde Internet al disco. Por ejemplo, subtítulos en determinados idiomas, contenidos especiales, escenas cortadas, entre otros. Por otro lado, hay detractores que dicen que es innecesariamente complejo y las regalías por su uso son excesivas.&lt;br /&gt;
&lt;br /&gt;
Los códecs de compresión de audio soportados por Blu-ray son [[LPCM]] (sin compresión), [[DTS]], [[Dolby Digital]], [[Dolby True HD]] y [[DTS-HD]] Master Audio (hay más, pero éstos son los principales). Los tres primeros se mantienen por retrocompatibilidad respecto al DVD al igual que los de vídeo. Los dos últimos representan una gran mejora, ya que permiten la compresión sin pérdidas (en la siguiente tabla pueden ver cómo mantienen la misma frecuencia de muestreo con una alta tasa de transferencia).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !!LPCM!!DTS!!Dolby Digital!!DD True HD!!DTS-HD&lt;br /&gt;
|-&lt;br /&gt;
|Tasa de transferencia || 27Mbps || 1536Kbps || 640Kbps || 18Mbps || &lt;br /&gt;
18Mbps (HD DVD) 24,5Mbps (Blu-ray)&lt;br /&gt;
|-&lt;br /&gt;
|Canales discretos || 8 || 8 || 6 || 8 || 8&lt;br /&gt;
|-&lt;br /&gt;
|Cuantificación || 24b || 24b || 24b || 24b || 24b&lt;br /&gt;
|-&lt;br /&gt;
|Frecuencia de muestreo || 192KHz || 48KHz || 48KHz || 192KHz || &lt;br /&gt;
192KHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Protecciones anticopia ==&lt;br /&gt;
Los sistemas Blu-ray incorporan cuatro sistemas anticopia: [[AACS]], [[BD+]] [[Rom-Mark]], [[SPDG]] e [[ICT]].&lt;br /&gt;
&lt;br /&gt;
=== AACS ===&lt;br /&gt;
El AACS es una mejora respecto al [[Content Scrambling System|CSS]] del [[DVD]], producto de la iniciativa de [[Disney]], Sony, [[Microsoft]], [[IBM]], [[Intel]], [[Panasonic]], [[Toshiba]] y [[Warner Brothers]]. Su principal función es el control de la distribución de contenidos. Una de sus consecuencias es que este método anticopia crea una lista negra de grabadores. Este sistema permite dar una clave para cada modelo de grabador. Esto facilita el seguimiento de qué claves son descifradas y qué grabadores permiten las copias; la consecuencia sería revocar la clave y no incluirla en siguientes reproductores, garantizando la incompatibilidad con el grabador. Esta posibilidad ha despertado gran controversia, ya que si se lleva a cabo, usuarios que nunca le dieron un uso ilegal verían cómo su grabador queda inutilizado. Por ahora han anunciado que sólo se centrarán en reproductores industriales que sean usados para la copia masiva. El sistema, en teoría, podría permitir incluso suministrar a cada reproductor individual un conjunto de claves con lo que se podría revocar las claves para dicho sistema impidiendo la reproducción sólo en él.&lt;br /&gt;
&lt;br /&gt;
En un principio, la Asociación de Discos Blu-Ray decidió incorporar la restrictiva copia gestionada &lt;br /&gt;
(MC). Inmediatamente, las compañías informáticas involucradas protestaron debido a su alta &lt;br /&gt;
restricción. Al final decidieron que el control de distribución de contenidos sería copia &lt;br /&gt;
gestionada obligatoria (MMC), usada en el [[HD DVD]], y que permite al menos una copia de un disco para enviarla a otros dispositivos. En esta decisión influyó el hecho de que HD DVD lo hubiese adoptado ya que el usuario podría decantarse por un sistema menos restrictivo en este aspecto.&lt;br /&gt;
&lt;br /&gt;
=== BD+ y Rom-Mark ===&lt;br /&gt;
Los discos Blu-ray tienen en su estándar un sistema anticopia exclusivo denominado [[BD+]]. Este sistema permite cambiar dinámicamente las claves para la protección criptográfica de los BD originales. Si una de estas claves es descubierta, los fabricantes no tienen más que cambiar la clave, de forma que las nuevas unidades del producto no puedan ser pirateadas con dicha clave descubierta. A petición de [[HP]], se añadió la posibilidad de que un usuario pueda comprar dichas claves para realizar un número limitado de copias del disco que ha comprado, quitando derechos de copia a los usuarios que utilizan este formato. El BD+ puede comprobar también si el ''hardware'' ha sido modificado e impedir la reproducción.&lt;br /&gt;
&lt;br /&gt;
También se ha acordado que los BD lleven una marca de agua digital. Bajo el nombre de Rom-Mark, esta tecnología estará presente en todos los discos originales y requiere un componente especial de ''hardware'' licenciado en grabadores específicos para poder insertar la marca de agua durante la copia. Todos los lectores de Blu-ray deben buscar esa marca. De esta manera, la [[BDA]] pretende frenar la copia masiva de este disco.&lt;br /&gt;
&lt;br /&gt;
=== SPDG ===&lt;br /&gt;
SPDG son las siglas de ''Self-Protecting Digital Content'', y es un programa que se incluirá en los reproductores. Tiene un comportamiento similar al de un sistema operativo, y evitará que los grabadores puedan grabar las películas que estén siendo visionadas. Esta también tiene su polémica, no solo por el extremismo de la política anticopia, sino porque puede suponer una grave vulnerabilidad, ya que los sistemas operativos son sensibles ante virus informáticos.&lt;br /&gt;
&lt;br /&gt;
=== ICT ===&lt;br /&gt;
[[ICT]], siglas del término inglés ''Image Constraint Token'', es una señal que evita que los &lt;br /&gt;
contenidos de alta definición viajen en soportes no cifrados y, por consiguiente, susceptibles de ser copiados. En la práctica, lo que hace es limitar la salida de vídeo a la resolución de 960x540 si el cable que va del reproductor a la televisión es analógico, aunque la televisión soporte alta definición. El ICT no es obligatorio, cada compañía decide libremente si añadirlo o no a sus títulos. Por ejemplo, [[Warner]] está a favor de su uso, mientras que Fox está en contra.&lt;br /&gt;
&lt;br /&gt;
== Retrocompatibilidad ==&lt;br /&gt;
La [[BDA]] aconseja que los reproductores de BR también reproduzcan [[DVD]], para que sean compatibles con la anterior definición. Hoy se pueden encontrar reproductores híbridos de CD, DVD, HD-DVD y Blu-ray. [[JVC]] (Victor Company of Japan) está desarrollando un ''combo'' DVD/BD de tres capas que permitiría tener en el mismo disco el estándar DVD y el BD. De esta forma se podría comprar una película que se puede ver en los reproductores de DVD actuales y, además, tener alta definición si se introduce en un reproductor Blu-ray. Dos de las capas corresponderían a un DVD de doble capa (8,6 GB) y la tercera capa correspondería al Blu-ray.&lt;br /&gt;
&lt;br /&gt;
A pesar de lo anterior, sí que hay cierta incompatibilidad insalvable, de momento. Dicho problema proviene de las cadenas de montaje. Los fabricantes se han visto obligados a realizar una gran inversión en sus máquinas para poder comenzar a crear discos Blu-ray. Esto es debido a la gran diferencia de tecnología entre este disco y el DVD, sobre todo a la capa especial de protección de los primeros. Se emplean 5 segundos en producir un Blu-ray.&lt;br /&gt;
Existe la posibilidad de crear Blu-rays híbridos: aquellos que tengan dos capas, dedicando una a ser de tipo [[DVD]]. Al principio, los estudios asociados decidieron que no sacarían títulos en esta modalidad. Pero el competidor [[HD DVD]] sí sacó títulos con esta posibilidad, lo que permite ir comprando películas a los usuarios para ver en su reproductor de DVD, y más tarde en su reproductor de HD DVD. Los estudios Blu-Ray se retractaron, y desde finales de 2006 ya existen lanzamientos en esta modalidad.&lt;br /&gt;
&lt;br /&gt;
== HD Ready, Full-HD y HDMI ==&lt;br /&gt;
&lt;br /&gt;
Este apartado trata de remarcar la diferencia entre compatibilidad y adaptación y cómo sacar el máximo partido a la alta definición del Blu-ray. Se dice por compatibilidad cualquier televisor que permita reproducir el contenido de dicho disco . Esta se logra con dispositivos que lleven el logotipo [[HD ready|HD Ready]] o 1080i, lo cual no quiere decir que se le saque el máximo partido a la alta definición puesto que sólo garantiza que la resolución mínima sea de 720 líneas en panorámico (1280x720) con búsqueda progresiva (si es en modo escalado garantiza 1920x1080). Si lo que queremos es alta definición con una resolución de 1920x1080 en modo progresivo deberán encontrarse aquellos dispositivos marcados bajo el logotipo de [[Full-HD]] o 1080p.&lt;br /&gt;
&lt;br /&gt;
La adaptación significa una conversión que implica una pérdida en la señal de audio y/o vídeo. En esta última entra el [[HDMI]], un conector que permite el envío de la señal nativa de alta definición (1920x1080, 24fps y búsqueda progresiva) para garantizar la máxima fluidez y calidad de las escenas. Cualquier otra conexión, ya sea analógica o digital tendrá que adaptarse con las lógicas consecuencias. Aún disponiendo de conector HDMI, es aconsejable buscar aquellos dispositivos que lleven la versión 1.3, ya que es la única que de momento admite todos los formatos de audio y vídeo y duplica la tasa de transferencia respecto a su versión 1.2. Cualquier conector y medio que se utilice para conectar el reproductor con el dispositivo de visionado deberá ser compatible con [[HDCP]] (HDMI lo es) so pena de que convertirá la señal antes de su salida a calidad DVD. Como se puede observar aquellos que se decidan por la alta definición deben buscar reproductores con conectores HDMI 1.3 y dispositivos con Full-HD. &lt;br /&gt;
&lt;br /&gt;
Se puede observar cómo la tecnología del Blu-ray permite una mayor tasa de transferencia para el vídeo. Esta diferencia no ha sido aprovechada en muchos casos debido a varios factores. En primer lugar la tasa es variable y depende de la compañía elegir cuál va usar, no necesariamente la máxima. Segundo, la tasa puede tener otras utilidades aparte de la transmisión del vídeo. Último, influye el ''códec'' utilizado, las compañías utilizaron en sus primeros lanzamientos el [[MPEG-2]] lo que hizo que no solo la calidad sea inferior a lo esperado en una reproducción de alta definición, sino que estaba por debajo de su competidor el [[HD DVD]] que desde el principio codificó principalmente en [[VC-1]]. La tasa de transferencia para audio también es más alta en Blu-ray que en HD DVD.&lt;br /&gt;
&lt;br /&gt;
En la tabla no se puede apreciar, pero para entender las diferencias entre el Blu-ray y HD DVD hay que darse cuenta de que mientras que la primera es una nueva tecnología que busca el aumento de prestaciones, el segundo quiere mejorar el soporte DVD sin aumentar considerablemente los costes. &lt;br /&gt;
&lt;br /&gt;
El HD DVD por tanto tiene a su favor que bastaron unas pocas modificaciones en los equipos de producción de DVD mientras que en Blu-ray ha sido necesaria la instalación de nuevos y caros equipos de producción. Es por eso que en los precios ese disco tiene mucho que perder ya que los costes son más altos, lo que se refleja por ejemplo en los lectores. Los lectores HD DVD cuestan en torno a la mitad que los Blu-ray, aunque ya en el 2007 esta diferencia bajó. Por el contrario las películas tienen un coste similar.&lt;br /&gt;
&lt;br /&gt;
En cuanto a los títulos híbridos (DVD y alta definición) parece mejor el sistema Blu-ray que permite asignar cada formato a una capa sin cambiar de cara. En HD DVD se asigna por caras con lo que se hace necesario cambiarlo. Además el soporte híbrido está limitado a dos formatos (dos caras) mientras que en dicho disco se pueden tantos como capas haya (aunque por ahora no tiene sentido añadir otros formatos existe la posibilidad de hacerlo en el futuro).&lt;br /&gt;
&lt;br /&gt;
== Blu-ray híbridos ==&lt;br /&gt;
&lt;br /&gt;
Sony está trabajando en un disco híbrido Blu-ray que incluya contenidos jugables al mismo tiempo que películas en alta definición. Esta atractiva opción seguramente supondrá un buen empujón a la trayectoria de [[PS3]]. John Koller director de marketing de la organización, informo que esto se lograra gracias dicha tecnología, debido a su exclusividad para dicha consola, definitivamente &amp;quot;cumplirá con las expectativas de venta&amp;quot; informo Koller.&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.blu-raydisc.com/ Asociación del disco Blu-ray]&lt;br /&gt;
* [http://www.blu-ray.com/ Completa página sobre el formato Blu-Ray] &lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.masadelante.com/faqs/tipos-de-dvd masadelante.com]&lt;br /&gt;
* [http://arstechnica.com/news.ars/post/20050810-5194.html Artículo sobre Blu-ray en Ars Technica] &lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]][[Category:Hardware_multimedia_y_gráfico]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Lenguaje_de_Programaci%C3%B3n_C_Sharp&amp;diff=628174</id>
		<title>Lenguaje de Programación C Sharp</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Lenguaje_de_Programaci%C3%B3n_C_Sharp&amp;diff=628174"/>
		<updated>2011-05-31T15:14:04Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre= C#&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen= Cshar1.JPG&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción= Lenguaje de Programación Orientado a Objetos.&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=&lt;br /&gt;
|desarrollador= [[Microsoft]] Corporation.&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial= [[2001]]&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos= &lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia= Comercial.&lt;br /&gt;
|premios=&lt;br /&gt;
|web= http://www.microsoft.com/net&lt;br /&gt;
}}&lt;br /&gt;
'''C#''' (pronunciado si sharp en inglés) es un lenguaje de programación orientado a objetos desarrollado y estandarizado por [[Microsoft]] como parte de su [[plataforma .NET]], que después fue aprobado como un estándar por la [[ECMA]] e [[ISO]]. &lt;br /&gt;
&lt;br /&gt;
== Características  ==&lt;br /&gt;
&lt;br /&gt;
Su sintaxis básica deriva de [[Lenguaje de programación C|C]]/[[C++]] y utiliza el modelo de objetos de la plataforma.NET el cual es similar al de [[Lenguaje de programación Java|Java]] aunque incluye mejoras derivadas de otros lenguajes (entre ellos [[Delphi]]).&lt;br /&gt;
&lt;br /&gt;
La creación del nombre del lenguaje, C♯, proviene de dibujar dos signos positivos encima de los dos signos positivos de &amp;quot;C++&amp;quot;, queriendo dar una imagen de salto evolutivo del mismo modo que ocurrió con el paso de C a C++.&lt;br /&gt;
&lt;br /&gt;
C♯, como parte de la plataforma.NET, está normalizado por [[ECMA]] desde diciembre de 2001 ([http://www.ecma-international.org/publications/standards/Ecma-334.htm C# Language Specification] &amp;quot;Especificación del lenguaje C♯&amp;quot;). El 7 de noviembre de 2005  salió la versión 2.0 del lenguaje que incluía mejoras tales como tipos genéricos, métodos anónimos, iteradores, tipos parciales y tipos anulables. El 19 de noviembre de 2007 salió la versión 3.0 de C# destacando entre las mejoras los tipos implícitos, [[tipos anónimos]] y  [[LINQ]] (''Language Integrated Query'' -consulta integrada en el lenguaje).&lt;br /&gt;
&lt;br /&gt;
Aunque C♯ forma parte de la plataforma.NET, ésta es una [[interfaz de programación de aplicaciones]] ('''API'''); mientras que C♯ es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un [[compilador]] implementado que provee el marco de [[DotGNU]] - [[Proyecto Mono|Mono]] que genera programas para distintas plataformas como [[Win32]], [[UNIX]] y [[Linux]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Historia ==&lt;br /&gt;
Durante el desarrollo de la plataforma .NET, las [[bibliotecas de clases]] fueron escritas originalmente en el lenguaje compilador [[Simple Managed C]]. En enero de [[1999]], [[Anders Hejlsberg]] formó un equipo con la misión de desarrollar un nuevo lenguaje de programación llamado Cool (C [[Lenguaje orientado a objetos|Orientado a Objetos]]). Este nombre tuvo que ser cambiado debido a problemas de marca pasando a llamarse C♯ aunque habitualmente se escribe C#.&amp;lt;ref&amp;gt;Visual C# Developer Center, [http://msdn.microsoft.com/en-us/vcsharp/aa336779.aspx Frequently Asked Questions About Visual C# .NET 2003]&amp;lt;/ref&amp;gt; La biblioteca de clases de la plataforma .NET fue migrada entonces al nuevo lenguaje.&lt;br /&gt;
&lt;br /&gt;
[[Hejlsberg]] lideró el proyecto de desarrollo de C♯. Anteriormente, ya participó en el desarrollo de otros lenguajes como [[Turbo Pascal]], [[J++]] y [[Borland Delphi]]&lt;br /&gt;
&lt;br /&gt;
== Tipos de datos ==&lt;br /&gt;
C♯ contiene dos categorías generales de tipos de datos integrados: '''tipos de valor''' y '''tipos de referencia'''. El término '''tipo de valor''' indica que esos tipos contienen directamente sus valores. &lt;br /&gt;
&lt;br /&gt;
C♯ define ocho tipos de enteros, a saber:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=4 | Tipo de datos de enteros&lt;br /&gt;
|-&lt;br /&gt;
! Tipo&lt;br /&gt;
! Ancho en bits&lt;br /&gt;
! Rango&lt;br /&gt;
! Significado&lt;br /&gt;
|-&lt;br /&gt;
| '''byte'''&lt;br /&gt;
| 8&lt;br /&gt;
| De 0 a 255&lt;br /&gt;
| Entero sin signo de 8 bits&lt;br /&gt;
|-&lt;br /&gt;
| '''sbyte'''&lt;br /&gt;
| 8&lt;br /&gt;
| De -128 a 127&lt;br /&gt;
| Entero con signo de 8 bits&lt;br /&gt;
|-&lt;br /&gt;
| '''short'''&lt;br /&gt;
| 16&lt;br /&gt;
| De -32.768 a 32.767&lt;br /&gt;
| Entero corto&lt;br /&gt;
|-&lt;br /&gt;
| '''ushort'''&lt;br /&gt;
| 16&lt;br /&gt;
| De 0 a 65.535&lt;br /&gt;
| Entero corto sin signo&lt;br /&gt;
|-&lt;br /&gt;
| '''int'''&lt;br /&gt;
| 32&lt;br /&gt;
| De -2.147.483.648 a 2.147.483.647&lt;br /&gt;
| Entero medio&lt;br /&gt;
|-&lt;br /&gt;
| '''uint'''&lt;br /&gt;
| 32&lt;br /&gt;
| De 0 a 4.294.967.295&lt;br /&gt;
| Entero medio sin signo&lt;br /&gt;
|-&lt;br /&gt;
| '''long'''&lt;br /&gt;
| 64&lt;br /&gt;
| De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807&lt;br /&gt;
| Entero largo&lt;br /&gt;
|-&lt;br /&gt;
| '''ulong'''&lt;br /&gt;
| 64&lt;br /&gt;
| De 0 a 18.446.744.073.709.551.615&lt;br /&gt;
| Entero largo sin signo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Los tipos de [[punto flotante]] pueden representar números con [[componentes fraccionales]]. Existen dos clases de tipos de punto flotante; '''float''' y '''double'''. El tipo '''double''' es el más utilizado porque muchas funciones matemáticas de la biblioteca de clases de C♯ usan valores '''double'''. Quizá, el tipo flotante más interesante de C♯ es '''decimal''', dirigido al uso de cálculos monetarios. La aritmética de punto flotante normal está sujeta a una variedad de errores de redondeo cuando se aplica a valores decimales. El tipo '''decimal''' elimina estos errores y puede representar hasta 28 lugares decimales.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=4 | Tipo de datos de punto flotante&lt;br /&gt;
|-&lt;br /&gt;
! Tipo&lt;br /&gt;
! Ancho en bits&lt;br /&gt;
! Rango&lt;br /&gt;
! Significado&lt;br /&gt;
|-&lt;br /&gt;
| '''float'''&lt;br /&gt;
| 32&lt;br /&gt;
| De 1,5E-45 a 3,4E+38&lt;br /&gt;
| Punto flotante corto&lt;br /&gt;
|-&lt;br /&gt;
| '''double'''&lt;br /&gt;
| 64&lt;br /&gt;
| De 5E-324 a 1,7E+308&lt;br /&gt;
| Punto flotante largo&lt;br /&gt;
|-&lt;br /&gt;
| '''decimal'''&lt;br /&gt;
| 128&lt;br /&gt;
| De 1E-28 a 7,9E+28&lt;br /&gt;
| Punto flotante monetario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Los caracteres en C♯ no son cantidades de 8 bits como en otros muchos lenguajes de programación. Por el contrario, C♯ usa un tipo de caracteres de 16 bits llamado [[Unicode]] al cual se le llama '''char'''. No existen conversiones automáticas de tipo entero a '''char'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=4 | Tipo de datos de caracteres&lt;br /&gt;
|-&lt;br /&gt;
! Tipo&lt;br /&gt;
! Ancho en bits&lt;br /&gt;
! Rango&lt;br /&gt;
! Significado&lt;br /&gt;
|-&lt;br /&gt;
| '''char'''&lt;br /&gt;
| 16&lt;br /&gt;
| De 0 a 65,535 (código Unicode)&lt;br /&gt;
| Carácter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=4 | Tipo de datos lógicos&lt;br /&gt;
|-&lt;br /&gt;
! Tipo&lt;br /&gt;
! Ancho en bits&lt;br /&gt;
! Rango&lt;br /&gt;
! Significado&lt;br /&gt;
|-&lt;br /&gt;
| '''bool'''&lt;br /&gt;
| 1&lt;br /&gt;
| true or false, no se usa 1 ó 0 ya que no hay conversión definida&lt;br /&gt;
| true or false&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
No existe una conversión definida entre '''bool''' y los valores enteros (1 no se convierte a verdadero ni 0 se convierte a falso).&lt;br /&gt;
&lt;br /&gt;
== Constantes ==&lt;br /&gt;
Las constantes en C♯ se denominan ''literales''. Todas las constantes tienen un tipo de dato, en caso de ser una constante entera se usa la de menor tamaño que pueda alojarla, empezando por '''int'''. En caso de punto flotante se considera como un '''double'''. Sin embargo se puede especificar explícitamente el tipo de dato que una constante deberá usar, por medio de los sufijos:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sufijo&lt;br /&gt;
! Tipo de dato&lt;br /&gt;
! Ejemplo&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| long&lt;br /&gt;
| 12L&lt;br /&gt;
|-&lt;br /&gt;
| UL&lt;br /&gt;
| ulong&lt;br /&gt;
| 68687UL&lt;br /&gt;
|-&lt;br /&gt;
| F&lt;br /&gt;
| float&lt;br /&gt;
| 10,19F&lt;br /&gt;
|-&lt;br /&gt;
| M&lt;br /&gt;
| decimal&lt;br /&gt;
| 9,95M&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En ocasiones, resulta más sencillo usar un sistema numérico basado en 16 en lugar de 10, para tal caso C♯ permite especificar constantes enteras en formato [[hexadecimal]], y se hace empezando con '''0x'''. Por ejemplo: '''0xFF''' equivale a 255 en decimal.&lt;br /&gt;
&lt;br /&gt;
C♯ tiene caracteres denominados '''secuencias de escape''' para facilitar la escritura con el teclado de símbolos que carecen de representación visual. Estos son:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Secuencia de escape&lt;br /&gt;
! Descripción&lt;br /&gt;
|-&lt;br /&gt;
| \a&lt;br /&gt;
| Alerta (timbre)&lt;br /&gt;
|-&lt;br /&gt;
| \b&lt;br /&gt;
| Retroceso&lt;br /&gt;
|-&lt;br /&gt;
| \f&lt;br /&gt;
| Avance de página&lt;br /&gt;
|-&lt;br /&gt;
| \n&lt;br /&gt;
| Nueva línea&lt;br /&gt;
|-&lt;br /&gt;
| \r&lt;br /&gt;
| Retorno de carro&lt;br /&gt;
|-&lt;br /&gt;
| \t&lt;br /&gt;
| Tabulador horizontal&lt;br /&gt;
|-&lt;br /&gt;
| \v&lt;br /&gt;
| Tabulador vertical&lt;br /&gt;
|-&lt;br /&gt;
| \0&lt;br /&gt;
| Nulo&lt;br /&gt;
|-&lt;br /&gt;
| \'&lt;br /&gt;
| Comilla sencilla&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
| Comilla doble&lt;br /&gt;
|-&lt;br /&gt;
| \\&lt;br /&gt;
| Diagonal invertida&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C♯, al igual que C++, es compatible con el tipo de constante cadena de [[caracteres]]. Dentro de la cadena de caracteres se pueden usar secuencias de escape. Una cadena de caracteres puede iniciarse con el símbolo '''@''' seguido por una cadena entre comillas, en tal caso, las secuencias de escape no tienen efecto y además la cadena puede ocupar dos o más líneas.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Toda [[variable]] se debe declarar antes de ser utilizada. La forma en que se declara una variable en C♯ es la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tipo nombre_variable;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un valor a una variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nombre_variable = valor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las conversiones de tipo de variables en C♯ se representan en la siguiente tabla en donde la fila es el origen y la columna el destino. Los significados de las letras son: '''A''' (Conversión automática o implícita), '''E''' (Conversión explícita), '''I''' (Conversión incompatible).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=14 | Conversiones de tipo de datos&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! '''byte'''&lt;br /&gt;
! '''sbyte'''&lt;br /&gt;
! '''short'''&lt;br /&gt;
! '''ushort'''&lt;br /&gt;
! '''int'''&lt;br /&gt;
! '''uint'''&lt;br /&gt;
! '''long'''&lt;br /&gt;
! '''ulong'''&lt;br /&gt;
! '''float'''&lt;br /&gt;
! '''double'''&lt;br /&gt;
! '''decimal'''&lt;br /&gt;
! '''char'''&lt;br /&gt;
! '''bool'''&lt;br /&gt;
|-&lt;br /&gt;
| '''byte'''&lt;br /&gt;
|&lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''sbyte'''&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''short'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''ushort'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''int'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''uint'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''long'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''ulong'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''float'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| A&lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''double'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| E&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''decimal'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| &lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''char'''&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| E&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| &lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| '''bool'''&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| I&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Toda conversión implícita no ocasiona pérdida de información, truncamientos o redondeos.&lt;br /&gt;
* Es posible (mas no siempre ocurre) que en una conversión explícita haya pérdida de información, truncamientos o redondeos.&lt;br /&gt;
* En toda conversión implícita el tipo de dato destino es mayor que el tipo de dato origen.&lt;br /&gt;
* La conversión explícita se realiza de la siguiente forma: &amp;lt;code&amp;gt;(tipo-destino) expresion&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Además de realizarse dentro de una asignación, las conversiones de tipos también tienen lugar dentro de una expresión, pues en cada operación ambos operandos deben de ser del mismo tipo. Si la conversión es del tipo implícito se efectúa el siguiente algoritmo en dicho orden:&lt;br /&gt;
&lt;br /&gt;
# Si un operando es '''decimal''', el otro operando se transforma a '''decimal'''.&lt;br /&gt;
# Si un operando es '''double''', el otro operando se transforma a '''double'''.&lt;br /&gt;
# Si un operando es '''float''', el otro operando se transforma a '''float'''.&lt;br /&gt;
# Si un operando es '''ulong''', el otro operando se transforma a '''ulong'''.&lt;br /&gt;
# Si un operando es '''long''', el otro operando se transforma a '''long'''.&lt;br /&gt;
# Si un operando es '''uint''', y si el otro operando es de tipo '''sbyte''', '''short''' o '''int''', los dos se transforman a '''long'''.&lt;br /&gt;
# Si un operando es '''uint''', el otro operando se transforma a '''uint'''.&lt;br /&gt;
# Si ninguno de los casos anteriores, los dos operandos se transforman a '''int'''.&lt;br /&gt;
&lt;br /&gt;
== Operadores ==&lt;br /&gt;
C♯ tiene cuatro clases generales de [[operadores]]: '''aritméticos''', '''a nivel de bit''', '''relacionales''' y '''lógicos'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=3 | Operadores&lt;br /&gt;
|-&lt;br /&gt;
! Operador&lt;br /&gt;
! Significado&lt;br /&gt;
! Tipo&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
| Suma&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
| Resta&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| Producto&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| División&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| %&lt;br /&gt;
| Módulo (residuo entero)&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| ++&lt;br /&gt;
| Incremento&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| --&lt;br /&gt;
| Decremento&lt;br /&gt;
| Aritmético&lt;br /&gt;
|-&lt;br /&gt;
| ==&lt;br /&gt;
| Igual que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| !=&lt;br /&gt;
| Distinto que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;&lt;br /&gt;
| Mayor que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;&lt;br /&gt;
| Menor que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;=&lt;br /&gt;
| Mayor o igual que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;=&lt;br /&gt;
| Menor o igual que&lt;br /&gt;
| Relacional&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Lógico y a nivel de bits&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Lógico y a nivel de bits&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR y de nivel de bits&lt;br /&gt;
| Lógico&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR de cortocircuito&lt;br /&gt;
| Lógico&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;&lt;br /&gt;
| AND de cortocircuito&lt;br /&gt;
| Lógico&lt;br /&gt;
|-&lt;br /&gt;
| !&lt;br /&gt;
| NOT&lt;br /&gt;
| Lógico&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| Complemento a uno&lt;br /&gt;
| A nivel de bits&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;&amp;lt;&lt;br /&gt;
| Desplazamiento a la izquierda&lt;br /&gt;
| A nivel de bits&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;&amp;gt;&lt;br /&gt;
| Desplazamiento a la derecha&lt;br /&gt;
| A nivel de bits&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Los [[operadores aritméticos]] funcionan igual que en C y C++.&lt;br /&gt;
* El resultado de los [[operadores relacionales]] y lógicos es un valor '''bool'''.&lt;br /&gt;
* Los [[operadores de cortocircuito]] evalúan el segundo operando solo cuando es necesario.&lt;br /&gt;
* Los [[operadores a nivel de bit]] no se pueden aplicar a tipos '''bool''', '''float''', '''double''' o '''decimal'''.&lt;br /&gt;
&lt;br /&gt;
== Instrucciones de control ==&lt;br /&gt;
* La instrucción '''if-else''' es básicamente igual que en C, C++ y [[Java]].&lt;br /&gt;
* La diferencia de la instrucción '''switch''' con la versión de C, C++ y Java es que todo cuerpo perteneciente a un '''case''' debe de toparse con un '''break''' o un '''goto''' antes de toparse con otro '''case''', a menos que dicho cuerpo esté vacío.&lt;br /&gt;
* La instrucción '''for''' es básicamente igual que en C, C++ y Java.&lt;br /&gt;
* La instrucción '''while''' es básicamente igual que en C, C++ y Java.&lt;br /&gt;
* La instrucción '''do-while''' es básicamente igual que en C, C++ y Java.&lt;br /&gt;
* La instrucción '''foreach''' realiza un ciclo a través de los elementos de una colección (grupo de objetos). El formato de esta instrucción es: &amp;lt;code&amp;gt;foreach(tipo variable in coleccion) instruccion;&amp;lt;/code&amp;gt;. En este ciclo se recorre la colección y la variable recibe un respectivo elemento de dicha colección en cada iteración.&lt;br /&gt;
* Al igual que en C y C++, la instrucción '''break''' permite forzar la salida de un ciclo omitiendo el código restante en el cuerpo del ciclo.&lt;br /&gt;
* Al igual que en C y C++, la instrucción '''continue''' permite forzar la repetición temprana de un ciclo omitiendo el código restante en el cuerpo del ciclo.&lt;br /&gt;
* La instrucción '''return''' es básicamente igual que en C, C++. Se utiliza para devolver un valor y salir de un método.&lt;br /&gt;
* La instrucción '''goto''' se sigue utilizando en C♯ a pesar de toda la polémica que esto conlleva.&lt;br /&gt;
&lt;br /&gt;
== Métodos ==&lt;br /&gt;
&lt;br /&gt;
* Todo método debe de ser parte de una clase, no existen métodos globales.&lt;br /&gt;
* De forma predeterminada, los parámetros se pasan por valor (se copia dicho valor).&lt;br /&gt;
* El modificador '''ref''' fuerza a pasar los parámetros por referencia en vez de pasarlos por valor.&lt;br /&gt;
* El modificador '''out''' es similar al modificador '''ref''' con una excepción: sólo se puede utilizar para pasar un valor fuera de un método. El método debe de asignar un valor al parámetro antes de que el método finalice.&lt;br /&gt;
* Cuando '''ref''' y '''out''' modifican un parámetro de referencia, la propia referencia se pasa por referencia.&lt;br /&gt;
* El modificador '''params''' sirve para definir un número variable de argumentos los cuales se implementan como una matriz. Ejemplo: &amp;lt;code&amp;gt;public int maxVal(params int[] nums){...}&amp;lt;/code&amp;gt;, esta función se podría llamar así: &amp;lt;code&amp;gt;maxVal(23,3,a,-12);&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Un método debe tener como máximo un único parámetro '''params''' y éste debe de ser el último.&lt;br /&gt;
* Un método puede devolver cualquier tipo de datos, incluyendo tipos de clase.&lt;br /&gt;
* Ya que en C# las [[matrices]] se implementan como objetos, un método también puede devolver una [[matriz]] (algo que se diferencia de C++ en que las matrices no son válidas como tipos de valores devueltos).&lt;br /&gt;
* C♯ implementa '''sobrecarga de métodos''', dos o más métodos pueden tener el mismo nombre siempre y cuando se diferencien por sus parámetros.&lt;br /&gt;
* El método '''Main''' es un método especial al cual se refiere el punto de partida del programa. Tiene la siguiente sintaxis: &amp;lt;code&amp;gt;public static int Main(string[] args){...}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Clases y objetos ==&lt;br /&gt;
Varios puntos a tener en cuenta en C♯ con respecto a [[clases]] y [[objetos]] son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Una [[variable de objeto]] de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).&lt;br /&gt;
* El operador de asignación no copia los valores de un objeto, sino su referencia a él (al igual que Java).&lt;br /&gt;
* Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a un método.&lt;br /&gt;
* Un constructor no devuelve ningún valor.&lt;br /&gt;
* Al igual que los métodos, los constructores también pueden ser sobrecargados.&lt;br /&gt;
* Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor de '''0''', '''null''' o '''false''' según corresponda.&lt;br /&gt;
* Para crear un nuevo objeto se utiliza la siguiente sintaxis: &amp;lt;code&amp;gt;variable = new nombre_clase();&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Un destructor se declara como un constructor, aunque va precedido por un signo de tilde ~.&lt;br /&gt;
* Se emplea una desasignación de memoria de objetos no referenciados (recolección de basura), y cuando esto ocurre se ejecuta el destructor de dicha clase.&lt;br /&gt;
* El destructor de una clase no se llama cuando un objeto sale del ámbito.&lt;br /&gt;
* Todos los destructores se llamarán antes de que finalice un programa.&lt;br /&gt;
* La palabra clave '''this''' es un apuntador al mismo objeto en el cual se usa.&lt;br /&gt;
* La palabra clave '''static''' hace que un miembro pertenezca a una clase en vez de pertener a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto.&lt;br /&gt;
* Un método '''static''' no tiene una referencia '''this'''.&lt;br /&gt;
* Un método '''static''' puede llamar sólo a otros métodos '''static'''.&lt;br /&gt;
* Un método '''static''' sólo debe tener acceso directamente a datos '''static'''.&lt;br /&gt;
* Un constructor '''static''' se usa para inicializar atributos que se aplican a una clase en lugar de aplicarse a una instancia.&lt;br /&gt;
* C♯ permite la sobrecarga de operadores con la palabra clave '''operator'''&lt;br /&gt;
&lt;br /&gt;
== Matrices ==&lt;br /&gt;
* En C♯ las matrices se implementan como objetos.&lt;br /&gt;
* Para crear una matriz se utiliza el siguiente formato: &amp;lt;code&amp;gt;tipo[] nombre_matriz = new tipo[tamaño];&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se puede crear una matriz inicializada así: &amp;lt;code&amp;gt;tipo[] nombre_matriz = { val1 , val2 , val3 , ... , valN };&amp;lt;/code&amp;gt;&lt;br /&gt;
* Los índices de las matrices comienzan en 0.&lt;br /&gt;
* Para crear una matriz '''bidimensional''' se utiliza el siguiente formato: &amp;lt;code&amp;gt;tipo[,] nombre_matriz = new tipo[filas,columnas]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Para referirse a un elemento de una matriz bidimensional no se usa la forma &amp;lt;code&amp;gt;matriz[fila][columna]&amp;lt;/code&amp;gt; (la cual usa C++), si no &amp;lt;code&amp;gt;matriz[fila,columna]&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ya que C♯ implementa matrices como objetos, cada matriz tiene asociada una propiedad '''Length''' que contiene el número de elementos que puede alojar cada matriz.&lt;br /&gt;
&lt;br /&gt;
== Cadenas de caracteres ==&lt;br /&gt;
&lt;br /&gt;
* El tipo de dato cadena se llama '''string'''.&lt;br /&gt;
* Realmente la palabra clave '''string''' es un alias de la clase '''System.String''' de la plataforma .NET.&lt;br /&gt;
* En C♯ las cadenas son objetos y no una matriz de caracteres, aun así, se puede obtener un carácter arbitrario de una cadena por medio de su índice (mas no modificarlo).&lt;br /&gt;
* La forma más común de construir una cadena es por medio de una literal o constante: &amp;lt;code&amp;gt;string str = &amp;quot;Una cadena&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
* El operador '''==''' determina si dos referencias hacen referencia al mismo objeto, pero al usar dicho operador con dos operandos tipo '''string''' se prueba la igualdad del contenido de las cadenas y no su referencia. Sin embargo, con el resto de los operadores relacionales, como '''&amp;lt;''' o '''&amp;gt;=''' se comparan las referencias.&lt;br /&gt;
* Se pueden concatenar (unir) dos cadenas mediante el operador '''+'''.&lt;br /&gt;
* Las cadenas son inmutables, una vez creadas no se pueden modificar, solo se pueden copiar total o parcialmente.&lt;br /&gt;
* Las cadenas se pueden usar en las instrucciones '''switch'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Métodos comunes de control de cadenas&lt;br /&gt;
|-&lt;br /&gt;
! Método&lt;br /&gt;
! Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;static string Copy(string str)&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Devuelve una copia de str.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;int CompareTo(string str)&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Devuelve menor que cero si la cadena que llama es menor que str, mayor que cero si la cadena que llama es mayor que str, y cero si las cadenas son iguales.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;int IndexOf(string str)&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Busca en la cadena que llama la subcadena especificada por str.&lt;br /&gt;
Devuelve el índice de la primera coincidencia, o -1 en caso de error.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;int LastIndexOf(string str)&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Busca en la cadena que llama la subcadena especificada por str. Devuelve el índice de la última coincidencia, o -1 en caso de error.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;string ToLower&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Devuelve una versión en minúsculas de la cadena que llama.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;code&amp;gt;string ToUpper&amp;lt;/code&amp;gt;'''&lt;br /&gt;
| Devuelve una versión en mayúsculas de la cadena que llama.&lt;br /&gt;
|}&lt;br /&gt;
== Ejemplos ==&lt;br /&gt;
&lt;br /&gt;
*'''Crear una variable del tipo string y mostrarla en un mensaje'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='c'&amp;gt;   &lt;br /&gt;
   using System;&lt;br /&gt;
   public void ejemplo()&lt;br /&gt;
   {&lt;br /&gt;
   string Var1 = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
   MessageBox.Show(Var1);&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiladores ==&lt;br /&gt;
En la actualidad existen los siguientes [[compilador]]es para el lenguaje C♯:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&amp;amp;displaylang=en Microsoft.NET framework SDK] incluye un compilador de C♯, pero no un [[Entorno de desarrollo integrado|IDE]].&lt;br /&gt;
*  [[Microsoft Visual Studio|Microsoft Visual Studio]], IDE por excelencia de este lenguaje, versión 2002, 2003, 2005, 2008 y 2010(beta).&lt;br /&gt;
* [[SharpDevelop|#develop]], es un IDE [[Software libre|libre]] para C♯ bajo licencia [[GNU LGPL|LGPL]], muy similar a Microsoft Visual C#.&lt;br /&gt;
* [[Proyecto Mono|Mono]], es una implementación [[Licencia pública general de GNU|GPL]] de todo el entorno [[.NET de Microsoft|.NET]] desarrollado por [[Novell]]. Como parte de esta implementación se incluye un compilador de C♯.&lt;br /&gt;
* [[Delphi]] 2006, de [[Borland]] Software Corporation.&lt;br /&gt;
* [[dotGNU]] [[Portable.NET]], de la [[Free Software Foundation]].&lt;br /&gt;
&lt;br /&gt;
== Metas del diseño del lenguaje ==&lt;br /&gt;
El estándar [[ECMA]] lista las siguientes metas en el diseño para C♯:&lt;br /&gt;
&lt;br /&gt;
* Lenguaje de programación orientado a objetos '''simple, moderno y de propósito general'''.&lt;br /&gt;
* Inclusión de principios de [[ingeniería de software]] tales como revisión estricta de los tipos de datos, revisión de límites de vectores, detección de intentos de usar variables no inicializadas, y recolección de basura automática.&lt;br /&gt;
* Capacidad para desarrollar [[componentes de software]] que se puedan usar en ambientes distribuidos.&lt;br /&gt;
* [[aplicaciones portables|Portabilidad del código fuente]]&lt;br /&gt;
* Fácil migración del programador al nuevo lenguaje, especialmente para programadores familiarizados con C y [[C++]].&lt;br /&gt;
* Soporte para [[Internacionalización (computación)|internacionalización]]&lt;br /&gt;
* Adecuación para escribir aplicaciones de cualquier tamaño: desde las más grandes y sofisticadas como [[sistemas operativos]] hasta las más pequeñas funciones.&lt;br /&gt;
* Aplicaciones económicas en cuanto a memoria y procesado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
&lt;br /&gt;
*[http://es.wikipedia.org/wiki/C_sharp Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lenguajes_de_programación_orientada_a_objetos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627773</id>
		<title>C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627773"/>
		<updated>2011-05-31T14:03:50Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Un ejemplo de código */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=C++&lt;br /&gt;
|familia=Derivados de C&lt;br /&gt;
|imagen=C++.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Lenguaje de programación&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Bjarne Stroustrup&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=1983&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''C++''' es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición &amp;quot;oficial&amp;quot; del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de [[Operadores|operadores]], referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la [[Librería|librería]] Estándar C es un subconjunto de la librería C++) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Un Poco de historia  ==&lt;br /&gt;
&lt;br /&gt;
El comité para el estándar [[ANSI|ANSI]] [[C]] fue formado en [[1983]] con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue [[Bjarne Stroustrup]], también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en [[1983]]. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en [[1987]]. En [[1989]] se formó un comité ANSI (seguido algún tiempo después por un comité [[ISO|ISO]]) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de [[Operadores|operadores]] y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de [[Java]], un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él, aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.&lt;br /&gt;
&lt;br /&gt;
== Acerca de la POO  ==&lt;br /&gt;
&lt;br /&gt;
La [[POO|POO]] es una nueva filosofía de programación que se basa en la utilización de objetos. El objetivo de la POO no es sino la meta de cualquier modelo de programación estructurada convencional: &amp;quot;imponer&amp;quot; una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. Los mecanismos básicos de la POO son: objetos, mensajes, métodos y clases. &lt;br /&gt;
&lt;br /&gt;
*Objetos. Un objeto es una entidad que tiene unos atributos particulares (datos) y unas formas de operar sobre ellos (los métodos o funciones miembro). Es decir, un objeto incluye, por una parte una serie de operaciones que definen su comportamiento, y una serie de variables manipuladas por esas funciones que definen su estado. Por ejemplo, una ventana Windows contendrá operaciones como &amp;quot;maximizar&amp;quot; y variables como &amp;quot;ancho&amp;quot; y &amp;quot;alto&amp;quot; de la ventana. &lt;br /&gt;
*Mensajes. En C++, un mensaje se corresponde con el nombre de uno de los métodos de un objeto. Cuando se pasa un mensaje a un objeto, este responde ejecutando el código de la función asociada. &lt;br /&gt;
*[[Método|Método]]. Un método (función miembro) se implementa dentro de un objeto y determina como tiene que actuar el objeto cuando se produce el mensaje asociado. En C++ un método se corresponde con la definición de la función miembro del objeto. La estructura más interna de un objeto está oculta, de tal manera que la única conexión con el exterior son los mensajes &lt;br /&gt;
*Clases. Una clase es la definición de un tipo de objetos. De esta manera, una clase &amp;quot;Empleado&amp;quot; representaría todos los empleados de una empresa, mientras que un objeto de esa clase (también denominado instancia) representaría a uno de esos empleados en particular.&lt;br /&gt;
&lt;br /&gt;
Las principales características de la POO son: abstracción, encapsulamiento, herencia y polimorfismo: &lt;br /&gt;
&lt;br /&gt;
*[[Abstracción|Abstracción]]. Es el mecanismo de diseño en la POO. Nos permite extraer de un conjunto de entidades datos y comportamientos comunes para almacenarlos en clases. &lt;br /&gt;
*Encapsulamiento. Mediante esta técnica conseguiremos que cada clase sea una caja negra, de tal manera que los objetos de esa clase se puedan manipular como unidades básicas. Los detalles de la implementación se encuentran dentro de la clase, mientras que desde el exterior, un objeto será simplemente una entidad que responde a una serie de mensajes públicos (también denominados interfaz de la clase). &lt;br /&gt;
*Herencia. Es el mecanismo que nos permite crear clases derivadas (especialización) a partir de clases bases (generalización). Es decir, podríamos tener la clase &amp;quot;Empleado&amp;quot; (clase base) y la clase &amp;quot;Vendedor&amp;quot; derivando de la anterior. Una librería de clases (como la MFC) no es más que un conjunto de definiciones de clases interconectadas por múltiples relaciones de herencia. &lt;br /&gt;
*Polimorfismo. Esta característica nos permite disponer de múltiples implementaciones de un mismo método de clase, dependiendo de la clase en la que se realice. Es decir, podemos acceder a una variedad de métodos distintos (con el mismo nombre) mediante el mismo mecanismo de acceso. En C++ el polimorfismo se consigue mediante la definición de clases derivadas, funciones virtuales y el uso de punteros a objetos.&lt;br /&gt;
&lt;br /&gt;
Otros dos conceptos muy importantes en la POO son relativos a la creación y destrucción de objetos. En lenguajes estructurados convencionales, cuando se define una variable se le reserva espacio en memoria y, si no se inicializa expresamente, se hace por defecto (por ejemplo, en C una variable global siempre se inicializa a 0, pero una automática no, por lo que si no se inicializa expresamente su contenido inicial será basura); por otra parte, cuando se destruye una variable (por que se abandona el ámbito de su definición - scope -) se libera la memoria que estaba ocupando. Si ahora hacemos el paralelismo obligado entre variables y objetos para los lenguajes POO nos daremos cuenta de que deben existir procedimientos especiales de construcción y destrucción de objetos. En concreto, cada clase tiene dos funciones miembro especiales denominadas constructor y destructor. &lt;br /&gt;
&lt;br /&gt;
*[[Constructor|Constructor]] -&amp;amp;gt; Función miembro que es automáticamente invocada cada vez que se define un objeto, su objetivo es la inicialización del mismo. Toma el mismo nombre que la clase, puede recibir parámetros y podemos tener varios constructores definidos. &lt;br /&gt;
*[[Destructor|Destructor]] -&amp;amp;gt; Función miembro invocada automáticamente cada vez que se destruye un objeto. Su objetivo es realizar operaciones como liberación de memoria, cerrar ficheros abiertos, etc. Toma el mismo nombre de la clase comenzado primero por el carácter &amp;quot;~&amp;quot;, no toma parámetros y no admite la sobrecarga (sólo puede existir uno en cada clase).&lt;br /&gt;
&lt;br /&gt;
En muchos casos, para las clases mas sencillas, podemos encontrar clases que no tiene constructor o destructor, ó ninguno de los dos. En C++, siempre existen constructores y destructores por defecto que realizan una inicialización/liberación estándar. &lt;br /&gt;
&lt;br /&gt;
== Acerca de Interprete y compiladores  ==&lt;br /&gt;
&lt;br /&gt;
Antes, mencionar que tanto C como C++ son lenguajes compilados, y no interpretados. Esta diferencia es muy importante, ya que afecta mucho a muchos aspectos relacionados con la ejecución del programa. En un lenguaje interpretado, el programa está escrito en forma de texto, es el propio programa fuente. Este programa fuente es procesado por un programa externo, el intérprete, que traduce el programa, instrucción a instrucción, al tiempo que lo ejecuta. En los lenguajes interpretados no existen programas ejecutables directamente por el ordenador. El intérprete traduce, en tiempo real, cada línea del programa fuente, cada vez que se quiere ejecutar el programa. El los lenguajes compilados el proceso de traducción sólo se hace una vez. El programa compilador toma como entrada el código fuente del programa, y da como salida un fichero que puede ser ejecutado por el ordenador directamente. Una vez compilado, el programa ejecutable es autónomo, y ya no es necesario disponer del programa original ni del compilador para ejecutarlo. Cada opción tiene sus ventajas e inconvenientes, y algunas características que son consideradas una ventaja, pueden ser un inconveniente en ciertas circunstancias, y viceversa. &lt;br /&gt;
&lt;br /&gt;
*Los lenguajes interpretados son fácilmente modificables, ya que necesitamos tener el el código fuente disponible en el ordenador. En los compilados, estos ficheros no son necesarios, una vez compilados. &lt;br /&gt;
*Los lenguajes interpretados necesitan un programa externo, llamado intérprete o a veces máquina virtual, o framework. Este programa actua como intermediario entre el fuente y el sistema operativo. En los compilados ese papel lo desempeña el compilador, pero al contrario que con el intérprete, una vez ha hecho su trabajo, no es necesario que esté presente para ejecutar el programa. &lt;br /&gt;
*Estas dos características, lógicamente, hacen que los programas compilados requieran menos espacio de memoria que los interpretados (si contamos el espacio usado por el intérprete), y en general, los compilados son más rápidos, ya que sólo se compilan una vez, y el tiempo dedicado a esa tarea no se suma al de ejecución.&lt;br /&gt;
&lt;br /&gt;
Entre los lenguajes interpretados están: [[BASIC|BASIC]] (Código de instrucciones de propósito general para principiantes), Java, [[PHP|PHP]]. Muchos lenguajes de script, etc. Entre los lenguajes compilados están: C, C++, Pascal. &lt;br /&gt;
&lt;br /&gt;
== Que se puede hacer con C++  ==&lt;br /&gt;
&lt;br /&gt;
¿Qué clase de programas y aplicaciones se pueden crear usando C y C++? La respuesta es muy sencilla: TODOS. Tanto C como C++ son lenguajes de programación de propósito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc. &lt;br /&gt;
&lt;br /&gt;
=== Un ejemplo de código  ===&lt;br /&gt;
&lt;br /&gt;
Este es el clásico programa hola mundo, la idea está centrada en el nacimiento de un nuevo programa de manos de su creador. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;;&lt;br /&gt;
using std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;Hola mundo&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ¿Qué se ha que se ha hecho en C o en C++?  ==&lt;br /&gt;
&lt;br /&gt;
=== Sistemas Operativos y otros programas ===&lt;br /&gt;
&lt;br /&gt;
*Así como Unix el antecesor de este sistema operativo, GNU/Linux -a menudo denominado tan sólo como Linux, que es el nombre del núcleo del SO- hace uso de un buen número de lenguajes de programación en sus distintos componentes. ¿Cuáles son esos lenguajes? Cada tipo de recurso parece tener ciertas preferencias, y es que hay lenguajes más adecuados para unas cosas. Obviamente el lenguaje de programación C sigue siendo la base, pero hay mucho más implicados. &lt;br /&gt;
*Kernel y drivers de dispositivos: Tanto los drivers como el kernel funcionan en un nivel realmente bajo de operaciones en el ordenador. Para escribir el kernel del sistema operativo y acceder a las propiedades del hardware tales como los ciclos de la memoria, buses de entrada/salida, etc., se necesita un lenguaje que pueda comunicarse con el hardware con potencia. El kernel Linux hace uso del lenguaje C (aunque en realidad no se trate de un lenguaje de bajo nivel) con una pequeña parte en lenguaje ensamblador. &lt;br /&gt;
*&lt;br /&gt;
*Librerías y utilidades: Las librerías y utilidades básicas del sistema tales como mkdir, chmod, chown, head, tail, chroot, uptime, users también están escritas en lenguaje C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Gestores de paquetes y programas de configuración: Los gestores de paquetes tales como yum, apt, dpkg, etcétera, también están escritos en C, que como veis es la estrella absoluta de los componentes &amp;quot;base&amp;quot; de un sistema GNU/Linux.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Entornos de Escritorio y gestores de ventanas: La mayoría de gente usa un entorno de escritorio, y es que a día de hoy poco queda sólo en interfaz de línea de comandos. Los gestores de ventanas tales como metacity, kwin están desarrollados en C y requieren gcc para ser compilados. El entorno de escritorio, iconos, ventanas, barras de herramientas, etc, están basados en librerías específicas (Qt para KDE, GTK+ para GNOME) y hacen uso del lenguaje mayoritario, C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Aplicaciones gráficas de usuario: Este es el punto donde entran en juego una gran cantidad de lenguajes de programación, dado que básicamente es la capa más alta. Tenemos una gran variedad: C, Python, Java, Perl y otros. Hay librerías GTK+, Tcl/Tk, Qt que son un frontend gráfico a tareas que corren por detrás en línea de comando.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*El Sistema operativo Windows está hecho básicamente en C, C tiene la ventaja de que puede escalarse con ensamblador, lo cual es buena opción para optimizar ciertos módulos.&lt;br /&gt;
&lt;br /&gt;
Las versiones anteriores de Windows estaban hechas en Basic (Basic NO visual Basic) que es un lenguaje de bajo nivel de hace unos cuantos años ya. Es un lenguaje que se usa mucho en la electrónica aun. &lt;br /&gt;
&lt;br /&gt;
*Actualmente Windows 7 Mac os x Leopard y Linux usan mas de una Tecnología ya se empezó a usar c# c++ y hasta java en el caso de linux se usa phytom c y tbn ensambladores y demás cosas, y Mac siempre basado en Unix con compilación en C++ para los últimos Sistemas Operativos.&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf Manual C++]&lt;br /&gt;
&lt;br /&gt;
*[http://www.monografias.com/trabajos5/visualcurso/visualcurso.shtml Curso Visual]&lt;br /&gt;
&lt;br /&gt;
*[http://www.zator.com/Cpp/E1_2.htm C++]&lt;br /&gt;
&lt;br /&gt;
*[http://es.wikipedia.org/wiki/C%2B%2B C++ en Wikipedia]&lt;br /&gt;
&lt;br /&gt;
*[http://www.programacionfacil.com/cpp:informacion_y_conocimiento C++ en ProgramacionFacil.com]&lt;br /&gt;
&lt;br /&gt;
*[http://www.somoslibres.org/modules.php?name=News&amp;amp;file=article&amp;amp;sid=2708 C++ en SomosLibres.org]&lt;br /&gt;
&lt;br /&gt;
*[http://www.psicofxp.com/forums/programacion.313/374200-c-y-sistemas-operativos.html El C++ y los Sistemas Operativos]&lt;br /&gt;
&lt;br /&gt;
*[http://es.kioskea.net/forum/affich-101630-lenguaje-en-que-fue-escrito-windows Windows está escrito en C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627766</id>
		<title>C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627766"/>
		<updated>2011-05-31T14:02:39Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Un ejemplo de código */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=C++&lt;br /&gt;
|familia=Derivados de C&lt;br /&gt;
|imagen=C++.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Lenguaje de programación&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Bjarne Stroustrup&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=1983&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''C++''' es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición &amp;quot;oficial&amp;quot; del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de [[Operadores|operadores]], referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la [[Librería|librería]] Estándar C es un subconjunto de la librería C++) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Un Poco de historia  ==&lt;br /&gt;
&lt;br /&gt;
El comité para el estándar [[ANSI|ANSI]] [[C]] fue formado en [[1983]] con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue [[Bjarne Stroustrup]], también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en [[1983]]. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en [[1987]]. En [[1989]] se formó un comité ANSI (seguido algún tiempo después por un comité [[ISO|ISO]]) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de [[Operadores|operadores]] y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de [[Java]], un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él, aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.&lt;br /&gt;
&lt;br /&gt;
== Acerca de la POO  ==&lt;br /&gt;
&lt;br /&gt;
La [[POO|POO]] es una nueva filosofía de programación que se basa en la utilización de objetos. El objetivo de la POO no es sino la meta de cualquier modelo de programación estructurada convencional: &amp;quot;imponer&amp;quot; una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. Los mecanismos básicos de la POO son: objetos, mensajes, métodos y clases. &lt;br /&gt;
&lt;br /&gt;
*Objetos. Un objeto es una entidad que tiene unos atributos particulares (datos) y unas formas de operar sobre ellos (los métodos o funciones miembro). Es decir, un objeto incluye, por una parte una serie de operaciones que definen su comportamiento, y una serie de variables manipuladas por esas funciones que definen su estado. Por ejemplo, una ventana Windows contendrá operaciones como &amp;quot;maximizar&amp;quot; y variables como &amp;quot;ancho&amp;quot; y &amp;quot;alto&amp;quot; de la ventana. &lt;br /&gt;
*Mensajes. En C++, un mensaje se corresponde con el nombre de uno de los métodos de un objeto. Cuando se pasa un mensaje a un objeto, este responde ejecutando el código de la función asociada. &lt;br /&gt;
*[[Método|Método]]. Un método (función miembro) se implementa dentro de un objeto y determina como tiene que actuar el objeto cuando se produce el mensaje asociado. En C++ un método se corresponde con la definición de la función miembro del objeto. La estructura más interna de un objeto está oculta, de tal manera que la única conexión con el exterior son los mensajes &lt;br /&gt;
*Clases. Una clase es la definición de un tipo de objetos. De esta manera, una clase &amp;quot;Empleado&amp;quot; representaría todos los empleados de una empresa, mientras que un objeto de esa clase (también denominado instancia) representaría a uno de esos empleados en particular.&lt;br /&gt;
&lt;br /&gt;
Las principales características de la POO son: abstracción, encapsulamiento, herencia y polimorfismo: &lt;br /&gt;
&lt;br /&gt;
*[[Abstracción|Abstracción]]. Es el mecanismo de diseño en la POO. Nos permite extraer de un conjunto de entidades datos y comportamientos comunes para almacenarlos en clases. &lt;br /&gt;
*Encapsulamiento. Mediante esta técnica conseguiremos que cada clase sea una caja negra, de tal manera que los objetos de esa clase se puedan manipular como unidades básicas. Los detalles de la implementación se encuentran dentro de la clase, mientras que desde el exterior, un objeto será simplemente una entidad que responde a una serie de mensajes públicos (también denominados interfaz de la clase). &lt;br /&gt;
*Herencia. Es el mecanismo que nos permite crear clases derivadas (especialización) a partir de clases bases (generalización). Es decir, podríamos tener la clase &amp;quot;Empleado&amp;quot; (clase base) y la clase &amp;quot;Vendedor&amp;quot; derivando de la anterior. Una librería de clases (como la MFC) no es más que un conjunto de definiciones de clases interconectadas por múltiples relaciones de herencia. &lt;br /&gt;
*Polimorfismo. Esta característica nos permite disponer de múltiples implementaciones de un mismo método de clase, dependiendo de la clase en la que se realice. Es decir, podemos acceder a una variedad de métodos distintos (con el mismo nombre) mediante el mismo mecanismo de acceso. En C++ el polimorfismo se consigue mediante la definición de clases derivadas, funciones virtuales y el uso de punteros a objetos.&lt;br /&gt;
&lt;br /&gt;
Otros dos conceptos muy importantes en la POO son relativos a la creación y destrucción de objetos. En lenguajes estructurados convencionales, cuando se define una variable se le reserva espacio en memoria y, si no se inicializa expresamente, se hace por defecto (por ejemplo, en C una variable global siempre se inicializa a 0, pero una automática no, por lo que si no se inicializa expresamente su contenido inicial será basura); por otra parte, cuando se destruye una variable (por que se abandona el ámbito de su definición - scope -) se libera la memoria que estaba ocupando. Si ahora hacemos el paralelismo obligado entre variables y objetos para los lenguajes POO nos daremos cuenta de que deben existir procedimientos especiales de construcción y destrucción de objetos. En concreto, cada clase tiene dos funciones miembro especiales denominadas constructor y destructor. &lt;br /&gt;
&lt;br /&gt;
*[[Constructor|Constructor]] -&amp;amp;gt; Función miembro que es automáticamente invocada cada vez que se define un objeto, su objetivo es la inicialización del mismo. Toma el mismo nombre que la clase, puede recibir parámetros y podemos tener varios constructores definidos. &lt;br /&gt;
*[[Destructor|Destructor]] -&amp;amp;gt; Función miembro invocada automáticamente cada vez que se destruye un objeto. Su objetivo es realizar operaciones como liberación de memoria, cerrar ficheros abiertos, etc. Toma el mismo nombre de la clase comenzado primero por el carácter &amp;quot;~&amp;quot;, no toma parámetros y no admite la sobrecarga (sólo puede existir uno en cada clase).&lt;br /&gt;
&lt;br /&gt;
En muchos casos, para las clases mas sencillas, podemos encontrar clases que no tiene constructor o destructor, ó ninguno de los dos. En C++, siempre existen constructores y destructores por defecto que realizan una inicialización/liberación estándar. &lt;br /&gt;
&lt;br /&gt;
== Acerca de Interprete y compiladores  ==&lt;br /&gt;
&lt;br /&gt;
Antes, mencionar que tanto C como C++ son lenguajes compilados, y no interpretados. Esta diferencia es muy importante, ya que afecta mucho a muchos aspectos relacionados con la ejecución del programa. En un lenguaje interpretado, el programa está escrito en forma de texto, es el propio programa fuente. Este programa fuente es procesado por un programa externo, el intérprete, que traduce el programa, instrucción a instrucción, al tiempo que lo ejecuta. En los lenguajes interpretados no existen programas ejecutables directamente por el ordenador. El intérprete traduce, en tiempo real, cada línea del programa fuente, cada vez que se quiere ejecutar el programa. El los lenguajes compilados el proceso de traducción sólo se hace una vez. El programa compilador toma como entrada el código fuente del programa, y da como salida un fichero que puede ser ejecutado por el ordenador directamente. Una vez compilado, el programa ejecutable es autónomo, y ya no es necesario disponer del programa original ni del compilador para ejecutarlo. Cada opción tiene sus ventajas e inconvenientes, y algunas características que son consideradas una ventaja, pueden ser un inconveniente en ciertas circunstancias, y viceversa. &lt;br /&gt;
&lt;br /&gt;
*Los lenguajes interpretados son fácilmente modificables, ya que necesitamos tener el el código fuente disponible en el ordenador. En los compilados, estos ficheros no son necesarios, una vez compilados. &lt;br /&gt;
*Los lenguajes interpretados necesitan un programa externo, llamado intérprete o a veces máquina virtual, o framework. Este programa actua como intermediario entre el fuente y el sistema operativo. En los compilados ese papel lo desempeña el compilador, pero al contrario que con el intérprete, una vez ha hecho su trabajo, no es necesario que esté presente para ejecutar el programa. &lt;br /&gt;
*Estas dos características, lógicamente, hacen que los programas compilados requieran menos espacio de memoria que los interpretados (si contamos el espacio usado por el intérprete), y en general, los compilados son más rápidos, ya que sólo se compilan una vez, y el tiempo dedicado a esa tarea no se suma al de ejecución.&lt;br /&gt;
&lt;br /&gt;
Entre los lenguajes interpretados están: [[BASIC|BASIC]] (Código de instrucciones de propósito general para principiantes), Java, [[PHP|PHP]]. Muchos lenguajes de script, etc. Entre los lenguajes compilados están: C, C++, Pascal. &lt;br /&gt;
&lt;br /&gt;
== Que se puede hacer con C++  ==&lt;br /&gt;
&lt;br /&gt;
¿Qué clase de programas y aplicaciones se pueden crear usando C y C++? La respuesta es muy sencilla: TODOS. Tanto C como C++ son lenguajes de programación de propósito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc. &lt;br /&gt;
&lt;br /&gt;
=== Un ejemplo de código  ===&lt;br /&gt;
&lt;br /&gt;
Este es el clásico programa hola mundo, la idea está centrada en el nacimiento de un nuevo programa de manos de su creador. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;;&lt;br /&gt;
using std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;Hola mundo&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ¿Qué se ha que se ha hecho en C o en C++?  ==&lt;br /&gt;
&lt;br /&gt;
=== Sistemas Operativos y otros programas ===&lt;br /&gt;
&lt;br /&gt;
*Así como Unix el antecesor de este sistema operativo, GNU/Linux -a menudo denominado tan sólo como Linux, que es el nombre del núcleo del SO- hace uso de un buen número de lenguajes de programación en sus distintos componentes. ¿Cuáles son esos lenguajes? Cada tipo de recurso parece tener ciertas preferencias, y es que hay lenguajes más adecuados para unas cosas. Obviamente el lenguaje de programación C sigue siendo la base, pero hay mucho más implicados. &lt;br /&gt;
*Kernel y drivers de dispositivos: Tanto los drivers como el kernel funcionan en un nivel realmente bajo de operaciones en el ordenador. Para escribir el kernel del sistema operativo y acceder a las propiedades del hardware tales como los ciclos de la memoria, buses de entrada/salida, etc., se necesita un lenguaje que pueda comunicarse con el hardware con potencia. El kernel Linux hace uso del lenguaje C (aunque en realidad no se trate de un lenguaje de bajo nivel) con una pequeña parte en lenguaje ensamblador. &lt;br /&gt;
*&lt;br /&gt;
*Librerías y utilidades: Las librerías y utilidades básicas del sistema tales como mkdir, chmod, chown, head, tail, chroot, uptime, users también están escritas en lenguaje C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Gestores de paquetes y programas de configuración: Los gestores de paquetes tales como yum, apt, dpkg, etcétera, también están escritos en C, que como veis es la estrella absoluta de los componentes &amp;quot;base&amp;quot; de un sistema GNU/Linux.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Entornos de Escritorio y gestores de ventanas: La mayoría de gente usa un entorno de escritorio, y es que a día de hoy poco queda sólo en interfaz de línea de comandos. Los gestores de ventanas tales como metacity, kwin están desarrollados en C y requieren gcc para ser compilados. El entorno de escritorio, iconos, ventanas, barras de herramientas, etc, están basados en librerías específicas (Qt para KDE, GTK+ para GNOME) y hacen uso del lenguaje mayoritario, C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Aplicaciones gráficas de usuario: Este es el punto donde entran en juego una gran cantidad de lenguajes de programación, dado que básicamente es la capa más alta. Tenemos una gran variedad: C, Python, Java, Perl y otros. Hay librerías GTK+, Tcl/Tk, Qt que son un frontend gráfico a tareas que corren por detrás en línea de comando.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*El Sistema operativo Windows está hecho básicamente en C, C tiene la ventaja de que puede escalarse con ensamblador, lo cual es buena opción para optimizar ciertos módulos.&lt;br /&gt;
&lt;br /&gt;
Las versiones anteriores de Windows estaban hechas en Basic (Basic NO visual Basic) que es un lenguaje de bajo nivel de hace unos cuantos años ya. Es un lenguaje que se usa mucho en la electrónica aun. &lt;br /&gt;
&lt;br /&gt;
*Actualmente Windows 7 Mac os x Leopard y Linux usan mas de una Tecnología ya se empezó a usar c# c++ y hasta java en el caso de linux se usa phytom c y tbn ensambladores y demás cosas, y Mac siempre basado en Unix con compilación en C++ para los últimos Sistemas Operativos.&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf Manual C++]&lt;br /&gt;
&lt;br /&gt;
*[http://www.monografias.com/trabajos5/visualcurso/visualcurso.shtml Curso Visual]&lt;br /&gt;
&lt;br /&gt;
*[http://www.zator.com/Cpp/E1_2.htm C++]&lt;br /&gt;
&lt;br /&gt;
*[http://es.wikipedia.org/wiki/C%2B%2B C++ en Wikipedia]&lt;br /&gt;
&lt;br /&gt;
*[http://www.programacionfacil.com/cpp:informacion_y_conocimiento C++ en ProgramacionFacil.com]&lt;br /&gt;
&lt;br /&gt;
*[http://www.somoslibres.org/modules.php?name=News&amp;amp;file=article&amp;amp;sid=2708 C++ en SomosLibres.org]&lt;br /&gt;
&lt;br /&gt;
*[http://www.psicofxp.com/forums/programacion.313/374200-c-y-sistemas-operativos.html El C++ y los Sistemas Operativos]&lt;br /&gt;
&lt;br /&gt;
*[http://es.kioskea.net/forum/affich-101630-lenguaje-en-que-fue-escrito-windows Windows está escrito en C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627688</id>
		<title>C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=627688"/>
		<updated>2011-05-31T13:47:33Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Un ejemplo de código */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=C++&lt;br /&gt;
|familia=Derivados de C&lt;br /&gt;
|imagen=C++.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Lenguaje de programación&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Bjarne Stroustrup&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=1983&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''C++''' es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición &amp;quot;oficial&amp;quot; del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de [[Operadores|operadores]], referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la [[Librería|librería]] Estándar C es un subconjunto de la librería C++) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Un Poco de historia  ==&lt;br /&gt;
&lt;br /&gt;
El comité para el estándar [[ANSI|ANSI]] [[C]] fue formado en [[1983]] con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue [[Bjarne Stroustrup]], también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en [[1983]]. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en [[1987]]. En [[1989]] se formó un comité ANSI (seguido algún tiempo después por un comité [[ISO|ISO]]) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de [[Operadores|operadores]] y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de [[Java]], un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él, aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.&lt;br /&gt;
&lt;br /&gt;
== Acerca de la POO  ==&lt;br /&gt;
&lt;br /&gt;
La [[POO|POO]] es una nueva filosofía de programación que se basa en la utilización de objetos. El objetivo de la POO no es sino la meta de cualquier modelo de programación estructurada convencional: &amp;quot;imponer&amp;quot; una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. Los mecanismos básicos de la POO son: objetos, mensajes, métodos y clases. &lt;br /&gt;
&lt;br /&gt;
*Objetos. Un objeto es una entidad que tiene unos atributos particulares (datos) y unas formas de operar sobre ellos (los métodos o funciones miembro). Es decir, un objeto incluye, por una parte una serie de operaciones que definen su comportamiento, y una serie de variables manipuladas por esas funciones que definen su estado. Por ejemplo, una ventana Windows contendrá operaciones como &amp;quot;maximizar&amp;quot; y variables como &amp;quot;ancho&amp;quot; y &amp;quot;alto&amp;quot; de la ventana. &lt;br /&gt;
*Mensajes. En C++, un mensaje se corresponde con el nombre de uno de los métodos de un objeto. Cuando se pasa un mensaje a un objeto, este responde ejecutando el código de la función asociada. &lt;br /&gt;
*[[Método|Método]]. Un método (función miembro) se implementa dentro de un objeto y determina como tiene que actuar el objeto cuando se produce el mensaje asociado. En C++ un método se corresponde con la definición de la función miembro del objeto. La estructura más interna de un objeto está oculta, de tal manera que la única conexión con el exterior son los mensajes &lt;br /&gt;
*Clases. Una clase es la definición de un tipo de objetos. De esta manera, una clase &amp;quot;Empleado&amp;quot; representaría todos los empleados de una empresa, mientras que un objeto de esa clase (también denominado instancia) representaría a uno de esos empleados en particular.&lt;br /&gt;
&lt;br /&gt;
Las principales características de la POO son: abstracción, encapsulamiento, herencia y polimorfismo: &lt;br /&gt;
&lt;br /&gt;
*[[Abstracción|Abstracción]]. Es el mecanismo de diseño en la POO. Nos permite extraer de un conjunto de entidades datos y comportamientos comunes para almacenarlos en clases. &lt;br /&gt;
*Encapsulamiento. Mediante esta técnica conseguiremos que cada clase sea una caja negra, de tal manera que los objetos de esa clase se puedan manipular como unidades básicas. Los detalles de la implementación se encuentran dentro de la clase, mientras que desde el exterior, un objeto será simplemente una entidad que responde a una serie de mensajes públicos (también denominados interfaz de la clase). &lt;br /&gt;
*Herencia. Es el mecanismo que nos permite crear clases derivadas (especialización) a partir de clases bases (generalización). Es decir, podríamos tener la clase &amp;quot;Empleado&amp;quot; (clase base) y la clase &amp;quot;Vendedor&amp;quot; derivando de la anterior. Una librería de clases (como la MFC) no es más que un conjunto de definiciones de clases interconectadas por múltiples relaciones de herencia. &lt;br /&gt;
*Polimorfismo. Esta característica nos permite disponer de múltiples implementaciones de un mismo método de clase, dependiendo de la clase en la que se realice. Es decir, podemos acceder a una variedad de métodos distintos (con el mismo nombre) mediante el mismo mecanismo de acceso. En C++ el polimorfismo se consigue mediante la definición de clases derivadas, funciones virtuales y el uso de punteros a objetos.&lt;br /&gt;
&lt;br /&gt;
Otros dos conceptos muy importantes en la POO son relativos a la creación y destrucción de objetos. En lenguajes estructurados convencionales, cuando se define una variable se le reserva espacio en memoria y, si no se inicializa expresamente, se hace por defecto (por ejemplo, en C una variable global siempre se inicializa a 0, pero una automática no, por lo que si no se inicializa expresamente su contenido inicial será basura); por otra parte, cuando se destruye una variable (por que se abandona el ámbito de su definición - scope -) se libera la memoria que estaba ocupando. Si ahora hacemos el paralelismo obligado entre variables y objetos para los lenguajes POO nos daremos cuenta de que deben existir procedimientos especiales de construcción y destrucción de objetos. En concreto, cada clase tiene dos funciones miembro especiales denominadas constructor y destructor. &lt;br /&gt;
&lt;br /&gt;
*[[Constructor|Constructor]] -&amp;amp;gt; Función miembro que es automáticamente invocada cada vez que se define un objeto, su objetivo es la inicialización del mismo. Toma el mismo nombre que la clase, puede recibir parámetros y podemos tener varios constructores definidos. &lt;br /&gt;
*[[Destructor|Destructor]] -&amp;amp;gt; Función miembro invocada automáticamente cada vez que se destruye un objeto. Su objetivo es realizar operaciones como liberación de memoria, cerrar ficheros abiertos, etc. Toma el mismo nombre de la clase comenzado primero por el carácter &amp;quot;~&amp;quot;, no toma parámetros y no admite la sobrecarga (sólo puede existir uno en cada clase).&lt;br /&gt;
&lt;br /&gt;
En muchos casos, para las clases mas sencillas, podemos encontrar clases que no tiene constructor o destructor, ó ninguno de los dos. En C++, siempre existen constructores y destructores por defecto que realizan una inicialización/liberación estándar. &lt;br /&gt;
&lt;br /&gt;
== Acerca de Interprete y compiladores  ==&lt;br /&gt;
&lt;br /&gt;
Antes, mencionar que tanto C como C++ son lenguajes compilados, y no interpretados. Esta diferencia es muy importante, ya que afecta mucho a muchos aspectos relacionados con la ejecución del programa. En un lenguaje interpretado, el programa está escrito en forma de texto, es el propio programa fuente. Este programa fuente es procesado por un programa externo, el intérprete, que traduce el programa, instrucción a instrucción, al tiempo que lo ejecuta. En los lenguajes interpretados no existen programas ejecutables directamente por el ordenador. El intérprete traduce, en tiempo real, cada línea del programa fuente, cada vez que se quiere ejecutar el programa. El los lenguajes compilados el proceso de traducción sólo se hace una vez. El programa compilador toma como entrada el código fuente del programa, y da como salida un fichero que puede ser ejecutado por el ordenador directamente. Una vez compilado, el programa ejecutable es autónomo, y ya no es necesario disponer del programa original ni del compilador para ejecutarlo. Cada opción tiene sus ventajas e inconvenientes, y algunas características que son consideradas una ventaja, pueden ser un inconveniente en ciertas circunstancias, y viceversa. &lt;br /&gt;
&lt;br /&gt;
*Los lenguajes interpretados son fácilmente modificables, ya que necesitamos tener el el código fuente disponible en el ordenador. En los compilados, estos ficheros no son necesarios, una vez compilados. &lt;br /&gt;
*Los lenguajes interpretados necesitan un programa externo, llamado intérprete o a veces máquina virtual, o framework. Este programa actua como intermediario entre el fuente y el sistema operativo. En los compilados ese papel lo desempeña el compilador, pero al contrario que con el intérprete, una vez ha hecho su trabajo, no es necesario que esté presente para ejecutar el programa. &lt;br /&gt;
*Estas dos características, lógicamente, hacen que los programas compilados requieran menos espacio de memoria que los interpretados (si contamos el espacio usado por el intérprete), y en general, los compilados son más rápidos, ya que sólo se compilan una vez, y el tiempo dedicado a esa tarea no se suma al de ejecución.&lt;br /&gt;
&lt;br /&gt;
Entre los lenguajes interpretados están: [[BASIC|BASIC]] (Código de instrucciones de propósito general para principiantes), Java, [[PHP|PHP]]. Muchos lenguajes de script, etc. Entre los lenguajes compilados están: C, C++, Pascal. &lt;br /&gt;
&lt;br /&gt;
== Que se puede hacer con C++  ==&lt;br /&gt;
&lt;br /&gt;
¿Qué clase de programas y aplicaciones se pueden crear usando C y C++? La respuesta es muy sencilla: TODOS. Tanto C como C++ son lenguajes de programación de propósito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc. &lt;br /&gt;
&lt;br /&gt;
=== Un ejemplo de código  ===&lt;br /&gt;
&lt;br /&gt;
Este es el clásico programa hola mundo, la idea está centrada en el nacimiento de un nuevo programa de manos de su creador. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;;&lt;br /&gt;
using std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;Hola mundo&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ¿Qué se ha que se ha hecho en C o en C++?  ==&lt;br /&gt;
&lt;br /&gt;
=== Sistemas Operativos y otros programas ===&lt;br /&gt;
&lt;br /&gt;
*Así como Unix el antecesor de este sistema operativo, GNU/Linux -a menudo denominado tan sólo como Linux, que es el nombre del núcleo del SO- hace uso de un buen número de lenguajes de programación en sus distintos componentes. ¿Cuáles son esos lenguajes? Cada tipo de recurso parece tener ciertas preferencias, y es que hay lenguajes más adecuados para unas cosas. Obviamente el lenguaje de programación C sigue siendo la base, pero hay mucho más implicados. &lt;br /&gt;
*Kernel y drivers de dispositivos: Tanto los drivers como el kernel funcionan en un nivel realmente bajo de operaciones en el ordenador. Para escribir el kernel del sistema operativo y acceder a las propiedades del hardware tales como los ciclos de la memoria, buses de entrada/salida, etc., se necesita un lenguaje que pueda comunicarse con el hardware con potencia. El kernel Linux hace uso del lenguaje C (aunque en realidad no se trate de un lenguaje de bajo nivel) con una pequeña parte en lenguaje ensamblador. &lt;br /&gt;
*&lt;br /&gt;
*Librerías y utilidades: Las librerías y utilidades básicas del sistema tales como mkdir, chmod, chown, head, tail, chroot, uptime, users también están escritas en lenguaje C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Gestores de paquetes y programas de configuración: Los gestores de paquetes tales como yum, apt, dpkg, etcétera, también están escritos en C, que como veis es la estrella absoluta de los componentes &amp;quot;base&amp;quot; de un sistema GNU/Linux.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Entornos de Escritorio y gestores de ventanas: La mayoría de gente usa un entorno de escritorio, y es que a día de hoy poco queda sólo en interfaz de línea de comandos. Los gestores de ventanas tales como metacity, kwin están desarrollados en C y requieren gcc para ser compilados. El entorno de escritorio, iconos, ventanas, barras de herramientas, etc, están basados en librerías específicas (Qt para KDE, GTK+ para GNOME) y hacen uso del lenguaje mayoritario, C.&amp;lt;br&amp;gt; &lt;br /&gt;
*&lt;br /&gt;
*Aplicaciones gráficas de usuario: Este es el punto donde entran en juego una gran cantidad de lenguajes de programación, dado que básicamente es la capa más alta. Tenemos una gran variedad: C, Python, Java, Perl y otros. Hay librerías GTK+, Tcl/Tk, Qt que son un frontend gráfico a tareas que corren por detrás en línea de comando.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*El Sistema operativo Windows está hecho básicamente en C, C tiene la ventaja de que puede escalarse con ensamblador, lo cual es buena opción para optimizar ciertos módulos.&lt;br /&gt;
&lt;br /&gt;
Las versiones anteriores de Windows estaban hechas en Basic (Basic NO visual Basic) que es un lenguaje de bajo nivel de hace unos cuantos años ya. Es un lenguaje que se usa mucho en la electrónica aun. &lt;br /&gt;
&lt;br /&gt;
*Actualmente Windows 7 Mac os x Leopard y Linux usan mas de una Tecnología ya se empezó a usar c# c++ y hasta java en el caso de linux se usa phytom c y tbn ensambladores y demás cosas, y Mac siempre basado en Unix con compilación en C++ para los últimos Sistemas Operativos.&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf Manual C++]&lt;br /&gt;
&lt;br /&gt;
*[http://www.monografias.com/trabajos5/visualcurso/visualcurso.shtml Curso Visual]&lt;br /&gt;
&lt;br /&gt;
*[http://www.zator.com/Cpp/E1_2.htm C++]&lt;br /&gt;
&lt;br /&gt;
*[http://es.wikipedia.org/wiki/C%2B%2B C++ en Wikipedia]&lt;br /&gt;
&lt;br /&gt;
*[http://www.programacionfacil.com/cpp:informacion_y_conocimiento C++ en ProgramacionFacil.com]&lt;br /&gt;
&lt;br /&gt;
*[http://www.somoslibres.org/modules.php?name=News&amp;amp;file=article&amp;amp;sid=2708 C++ en SomosLibres.org]&lt;br /&gt;
&lt;br /&gt;
*[http://www.psicofxp.com/forums/programacion.313/374200-c-y-sistemas-operativos.html El C++ y los Sistemas Operativos]&lt;br /&gt;
&lt;br /&gt;
*[http://es.kioskea.net/forum/affich-101630-lenguaje-en-que-fue-escrito-windows Windows está escrito en C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Constructor_(C%2B%2B)&amp;diff=624212</id>
		<title>Constructor (C++)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Constructor_(C%2B%2B)&amp;diff=624212"/>
		<updated>2011-05-30T13:01:19Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre= Constructor en C++&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase cuando se declara.&lt;br /&gt;
}}'''Constructor en C++'''. Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no pueden ser heredados. Además deben ser públicos, no tendría ningún sentido declarar un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de constructor en una clase llamada pareja==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;#include &amp;lt;iostream.h&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 '''class''' pareja&lt;br /&gt;
 {&lt;br /&gt;
   '''public:'''&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;//Constructor&amp;lt;/span&amp;gt;&lt;br /&gt;
    pareja('''int''' a2, '''int''' b2);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;//Funciones miembros de la clase &amp;quot;pareja&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
    '''void''' Lee('''int''' &amp;amp;a2, '''int''' &amp;amp;b2);&lt;br /&gt;
    '''void''' Guardar('''int''' a2, '''int''' b2);&lt;br /&gt;
   '''private:'''&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;//Datos miembros de la clase &amp;quot;pareja&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
    '''int''' a, b;&lt;br /&gt;
 }&lt;br /&gt;
 pareja::pareja('''int''' a2, '''int''' b2)&lt;br /&gt;
 {&lt;br /&gt;
    a = a2;&lt;br /&gt;
    b = b2;&lt;br /&gt;
 }&lt;br /&gt;
 '''void''' pareja::Lee('''int''' &amp;amp;a2, '''int''' &amp;amp;b2)&lt;br /&gt;
 {&lt;br /&gt;
    a2 = a;&lt;br /&gt;
    b2 = b;&lt;br /&gt;
 }&lt;br /&gt;
 '''void''' pareja::Guarda('''int''' a2, '''int''' b2)&lt;br /&gt;
 {&lt;br /&gt;
    a = a2;&lt;br /&gt;
    b = b2;&lt;br /&gt;
 }&lt;br /&gt;
 '''int main'''('''int''' argc, '''char *'''argv[])&lt;br /&gt;
 {&lt;br /&gt;
    pareja par1(12, 32);&lt;br /&gt;
    '''int''' x, y;&lt;br /&gt;
    par1.Lee(x, y);&lt;br /&gt;
    '''cout''' &amp;lt;&amp;lt; &amp;quot;Valor de par1.a: &amp;quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt;'''endl''';&lt;br /&gt;
    '''cout''' &amp;lt;&amp;lt; &amp;quot;Valor de par2.b: &amp;quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt;'''endl''';&lt;br /&gt;
    '''return''' 0;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Sobrecarga de constructores==&lt;br /&gt;
&lt;br /&gt;
También pueden definirse varios constructores para cada clase, es decir, la función constructor puede sobrecargarse. La única limitación es que no pueden declararse varios constructores con el mismo número y el mismo tipo de argumentos.&lt;br /&gt;
&lt;br /&gt;
==Constructor copia==&lt;br /&gt;
&lt;br /&gt;
Un constructor de este tipo crea un objeto a partir de otro objeto existente. Estos constructores sólo tienen un argumento, que es una referencia a un objeto de su misma clase.&lt;br /&gt;
&lt;br /&gt;
==Fuente==&lt;br /&gt;
*Curso de C++. Autor: [[Salvador Pozo Coronado]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=CUDA&amp;diff=624048</id>
		<title>CUDA</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=CUDA&amp;diff=624048"/>
		<updated>2011-05-30T12:05:24Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
| nombre = CUDA&lt;br /&gt;
| desarrollador = [[NVIDIA|NVIDIA Corporation]]&lt;br /&gt;
| última_versión = 2.3&lt;br /&gt;
|imagen=NvidiaCuda.jpg&lt;br /&gt;
| fecha_última_versión = {{Fecha de lanzamiento|22|07|2009}}&lt;br /&gt;
| sistema_operativo = [[Windows 7]], [[Windows Vista]], [[Windows XP]], [[Windows Server 2008]], &lt;br /&gt;
[[Windows Server 2003]], [[Linux]], [[Mac OS X]]&lt;br /&gt;
| género = [[GPGPU]]&lt;br /&gt;
| licencia = [[Software propietario|Propietaria]], [[Freeware]]&lt;br /&gt;
| web = [http://www.nvidia.com/object/cuda_home.html Nvidia's CUDA zone]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CUDA''' son las siglas de ('''''C'''ompute '''U'''nified '''D'''evice '''A'''rchitecture'') que hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por [[nVidia]] que permiten a los programadores usar una variación del lenguaje de programación C para codificar algoritmos en GPUs de nVidia.&lt;br /&gt;
Por medio de Adapter (patrón de diseño)wrappers se puede usar Python, Fortran y &lt;br /&gt;
Java en vez de C/C++ y en el futuro también se añadirá FORTRAN, OpenCL y Direct3D.&lt;br /&gt;
Funciona en todas las GPUs nVidia de la serie G8X en adelante, incluyendo GeForce, Quadro y la &lt;br /&gt;
línea Tesla.&lt;br /&gt;
nVidia afirma que los programas desarrollados para la serie GeForce 8 también funcionarán sin modificaciones en todas las futuras tarjetas nVidia, gracias a la compatibilidad binaria.&lt;br /&gt;
CUDA intenta explotar las ventajas de las GPUs frente a las CPUs de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos simultáneos. Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPUs al procesar gráficos, su tarea natural), una GPU podrá ofrecer un gran rendimiento en campos que podrían ir desde la biología computacional a la criptografía por ejemplo.&lt;br /&gt;
El primer SDK se publicó en febrero de 2007 en un principio para Windows, Linux, y más adelante en su versión 2.0 para Mac OS. Actualmente se ofrece para Windows XP Windows Vista, Windows 7, para Linux 32/64 bits y para Mac OS.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo de flujo de procesamiento CUDA'''&amp;lt;br&amp;gt;&lt;br /&gt;
1. Se copian los datos de la memoria principal a la memoria de la GPU&amp;lt;br&amp;gt;&lt;br /&gt;
2. La CPU encarga el proceso a la GPU&amp;lt;br&amp;gt;&lt;br /&gt;
3. La GPU lo ejecuta en paralelo en cada núcleo&amp;lt;br&amp;gt;&lt;br /&gt;
4. Se copia el resultado de la memoria de la GPU a la memoria principal&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ventajas ==&lt;br /&gt;
CUDA presenta ciertas ventajas sobre otros tipos de computación sobre GPU utilizando APIs gráficas.&lt;br /&gt;
&lt;br /&gt;
* Lecturas dispersas: se puede consultar cualquier posición de memoria.&lt;br /&gt;
* Memoria compartida: CUDA pone a disposición del programador un área de memoria de 16KB que se compartirá entre threads. Dado su tamaño y rapidez puede ser utilizada como caché.&lt;br /&gt;
* Lecturas más rápidas de y hacia la GPU.&lt;br /&gt;
* Soporte para enteros y operadores a nivel de bit.&lt;br /&gt;
&lt;br /&gt;
== Limitaciones ==&lt;br /&gt;
* No se puede utilizar recursividad, punteros a funciones, variables estáticas dentro de funciones o funciones con número de parámetros variable.&lt;br /&gt;
* No está soportado el renderizado de texturas.&lt;br /&gt;
* En precisión simple no soporta números desnormalizados o NaNs.&lt;br /&gt;
* Puede existir un cuello de botella entre la CPU y la GPU por los anchos de banda de los  buses y sus latencias.&lt;br /&gt;
* Los threads, por razones de eficiencia, deben lanzarse en grupos de al menos 32, con miles de hilos en total.&lt;br /&gt;
&lt;br /&gt;
== El modelo CUDA ==&lt;br /&gt;
CUDA intenta aprovechar el gran paralelismo, y el alto ancho de banda de la memoria en las GPUs en aplicaciones con un gran coste aritmético frente a realizar numerosos accesos a memoria principal, lo que podría actuar de cuello de botella.&lt;br /&gt;
El modelo de programación de CUDA está diseñado para que se creen aplicaciones que de forma &lt;br /&gt;
transparente escalen su paralelismo para poder incrementar el número de núcleos computacionales. &lt;br /&gt;
Este diseño contiene tres puntos claves, que son la jerarquía de grupos de hilos, las memorias compartidas y las barreras de sincronización.&lt;br /&gt;
&lt;br /&gt;
La estructura que se utiliza en este modelo está definido por un grid, dentro del cual hay bloques de hilos que están formados por como máximo 512 hilos distintos.&lt;br /&gt;
&lt;br /&gt;
Cada hilo está identificado con un identificador único, que se accede con la variable threadIdx. &lt;br /&gt;
Esta variable es muy útil para repartir el trabajo entre distintos hilos. &lt;br /&gt;
threadIdx tiene 3 componentes (x, y, z), coincidiendo con las dimensiones de bloques de hilos. Así, cada elemento de una matriz, por ejemplo, lo podría tratar su homólogo en un bloque de hilos de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
Al igual que los hilos, los bloques se identifican mediante blockIdx (en este caso con do  &lt;br /&gt;
componentes x e y). Otro parámetro útil es blockDim, para acceder al tamaño de bloque.&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
Un kernel en C para CUDA, es una función la cual al ejecutarse lo hará en N distintos hilos en lugar de en secuencial.&lt;br /&gt;
&lt;br /&gt;
== Invocaciones a un kernel ==&lt;br /&gt;
En una llamada a un kernel, se le ha de pasar el tamaño de grid y de bloque.&lt;br /&gt;
&lt;br /&gt;
== Sincronización ==&lt;br /&gt;
Como los distintos hilos colaboran entre ellos y pueden compartir datos, se requieren unas directivas de sincronización. En un kernel, se puede explicitar una barrera incluyendo una llamada a __syncthreads(), en la que todos los hilos se esperarán a que los demás lleguen a ese mismo punto.&lt;br /&gt;
&lt;br /&gt;
== Jerarquía de memoria ==&lt;br /&gt;
Los hilos en CUDA pueden acceder a distintas memorias, unas compartidas y otras no. &lt;br /&gt;
&lt;br /&gt;
* En primer lugar, está la memoria privada de cada hilo, solamente accesible desde él mismo. &lt;br /&gt;
* Cada bloque de hilos posee también un espacio de memoria, compartida en este caso por los hilos del bloque y con un ámbito de vida igual que el del propio bloque.&lt;br /&gt;
* Todos los hilos pueden acceder a una memoria global.&lt;br /&gt;
&lt;br /&gt;
Además, existen otros dos espacios de memoria más, que son de solo lectura y accesibles por todos los hilos. Son la memoria constante y la de texturas.Todas las memorias de acceso global persisten mientras esté el kernel en ejecución.&lt;br /&gt;
&lt;br /&gt;
== Arquitectura CUDA ==&lt;br /&gt;
Un multiprocesador contiene ocho procesadores escalares, dos unidades especiales para funciones trascendentales, una unidad multihilo de instrucciones y una memoria compartida. El multiprocesador crea y maneja los hilos sin ningún tipo de overhead por la planificación, lo cual unido a una rápida sincronización por barreras y una creación de hilos muy ligera, consigue que se pueda utilizar CUDA en problemas de muy baja granularidad, incluso asignando un hilo a un elemento por ejemplo de una imagen (un pixel).&lt;br /&gt;
&lt;br /&gt;
== Tarjetas Soportadas  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;12&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 295&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 285&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 275&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GX2&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX+&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GSO&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 Ultra&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 mGT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8100 mGPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 360M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 330M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 240M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 230M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 130M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9200M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9100M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200M G&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| align=&amp;quot;left&amp;quot; class=&amp;quot;standard&amp;quot; style=&amp;quot;width: 175px; height: 454px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | [[Nvidia Quadro|Nvidia Quadro ]]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4700 X2&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro NVS 290&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 770M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model IV&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model S4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| style=&amp;quot;width: 129px; height: 120px;&amp;quot; class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Quadro Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 360M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 140M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 135M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 130M&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Tesla]]&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S1070&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C1060&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla D870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S870&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
* [http://www.nvidia.es/object/cuda_home_es.html Zona CUDA de Nvidia]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Software]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=CUDA&amp;diff=624043</id>
		<title>CUDA</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=CUDA&amp;diff=624043"/>
		<updated>2011-05-30T12:04:17Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Tarjetas Soportadas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
| nombre = CUDA&lt;br /&gt;
| desarrollador = [[NVIDIA|NVIDIA Corporation]]&lt;br /&gt;
| última_versión = 2.3&lt;br /&gt;
|imagen=NvidiaCuda.jpg&lt;br /&gt;
| fecha_última_versión = {{Fecha de lanzamiento|22|07|2009}}&lt;br /&gt;
| sistema_operativo = [[Windows 7]], [[Windows Vista]], [[Windows XP]], [[Windows Server 2008]], &lt;br /&gt;
[[Windows Server 2003]], [[Linux]], [[Mac OS X]]&lt;br /&gt;
| género = [[GPGPU]]&lt;br /&gt;
| licencia = [[Software propietario|Propietaria]], [[Freeware]]&lt;br /&gt;
| web = [http://www.nvidia.com/object/cuda_home.html Nvidia's CUDA zone]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CUDA''' son las siglas de ('''''C'''ompute '''U'''nified '''D'''evice '''A'''rchitecture'') que hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por [[nVidia]] que permiten a los programadores usar una variación del lenguaje de programación C para codificar algoritmos en GPUs de nVidia.&lt;br /&gt;
Por medio de Adapter (patrón de diseño)wrappers se puede usar Python, Fortran y &lt;br /&gt;
Java en vez de C/C++ y en el futuro también se añadirá FORTRAN, OpenCL y Direct3D.&lt;br /&gt;
Funciona en todas las GPUs nVidia de la serie G8X en adelante, incluyendo GeForce, Quadro y la &lt;br /&gt;
línea Tesla.&lt;br /&gt;
nVidia afirma que los programas desarrollados para la serie GeForce 8 también funcionarán sin modificaciones en todas las futuras tarjetas nVidia, gracias a la compatibilidad binaria.&lt;br /&gt;
CUDA intenta explotar las ventajas de las GPUs frente a las CPUs de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos simultáneos. Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPUs al procesar gráficos, su tarea natural), una GPU podrá ofrecer un gran rendimiento en campos que podrían ir desde la biología computacional a la criptografía por ejemplo.&lt;br /&gt;
El primer SDK se publicó en febrero de 2007 en un principio para Windows, Linux, y más adelante en su versión 2.0 para Mac OS. Actualmente se ofrece para Windows XP Windows Vista, Windows 7, para Linux 32/64 bits y para Mac OS.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo de flujo de procesamiento CUDA'''&lt;br /&gt;
1. Se copian los datos de la memoria principal a la memoria de la GPU&lt;br /&gt;
2. La CPU encarga el proceso a la GPU&lt;br /&gt;
3. La GPU lo ejecuta en paralelo en cada núcleo&lt;br /&gt;
4. Se copia el resultado de la memoria de la GPU a la memoria principal&lt;br /&gt;
&lt;br /&gt;
== Ventajas ==&lt;br /&gt;
CUDA presenta ciertas ventajas sobre otros tipos de computación sobre GPU utilizando APIs gráficas.&lt;br /&gt;
&lt;br /&gt;
* Lecturas dispersas: se puede consultar cualquier posición de memoria.&lt;br /&gt;
* Memoria compartida: CUDA pone a disposición del programador un área de memoria de 16KB que se compartirá entre threads. Dado su tamaño y rapidez puede ser utilizada como caché.&lt;br /&gt;
* Lecturas más rápidas de y hacia la GPU.&lt;br /&gt;
* Soporte para enteros y operadores a nivel de bit.&lt;br /&gt;
&lt;br /&gt;
== Limitaciones ==&lt;br /&gt;
* No se puede utilizar recursividad, punteros a funciones, variables estáticas dentro de funciones o funciones con número de parámetros variable.&lt;br /&gt;
* No está soportado el renderizado de texturas.&lt;br /&gt;
* En precisión simple no soporta números desnormalizados o NaNs.&lt;br /&gt;
* Puede existir un cuello de botella entre la CPU y la GPU por los anchos de banda de los  buses y sus latencias.&lt;br /&gt;
* Los threads, por razones de eficiencia, deben lanzarse en grupos de al menos 32, con miles de hilos en total.&lt;br /&gt;
&lt;br /&gt;
== El modelo CUDA ==&lt;br /&gt;
CUDA intenta aprovechar el gran paralelismo, y el alto ancho de banda de la memoria en las GPUs en aplicaciones con un gran coste aritmético frente a realizar numerosos accesos a memoria principal, lo que podría actuar de cuello de botella.&lt;br /&gt;
El modelo de programación de CUDA está diseñado para que se creen aplicaciones que de forma &lt;br /&gt;
transparente escalen su paralelismo para poder incrementar el número de núcleos computacionales. &lt;br /&gt;
Este diseño contiene tres puntos claves, que son la jerarquía de grupos de hilos, las memorias compartidas y las barreras de sincronización.&lt;br /&gt;
&lt;br /&gt;
La estructura que se utiliza en este modelo está definido por un grid, dentro del cual hay bloques de hilos que están formados por como máximo 512 hilos distintos.&lt;br /&gt;
&lt;br /&gt;
Cada hilo está identificado con un identificador único, que se accede con la variable threadIdx. &lt;br /&gt;
Esta variable es muy útil para repartir el trabajo entre distintos hilos. &lt;br /&gt;
threadIdx tiene 3 componentes (x, y, z), coincidiendo con las dimensiones de bloques de hilos. Así, cada elemento de una matriz, por ejemplo, lo podría tratar su homólogo en un bloque de hilos de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
Al igual que los hilos, los bloques se identifican mediante blockIdx (en este caso con do  &lt;br /&gt;
componentes x e y). Otro parámetro útil es blockDim, para acceder al tamaño de bloque.&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
Un kernel en C para CUDA, es una función la cual al ejecutarse lo hará en N distintos hilos en lugar de en secuencial.&lt;br /&gt;
&lt;br /&gt;
== Invocaciones a un kernel ==&lt;br /&gt;
En una llamada a un kernel, se le ha de pasar el tamaño de grid y de bloque.&lt;br /&gt;
&lt;br /&gt;
== Sincronización ==&lt;br /&gt;
Como los distintos hilos colaboran entre ellos y pueden compartir datos, se requieren unas directivas de sincronización. En un kernel, se puede explicitar una barrera incluyendo una llamada a __syncthreads(), en la que todos los hilos se esperarán a que los demás lleguen a ese mismo punto.&lt;br /&gt;
&lt;br /&gt;
== Jerarquía de memoria ==&lt;br /&gt;
Los hilos en CUDA pueden acceder a distintas memorias, unas compartidas y otras no. &lt;br /&gt;
&lt;br /&gt;
* En primer lugar, está la memoria privada de cada hilo, solamente accesible desde él mismo. &lt;br /&gt;
* Cada bloque de hilos posee también un espacio de memoria, compartida en este caso por los hilos del bloque y con un ámbito de vida igual que el del propio bloque.&lt;br /&gt;
* Todos los hilos pueden acceder a una memoria global.&lt;br /&gt;
&lt;br /&gt;
Además, existen otros dos espacios de memoria más, que son de solo lectura y accesibles por todos los hilos. Son la memoria constante y la de texturas.Todas las memorias de acceso global persisten mientras esté el kernel en ejecución.&lt;br /&gt;
&lt;br /&gt;
== Arquitectura CUDA ==&lt;br /&gt;
Un multiprocesador contiene ocho procesadores escalares, dos unidades especiales para funciones trascendentales, una unidad multihilo de instrucciones y una memoria compartida. El multiprocesador crea y maneja los hilos sin ningún tipo de overhead por la planificación, lo cual unido a una rápida sincronización por barreras y una creación de hilos muy ligera, consigue que se pueda utilizar CUDA en problemas de muy baja granularidad, incluso asignando un hilo a un elemento por ejemplo de una imagen (un pixel).&lt;br /&gt;
&lt;br /&gt;
== Tarjetas Soportadas  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;12&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 295&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 285&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 275&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GX2&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX+&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GSO&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 Ultra&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 mGT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8100 mGPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 360M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 330M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 240M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 230M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 130M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9200M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9100M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200M G&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| align=&amp;quot;left&amp;quot; class=&amp;quot;standard&amp;quot; style=&amp;quot;width: 175px; height: 454px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | [[Nvidia Quadro|Nvidia Quadro ]]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4700 X2&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro NVS 290&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 770M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model IV&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model S4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| style=&amp;quot;width: 129px; height: 120px;&amp;quot; class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Quadro Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 360M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 140M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 135M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 130M&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Tesla]]&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S1070&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C1060&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla D870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S870&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
* [http://www.nvidia.es/object/cuda_home_es.html Zona CUDA de Nvidia]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Software]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=CUDA&amp;diff=624038</id>
		<title>CUDA</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=CUDA&amp;diff=624038"/>
		<updated>2011-05-30T12:00:25Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
| nombre = CUDA&lt;br /&gt;
| desarrollador = [[NVIDIA|NVIDIA Corporation]]&lt;br /&gt;
| última_versión = 2.3&lt;br /&gt;
|imagen=NvidiaCuda.jpg&lt;br /&gt;
| fecha_última_versión = {{Fecha de lanzamiento|22|07|2009}}&lt;br /&gt;
| sistema_operativo = [[Windows 7]], [[Windows Vista]], [[Windows XP]], [[Windows Server 2008]], &lt;br /&gt;
[[Windows Server 2003]], [[Linux]], [[Mac OS X]]&lt;br /&gt;
| género = [[GPGPU]]&lt;br /&gt;
| licencia = [[Software propietario|Propietaria]], [[Freeware]]&lt;br /&gt;
| web = [http://www.nvidia.com/object/cuda_home.html Nvidia's CUDA zone]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CUDA''' son las siglas de ('''''C'''ompute '''U'''nified '''D'''evice '''A'''rchitecture'') que hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por [[nVidia]] que permiten a los programadores usar una variación del lenguaje de programación C para codificar algoritmos en GPUs de nVidia.&lt;br /&gt;
Por medio de Adapter (patrón de diseño)wrappers se puede usar Python, Fortran y &lt;br /&gt;
Java en vez de C/C++ y en el futuro también se añadirá FORTRAN, OpenCL y Direct3D.&lt;br /&gt;
Funciona en todas las GPUs nVidia de la serie G8X en adelante, incluyendo GeForce, Quadro y la &lt;br /&gt;
línea Tesla.&lt;br /&gt;
nVidia afirma que los programas desarrollados para la serie GeForce 8 también funcionarán sin modificaciones en todas las futuras tarjetas nVidia, gracias a la compatibilidad binaria.&lt;br /&gt;
CUDA intenta explotar las ventajas de las GPUs frente a las CPUs de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos simultáneos. Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPUs al procesar gráficos, su tarea natural), una GPU podrá ofrecer un gran rendimiento en campos que podrían ir desde la biología computacional a la criptografía por ejemplo.&lt;br /&gt;
El primer SDK se publicó en febrero de 2007 en un principio para Windows, Linux, y más adelante en su versión 2.0 para Mac OS. Actualmente se ofrece para Windows XP Windows Vista, Windows 7, para Linux 32/64 bits y para Mac OS.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo de flujo de procesamiento CUDA'''&lt;br /&gt;
1. Se copian los datos de la memoria principal a la memoria de la GPU&lt;br /&gt;
2. La CPU encarga el proceso a la GPU&lt;br /&gt;
3. La GPU lo ejecuta en paralelo en cada núcleo&lt;br /&gt;
4. Se copia el resultado de la memoria de la GPU a la memoria principal&lt;br /&gt;
&lt;br /&gt;
== Ventajas ==&lt;br /&gt;
CUDA presenta ciertas ventajas sobre otros tipos de computación sobre GPU utilizando APIs gráficas.&lt;br /&gt;
&lt;br /&gt;
* Lecturas dispersas: se puede consultar cualquier posición de memoria.&lt;br /&gt;
* Memoria compartida: CUDA pone a disposición del programador un área de memoria de 16KB que se compartirá entre threads. Dado su tamaño y rapidez puede ser utilizada como caché.&lt;br /&gt;
* Lecturas más rápidas de y hacia la GPU.&lt;br /&gt;
* Soporte para enteros y operadores a nivel de bit.&lt;br /&gt;
&lt;br /&gt;
== Limitaciones ==&lt;br /&gt;
* No se puede utilizar recursividad, punteros a funciones, variables estáticas dentro de funciones o funciones con número de parámetros variable.&lt;br /&gt;
* No está soportado el renderizado de texturas.&lt;br /&gt;
* En precisión simple no soporta números desnormalizados o NaNs.&lt;br /&gt;
* Puede existir un cuello de botella entre la CPU y la GPU por los anchos de banda de los  buses y sus latencias.&lt;br /&gt;
* Los threads, por razones de eficiencia, deben lanzarse en grupos de al menos 32, con miles de hilos en total.&lt;br /&gt;
&lt;br /&gt;
== El modelo CUDA ==&lt;br /&gt;
CUDA intenta aprovechar el gran paralelismo, y el alto ancho de banda de la memoria en las GPUs en aplicaciones con un gran coste aritmético frente a realizar numerosos accesos a memoria principal, lo que podría actuar de cuello de botella.&lt;br /&gt;
El modelo de programación de CUDA está diseñado para que se creen aplicaciones que de forma &lt;br /&gt;
transparente escalen su paralelismo para poder incrementar el número de núcleos computacionales. &lt;br /&gt;
Este diseño contiene tres puntos claves, que son la jerarquía de grupos de hilos, las memorias compartidas y las barreras de sincronización.&lt;br /&gt;
&lt;br /&gt;
La estructura que se utiliza en este modelo está definido por un grid, dentro del cual hay bloques de hilos que están formados por como máximo 512 hilos distintos.&lt;br /&gt;
&lt;br /&gt;
Cada hilo está identificado con un identificador único, que se accede con la variable threadIdx. &lt;br /&gt;
Esta variable es muy útil para repartir el trabajo entre distintos hilos. &lt;br /&gt;
threadIdx tiene 3 componentes (x, y, z), coincidiendo con las dimensiones de bloques de hilos. Así, cada elemento de una matriz, por ejemplo, lo podría tratar su homólogo en un bloque de hilos de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
Al igual que los hilos, los bloques se identifican mediante blockIdx (en este caso con do  &lt;br /&gt;
componentes x e y). Otro parámetro útil es blockDim, para acceder al tamaño de bloque.&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
Un kernel en C para CUDA, es una función la cual al ejecutarse lo hará en N distintos hilos en lugar de en secuencial.&lt;br /&gt;
&lt;br /&gt;
== Invocaciones a un kernel ==&lt;br /&gt;
En una llamada a un kernel, se le ha de pasar el tamaño de grid y de bloque.&lt;br /&gt;
&lt;br /&gt;
== Sincronización ==&lt;br /&gt;
Como los distintos hilos colaboran entre ellos y pueden compartir datos, se requieren unas directivas de sincronización. En un kernel, se puede explicitar una barrera incluyendo una llamada a __syncthreads(), en la que todos los hilos se esperarán a que los demás lleguen a ese mismo punto.&lt;br /&gt;
&lt;br /&gt;
== Jerarquía de memoria ==&lt;br /&gt;
Los hilos en CUDA pueden acceder a distintas memorias, unas compartidas y otras no. &lt;br /&gt;
&lt;br /&gt;
* En primer lugar, está la memoria privada de cada hilo, solamente accesible desde él mismo. &lt;br /&gt;
* Cada bloque de hilos posee también un espacio de memoria, compartida en este caso por los hilos del bloque y con un ámbito de vida igual que el del propio bloque.&lt;br /&gt;
* Todos los hilos pueden acceder a una memoria global.&lt;br /&gt;
&lt;br /&gt;
Además, existen otros dos espacios de memoria más, que son de solo lectura y accesibles por todos los hilos. Son la memoria constante y la de texturas.Todas las memorias de acceso global persisten mientras esté el kernel en ejecución.&lt;br /&gt;
&lt;br /&gt;
== Arquitectura CUDA ==&lt;br /&gt;
Un multiprocesador contiene ocho procesadores escalares, dos unidades especiales para funciones trascendentales, una unidad multihilo de instrucciones y una memoria compartida. El multiprocesador crea y maneja los hilos sin ningún tipo de overhead por la planificación, lo cual unido a una rápida sincronización por barreras y una creación de hilos muy ligera, consigue que se pueda utilizar CUDA en problemas de muy baja granularidad, incluso asignando un hilo a un elemento por ejemplo de una imagen (un pixel).&lt;br /&gt;
&lt;br /&gt;
== Tarjetas Soportadas  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;12&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 295&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 285&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 275&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GX2&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX+&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GSO&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 Ultra&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600 mGT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8500 GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400 GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8300 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200 mGPU&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8100 mGPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[GeForce|Nvidia GeForce Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 360M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 280M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTX 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 260M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GTS 250M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 330M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 240M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 230M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 220M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce G210M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTX&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9800M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce GT 130M&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9650M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9500M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9300M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9200M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 9100M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8800M GTS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8700M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8600M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GT&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M GS&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8400M G&lt;br /&gt;
|-&lt;br /&gt;
| GeForce 8200M G&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| align=&amp;quot;left&amp;quot; class=&amp;quot;standard&amp;quot; style=&amp;quot;width: 175px; height: 454px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | [[Nvidia Quadro|Nvidia Quadro ]]&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 5600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4700 X2&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 4600&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1800&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1700&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro NVS 290&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 3600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 1600M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 770M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 570M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro FX 370M&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model IV&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; align=&amp;quot;left&amp;quot; | Quadro Plex 1000 Model S4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| style=&amp;quot;width: 129px; height: 194px;&amp;quot; class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Quadro Mobile]]&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 360M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 140M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 135M&lt;br /&gt;
|-&lt;br /&gt;
| Quadro NVS 130M&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[Nvidia Tesla]]&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S1070&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C1060&lt;br /&gt;
|-&lt;br /&gt;
| Tesla C870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla D870&lt;br /&gt;
|-&lt;br /&gt;
| Tesla S870&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
* [http://www.nvidia.es/object/cuda_home_es.html Zona CUDA de Nvidia]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Software]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SSE&amp;diff=615112</id>
		<title>SSE</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SSE&amp;diff=615112"/>
		<updated>2011-05-25T15:28:49Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Aplicaciones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre          = SSE&lt;br /&gt;
| imagen          = SSE.jpg&lt;br /&gt;
| pie         = SSE (Streaming [[SIMD]] Extensions) es una extensión al grupo de instrucciones [[MMX]] para procesadores [[Pentium III]]&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1           = &lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''SSE''' (Streaming [[SIMD]] Extension). Introducida por Intel en [[1999]] en su línea de procesadores [[Pentium III]], la tecnología SIMD (Single Instruction Multiple Data). Mientras que un procesador más antiguo podía procesar un simple elemento de datos por instrucción, la tecnología SIMD le permite a las instrucciones la manipulación de múltiples elementos de datos, logrando así un rendimiento superior.&lt;br /&gt;
&lt;br /&gt;
En contraste con la tecnología [[MMX]],la cual es bastante parecida a esta tecnología, SSE contiene registros de mayor tamaño en bits, permitiendo a SSE trabajar más rápido que la avanzada tecnología MMX.&lt;br /&gt;
&lt;br /&gt;
SSE adiciona 8 nuevos registros de 128-bits, divididos en 4 valores de punto flotante de 32-bits(precisión simple).&lt;br /&gt;
&lt;br /&gt;
== Aplicaciones  ==&lt;br /&gt;
&lt;br /&gt;
SSE es usado con frecuencia en el procesamiento de datos en aplicaciones gráficas tridimensionales beneficiándose en gran medida con esta tecnología. Estas instrucciones operan con paquetes de operandos en [[Coma flotante]] de precisión simple (FP). &amp;lt;br&amp;gt; Las instrucciones SSE son indispensables para la decodificación de [[MPEG-2]] y softwares de reconocimiento de voz.&lt;br /&gt;
&lt;br /&gt;
== Instrucciones SSE  ==&lt;br /&gt;
&lt;br /&gt;
Hay varios tipos de instrucciones SSE: &lt;br /&gt;
&lt;br /&gt;
*Instrucciones SSE de Transferencia de datos. &lt;br /&gt;
*Instrucciones SSE de Conversión. &lt;br /&gt;
*Instrucciones SSE Aritméticas. &lt;br /&gt;
*Instrucciones SSE lógicas.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
*[[SSE2]] &lt;br /&gt;
*[[SSE3]] &lt;br /&gt;
*[[SSSE3]]&lt;br /&gt;
*[[SSE4]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.tech-faq.com/sse.html Tech-Faq.com]&lt;br /&gt;
*[http://www.webopedia.com/TERM/S/SSE.html Webopedia.com] &lt;br /&gt;
*[http://es.wikipedia.org/wiki/SSE Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Xbox&amp;diff=615093</id>
		<title>Xbox</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Xbox&amp;diff=615093"/>
		<updated>2011-05-25T15:24:35Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Hardware y Accesorios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{VideoConsola&lt;br /&gt;
|nombre = Xbox&lt;br /&gt;
|logo = Xbox_logo.png&lt;br /&gt;
|tamaño logo =&lt;br /&gt;
|imagen = Xbox_consola.jpg&lt;br /&gt;
|tamaño =&lt;br /&gt;
|fabricante =  [[Microsoft]]&lt;br /&gt;
|tipo = Videoconsola de sobremesa&lt;br /&gt;
|generación = Sexta generación&lt;br /&gt;
|lanzamiento = [[15 de noviembre]] de [[2001]]&lt;br /&gt;
|CPU = [[Intel Coopermine Core]] 32-bit @ 733MHz&lt;br /&gt;
|GPU = [[NV2A MPCX]] 256-bit @ 233-250 MHz&lt;br /&gt;
|soporte = [[DVD]]/[[CD]]&lt;br /&gt;
|almacenamiento = Disco duro de 8GB, Tarjetas de Memoria&lt;br /&gt;
|compatibilidad = &lt;br /&gt;
|precio = &lt;br /&gt;
|unidadesproducidas = &lt;br /&gt;
|predecesor = Ninguna, es la primera videoconsola de [[Microsoft]]&lt;br /&gt;
|sucesor = [[Xbox 360]]&lt;br /&gt;
|sitio web = http://www.xbox.com/es-ES/&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''Xbox''', primera videoconsola de sobremesa de sexta generación desarrollada a manos de [[Microsoft]] con el objetivo de competir con la consola [[PlayStation 2]] de [[SONY]] y la [[Gamecube]] de [[Nintendo]]. &lt;br /&gt;
&lt;br /&gt;
Desarrollada en conjunto con [[Microsoft]], [[Intel]] y [[NVIDIA|Nvidia]], posee un [[Microprocesador]] Intel [[Pentium III]], basado en la arquitectura de [[X86|x86]] similar a la de una [[PC]], facilitando así a los desarrolladores de videojuegos adaptar muchos de los títulos de PC para la Xbox. Entre otras características posee un lector de [[DVD]], conector de Ethernet y posee 4 conectores para mandos de juego. &lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
=== Incursión de Microsoft en videoconsolas  ===&lt;br /&gt;
&lt;br /&gt;
En [[1998]], [[Microsoft]] en colaboración con [[SEGA]] contribuyó a la adaptación del Sistema Operativo [[Windows CE]] para la consola [[Dreamcast]]. &lt;br /&gt;
&lt;br /&gt;
=== Desarrollo de la videoconsola  ===&lt;br /&gt;
&lt;br /&gt;
La Xbox fue desarrollada por un pequeño grupo de desarrolladores contratados por [[Microsoft]]. Microsoft retrasó en varias ocasiones la noticia de su nueva consola y finalmente fue revelado como proyecto a finales de [[1999]], a raíz de entrevistas con [[Bill Gates]]. Gates dijo que un dispositivo de juego / entretenimiento es esencial para la convergencia [[Multimedia|multimedia]] en los nuevos tiempos de ocio digital. &lt;br /&gt;
&lt;br /&gt;
Según el libro de Dean Takahashi, &amp;quot;Opening the Xbox&amp;quot; fue conocida como &amp;quot;DirectX-box&amp;quot;, haciendo alusión del uso del [[DirectX]] en una consola de videojuegos. El nombre definitivo para su comercialización fue &amp;quot;Xbox&amp;quot;, la consola todavía conservó algo de la palabra DirectX, especialmente la letra &amp;quot;X&amp;quot; que forma el logotipo del sistema. &lt;br /&gt;
&lt;br /&gt;
== Hardware y Accesorios  ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware  ===&lt;br /&gt;
&lt;br /&gt;
*Arquitectura [[X86]] al igual que los ordenadores personales. [[Image:NVidia gpu xbox.jpg|thumb|right|Procesador Gráfico del Xbox|105x109px]] &lt;br /&gt;
*Su Procesador Central de 32 bits basado en el diseño del [[Pentium III]], tiene una velocidad de 733 [[MHz]].&lt;br /&gt;
&lt;br /&gt;
*Posee 64 [[MB]] de [[RAM]] del tipo [[DDR]] [[SDRAM]] y corre a una velocidad de 200 [[MHz]]. &lt;br /&gt;
*Disco duro interno de 8 [[GB]] usado para guardar los juegos y las descargas de [[Xbox Live]]. &lt;br /&gt;
*Cuatro salidas para controles y puertos [[USB]] 1.0. &lt;br /&gt;
*Incluye puerto [[Rj-45|RJ-45]] de Fast [[Ethernet]]. &lt;br /&gt;
*Utiliza un chip gráfico [[NVIDIA]] de la serie GeForce 3 Titanium y posteriormente el GeForce 4 Titanium.&lt;br /&gt;
&lt;br /&gt;
=== Accesorios  ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Xbox mando.jpg|thumb|right|Mando del Xbox|106x92px]] &lt;br /&gt;
&lt;br /&gt;
*Adaptador RF Xbox: Es un adaptador que permite conectar la Xbox a televisores que carezcan de conexión de audio y video. &lt;br /&gt;
*Cable estándar de conexión audio/video Xbox: Es un cable que permite conectar la consola a un televisor con terminal de entrada de audio y video compuesto. &lt;br /&gt;
*Unidad de memoria Xbox: Es una unidad de memoria portátil cuya capacidad es de 30 MB, sirve para almacenar partidas y poder transportar los archivos hacia otras consolas Xbox. Esta unidad es para uso exclusivo con controladores compatibles con Xbox que tengan ranuras de expansión de memoria. &lt;br /&gt;
*Auriculares: es un aparato que sirve para comunicarse mediante partidas multijugador en &amp;quot;XBOX LIVE&amp;quot; &lt;br /&gt;
*Control DVD: mediante un accesorio conectado a las entradas principales de controles comunes, el mismo recibe señales del control en su lector infrarojo, esto permite disfrutar las películas tal como se haría con un DVD común.&lt;br /&gt;
&lt;br /&gt;
== Juegos  ==&lt;br /&gt;
&lt;br /&gt;
Algunos de los juegos más famosos del Xbox. &lt;br /&gt;
&lt;br /&gt;
*[[Halo]]. &lt;br /&gt;
*[[Halo 2]]. &lt;br /&gt;
*[[Doom 3]]. &lt;br /&gt;
*[[Grand Thef Auto: San Andreas]]. &lt;br /&gt;
*[[Farcry]]. &lt;br /&gt;
*[[Fable]].&lt;br /&gt;
&lt;br /&gt;
Existen un total de 1162 juegos disponibles a la venta. &lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.anandtech.com/show/853/2 Anandtech.com]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/Xbox Wikipedia]&lt;br /&gt;
*[http://www.xbox-mag.net/webfiles/games.php Xbox Magazine]&lt;br /&gt;
*[http://xbox.canaljuegos.com/xbox/noticias/122/654/xbox-experimenta-crecimiento-mas-rapido-historia-consolas/ Canaljuegos.com]&lt;br /&gt;
&lt;br /&gt;
[[Category:Recreación]] [[Category:Videojuegos]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615018</id>
		<title>Intel Turbo Boost</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615018"/>
		<updated>2011-05-25T15:13:43Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel Turbo Boost.&lt;br /&gt;
| imagen          = Turboboost-micro.png‎&lt;br /&gt;
| pie         = Intel Turbo Boost consiste en elevar la velocidad del [[CPU]] de forma automática.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = [[Intel]]&lt;br /&gt;
| conn1           = &lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel Turbo Boost''' es una tecnología implementada por [[Intel]] en algunas versiones de [[CPU]] con arquitectura [[Nehalem]], incluyendo los [[Core i5]] y [[Intel_Core_i_7|Core i7]]. Esta tecnología posibilita al procesador aumentar su frecuencia de funcionamiento automáticamente en circunstancias determinadas. La activación de este estado se efectúa cuando el [[Sistema Operativo]] hace una petición de mayor rendimiento al CPU. &lt;br /&gt;
&lt;br /&gt;
== Ejemplo ==&lt;br /&gt;
&lt;br /&gt;
Para el [[Intel_Core_i_7|Core i7]]-920XM. La frecuencia de operación normal es de 2.0GHz. El Turbo es indicado como: 2/2/8/9 en cual el primer número es un múltiplo de 133.33 MHz soportado cuando los cuatro núcleos están activos, el segundo número es el múltiplo para tres núcleos, el tercer número es para dos núcleos, y el cuarto número es para un solo núcleo activo. Sujeto a límites en temperatura, corriente y energía de consumos, el procesador puede incrementar su reloj (desde una frecuencia base de 2.0GHz) en pasos de 133MHz a: &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width: 432px; height: 175px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de núcleos activos''' &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de Pasos Turbo'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Frecuencia Máxima'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Cálculo'''&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.20 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 7 × 100 = 2500 + 700 ≃ 3200&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3&amp;lt;br&amp;gt; &lt;br /&gt;
| 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.30 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 8 × 100 = 2500 + 800 ≃ 3300&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&amp;lt;br&amp;gt; &lt;br /&gt;
| 9&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.40 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 9 × 100 = 2500 + 900 ≃ 3400&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.50 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 10 × 100 = 2500 + 1000 ≃ 3500&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.intel.com/technology/turboboost/ Intel® Turbo Boost Technology 2.0] (''en inglés'')&lt;br /&gt;
*[http://download.intel.com/design/processor/applnots/320354.pdf?iid=tech_tb+paper Manual de Intel Turbo Boost.]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615012</id>
		<title>Intel Turbo Boost</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615012"/>
		<updated>2011-05-25T15:12:50Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Ejemplo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel Turbo Boost.&lt;br /&gt;
| imagen          = Turboboost-micro.png‎&lt;br /&gt;
| pie         = Intel Turbo Boost consiste en elevar la velocidad del [[CPU]] de forma automática.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = [[Intel]]&lt;br /&gt;
| conn1           = &lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel Turbo Boost''' es una tecnología implementada por [[Intel]] en algunas versiones de [[CPU]] con arquitectura [[Nehalem]], incluyendo los [[Core i5]] y [[Core i7]]. Esta tecnología posibilita al procesador aumentar su frecuencia de funcionamiento automáticamente en circunstancias determinadas. La activación de este estado se efectúa cuando el [[Sistema Operativo]] hace una petición de mayor rendimiento al CPU. &lt;br /&gt;
&lt;br /&gt;
== Ejemplo ==&lt;br /&gt;
&lt;br /&gt;
Para el [[Intel_Core_i_7|Core i7]]-920XM. La frecuencia de operación normal es de 2.0GHz. El Turbo es indicado como: 2/2/8/9 en cual el primer número es un múltiplo de 133.33 MHz soportado cuando los cuatro núcleos están activos, el segundo número es el múltiplo para tres núcleos, el tercer número es para dos núcleos, y el cuarto número es para un solo núcleo activo. Sujeto a límites en temperatura, corriente y energía de consumos, el procesador puede incrementar su reloj (desde una frecuencia base de 2.0GHz) en pasos de 133MHz a: &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width: 432px; height: 175px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de núcleos activos''' &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de Pasos Turbo'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Frecuencia Máxima'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Cálculo'''&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.20 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 7 × 100 = 2500 + 700 ≃ 3200&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3&amp;lt;br&amp;gt; &lt;br /&gt;
| 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.30 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 8 × 100 = 2500 + 800 ≃ 3300&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&amp;lt;br&amp;gt; &lt;br /&gt;
| 9&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.40 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 9 × 100 = 2500 + 900 ≃ 3400&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.50 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 10 × 100 = 2500 + 1000 ≃ 3500&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.intel.com/technology/turboboost/ Intel® Turbo Boost Technology 2.0] (''en inglés'')&lt;br /&gt;
*[http://download.intel.com/design/processor/applnots/320354.pdf?iid=tech_tb+paper Manual de Intel Turbo Boost.]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615007</id>
		<title>Intel Turbo Boost</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Intel_Turbo_Boost&amp;diff=615007"/>
		<updated>2011-05-25T15:11:40Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Ejemplo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Hardware&lt;br /&gt;
| nombre          = Intel Turbo Boost.&lt;br /&gt;
| imagen          = Turboboost-micro.png‎&lt;br /&gt;
| pie         = Intel Turbo Boost consiste en elevar la velocidad del [[CPU]] de forma automática.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = [[Intel]]&lt;br /&gt;
| conn1           = &lt;br /&gt;
| via1_1          = &lt;br /&gt;
| nombre-clase    = &lt;br /&gt;
| clase1          = &lt;br /&gt;
| manuf1          = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Intel Turbo Boost''' es una tecnología implementada por [[Intel]] en algunas versiones de [[CPU]] con arquitectura [[Nehalem]], incluyendo los [[Core i5]] y [[Core i7]]. Esta tecnología posibilita al procesador aumentar su frecuencia de funcionamiento automáticamente en circunstancias determinadas. La activación de este estado se efectúa cuando el [[Sistema Operativo]] hace una petición de mayor rendimiento al CPU. &lt;br /&gt;
&lt;br /&gt;
== Ejemplo ==&lt;br /&gt;
&lt;br /&gt;
Para el [[Core i 7|Core i7]]-920XM. La frecuencia de operación normal es de 2.0GHz. El Turbo es indicado como: 2/2/8/9 en cual el primer número es un múltiplo de 133.33 MHz soportado cuando los cuatro núcleos están activos, el segundo número es el múltiplo para tres núcleos, el tercer número es para dos núcleos, y el cuarto número es para un solo núcleo activo. Sujeto a límites en temperatura, corriente y energía de consumos, el procesador puede incrementar su reloj (desde una frecuencia base de 2.0GHz) en pasos de 133MHz a: &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width: 432px; height: 175px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de núcleos activos''' &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''# de Pasos Turbo'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Frecuencia Máxima'''&amp;lt;br&amp;gt; &lt;br /&gt;
| bgcolor=&amp;quot;#cccccc&amp;quot; | '''Cálculo'''&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4'''&amp;lt;br&amp;gt;''' &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.20 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 7 × 100 = 2500 + 700 ≃ 3200&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3&amp;lt;br&amp;gt; &lt;br /&gt;
| 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.30 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 8 × 100 = 2500 + 800 ≃ 3300&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&amp;lt;br&amp;gt; &lt;br /&gt;
| 9&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.40 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 9 × 100 = 2500 + 900 ≃ 3400&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.50 GHz&amp;lt;br&amp;gt; &lt;br /&gt;
| 2500 + 10 × 100 = 2500 + 1000 ≃ 3500&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.intel.com/technology/turboboost/ Intel® Turbo Boost Technology 2.0] (''en inglés'')&lt;br /&gt;
*[http://download.intel.com/design/processor/applnots/320354.pdf?iid=tech_tb+paper Manual de Intel Turbo Boost.]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=614966</id>
		<title>SpeedStep</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=SpeedStep&amp;diff=614966"/>
		<updated>2011-05-25T15:05:20Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Véase también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Desarrollo}} {{Ficha Hardware&lt;br /&gt;
| nombre = Enhanced Intel SpeedStep Technology(EIST).&lt;br /&gt;
| imagen = bios_eist.jpg&lt;br /&gt;
| pie = Tecnología utilizada en los procesadores [[Intel]] para el ahorro de energía y menos generación de calor reduciendo los ciclos de los mismos.&lt;br /&gt;
| fecha-invención = &lt;br /&gt;
| nombre-inventor = &lt;br /&gt;
| conn1 = &lt;br /&gt;
| via1_1 =&lt;br /&gt;
| nombre-clase = &lt;br /&gt;
| clase1 = &lt;br /&gt;
| manuf1 = &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
'''Enhanced Intel SpeedStep Technology (EIST)''' es una tecnología que presentantan los microprocesadores [[Intel]] para ofrecer un rendimiento muy alto a la vez de satisfacer las necesidades de conservación de energía de los sistemas. La tecnología Intel SpeedStep convencional intercambia tanto voltaje y frecuencia en conjunto entre los niveles alto y bajo en respuesta a la carga del procesador.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
[[Intel_Turbo_Boost|Turbo Boost]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://software.intel.com/en-us/articles/enhanced-intel-speedstepr-technology-and-demand-based-switching-on-linux/ Corporación Intel]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/SpeedStep Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]] [[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Sandy_Bridge&amp;diff=614927</id>
		<title>Sandy Bridge</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Sandy_Bridge&amp;diff=614927"/>
		<updated>2011-05-25T14:59:22Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Tecnología */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Objeto|nombre= Sandy Bridge|imagen=Sandybridge.jpg‎ |descripcion=Tecnología [[Sandy Bridge]] inteligente.}} &lt;br /&gt;
&lt;br /&gt;
'''Sandy Bridge'''. Es el nombre en clave de una microarquitectura para procesadores desarrollada por [[Intel]] como sucesora de [[Nehalem]] en el [[2011]]. Sandy Bridge es una evolución muy notable sobre los anteriores Nehalem y [[Westmere]], con un buen número de cambios a nivel técnico pero manteniendo su nombre de procesadores: Intel Core i3, i5 e i7, siendo gama baja, media y alta respectivamente. También cambia muy notablemente la numeración de los modelos, pasando de las centenas a los millares.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
&lt;br /&gt;
Aunque el NDA oficialmente se expiró el [[3 de enero]] del 2011, meses antes de su salida, ya se sabían los detalles que iban a tener estos procesadores:&lt;br /&gt;
&lt;br /&gt;
*La superficie del encapsulado de los procesadores de cuádruple núcleo son aproximadamente de 216 mm2 con 995 millones de transistores.&lt;br /&gt;
*Soportan las tecnologías [[HyperThreading]] y [[Intel_Turbo_Boost|Turbo boost]], aunque algunas características están capadas o desactivadas para diferenciarse entre los distintos segmentos de mercado, como ocurría con las anteriores generaciones i3, i5 e i7.&lt;br /&gt;
*Frecuencias de reloj de serie desde 2,3 GHz hasta 3,4 GHz para procesadores de sobremesa y desde 2,2 GHz hasta 2,7 GHz para el segmento portátil. Con Turbo boost activado, se llega hasta los 3,8 GHz sin practicar [[overclock]] manual.&lt;br /&gt;
*La GPU integrada cuenta con frecuencias desde 650 MHz hasta 850 MHz, y si se activa Turbo Boost hasta 1,35 GHz.&lt;br /&gt;
*Cierta cantidad de caché de nivel 3 está capada en algunos modelos para diferenciar entre segmentos de mercado.&lt;br /&gt;
*64 KiB de caché de nivel 1 por núcleo (32 KiB L1 Datos + 32 KiB L1 instrucciones) y 256 KiB caché nivel 2 por núcleo.&lt;br /&gt;
*Hasta 8 MiB de caché de nivel 3 compartida con un bus en anillo para poder compartirse con el núcleo gráfico.&lt;br /&gt;
*Ancho de banda del bus en anillo de 256 bits por ciclo. El bus conecta los núcleos.&lt;br /&gt;
*Todos los procesadores basados cuentan con un ancho de línea con caché de 64 bytes.&lt;br /&gt;
*Controlador de memoria mejorado con un ancho de banda máximo de 25,6 GiB/s y soporte para [[DDR3]] a 1600 MHz en doble canal con dos operaciones de carga/almacenamiento por ciclo.&lt;br /&gt;
*Potencia de diseño térmico comprendida entre 35 W y 95 W para procesadores destinados a sobremesa; y entre 18 W y 55 W los destinados al segmento portátil.&lt;br /&gt;
*Doble y cuádruple núcleo disponibles desde la salida de los mismos, los de séxtuple y óctuple núcleo llegarían al mercado más adelante.&lt;br /&gt;
*Los procesadores con tecnología obsoleta x86 con el SSE desactivado, dan hasta 8 GFLOPS en coma flotante de doble precisión por núcleo, con un máximo teórico de 32 GFLOPS en coma flotante de doble precisión por procesador.&lt;br /&gt;
*Con el AVX activado, los procesadores dan una potencia máxima teórica de 32 GFLOPS de coma flotante en doble precisión por núcleo, lo que se traduce en un máximo de 128 GFLOPS de coma flotante en doble precisión por procesador.&lt;br /&gt;
*Mejorado el rendimiento con operaciones de función transcendente, cifrado AES y SHA-1.&lt;br /&gt;
*Soporte de hasta 32 GiB de RAM [[DDR3]]&lt;br /&gt;
&lt;br /&gt;
== Mejora del rendimiento y del consumo energético ==&lt;br /&gt;
&lt;br /&gt;
En todas las pruebas de rendimiento, pero la mayor parte en aplicaciones con subprocesos, Sandy Bridge es el chip más rápido en el bloque, y se obtiene el mejor rendimiento a un precio bastante razonable.&lt;br /&gt;
 &lt;br /&gt;
El Core i7-2600K de valor $ 317, tiene un rendimiento superior en 1-5% en todos los ámbitos de las aplicaciones existentes con respecto al Core i7-980X de valor $ 999 siendo este un procesador de seis núcleos con 12 subprocesos.&lt;br /&gt;
 &lt;br /&gt;
El Core i5-2500K de valor $ 216 tiene un rendimiento similar o quizás -1% a -2% en todos los ámbitos de las aplicaciones existentes con respecto al Core i7-980X de valor $ 999 siendo este un procesador de seis núcleos con 12  subprocesos.&lt;br /&gt;
&lt;br /&gt;
El Core i5-2500K en comparación con un procesador Core i5-750/760, obtendrá un rendimiento adicional del 10-50% en todos los ámbitos de las aplicaciones existentes, y todo lo que de un aumento de ~ 25% en velocidad de reloj.&lt;br /&gt;
&lt;br /&gt;
== Resumiendo ==&lt;br /&gt;
&lt;br /&gt;
* El Core i7 de Sandy Bridge es 5-45% con respecto a el Core i7 Nehelam.&lt;br /&gt;
&lt;br /&gt;
* El Core i5 de Sandy Bridge es 10-50% con respecto a el Core i5 Nehelam.&lt;br /&gt;
&lt;br /&gt;
* El Core i3 de Sandy Bridge es 15-30% con respecto a el Core i5 Nehelam.&lt;br /&gt;
&lt;br /&gt;
La [[GPU]] interna incluida en los procesadores Sandy Bridge mejora también en un 15-40% con respecto a las GPU internas de Nehelam-C. Esta GPU compite con las tarjetas de gama baja en el mercado de [[Nvidia]] y [[Ati Radeon]] en cuanto a rendimiento ahorrando al consumidor $ 35 - $ 45 en la compra de una de estas tarjetas de gama baja y obligando a estos fabricantes de GPU externas a mejorar sus productos de gama baja.&lt;br /&gt;
&lt;br /&gt;
== Sucesor ==&lt;br /&gt;
&lt;br /&gt;
El sucesor de Sandy Bridge es [[Ivy Bridge]].&lt;br /&gt;
&lt;br /&gt;
[[Image:ItinerarioIntel.png‎|800px|thumb|left|Mapa de arquitecturas de Intel, desde Netburst hasta Rockwell]]&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
* [[Unidad central de procesamiento]]&lt;br /&gt;
* [[Microprocesador]]&lt;br /&gt;
* [[Core 2 Duo]]&lt;br /&gt;
* [[Pentium M]]&lt;br /&gt;
* [[Nehalem]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.intel.com/espanol/technology/architecture-silicon/2ndgen/index.htm?wapkw=%28sandy+bridge%29 Intel] &lt;br /&gt;
*[http://es.wikipedia.org/wiki/Sandy_Bridge Wikipedia]&lt;br /&gt;
*[http://www.xataka.com/componentes-de-pc/intel-presenta-sus-nuevos-procesadores-sandy-bridge-core-i3-core-i5-y-core-i7 Xataka]&lt;br /&gt;
*[http://www.anandtech.com/show/4083/the-sandy-bridge-review-intel-core-i5-2600k-i5-2500k-and-core-i3-2100-tested Anandtech]&lt;br /&gt;
 &lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]]&lt;br /&gt;
[[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Sandy_Bridge&amp;diff=614923</id>
		<title>Sandy Bridge</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Sandy_Bridge&amp;diff=614923"/>
		<updated>2011-05-25T14:58:53Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Objeto|nombre= Sandy Bridge|imagen=Sandybridge.jpg‎ |descripcion=Tecnología [[Sandy Bridge]] inteligente.}} &lt;br /&gt;
&lt;br /&gt;
'''Sandy Bridge'''. Es el nombre en clave de una microarquitectura para procesadores desarrollada por [[Intel]] como sucesora de [[Nehalem]] en el [[2011]]. Sandy Bridge es una evolución muy notable sobre los anteriores Nehalem y [[Westmere]], con un buen número de cambios a nivel técnico pero manteniendo su nombre de procesadores: Intel Core i3, i5 e i7, siendo gama baja, media y alta respectivamente. También cambia muy notablemente la numeración de los modelos, pasando de las centenas a los millares.&lt;br /&gt;
&lt;br /&gt;
== Tecnología ==&lt;br /&gt;
&lt;br /&gt;
Aunque el NDA oficialmente se expiró el [[3 de enero]] del 2011, meses antes de su salida, ya se sabían los detalles que iban a tener estos procesadores:&lt;br /&gt;
&lt;br /&gt;
*La superficie del encapsulado de los procesadores de cuádruple núcleo son aproximadamente de 216 mm2 con 995 millones de transistores.&lt;br /&gt;
*Soportan las tecnologías [[HyperThreading]] y [[Turbo boost|Intel_Turbo_Boost]], aunque algunas características están capadas o desactivadas para diferenciarse entre los distintos segmentos de mercado, como ocurría con las anteriores generaciones i3, i5 e i7.&lt;br /&gt;
*Frecuencias de reloj de serie desde 2,3 GHz hasta 3,4 GHz para procesadores de sobremesa y desde 2,2 GHz hasta 2,7 GHz para el segmento portátil. Con Turbo boost activado, se llega hasta los 3,8 GHz sin practicar [[overclock]] manual.&lt;br /&gt;
*La GPU integrada cuenta con frecuencias desde 650 MHz hasta 850 MHz, y si se activa Turbo Boost hasta 1,35 GHz.&lt;br /&gt;
*Cierta cantidad de caché de nivel 3 está capada en algunos modelos para diferenciar entre segmentos de mercado.&lt;br /&gt;
*64 KiB de caché de nivel 1 por núcleo (32 KiB L1 Datos + 32 KiB L1 instrucciones) y 256 KiB caché nivel 2 por núcleo.&lt;br /&gt;
*Hasta 8 MiB de caché de nivel 3 compartida con un bus en anillo para poder compartirse con el núcleo gráfico.&lt;br /&gt;
*Ancho de banda del bus en anillo de 256 bits por ciclo. El bus conecta los núcleos.&lt;br /&gt;
*Todos los procesadores basados cuentan con un ancho de línea con caché de 64 bytes.&lt;br /&gt;
*Controlador de memoria mejorado con un ancho de banda máximo de 25,6 GiB/s y soporte para [[DDR3]] a 1600 MHz en doble canal con dos operaciones de carga/almacenamiento por ciclo.&lt;br /&gt;
*Potencia de diseño térmico comprendida entre 35 W y 95 W para procesadores destinados a sobremesa; y entre 18 W y 55 W los destinados al segmento portátil.&lt;br /&gt;
*Doble y cuádruple núcleo disponibles desde la salida de los mismos, los de séxtuple y óctuple núcleo llegarían al mercado más adelante.&lt;br /&gt;
*Los procesadores con tecnología obsoleta x86 con el SSE desactivado, dan hasta 8 GFLOPS en coma flotante de doble precisión por núcleo, con un máximo teórico de 32 GFLOPS en coma flotante de doble precisión por procesador.&lt;br /&gt;
*Con el AVX activado, los procesadores dan una potencia máxima teórica de 32 GFLOPS de coma flotante en doble precisión por núcleo, lo que se traduce en un máximo de 128 GFLOPS de coma flotante en doble precisión por procesador.&lt;br /&gt;
*Mejorado el rendimiento con operaciones de función transcendente, cifrado AES y SHA-1.&lt;br /&gt;
*Soporte de hasta 32 GiB de RAM [[DDR3]]&lt;br /&gt;
&lt;br /&gt;
== Mejora del rendimiento y del consumo energético ==&lt;br /&gt;
&lt;br /&gt;
En todas las pruebas de rendimiento, pero la mayor parte en aplicaciones con subprocesos, Sandy Bridge es el chip más rápido en el bloque, y se obtiene el mejor rendimiento a un precio bastante razonable.&lt;br /&gt;
 &lt;br /&gt;
El Core i7-2600K de valor $ 317, tiene un rendimiento superior en 1-5% en todos los ámbitos de las aplicaciones existentes con respecto al Core i7-980X de valor $ 999 siendo este un procesador de seis núcleos con 12 subprocesos.&lt;br /&gt;
 &lt;br /&gt;
El Core i5-2500K de valor $ 216 tiene un rendimiento similar o quizás -1% a -2% en todos los ámbitos de las aplicaciones existentes con respecto al Core i7-980X de valor $ 999 siendo este un procesador de seis núcleos con 12  subprocesos.&lt;br /&gt;
&lt;br /&gt;
El Core i5-2500K en comparación con un procesador Core i5-750/760, obtendrá un rendimiento adicional del 10-50% en todos los ámbitos de las aplicaciones existentes, y todo lo que de un aumento de ~ 25% en velocidad de reloj.&lt;br /&gt;
&lt;br /&gt;
== Resumiendo ==&lt;br /&gt;
&lt;br /&gt;
* El Core i7 de Sandy Bridge es 5-45% con respecto a el Core i7 Nehelam.&lt;br /&gt;
&lt;br /&gt;
* El Core i5 de Sandy Bridge es 10-50% con respecto a el Core i5 Nehelam.&lt;br /&gt;
&lt;br /&gt;
* El Core i3 de Sandy Bridge es 15-30% con respecto a el Core i5 Nehelam.&lt;br /&gt;
&lt;br /&gt;
La [[GPU]] interna incluida en los procesadores Sandy Bridge mejora también en un 15-40% con respecto a las GPU internas de Nehelam-C. Esta GPU compite con las tarjetas de gama baja en el mercado de [[Nvidia]] y [[Ati Radeon]] en cuanto a rendimiento ahorrando al consumidor $ 35 - $ 45 en la compra de una de estas tarjetas de gama baja y obligando a estos fabricantes de GPU externas a mejorar sus productos de gama baja.&lt;br /&gt;
&lt;br /&gt;
== Sucesor ==&lt;br /&gt;
&lt;br /&gt;
El sucesor de Sandy Bridge es [[Ivy Bridge]].&lt;br /&gt;
&lt;br /&gt;
[[Image:ItinerarioIntel.png‎|800px|thumb|left|Mapa de arquitecturas de Intel, desde Netburst hasta Rockwell]]&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
* [[Unidad central de procesamiento]]&lt;br /&gt;
* [[Microprocesador]]&lt;br /&gt;
* [[Core 2 Duo]]&lt;br /&gt;
* [[Pentium M]]&lt;br /&gt;
* [[Nehalem]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.intel.com/espanol/technology/architecture-silicon/2ndgen/index.htm?wapkw=%28sandy+bridge%29 Intel] &lt;br /&gt;
*[http://es.wikipedia.org/wiki/Sandy_Bridge Wikipedia]&lt;br /&gt;
*[http://www.xataka.com/componentes-de-pc/intel-presenta-sus-nuevos-procesadores-sandy-bridge-core-i3-core-i5-y-core-i7 Xataka]&lt;br /&gt;
*[http://www.anandtech.com/show/4083/the-sandy-bridge-review-intel-core-i5-2600k-i5-2500k-and-core-i3-2100-tested Anandtech]&lt;br /&gt;
 &lt;br /&gt;
[[Category:Ciencias_informáticas]] [[Category:Hardware]]&lt;br /&gt;
[[Category:Unidad_central_de_procesamiento]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Madres_de_Plaza_de_Mayo&amp;diff=612736</id>
		<title>Madres de Plaza de Mayo</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Madres_de_Plaza_de_Mayo&amp;diff=612736"/>
		<updated>2011-05-24T17:22:58Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hechos|nombre=Madres de la Plaza de Mayo|imagen=plaza de mayo.jpg|descripcion=Las Madres se convirtieron en un grupo de activistas en defensa de los derechos humanos. Aseguran que nacieron por sus hijos, y que son las madres de todas las víctimas de la represión en Argentina. |participantes=Madres de hijos desaparecidos por la dictadura.|lugar=[[Argentina]]|fecha=[[30 de abril]] de [[1977]]}}&lt;br /&gt;
'''Madres de Plaza de Mayo:''' es una asociación formada durante el último gobierno militar de la república de [[Argentina]] con el fin de recuperar con vida a los detenidos desaparecidos, inicialmente, y luego establecer quiénes fueron los responsables de los crímenes y promover su enjuiciamiento. Las Madres de Plaza de Mayo se encuentran actualmente divididas en dos grupos, el grupo mayoritario, denominado &amp;quot;Madres de Plaza de Mayo&amp;quot; (presidido por [[Hebe de Bonafini]]), y las &amp;quot;Madres de Plaza de Mayo Línea Fundadora&amp;quot; (presidido por [[Marta Ocampo de Vásquez]]). &lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
Nació como una iniciativa de madres de detenidos y desaparecidos el [[30 de abril]] de [[1977]]. Su objetivo inicial era poder tener una audiencia con el presidente de facto argentino [[Jorge Rafael Videla]], para ello se reunirían en la [[Plaza de Mayo]] y efectuarían una manifestación pública pacífica en la que exigirían conocer el paradero de sus hijos.&lt;br /&gt;
&lt;br /&gt;
La elección de Plaza de Mayo se debe a que esta situada frente a la Casa Rosada, sede de la presidencia y lugar donde tradicionalmente se han efectuado manifestaciones políticas. Ese mismo día, 14 madres inician una jornada, a la cual, con el paso del tiempo, se acercarían otras madres afectadas. Desde entonces, todos los jueves repetirían una caminata (originada cuando las fuerzas de seguridad les exigieron &amp;quot;circular&amp;quot;) alrededor de la pirámide central de la plaza. &lt;br /&gt;
&lt;br /&gt;
Esta manifestación se sigue repitiendo en la actualidad. La manifestación de las Madres fue una de las primeras manifestaciones públicas contra la dictadura. Alcanzan notoriedad durante la realización del [[Mundial de Fútbol]] de [[1978]] en [[Argentina]]. &lt;br /&gt;
&lt;br /&gt;
Unidas por la desgracia, las madres se convirtieron en un grupo de activistas en defensa de los [[Derechos Humanos]]. Aseguran que nacieron por sus hijos, y que son las madres de todas las víctimas de la represión en Argentina. La organización está fuertemente relacionada con las [[Abuelas de Plaza de Mayo]], cuyo objetivo es recuperar la identidad de los cientos de niños que fueron robados por las autoridades militares durante la dictadura, y con la [[Asociación Hijos]], formada por los hijos de los detenidos desaparecidos que desean continuar la lucha de sus padres y sus abuelas. Se distinguen usando pañuelos blancos sobre sus cabezas, los mismos que anteriormente habían servido como pañales de sus hijos desaparecidos. &lt;br /&gt;
&lt;br /&gt;
== Primeras madres desaparecidas  ==&lt;br /&gt;
&lt;br /&gt;
* [[Azucena Villaflor de Vicenti]] &lt;br /&gt;
&lt;br /&gt;
* [[Berta Braverman]] &lt;br /&gt;
&lt;br /&gt;
* [[Haydée García Buelas]]&lt;br /&gt;
&lt;br /&gt;
* [[María Adela Gard de Antokoletz]]&lt;br /&gt;
&lt;br /&gt;
* [[Julia Gard]]&lt;br /&gt;
&lt;br /&gt;
* [[María Mercedes Gard]] &lt;br /&gt;
&lt;br /&gt;
* [[Cándida Gard]] &lt;br /&gt;
&lt;br /&gt;
* [[Mirta Baravalle]] &lt;br /&gt;
&lt;br /&gt;
* [[Kety Neuhaus]] &lt;br /&gt;
&lt;br /&gt;
* [[Raquel Arcushin]]&lt;br /&gt;
&lt;br /&gt;
== Repercusión internacional  ==&lt;br /&gt;
&lt;br /&gt;
Las madres fueron reconocidas durante la realización del [[Mundial de Fútbol]] de [[1978]] en [[Argentina]], cuando periodistas internacionales empezaron a entrevistarlas y dieron a conocer su movimiento. En entrevista a [[Hebe de Bonafini]] se conoció que:&lt;br /&gt;
&lt;br /&gt;
Entre los años [[1978]]-[[1979]] las madres comenzaron a salir al exterior para hacer conocer el drama de los desaparecidos y solicitar que se aislara a la dictadura militar argentina, primero a [[Europa]] y luego a [[Estados Unidos]]. Tuvieron la fortuna de ser escuchadas e invitadas. [[Amnesty International]] patrocinó un viaje en 1979 que abarcó nueve países para exponer ante gobernantes de Europa y los Estados Unidos la situación real en la república de Argentina.&lt;br /&gt;
&lt;br /&gt;
En [[1980]] comenzó a surgir la idea entre las madres de que aún si los desaparecidos estuvieran muertos, se seguirá buscando el esclarecimiento como si siguieran vivos, porque el delito es constante hasta que no aparezca el cuerpo, concepto que despues evolucionaría en la idea de que la víctimas que no están, no son solo las que fueron eliminadas por la dictadura, sino que ellas representan a todos los que lucharon contra el poder. &lt;br /&gt;
&lt;br /&gt;
== Ideario ==&lt;br /&gt;
&lt;br /&gt;
Las Madres de Plaza de Mayo combinan en su ideario la lucha por los [[Derechos humanos]], el respeto y valorización de los ideales por los que lucharon sus hijos. El pensamiento de las Madres se expresa en varias consignas que definen la dictadura y la posibilidad de lucha posterior a la misma, así como el sentido de la memoria: &amp;quot;La única lucha que se pierde es la que se abandona&amp;quot; y &amp;quot;Ni un paso atrás&amp;quot; son algunas de las consignas famosas de las Madres de Plaza de Mayo. &lt;br /&gt;
&lt;br /&gt;
==Entrevista realizada a Hebe de Bonafini==&lt;br /&gt;
La presidenta de la fundación, [[Hebe de Bonafini]] expresó sobre la política y los derechos humanos: &lt;br /&gt;
''&amp;quot;No aceptamos ningún cargo político, pero hacemos política. No somos un organismo de Derechos Humanos ni una [[ONG]], somos una organización política, sin partido. La vida vale vida, y el otro soy yo, el otro soy yo, el otro soy yo&amp;quot;.'' &lt;br /&gt;
&lt;br /&gt;
=== Los revolucionarios no son terroristas  ===&lt;br /&gt;
'''Hebe de Bonafini:''' en [[1986]] se empezaron a comprometer con los problemas sociales del país. Por primera vez sintieron que la revolución crecía dentro de ellas, se sentían tan revolucionarias como sus hijos, que crecía eso de la solidaridad, de estar al lado del que tiene problemas, de poner el cuerpo cuando se toma una fábrica, un periódico, una tierra. Y ahí, por primera vez, en una huelga de los estudiantes, frente a la Facultad de Medicina, se empezaron a reconocer como revolucionarias y a expresar que sus hijos, en su mayoría, eran marxistas, fue difícil sacarle a la gente la idea de que ellos eran &amp;quot;terroristas&amp;quot;, pasarlos de &amp;quot;terroristas&amp;quot; a revolucionarios. &lt;br /&gt;
&lt;br /&gt;
Porque esa fue la excusa que tuvo la sociedad, no solo los militares, para quedarse tranquilos, en su casa, &amp;quot;si son terroristas, que los maten, que los torturen, que los tiren vivos al río&amp;quot;. !Si son terroristas, sus familias también son terroristas!. !Nunca un revolucionario es terrorista, jamás quien da su vida por el otro es terrorista! &lt;br /&gt;
&lt;br /&gt;
=== La revolución empieza por la transformación personal ===&lt;br /&gt;
[[Image:Madres de la plaza de mayo.jpg|right]]&lt;br /&gt;
'''Hebe de Bonafini:''' no es que uno tiene que dar una bolsa de ropa que nos sobra, no, hay que dar la mejor comida, la mejor cama y lo mejor que tenemos que es la vida. Poner la vida y el cuerpo al servicio del otro. Eso es la revolución, no es salir a tirar tiros por la calle, !qué esperanza! La revolución es cuando uno se transforma, primero uno, no hay revolución sin hombres nuevos, sin hombres que se puedan transformar, no importa cuantos años tenga uno, es mentira que hay que empezar de jovencito, no, mi transformación comenzó cuando tenía 49 años, cuando desapareció mi hijo mayor, ahí me convertí en otra persona. &lt;br /&gt;
&lt;br /&gt;
Me convertí en otra persona, en otra mujer, en otra madre. Porque las madres de nuestra época siempre estuvieron ligadas al sacrificio, a crear los hijos limpiar la casa y tenerla prolija, toda lustrada, cuidar al marido, no a la revolución, a la madre revolucionaria, comprometida con la política. No, la mujer no tenía que hacer política en esa época, de política hablaban los hombres, las mujeres de la cocina y de los hijos.&lt;br /&gt;
&lt;br /&gt;
== Relaciones  ==&lt;br /&gt;
'''Hebe de Bonafini:''' unidas por la desgracia, las Madres se convirtieron en un grupo de activistas en defensa de los [[Derechos humanos]]. Aseguran que nacieron por sus hijos, dado que por ellos alcanzaron la conciencia política de la lucha social, y que son las madres de todas las víctimas de la represión en [[Argentina]] y según expresiones suyas, !de todos los que luchan por la igualdad social en el país y en el mundo!. La manifestación de las Madres fue una de las primeras manifestaciones públicas contra la dictadura. Su distintivo es el pañuelo blanco sobre la cabeza, representando a los que anteriormente habían servido como pañales de sus hijos desaparecidos. &lt;br /&gt;
&lt;br /&gt;
== Universidad Popular Madres de Plaza de Mayo ==&lt;br /&gt;
'''Hebe de Bonafini:''' el [[6 de abril]] de [[2000]], abrimos la [[Universidad Popular Madres de Plaza de Mayo]]. Esto que hacemos, no lo hacemos solas. La Universidad no es una casualidad; tiene que ver con el proyecto de las Madres y con los profesores que creen en el proyecto, que no cobran sueldo, vienen por amor a la causa, comprometidos desde el primer día. &lt;br /&gt;
&lt;br /&gt;
La Universidad es combativa, revolucionaria, y es ilegal: cuando la abrimos dijimos cómo vamos a pedirles a los fascistas que nos autoricen la universidad. Nosotras tenemos derecho de abrirla, por qué no. Y alumnos y profesores creyeron en el proyecto. Empezamos con doscientos alumnos y cinco carreras y hoy tenemos once carreras, seminarios, clases abiertas y dos mil alumnos que nos llenan de orgullo. &lt;br /&gt;
&lt;br /&gt;
Cuando estuve en [[Asturias]], coincidí con unos chicos que estudian [[Periodismo]] de investigación en nuestra universidad, e hicieron una película que fue premiada. Cuando los escuchaba hablar yo me dije &amp;quot;no precisamos nada que presente la Universidad, ni un papel, ni un afiche, ellos contando lo que aprenden en nuestras aulas lo están haciendo&amp;quot;. Abrir una Universidad sin pedirle permiso a nadie, no hay mucha gente que se le ocurra. Que además funcione, que tengamos convenios con otras universidades. Y, saben quien vino a inaugurarla?: el rector de la Universidad de Salamanca, de la universidad más antigua, porque somos corajudas y lo invitamos, y vino y nos dijo: &amp;quot;A mi universidad la abrieron los reyes y esta la están abriendo las reinas&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Los martes y los jueves tenemos clases abiertas, de las luchas obreras y están las cátedras bolivarianas. La Universidad es para la formación política de la juventud, en la disciplina que elijan tienen que saber de política. Tienen que saber que es la lucha de clases, que les pasa a la gente y al pueblo. Apoyamos a los piqueteros, las fábricas ocupadas en producción que es una cosa nueva en el mundo, nos parece una genialidad. En fin, hacemos muchas cosas, estamos preparando el Tercer Congreso de Salud Mental y Derechos Humanos ahora en [[noviembre]], y para el [[2006]] vamos a hacer un Congreso Internacional de Juventudes Políticas no organizadas.&lt;br /&gt;
&lt;br /&gt;
== La voz de las Madres ==&lt;br /&gt;
El [[16 de noviembre]] de [[2005]] las madres inauguraron una radio propia, que transmite en amplitud modulada, llamada La Voz de las Madres como una alternativa a los medios de comunicación oficiales. La radio transmite en frecuencia de 530 Khz en [[Argentina]], y vía [[Internet]] a todo el mundo. Se ha anunciado que se escuchará a través de Radio Nacional de [[Venezuela]]. &lt;br /&gt;
&lt;br /&gt;
== Fuente ==&lt;br /&gt;
* Entrevista a [[Hebe de Bonafini]].&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
* [http://www.google.com.cu http://www.google.com.cu]&lt;br /&gt;
&lt;br /&gt;
* [http://www.taringa.net http://www.taringa.net]&lt;br /&gt;
&lt;br /&gt;
* [http://terrorfileonline.org http://www.terrorfileonline.org] &lt;br /&gt;
&lt;br /&gt;
[[Category:Historia_de_Argentina]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Shock_cardiog%C3%A9nico&amp;diff=611614</id>
		<title>Shock cardiogénico</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Shock_cardiog%C3%A9nico&amp;diff=611614"/>
		<updated>2011-05-24T14:19:48Z</updated>

		<summary type="html">&lt;p&gt;Lsuarezmtzjc: /* Fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Desarrollo}}{{Sistema:Moderación_Salud}}&lt;br /&gt;
{{Definición|Nombre= Shock Cardiogénico|imagen= |concepto=Un Shock Cardiogénico es el cuadro clínico hemodinámico humoral resultante de una falla}} &lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
Un '''Shock Cardiogénico''' es el cuadro clínico hemodinámico humoral resultante de una falla, en la función de bomba del corazón para mantener una perfusión hística acorde con las necesidades orgánicas elementales en reposo y puede considerarse como el grado extremo de insuficiencia cardiaca por lo que esta definición incluye un bajo gasto cardiaco.&lt;br /&gt;
 &lt;br /&gt;
==Causas de shock cardiogénico==&lt;br /&gt;
 &lt;br /&gt;
*Dificultad para el llenado cardiaco&lt;br /&gt;
#Neumotórax a tensión&lt;br /&gt;
#Ventilación a presión positiva&lt;br /&gt;
#Taponamiento cardiaco&lt;br /&gt;
#Pericarditis contractiva&lt;br /&gt;
#Alteraciones de la distensibilidad miocárdica y cambio de la geometría ventricular&lt;br /&gt;
#Pérdida de la sincronía aurículo ventricular&lt;br /&gt;
#Taquiarritmias&lt;br /&gt;
#Coartación de la aorta&lt;br /&gt;
#Mixomas&lt;br /&gt;
*Aumento de la postcarga&lt;br /&gt;
#Estenosis aórtica severa&lt;br /&gt;
#Tromboembolismo pulmonar&lt;br /&gt;
*Disfunción cardiaca&lt;br /&gt;
*Disminución de la contractilidad&lt;br /&gt;
#Infarto Agudo del Miocardio (IAM)&lt;br /&gt;
#Miocarditis&lt;br /&gt;
#Miocardiopatías&lt;br /&gt;
#Tóxicos&lt;br /&gt;
*Flujo regurgitante&lt;br /&gt;
#Comunicación interventricular&lt;br /&gt;
==Diagnóstico clínico==&lt;br /&gt;
 &lt;br /&gt;
Generalmente encontramos a un paciente con un Infarto Agudo del Miocardio que suele estar agitado, confuso y en ocasiones comatoso, con piel fría, sudorosa, así como con cianosis distal. Es frecuente el gradiente térmico entre las regiones distales (menos perfundidas) con los proximales (mejores prefundidas). &lt;br /&gt;
 &lt;br /&gt;
El pulso casi siempre es rápido y filiforme. Como regla existe hipotensión arterial, taquicardia a menos que esté asociado a bloqueo auriculoventricular, diferencia arterio-venosa de oxígeno elevada (&amp;gt; 5,5 mL/dL). Índice cardiaco bajo (&amp;lt; 2,2 L/min./ m2), PCAP elevada (&amp;gt; 18 mmHg), no es inusual que se presenten distintos tipos de arritmias cardiacas. En la auscultación se pueden escuchar estertores pulmonares húmedos y se debe auscultar con detalle el área cardiaca para detectar la presencia de soplos que nos indiquen complicaciones mecánicas (rotura del tabique interventricular, rotura de músculo papilar, etc.). La diuresis es escasa (menos de 0,5 mL/kg/hora).&lt;br /&gt;
 &lt;br /&gt;
==Criterios diagnósticos del shock cardiogénico==&lt;br /&gt;
 &lt;br /&gt;
*PAS &amp;lt; 90 mmHg, o descenso &amp;gt; de 50 mmHg respecto a los niveles basales (pérdida de pulsos periféricos o débiles y filiformes)&lt;br /&gt;
*Taquicardia (salvo en el desencadenado por una bradiarritmia)&lt;br /&gt;
*Oligoanuria: Diuresis &amp;lt; 30 mL/hora&lt;br /&gt;
*Acidosis metabólica&lt;br /&gt;
*PVC: Aumentada (ingurgitación yugular, disnea)&lt;br /&gt;
*Alteraciones de la temperatura y coloración cutáneas (palidez, frialdad, sudoración y/o cianosis distal y peribucal)&lt;br /&gt;
*Trastornos neurológicos (nivel de conciencia)&lt;br /&gt;
*Congestión pulmonar&lt;br /&gt;
*Índice cardiaco &amp;lt; 2,2 latidos/min.&lt;br /&gt;
*Temperatura baja&lt;br /&gt;
*Ruidos cardiacos débiles&lt;br /&gt;
*Llene capilar lento&lt;br /&gt;
==Medidas generales==&lt;br /&gt;
 &lt;br /&gt;
*Evaluación del ABCD. Esta es una real emergencia médica (Código Rojo)&lt;br /&gt;
*Acostar en decúbito supino con 15º de elevación de la cabeza&lt;br /&gt;
*Oxigenación adecuada. Catéter nasal o máscara con reservorio a 4-5 L/min. (asistencia ventilatoria mecánica de ser necesario)&lt;br /&gt;
*Oximetría de pulso&lt;br /&gt;
*Monitorización cardiaca (ritmo, tensión arterial, presión venosa central)&lt;br /&gt;
*Acceso venoso periférico y luego central&lt;br /&gt;
*Medir PVC (PVC &amp;lt; 6 cm baja, normal entre 6-12 cm H2O, alta mayor de 12 cm H2O)&lt;br /&gt;
*Manejo estricto de la hidratación. No precisa generalmente la administración de volúmenes de sueroterapia, pues generalmente la PVC mantiene valores por encima de 15 cm H20&lt;br /&gt;
*Corrección del equilibrio ácido básico si existiera disbalance&lt;br /&gt;
*Medir diuresis horaria&lt;br /&gt;
*Tratamiento del dolor (con Meperidina, la Morfina no está indicada)&lt;br /&gt;
*Marcapasos externos de ser necesario&lt;br /&gt;
*Antiagregantes plaquetarios (ASA) si IAM&lt;br /&gt;
*Estos casos siempre deben remitirse a una Unidad de Cuidados Intensivo Cardiológico de la atención secundaria, idealmente luego de obtener al menos una PAS cerca de 90 mmHg. Si la causa es un IAM debe trombolizarse independientemente de la hipotensión con apoyo vasoactivo previo&lt;br /&gt;
 &lt;br /&gt;
==Síntomas==&lt;br /&gt;
*Dolor o presión en el tórax&lt;br /&gt;
*Sudoración profusa, piel húmeda&lt;br /&gt;
*Respiración acelerada&lt;br /&gt;
*Pulso acelerado&lt;br /&gt;
*Inquietud, agitación, confusión&lt;br /&gt;
*Dificultad para respirar&lt;br /&gt;
*Piel que se siente fría al tacto&lt;br /&gt;
*Piel de color pálido o manchada (moteada)&lt;br /&gt;
*Pulso débil (filiforme)&lt;br /&gt;
*Deterioro del estado mental: &lt;br /&gt;
#pérdida de la capacidad para concentrarse&lt;br /&gt;
 &lt;br /&gt;
#pérdida de la lucidez mental&lt;br /&gt;
 &lt;br /&gt;
*Coma (pérdida del conocimiento)&lt;br /&gt;
 &lt;br /&gt;
==Exámenes==&lt;br /&gt;
*Cateterismo cardíaco&lt;br /&gt;
*Radiografía de tórax&lt;br /&gt;
*Angiografía coronaria&lt;br /&gt;
*Ecocardiografía&lt;br /&gt;
*Electrocardiografía&lt;br /&gt;
*Gammagrafías&lt;br /&gt;
 &lt;br /&gt;
==Tratamiento==&lt;br /&gt;
Este shock es una emergencia médica. Su tratamiento requiere hospitalización, por lo regular en la Unidad de Cuidados Intensivos. El objetivo del tratamiento es identificar y tratar la causa del shock con el fin de salvar la vida del paciente.&lt;br /&gt;
*Medicamentos para incrementar la presión arterial y mejorar la función cardíaca, incluyendo:&lt;br /&gt;
#Dobutamina&lt;br /&gt;
Dosis: 5-7,5 mcg/kg/minuto. Debido a su efecto B1 agonista, incrementa el inotropismo, gasto cardiaco, volumen latido, trabajo ventricular izquierdo y derecho. Disminuye la presión de fin de diástole ventricular sin producir taquicardia excesiva ni hipotensión. Es un vasodilatador pulmonar. Dosis mayores de 7,5 mcg/kg/minuto tienen un efecto vasodilatador, por su efecto B2 agonista, que puede disminuir la presión arterial sistémica.&lt;br /&gt;
 &lt;br /&gt;
#Dopamina&lt;br /&gt;
Dosis: 5-10 mcg/kg/minuto, buscando efecto inotrópico. 10-20 mcg/kg/minuto como vasoconstrictor. Presentación: frascos de 200 miligramos.&lt;br /&gt;
 &lt;br /&gt;
#Epinefrina&lt;br /&gt;
 &lt;br /&gt;
#Norepinefrina&lt;br /&gt;
*Cuando una alteración del ritmo cardíaco (disrritmia) es grave, se necesita tratamiento urgente para restablecer un ritmo cardíaco normal. Esto puede abarcar:&lt;br /&gt;
#Terapia de electrochoque (desfibrilación o cardioversión)&lt;br /&gt;
 &lt;br /&gt;
#Implante de un marcapasos temporal&lt;br /&gt;
 &lt;br /&gt;
#Medicamentos administrados a través de una vena (intravenosos)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Patogenesis del Shock Cardiogénico==&lt;br /&gt;
 &lt;br /&gt;
La falla cardiaca en pacientes con SC se inicia por isquemia o [[Infarto de miocardio||infarto del miocardio]], generalmente de localización anterior, transmural y extenso (35%-40% de compromiso de la masa miocárdica). El miocardio isquémico o necrótico disminuye el volumen del latido y por lo tanto el gasto cardíaco. La perfusión miocárdica, que depende del gradiente de presión entre el sistema arterial coronario y el ventrículo izquierdo y de la duración de la diástole, resulta comprometida por hipotensión y taquicardia, lo cual aumenta la isquemia. El aumento en la presión diastólica ventricular causada por la falla de bomba, disminuye la perfusión coronaria, que incrementa los requerimientos de oxígeno por el miocardio, lo cual empeora todavía más la isquemia. La disminución del gasto cardiaco también compromete la perfusión, lo que lleva a acidosis láctica, que a su vez afecta la función sistólica. &lt;br /&gt;
 &lt;br /&gt;
Cuando se compromete la función miocárdica se activan mecanismos compensatorios tales como aumento en la frecuencia cardiaca, aumento en la contractilidad y retención de líquidos para aumentar la precarga, efectos mediados por la activación del sistema simpático. Estos mecanismos compensatorios empeoran la situación cuando se presenta el shock cardiogénico, lo que da como resultado edema pulmonar e hipoxemia. La vasoconstricción para mantener una adecuada presión arterial eleva la poscarga, aumentando la demanda de oxígeno por el miocardio, lo cual empeora la isquemia, y si el ciclo no se interrumpe en forma temprana, termina con la muerte del paciente. Una intervención rápida y adecuada de reperfusión que mejore la isquemia es crucial una vez se ha instaurado el SC.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Momento de presentación del Shock==&lt;br /&gt;
Del total de pacientes que evolucionan con shock, sólo el 15% lo presentan en el momento de ingreso al hospital, el 85% restante lo desarrollará durante su internación.&lt;br /&gt;
 &lt;br /&gt;
En el registro del estudio SHOCK se observó la misma tendencia, en relación al momento de presentación del shock cardiogénico.  Podríamos resumir lo expresado así: del total de pacientes con shock, el 75% lo desarrolla en las primeras 24hs, de este grupo un 25% al ingreso al hospital, los 3/4 restantes entre el ingreso y las primeras 24 hs., el 25% restante luego de 24 hs de ingreso al hospital.&lt;br /&gt;
 &lt;br /&gt;
==Fuente==&lt;br /&gt;
*[http://www.aibarra.org/Apuntes/criticos/Guias/Cardiovascular-Respiratorio/Shock_cardiogenico.pdf www.aibarra.org - Artículo PDF]&lt;br /&gt;
*[http://www.fac.org.ar/scvc/llave/PDF/barcu2e.pdf www.fac.org - Artículo PDF]&lt;br /&gt;
*[http://www.nlm.nih.gov/medlineplus/spanish/ency/article/000185.htm www.nlm.nih.gov]&lt;br /&gt;
[[Category:Especialidades_Médicas]]&lt;/div&gt;</summary>
		<author><name>Lsuarezmtzjc</name></author>
		
	</entry>
</feed>