lunes, 3 de abril de 2017

ANALIZADOR LEXICO CODIGO DEV C++

#include <stdio.h>
#include <conio.h>
#include <string.h>

int contar_vocales(char *);


int main(){
   
char cad[300];
int longi;
float porc;

printf("Ingrese el texto a contar vocales : ");
gets(cad);
longi = strlen(cad);
printf("La cantidad de Vocales: %d",contar_vocales(cad));
printf("\nCantidad de caracteres: %d",longi);
getch();


}

//-- Funcion:
       
int contar_vocales(char *cad){
   
int cont=0;
char *aux=cad;

 while(*aux){    
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;              
   }//función
 

return cont;

}//contar_vocales

martes, 28 de marzo de 2017

Eliminación de la Recursividad Izquierda





Eliminación de la Recursividad Izquierda


1. Se agrupan todas las producciones de A en la forma: 

A→ A α 1|A α 2| … |A α m| β 1 |β 2| … | β n , donde ninguna βi comienza con una A. 

2. Se sustituyen las producciones de A por: 

 A→ β 1A’| β 2A’|…|β nA’ • A’→ α 1A’|α 2A’|…|α mA’| ε

Una gramática es recursiva por la izquierda si tiene un no terminal A tal que existe una derivación A     Aα  para alguna cadena  α. Los métodos de análisis sintáctico descendente no pueden manejar gramáticas  recursivas por la izquierda, así que se necesita una transformación que elimine la recursión por la izquierda.


Ejemplo: Eliminar la recursividad a izquierdas de: E → E+T E → T T → F F → (E) F → id T → T*F




•Se identifica si cada una de las producciones que tienen la forma: 
A→ A α| β 
•La producción E → E+T ,
 tiene recursividad izquierda, por lo que: E → E+T | T A→ A α| β Se igualan los símbolos según la formula:
 A = E 
α = + T
 β = T

 Se utilizan las reglas de remplazo
 A→ β1A’| β2A’|…|βnA’
 A’→ α1A’|α2A’|…|αmA’|

 ε E → TE’
 E’ → +TE’|ε 6 


A las producciónes T → T*F | F, también se le aplica el mismo proceso : 
A = T 
α = *F
 β = F 

• Se utilizan las reglas de remplazo 
A→ β1A’| β2A’|…|βnA’ 
A’→ α1A’|α2A’|…|αmA’| 

ε T→ FT’
 T’→ *FT’ | ε


Se hace necesario eliminar las producciones del tipo A→ λ para dejar una gramática bien formada.

 E → TE’
 E’ → +TE’ 
E→ T
 E’→ +T
T→ FT’ 
T→ F
 T’→ *FT’ 
T’→ *F 
F→ (E) 
F→ id


Se hace necesario también eliminar las reglas de redenominación.

 E → TE’
 E’ → +TE’
 E→ (E)
 E→ id
 E’→ +T
 T→ FT’
 T→ (E) 
T→ id 
T’→ *FT’
 T’→ *F
 F→ (T)
 F→ id


Finalmente la gramática no recursiva por izquierda es:

 E → TE’
 E’ → +TE’
 E→ (E) 
E→ id 
E→ +T 
T→ FT’ 
T→ (E)
 T→ id
 T’→ *FT’ 
T’→ *F 
F→ (T) 
F→ id



ANALIZADOR SINTÁCTICO

Análisis Sintáctico




·         La principal tarea del analizador sintáctico no es comprobar que la sintaxis del programa fuente sea correcta.
·         El analizador sintáctico (A.S.) comprueba que el orden en que el analizador léxico le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente.
·         La forma más habitual de representar la sintaxis de un programa es el árbol de análisis sintáctico, y lo que hacen los analizadores sintácticos es construir una derivación por la izquierda o por la derecha del programa fuente, que en realidad son dos recorridos determinados del árbol de análisis sintáctico

Sus funciones son :

·         Aceptar lo que es válido sintácticamente y rechazar lo que no lo es.
·         Hacer explícito el orden jerárquico que tienen los operadores en el lenguaje de que se trate. Por ejemplo, la cadena A/B*C es interpretada como (A/B)*C en FORTRAN y comoA/(B*C) en APL.
·         Guiar el proceso de traducción (traducción dirigida por la sintaxis).

Clasificación :

La tarea esencial de un analizador es determinar si una determinada entrada puede ser derivada desde el símbolo inicial, usando las reglas de una gramática formal, y como hacer esto, existen esencialmente dos formas:
       

·    ANÁLISIS SINTÁCTICO DESCENDENTE  (Top-Down-Parser):

Un analizador puede empezar con el símbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.



·    ANÁLISIS SINTÁCTICO ASCENDENTE (Bottom-Up-Parser):

Un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los símbolos más pequeños y progresivamente construir la jerarquía de símbolos hasta el inicial, los analizadores LR funcionan así
              







Para una pequeña clase de gramáticas se puede construir con facilidad a mano eficientes analizadores sintácticos ascendentes.Estas gramáticas, por precedencia de operadores, tienen la propiedad de que ningún lado derecho de la producción es є ni tiene 2 terminales adyacentes.
Una gramática con esta última propiedad de denomina gramática de operadores.


ANALIZADORES SINTÁCTICOS IZQUIERDA-DERECHA

Es una técnica eficiente de análisis sintáctico ascendente que se puede utilizar para analizar una amplia clase de gramáticas independientes de contexto, denominada Análisis sintáctico LR(k)


L es por el examen de la entrada de izquierda a derecha (left to right)
R por construir una derivación por la derecha (right most derivation) en orden inverso.
K por el número de símbolos de entrada de examen por anticipado utilizados para tomar decisiones del análisis sintáctico.

 Cuando se omite, se asume que k es 1.
Este análisis es atractivo por varias razones:

• Reconocen prácticamente todas las construcciones de los lenguajes de programación para los que se pueden escribir gramáticas independientes del contexto.
• Puede detectar un error sintáctico tan pronto como sea posible hacerlo en un examen de izquierda a derecha de la entrada.

APLICABILIDAD

Un analizador sintáctico es un Autómata de pila que reconoce la estructura de una cadena de componentes léxicos.








CÓMO FUNCIONA (TEORÍA EN LA QUE SE BASA)

El analizador sintáctico, que se utilizara en esta práctica, será de tipo LL1 o SLR. Se pueden aplicar también técnicas mixtas, analizando, por ejemplo, las sentencias aritméticas con un analizador de lenguajes de precedencia y el resto del programa con LL1 o SLR. Si se utilizan herramientas de generación automática (compiladores de compiladores como yacc y bison) el lenguaje será del tipo LARL.
LL1:

Definición:
Se agrupan todas las clausuras con idéntica parte izquierda. Es decir todas las clausuras del tipo:
A -> B C D
A -> E F G
......
A ->X Y Z
Si no existen dos clausuras con idéntica parte izquierda que pueden empezar con un mismo símbolo terminal, y no existe recursividad a la izquierda, el lenguaje es LL1.
Nota:

1. No es necesario que la clausura empiece con símbolos terminales diferentes. Lo único que es necesario comprobar es si puede o no empezar con un símbolo terminal.

2. Para cualquier lenguaje independiente del contexto se puede definir la función FIRST(a), definida para todas las formas sentenciales, cuyo valor es un conjunto de los símbolos terminales con los que puede empezar a. Si al  en el conjunto se incluye también la sentencia vacía l. Si l está en FIRST(a), entonces la clausura A->a puede también empezar con todos los símbolos terminales que pueden seguir a A, denominado FOLLOW(A). FOLLOW puede incluir también el símbolo de End-Of-File $. El cálculo de la función FOLLOW(A) es también esencial para el analizador SLR.

3.Para los lenguajes LL1 es posible construir un autómata finito a pila, con un solo estado que analice el lenguaje. Las decisiones del autómata se toman sólo a partir del último elemento de la pila y el símbolo de entrada.

En general, un analizador sintáctico es un autómata a pila.
 El analizador sintáctico:

*Inicializa el compilador y AS en particular.
*Para cada símbolo de entrada llama al analizador morfológico y el AM proporciona el siguiente símbolo de entrada.
*Analizando el símbolo, la pila y el estado del autómata, el AS produce las estructuras necesarias para la siguiente etapa y en el caso de compilación dirigida por la sintaxis .
*invoca llamadas directas al analizador semántico y al generador de código.
*Escribe mensajes de errores y trata de limitar el efecto de estos errores.
Elección de algoritmos. Consideración de las diferencias, ventajas y desventajas.

Existen por lo menos cuatro maneras de hacer el analizador morfológico:

A.               utilizando herramientas especializadas yacc/bison,
B.                utilizando analizador del tipo SLR.
C.                utilizando analizador LL1 con llamadas a funciones.
D.               utilizando analizador LL1 con tabla.





lunes, 27 de febrero de 2017

Generación de código intermedio


Código intermedio 


Esta fase del compilador no es en realidad una parte separada del compilador, la mayoría de los compiladores generan código como parte del proceso de análisis sintáctico, esto es debido a que requieren del árbol de sintaxis y si este no va a ser construido físicamente, entonces deberá acompañar al analizador sintáctico al barrer el árbol implícito.


El código intermedio no es el lenguaje de programación de ninguna máquina real, sino que corresponde a una máquina abstracta, que se debe de definir lo más general posible, de forma que sea posible traducir este código intermedio a cualquier máquina real.


Es la fase de compilador genera el código intermedio que es más parecido al código ensamblador, las operaciones por ejemplo nunca se hacen con dos o más operandos ,donde podremos reutilizar parte del compilador que genera código intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de código ensamblador al cual llamaremos BACK END. 

El objetivo del código intermedio es reducir en el número de programas necesarios para construir traductores y permitir fácilmente la transportabilidad de una maquina a otra.



lunes, 20 de febrero de 2017

Analizador semántico


Analizador semántico



La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la clase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONEN
La fase de análisis semántico de un procesador de lenguaje es aquélla que computa la información adicional necesaria para el procesamiento de un lenguaje, una vez que la estructura sintáctica de un programa haya sido obtenida. Es por tanto la fase posterior a la de análisis sintáctico y la última dentro del proceso de síntesis de un lenguaje de programación.


El objetivo principal del analizador semántico de un procesador de lenguaje es asegurarse de que el programa analizado satisfaga las reglas requeridas por la especificación del lenguaje, para garantizar su correcta ejecución. El tipo y dimensión de análisis semántico requerido varía enormemente de un lenguaje a otro.

La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

Un componente importante del análisis semántico es la Verificación de Tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.


Ejemplo:
Producciones

G={Vt, Vn, S, R}
Vt={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2011,ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE }
Vn={Día, Mes, Año, M1, M2, M3,D1, D2, D3 }
REGLAS GRAMATICALES
S = Día/Mes/Año | Año/Mes/Día
Mes = M1|M2|M3
M1 = ENERO|MARZO|MAYO|JULIO|AGOSTO|OCTUBRE|DICIEMBRE
M2 = ABRIL|JUNIO|SEPTIEMBRE|NOVIEMBRE
M3 = FEBRERO
Día = D1|D2|D3
D1 = 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2 = 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3 = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año = 2011
Reglas semánticas
S.Val = Día.Val /Mes.Val /Año.Val | Año.Val /Mes.Val /Día.Val
Mes.Val = M1.Val |M2.Val |M3.Val
M1.Val = ENERO |MARZO |MAYO |JULIO |AGOSTO |OCTUBRE |DICIEMBRE
M2.Val = ABRIL |JUNIO |SEPTIEMBRE |NOVIEMBRE
M3.Val = FEBRERO
Día.Val = D1.Val |D2.Val |D3.Val
D1.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año.Val = 2011




Análisis Sintáctico.


Análisis Sintáctico.


Determina si la secuencia de componentes léxicos sigue la estructura del lenguaje y obtiene la estructura jerárquica en forma de árbol, donde los modos son las construcciones de alto nivel de lenguaje.
Se determinan las relaciones estructurales entre los componentes léxicos, esto es semejante a realizar el análisis gramatical sobre una fase del lenguaje natural
La estructura sintáctica, se define entre las gramáticas independientes del con texto

Clasificación:
La tarea esencial de un analizador es determinar si una determinada entrada puede ser derivada desde el símbolo inicial, usando las reglas de una gramática formal, y como hacer esto, existen esencialmente dos formas:

·         Analizador sintáctico descendente (Top-Down-Parser): un analizador puede empezar con el símbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.
·         Analizador sintáctico ascendente (Bottom-Up-Parser): un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los símbolos más pequeños y progresivamente construir la jerarquía de símbolos hasta el inicial, los analizadores LR funcionan así


ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONEN

Análisis Sintáctico: Se encarga de chequear la secuencia de tokens que se representa al texto de entrada, en la base a una gramática dada. En caso de que el programa sea válido, suministra el árbol sintáctico que lo reconoce en base a una representación computacional. Este árbol es el punto de partida de la fase posterior de la etapa de análisis: El analizador semántico.

Bibliografía: Compiladores, Traductores y Compiladores con Lex/Yacc , Sergio Gálvez Rojas y Miguel Ángel Mora Mata (2005).

Análisis Sintáctico: Comprueba que el orden en que el analizador léxico le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente.

La forma más habitual de representar la sintaxis de un programa es el árbol de análisis sintáctico, y lo que hacen los analizadores sintácticos es construir una derivación por la izquierda o por la derecha del programa fuente, que en realidad son dos recorridos determinados del árbol de análisis sintáctico.

Funciones del analizador sintáctico:

*Comprobar si la cadena de componentes léxicos proporcionada por el analizador léxico puede ser generada por la gramática que define el lenguaje fuente.

*Construir el árbol de análisis sintáctico que define la estructura jerárquica de un programa y obtener la serie de derivaciones para generar la cadena de componentes léxicos. El árbol sintáctico se utilizara como representación intermedia en la generación de código. Informar de los errores sintácticos de forma precisa y significativa y debería estar dotado de un mecanismo de recuperación de errores para continuar con el análisis.



Ejemplo


Declarar Atributo de clase:
Modificador de Acceso +palabra reservada static+ tipo de dato + nombre del Atributo+;
Ejemplo:
public static int n1;

I---> MSTNE
M----> public, private, protected
S ----> static
T ----> double, int, string…
N -----> L|LN|LD
L -----> A..Z|a..z
D ---> 0..9
E ----> ;

ORDENADORES

ORDENADORES

 Los ordenadores son una mezcla equilibrada de software y hardware  

 Clasificación del Software:


 *Software de Sistema
 *Software General:  Ejemplos: Navegador, Office.
*Software de Aplicación:
*Software de compiladores: Borland.
  Compilador: verificar la estructura de tu código.

 Interprete: Es el que lo va a traducir a un lenguaje más sencillo.

 Un carácter tiene: 8byte.





 VAMOS A ENCRIPTAR EL SIGUIENTE TEXTO:

El vídeo proporciona una manera eficaz para ayudarle a demostrar el punto. Cuando haga clic en Vídeo en línea, puede pegar el código para insertar del vídeo que desea agregar. También puede escribir una palabra clave para buscar en línea el vídeo que mejor se adapte a su documento.
Para otorgar a su documento un aspecto profesional, Word proporciona encabezados, pies de página, páginas de portada y diseños de cuadro de texto que se complementan entre sí. Por ejemplo, puede agregar una portada coincidente, el encabezado y la barra lateral. Haga clic en Insertar y elija los elementos que desee de las distintas galerías.
Los temas y estilos también ayudan a mantener su documento coordinado. Cuando haga clic en Diseño y seleccione un tema nuevo, cambiarán las imágenes, gráficos y gráficos SmartArt para que coincidan con el nuevo tema. Al aplicar los estilos, los títulos cambian para coincidir con el nuevo tema.
Ahorre tiempo en Word con nuevos botones que se muestran donde se necesiten. Para cambiar la forma en que se ajusta una imagen en el documento, haga clic y aparecerá un botón de opciones de diseño junto a la imagen. Cuando trabaje en una tabla, haga clic donde desee agregar una fila o columna y, a continuación, haga clic en el signo más.

ENCRIPTAR EN BINARIO

01000101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110000 01110010 01101111 01110000 01101111 01110010 01100011 01101001 01101111 01101110 01100001 00100000 01110101 01101110 01100001 00100000 01101101 01100001 01101110 01100101 01110010 01100001 00100000 01100101 01100110 01101001 01100011 01100001 01111010 00100000 01110000 01100001 01110010 01100001 00100000 01100001 01111001 01110101 01100100 01100001 01110010 01101100 01100101 00100000 01100001 00100000 01100100 01100101 01101101 01101111 01110011 01110100 01110010 01100001 01110010 00100000 01100101 01101100 00100000 01110000 01110101 01101110 01110100 01101111 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01010110 11101101 01100100 01100101 01101111 00100000 01100101 01101110 00100000 01101100 11101101 01101110 01100101 01100001 00101100 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01110000 01100101 01100111 01100001 01110010 00100000 01100101 01101100 00100000 01100011 11110011 01100100 01101001 01100111 01101111 00100000 01110000 01100001 01110010 01100001 00100000 01101001 01101110 01110011 01100101 01110010 01110100 01100001 01110010 00100000 01100100 01100101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110001 01110101 01100101 00100000 01100100 01100101 01110011 01100101 01100001 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00101110 00100000 01010100 01100001 01101101 01100010 01101001 11101001 01101110 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01100101 01110011 01100011 01110010 01101001 01100010 01101001 01110010 00100000 01110101 01101110 01100001 00100000 01110000 01100001 01101100 01100001 01100010 01110010 01100001 00100000 01100011 01101100 01100001 01110110 01100101 00100000 01110000 01100001 01110010 01100001 00100000 01100010 01110101 01110011 01100011 01100001 01110010 00100000 01100101 01101110 00100000 01101100 11101101 01101110 01100101 01100001 00100000 01100101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110001 01110101 01100101 00100000 01101101 01100101 01101010 01101111 01110010 00100000 01110011 01100101 00100000 01100001 01100100 01100001 01110000 01110100 01100101 00100000 01100001 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00101110 00001010 01010000 01100001 01110010 01100001 00100000 01101111 01110100 01101111 01110010 01100111 01100001 01110010 00100000 01100001 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00100000 01110101 01101110 00100000 01100001 01110011 01110000 01100101 01100011 01110100 01101111 00100000 01110000 01110010 01101111 01100110 01100101 01110011 01101001 01101111 01101110 01100001 01101100 00101100 00100000 01010111 01101111 01110010 01100100 00100000 01110000 01110010 01101111 01110000 01101111 01110010 01100011 01101001 01101111 01101110 01100001 00100000 01100101 01101110 01100011 01100001 01100010 01100101 01111010 01100001 01100100 01101111 01110011 00101100 00100000 01110000 01101001 01100101 01110011 00100000 01100100 01100101 00100000 01110000 11100001 01100111 01101001 01101110 01100001 00101100 00100000 01110000 11100001 01100111 01101001 01101110 01100001 01110011 00100000 01100100 01100101 00100000 01110000 01101111 01110010 01110100 01100001 01100100 01100001 00100000 01111001 00100000 01100100 01101001 01110011 01100101 11110001 01101111 01110011 00100000 01100100 01100101 00100000 01100011 01110101 01100001 01100100 01110010 01101111 00100000 01100100 01100101 00100000 01110100 01100101 01111000 01110100 01101111 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01100011 01101111 01101101 01110000 01101100 01100101 01101101 01100101 01101110 01110100 01100001 01101110 00100000 01100101 01101110 01110100 01110010 01100101 00100000 01110011 11101101 00101110 00100000 01010000 01101111 01110010 00100000 01100101 01101010 01100101 01101101 01110000 01101100 01101111 00101100 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00100000 01110101 01101110 01100001 00100000 01110000 01101111 01110010 01110100 01100001 01100100 01100001 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01100101 01101110 01110100 01100101 00101100 00100000 01100101 01101100 00100000 01100101 01101110 01100011 01100001 01100010 01100101 01111010 01100001 01100100 01101111 00100000 01111001 00100000 01101100 01100001 00100000 01100010 01100001 01110010 01110010 01100001 00100000 01101100 01100001 01110100 01100101 01110010 01100001 01101100 00101110 00100000 01001000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01001001 01101110 01110011 01100101 01110010 01110100 01100001 01110010 00100000 01111001 00100000 01100101 01101100 01101001 01101010 01100001 00100000 01101100 01101111 01110011 00100000 01100101 01101100 01100101 01101101 01100101 01101110 01110100 01101111 01110011 00100000 01110001 01110101 01100101 00100000 01100100 01100101 01110011 01100101 01100101 00100000 01100100 01100101 00100000 01101100 01100001 01110011 00100000 01100100 01101001 01110011 01110100 01101001 01101110 01110100 01100001 01110011 00100000 01100111 01100001 01101100 01100101 01110010 11101101 01100001 01110011 00101110 00001010 01001100 01101111 01110011 00100000 01110100 01100101 01101101 01100001 01110011 00100000 01111001 00100000 01100101 01110011 01110100 01101001 01101100 01101111 01110011 00100000 01110100 01100001 01101101 01100010 01101001 11101001 01101110 00100000 01100001 01111001 01110101 01100100 01100001 01101110 00100000 01100001 00100000 01101101 01100001 01101110 01110100 01100101 01101110 01100101 01110010 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00100000 01100011 01101111 01101111 01110010 01100100 01101001 01101110 01100001 01100100 01101111 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01000100 01101001 01110011 01100101 11110001 01101111 00100000 01111001 00100000 01110011 01100101 01101100 01100101 01100011 01100011 01101001 01101111 01101110 01100101 00100000 01110101 01101110 00100000 01110100 01100101 01101101 01100001 00100000 01101110 01110101 01100101 01110110 01101111 00101100 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01110010 11100001 01101110 00100000 01101100 01100001 01110011 00100000 01101001 01101101 11100001 01100111 01100101 01101110 01100101 01110011 00101100 00100000 01100111 01110010 11100001 01100110 01101001 01100011 01101111 01110011 00100000 01111001 00100000 01100111 01110010 11100001 01100110 01101001 01100011 01101111 01110011 00100000 01010011 01101101 01100001 01110010 01110100 01000001 01110010 01110100 00100000 01110000 01100001 01110010 01100001 00100000 01110001 01110101 01100101 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01100001 01101110 00100000 01100011 01101111 01101110 00100000 01100101 01101100 00100000 01101110 01110101 01100101 01110110 01101111 00100000 01110100 01100101 01101101 01100001 00101110 00100000 01000001 01101100 00100000 01100001 01110000 01101100 01101001 01100011 01100001 01110010 00100000 01101100 01101111 01110011 00100000 01100101 01110011 01110100 01101001 01101100 01101111 01110011 00101100 00100000 01101100 01101111 01110011 00100000 01110100 11101101 01110100 01110101 01101100 01101111 01110011 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01101110 00100000 01110000 01100001 01110010 01100001 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01101001 01110010 00100000 01100011 01101111 01101110 00100000 01100101 01101100 00100000 01101110 01110101 01100101 01110110 01101111 00100000 01110100 01100101 01101101 01100001 00101110 00001010 01000001 01101000 01101111 01110010 01110010 01100101 00100000 01110100 01101001 01100101 01101101 01110000 01101111 00100000 01100101 01101110 00100000 01010111 01101111 01110010 01100100 00100000 01100011 01101111 01101110 00100000 01101110 01110101 01100101 01110110 01101111 01110011 00100000 01100010 01101111 01110100 01101111 01101110 01100101 01110011 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01101101 01110101 01100101 01110011 01110100 01110010 01100001 01101110 00100000 01100100 01101111 01101110 01100100 01100101 00100000 01110011 01100101 00100000 01101110 01100101 01100011 01100101 01110011 01101001 01110100 01100101 01101110 00101110 00100000 01010000 01100001 01110010 01100001 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01110010 00100000 01101100 01100001 00100000 01100110 01101111 01110010 01101101 01100001 00100000 01100101 01101110 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01100001 01101010 01110101 01110011 01110100 01100001 00100000 01110101 01101110 01100001 00100000 01101001 01101101 01100001 01100111 01100101 01101110 00100000 01100101 01101110 00100000 01100101 01101100 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01111001 00100000 01100001 01110000 01100001 01110010 01100101 01100011 01100101 01110010 11100001 00100000 01110101 01101110 00100000 01100010 01101111 01110100 11110011 01101110 00100000 01100100 01100101 00100000 01101111 01110000 01100011 01101001 01101111 01101110 01100101 01110011 00100000 01100100 01100101 00100000 01100100 01101001 01110011 01100101 11110001 01101111 00100000 01101010 01110101 01101110 01110100 01101111 00100000 01100001 00100000 01101100 01100001 00100000 01101001 01101101 01100001 01100111 01100101 01101110 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01110100 01110010 01100001 01100010 01100001 01101010 01100101 00100000 01100101 01101110 00100000 01110101 01101110 01100001 00100000 01110100 01100001 01100010 01101100 01100001 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100100 01101111 01101110 01100100 01100101 00100000 01100100 01100101 01110011 01100101 01100101 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00100000 01110101 01101110 01100001 00100000 01100110 01101001 01101100 01100001 00100000 01101111 00100000 01100011 01101111 01101100 01110101 01101101 01101110 01100001 00100000 01111001 00101100 00100000 01100001 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100001 01100011 01101001 11110011 01101110 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01100101 01101100 00100000 01110011 01101001 01100111 01101110 01101111 00100000 01101101 11100001 01110011 00101110 00001010

ENCRIPTAR EN HEXADECIMAL

45 6c 20 76 c3 ad 64 65 6f 20 70 72 6f 70 6f 72 63 69 6f 6e 61 20 75 6e 61 20 6d 61 6e 65 72 61 20 65 66 69 63 61 7a 20 70 61 72 61 20 61 79 75 64 61 72 6c 65 20 61 20 64 65 6d 6f 73 74 72 61 72 20 65 6c 20 70 75 6e 74 6f 2e 20 43 75 61 6e 64 6f 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 56 c3 ad 64 65 6f 20 65 6e 20 6c c3 ad 6e 65 61 2c 20 70 75 65 64 65 20 70 65 67 61 72 20 65 6c 20 63 c3 b3 64 69 67 6f 20 70 61 72 61 20 69 6e 73 65 72 74 61 72 20 64 65 6c 20 76 c3 ad 64 65 6f 20 71 75 65 20 64 65 73 65 61 20 61 67 72 65 67 61 72 2e 20 54 61 6d 62 69 c3 a9 6e 20 70 75 65 64 65 20 65 73 63 72 69 62 69 72 20 75 6e 61 20 70 61 6c 61 62 72 61 20 63 6c 61 76 65 20 70 61 72 61 20 62 75 73 63 61 72 20 65 6e 20 6c c3 ad 6e 65 61 20 65 6c 20 76 c3 ad 64 65 6f 20 71 75 65 20 6d 65 6a 6f 72 20 73 65 20 61 64 61 70 74 65 20 61 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 2e 0d 0a 50 61 72 61 20 6f 74 6f 72 67 61 72 20 61 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 20 75 6e 20 61 73 70 65 63 74 6f 20 70 72 6f 66 65 73 69 6f 6e 61 6c 2c 20 57 6f 72 64 20 70 72 6f 70 6f 72 63 69 6f 6e 61 20 65 6e 63 61 62 65 7a 61 64 6f 73 2c 20 70 69 65 73 20 64 65 20 70 c3 a1 67 69 6e 61 2c 20 70 c3 a1 67 69 6e 61 73 20 64 65 20 70 6f 72 74 61 64 61 20 79 20 64 69 73 65 c3 b1 6f 73 20 64 65 20 63 75 61 64 72 6f 20 64 65 20 74 65 78 74 6f 20 71 75 65 20 73 65 20 63 6f 6d 70 6c 65 6d 65 6e 74 61 6e 20 65 6e 74 72 65 20 73 c3 ad 2e 20 50 6f 72 20 65 6a 65 6d 70 6c 6f 2c 20 70 75 65 64 65 20 61 67 72 65 67 61 72 20 75 6e 61 20 70 6f 72 74 61 64 61 20 63 6f 69 6e 63 69 64 65 6e 74 65 2c 20 65 6c 20 65 6e 63 61 62 65 7a 61 64 6f 20 79 20 6c 61 20 62 61 72 72 61 20 6c 61 74 65 72 61 6c 2e 20 48 61 67 61 20 63 6c 69 63 20 65 6e 20 49 6e 73 65 72 74 61 72 20 79 20 65 6c 69 6a 61 20 6c 6f 73 20 65 6c 65 6d 65 6e 74 6f 73 20 71 75 65 20 64 65 73 65 65 20 64 65 20 6c 61 73 20 64 69 73 74 69 6e 74 61 73 20 67 61 6c 65 72 c3 ad 61 73 2e 0d 0a 4c 6f 73 20 74 65 6d 61 73 20 79 20 65 73 74 69 6c 6f 73 20 74 61 6d 62 69 c3 a9 6e 20 61 79 75 64 61 6e 20 61 20 6d 61 6e 74 65 6e 65 72 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 20 63 6f 6f 72 64 69 6e 61 64 6f 2e 20 43 75 61 6e 64 6f 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 44 69 73 65 c3 b1 6f 20 79 20 73 65 6c 65 63 63 69 6f 6e 65 20 75 6e 20 74 65 6d 61 20 6e 75 65 76 6f 2c 20 63 61 6d 62 69 61 72 c3 a1 6e 20 6c 61 73 20 69 6d c3 a1 67 65 6e 65 73 2c 20 67 72 c3 a1 66 69 63 6f 73 20 79 20 67 72 c3 a1 66 69 63 6f 73 20 53 6d 61 72 74 41 72 74 20 70 61 72 61 20 71 75 65 20 63 6f 69 6e 63 69 64 61 6e 20 63 6f 6e 20 65 6c 20 6e 75 65 76 6f 20 74 65 6d 61 2e 20 41 6c 20 61 70 6c 69 63 61 72 20 6c 6f 73 20 65 73 74 69 6c 6f 73 2c 20 6c 6f 73 20 74 c3 ad 74 75 6c 6f 73 20 63 61 6d 62 69 61 6e 20 70 61 72 61 20 63 6f 69 6e 63 69 64 69 72 20 63 6f 6e 20 65 6c 20 6e 75 65 76 6f 20 74 65 6d 61 2e 0d 0a 41 68 6f 72 72 65 20 74 69 65 6d 70 6f 20 65 6e 20 57 6f 72 64 20 63 6f 6e 20 6e 75 65 76 6f 73 20 62 6f 74 6f 6e 65 73 20 71 75 65 20 73 65 20 6d 75 65 73 74 72 61 6e 20 64 6f 6e 64 65 20 73 65 20 6e 65 63 65 73 69 74 65 6e 2e 20 50 61 72 61 20 63 61 6d 62 69 61 72 20 6c 61 20 66 6f 72 6d 61 20 65 6e 20 71 75 65 20 73 65 20 61 6a 75 73 74 61 20 75 6e 61 20 69 6d 61 67 65 6e 20 65 6e 20 65 6c 20 64 6f 63 75 6d 65 6e 74 6f 2c 20 68 61 67 61 20 63 6c 69 63 20 79 20 61 70 61 72 65 63 65 72 c3 a1 20 75 6e 20 62 6f 74 c3 b3 6e 20 64 65 20 6f 70 63 69 6f 6e 65 73 20 64 65 20 64 69 73 65 c3 b1 6f 20 6a 75 6e 74 6f 20 61 20 6c 61 20 69 6d 61 67 65 6e 2e 20 43 75 61 6e 64 6f 20 74 72 61 62 61 6a 65 20 65 6e 20 75 6e 61 20 74 61 62 6c 61 2c 20 68 61 67 61 20 63 6c 69 63 20 64 6f 6e 64 65 20 64 65 73 65 65 20 61 67 72 65 67 61 72 20 75 6e 61 20 66 69 6c 61 20 6f 20 63 6f 6c 75 6d 6e 61 20 79 2c 20 61 20 63 6f 6e 74 69 6e 75 61 63 69 c3 b3 6e 2c 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 65 6c 20 73 69 67 6e 6f 20 6d c3 a1 73 2e


PROGRAMA CIFRADO CESAR
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

void menu(int &opcion)
{
                printf("Que desea hacer:\n\n1.-Encriptar\n2.-Desencriptar\n3.-Salir\n\nElige opcion:");
                scanf("%d",&opcion);
}

void pedir(char palabra[1000],int &num)
{
                printf("Introduce la palabra, frase o texto que desees encriptar: ");
                fflush(stdin);
                cin.getline(palabra,1000);
                printf("Introduce el numero de des/codificacion: ");
                scanf("%d",&num);

}

void desencriptar(char palabra[1000],int num)
{
                int i=0;
                while(palabra[i]!='\0')
                {
                               palabra[i]=palabra[i]-num;
                               i++;
                }
                printf("\nLa palabra, frase o texto desencriptado es:\n\n%s\n\n",palabra);
}

void encriptar(char palabra[1000],int num)
{
                int i=0;
                char letra;
                while(palabra[i]!='\0')
                {
                               palabra[i]=palabra[i]+num;
                               i++;
                }
                printf("\nLa palabra, frase o texto encriptado es:\n\n%s\n\n",palabra);
                i=2;
                while(i!=1)
                {
         printf("Deseas (D)esencriptarlo o (C)ontinuar? ");
         fflush(stdin);
                     scanf("%c",&letra);
                     letra = tolower(letra);
         if(letra=='d')
         {
              desencriptar(palabra, num);
              i=1;            
         }
         else if(letra=='c')
         {
              i=1;
         }
         else
         {
              printf("La letra introducida es incorrecta");
         }
    }
}

int main()
{

                char palabra[1000];
                int num,opcion;
                bool i=false;

                system("Title Cifrado Cesar");
                printf("Este programa se basa en el cifrado <cesar>.\n\n");
                while(i!=true)
                {
                               menu(opcion);
                               system("cls");
                               if(opcion==1)
                               {
                                               pedir(palabra, num);
                                               encriptar(palabra, num);
                               }
                               else if(opcion==2)
                               {
                                               pedir(palabra, num);
                                               desencriptar(palabra, num);
                               }
                               else if(opcion==3)
                               {
                                               printf("\t#####################\n\t#programmed by Tr3m0#\n\t#####################\n\n Divide et impera | Veni, vidi, vici.\n\n presiona una tecla para salir.");
                                               fflush(stdin);
                                               getchar();
                                               i=true;
                               }
                }
               
                return 0;

}