Tecnología
Programación básica
Análisis Léxico: Es la primera fase de un compilador. Su función principal consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis.(Compara si están dentro del Lenguaje)
Como el analizador léxico es la parte del compilador que lee el texto fuente puede realizar ciertas funciones secundarias en la interfaz del usuario, como eliminar del programa fuente comentarios y espacios en blanco en forma de caracteres de espacio en blanco, caracteres de tabulación y de nueva línea. Otra función es relacionar los mensajes de error del compilador con el programa fuente.
Términos utilizados en el Análisis Léxico:
-
Tokens: es un componente léxico.
-
Lexema: es la cadena de caracteres.
-
Patrón: es la regla que define al lexema.
-
Cadenas: es una secuencia finita de símbolos tomados de un alfabeto.
-
Lenguaje: conjunto de cadenas de un alfabeto fijo, basados en un patrón.
Análisis Sintáctico:
Ordena los tokens válido, es decir determina si la cadena de componentes léxicos violan las reglas de sintaxis. De ser asi existe un error
ANÁLISIS SEMÁNTICO
El análisis semántico es posterior al sintáctico y mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.
GENERACIÓN DE CÓDIGO
representación intermedia explícita del programa fuente.
Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.
se da el proceso de generación de código para obtener el programa objeto
Optimación de código
La fase de optimación de código trata de mejorar el código intermedio de modo que resulte un código de máquina más rápido de ejecutar.
Ejemplo de compilación
POSICION = INICIAL + (VELOCIDAD * 60)
ID1 = ID2 + (ID3 * 60)
=
ID1 +
ID2 *
ID3 60
=
ID1 +
ID2 *
ID3 ENTAREAL
60
TMP1=ENTAREAL (60)
TMP2=ID3*TMP1
TMP3=ID2+TMP2
ID1=TMP3
TMP1=ID3 * 60.0
ID1 = ID2+TMP1
MOVF ID3,R2
MULF #60.0,R2
MOVF ID2,R1
ADDF R2,R1
MOVF R1,ID1
Análisis Léxico: Devuelve la secuencia de tokens, es decir los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje.
Análisis Sintáctico: Orden de los tokens válido, es decir la cadena de componentes léxicos violan las reglas de estructura (sintaxis).
Análisis Semántico: Tipo de variables asignadas incorrecta, es decir intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.
ESTRUCTURAS DE LENGUAJES Y COMPILADORES (UNIDAD I)
Profesora: Ing. Brendys Galvis
Programa: Es el conjunto de instrucciones que permiten ejecutar un proceso.
Algoritmo: Conjunto de pasos con secuencia lógica.
Diagrama de Flujo: Representación gráfica de un algoritmo.
Pseudocódigo: Explicación del diagrama de flujo en un lenguaje universal.
Programa Fuente: Entrada al proceso de compilación hecho por el programador, líneas de código.
Programa Objeto: Entendido por la máquina después de una transformación.
Compilador: Es un programa que traduce el programa o lenguaje fuente a lenguaje objeto, cuya finalidad es la detección de errores a través de la verificación con la tabla de símbolos
Compilador Vs. Intérprete
Compilador | Intérprete |
- Se compila una vez . | - Se ejecuta n veces. |
- En bucles, el compilador genera código equivalente al bucle. | - Traduce tantas veces una línea como veces se repite el bucle. |
- Tienen una visión global del programa, por lo que la detección de errores es más detallada. | - Va línea por línea por que la detección de errores no es confiable. |
- Utiliza más memoria. | - Utiliza menos memoria. |
- Predominan actualmente. | - No predominan actualmente a excepción del utilizado por los navegadores de Internet para interpretar el código JVM (Java Virtual Machine) de Java. |
Fases del Compilador:
Programa Fuente
Análisis Léxico
Análisis Sintáctico
Análisis Semántico
Generador de Código Intermedio
Generador de Código
Optimizador de Código
Programa Objeto
El Compilador tiene 8 fases: 6 seguidas y 2 paralelas, asimismo, tiene 2 etapas.
Fases Seguidas: Análisis Léxico, Sintáctico, Semántico, Generador de Código Intermedio, Generador de Código, Optimizador de Código.
Fases Paralelas: Se dan a lo largo de todas las fases: Detección de Errores y Verificación en la Tabla de Símbolos:
Las 2 Etapas:
Análisis: es el proceso de descomposición del programa fuente en sus elementos más pequeños hasta llegar a la representación intermedia (árbol sintáctico). Va de lo general a lo específico.
Síntesis: va a partir de la representación intermedia cuando se da el proceso de generación de código para obtener el programa objeto. Va de lo específico a lo general.
Sistema para el Procesamiento de un Lenguaje
Estructura del Programa Fuente
Preprocesador
Programa Fuente
Compilador
Programa Objeto en Lenguaje Ensamblador
Ensamblador
Código de Máquina Relocalizable
Cargador
Código de Máquina Absoluto
Preprocesador: Es un programa que examina las instrucciones en el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer; incluye instrucciones, estructuras o declaraciones escritas en otro lenguaje, dando por resultado la modificación del programa fuente. Se ejecuta antes de llamar al compilador por ello también se le llama precompilador.
Funciones:
-
Procesamiento de Macros.
-
Inclusión de Archivos de encabezado.
-
Posee lenguaje propio.
-
Posee su propia tabla de símbolos.
-
Omite comentarios y elimina espacios en blanco.
-
Es el editor del programa.
-
Comprueba instrucciones lógicas (verdaderas y falsas).
-
Entrada: Programa fuente
-
Salida: Programa fuente optimizado.
Ensamblador: es un programa que genera código máquina a partir de mnemónicos donde se usan nombres en lugar de código binario para operaciones, y también se usa nombres para las direcciones de memoria.
Funciones:
-
Calcula y diseña los espacios de memoria.
-
Trabaja con 2 operandos y un operador.
-
Se ejecuta de forma paralela al compilador en la fase de generación de código intermedio.
Mnemónicos: en computación, simbología que busca la asociación mental para hacer fácil de recordar al momento de programar.
Cargadores: programa que copia un programa para su ejecución.
Funciones:
-
Administra la memoria.
-
Enlaza todos los programas y crea uno solo.
-
Realiza dos funciones principales: carga y edición de enlaces.
-
Carga una cadena de bytes en la memoria.
-
Verifica cada byte para su transmisión correcta.
-
Verifica cada palabra para ver si es una instrucción valida.
-
Convierte las direcciones relocalizables en direcciones absolutas.
-
Sastisface todas las referencias y etiquetas externas.
-
Genera una tabla de símbolos externa.
-
Carga, reubica y enlaza en memoria.
-
Se ejecuta en forma paralela al compilador en la fase de optimizador de código.
Tipos de Compiladores:
Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.
Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.
Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.
Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.
Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux.
Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.
Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.
Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje.
Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.
Herramientas que manipulan Programa Fuente
-
Editores de Estructura: Toman como entrada una secuencia de órdenes para construir un programa fuente. Este tipo de editor crea y efectúa cualquier otra operación de mantenimiento. Además de imprimirle una estructura jerárquica del programa. Ej.: Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.).
-
Impresoras Estéticas: Analizan el programa fuente de manera que resulte claramente visible. Ej.: Word, Excel, Power Point, Photoshop, etc.
-
Verificadores Estáticos: Leen el programa fuente, lo analizan e intentan descubrir errores potenciales sin ejecutarlos. Ej.: Editores de C y Pascal.
-
Intérpretes: No producen programa fuente, pero efectúan operaciones que lo implican, sólo construyen la representación intermedia (árbol sintáctico) y pueden efectuar operaciones sobre los nodos. No pueden generar código (.exe).
Herramientas para la Construcción de Compiladores (Proyecto).
Análisis Léxico:
Entrada: Programa Fuente:
Salida: Componentes Léxicos Clasificados
Proceso: 1. Omitir los comentarios.
2. Eliminar los espacios en blanco.
3. Comparar los token con la tabla de símbolos.
4. Clasificar los componentes léxicos.
Token = 1 carácter.
Errores en el Análisis Léxico:
-
Token no definido en la tabla de símbolos.
Ejemplo del Análisis Léxico:
(JH*UR)^OR + [MS+190 (16+FT=16F+4F+JF*UX
Aunque en esta expresión se aprecian errores, estos son errores sintácticos, de los cuales se ocupará el próximo nivel del compilador.
El análisis léxico procederá:
1. Calcular la longitud de la cadena original (42 caracteres con espacios en blanco)
2. Eliminar los espacios en blanco:
Comparar <> Espacios en blanco
Concatenar
Var = Medida(cadena) con un for i=1 to longitud de la cadena.
3. Forma la nueva cadena sin espacios (JH*UR)^OR+[MS+190(16+FT=16F+4F+JF*UX
4. Calcula la nueva cadena (37 caracteres sin espacios en blanco)
5. Compara en tabla de símbolos y clasifica
If caracter = VAR
If caracter = NUM
If caracter = OPERAD
If caracter = SEPARAD
Sino es ninguno de los anteriores:
ERROR: El token “ ” no está definido en la tabla de símbolos
La Tabla de Símbolos está formada por:
VARIABLES: Desde la A a la Z
NUMEROS: Desde el 0 al 9
OPERADORES: = + - * / ^
SEPARADORES: {[()]}
Tabla Clasificadora de los Componentes Léxicos: Ejemplo:
(JH*UR)^OR+[MS+190(16+FT=16F+4F+JF*UX
VARIABLES | NUMEROS | OPERADORES | SEPARADORES |
J | 1 | * | ( |
H | 9 | ^ | ) |
U | 0 | + | [ |
R | 1 | + | ( |
O | 6 | + | |
R | 1 | = | |
M | 6 | + | |
S | 4 | + | |
F | * | ||
T | |||
F | |||
F | |||
J | |||
F | |||
U | |||
X |
Análisis Sintáctico:
Entrada: Componentes Léxicos Clasificados
Salida: Árbol Sintáctico
Proceso: 1. Determinar el tipo de Análisis:
Descendente: va de Izquierda a Derecha y de Arriba a Abajo y se construye el árbol sintáctico.
Ascendente: va de Derecha a Izquierda y de Abajo a Arriba, evalúa y genera un G.D.A. (Grafo Dirigido Acíclico).
=
+
-
*
/
^
{[()]}
2. Determinar Reglas y Patrones:
Las Variables: Longitud Máxima = 4 caracteres (ABRP)
Longitud Mínima = 2 caracteres (DT)
Tipo Alfanumérica deben iniciar por letra (A14A)
Los Números: Enteros
Positivos
Longitud Indefinida
3. Formar palabras según patrón.
4. Clasificar las palabras.
5. Establecer jerarquía de Operadores.
6. Construir el Árbol Sintáctico.
Para formar palabras:
VARIABLE: "4"2 (Longitud)
NUMERO: Enteros y Positivos
Extraer y Leer caracter
If caracter = VARIABLE
Leer el siguiente caracter
If caracter =VARIABLE
Concatenar
Leer el siguiente caracter (concatenar sólo hasta donde
es permitido la longitud de las variables, pues si es mayor a 4 es un error).
If caracter = NUMERO
Concatenar
Leer el siguiente caracter mientras sea numero
If caracter = OPERADOR o SEPARADOR
Fin de la concatenación
Clasificar la variable o el numero
Clasificar el operador o separador
Errores Sintácticos:
-
Longitud de Variable no permitida.
-
Tipo de número.
-
Duplicidad de operador.
-
Se esperaba operador.
-
Falta signo “=”
-
Sólo debe existir un “=”
-
Falta separador (Nº de separadores abiertos = Nº de separadores cerrados).
-
Entre otros que surgirán a medida que se va desarrollando el compilador.
En este caso el ejemplo utilizado para el análisis léxico no pasaría del análisis sintáctico pues presenta muchos errores de este tipo.
Un ejemplo de una expresión sin errores sintácticos:
27*SF/(RT+30)^28-AB+(QR+NR/FX)=MX+HB-AB/(27*SF)^NR/FX*(QR+NR)
Arreglo una cadena de caracter
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void main()
{
char c1[20],c2[20];
system("cls");
printf("\t\tPROGRAMA QUE LEE DOS CADENAS DE CARACTERES");
printf("\n\n introduzca la primera cadena");
gets(c1);
printf("\n\n introduzca la segunda cadena");
gets(c2);
printf("\nla longitud dela primera cadena es: %d",strlen(c1));
printf("\nla longitud dela segunda cadena es: %d",strlen(c2));
if (strcmp(c1,c2)==0)
{
printf("\n las cadenas son iguales");
}
else
{
printf("\n las cadenas son diferentes");
}
printf("\n\n" );
getch();
}
Ejercicio dada una cadena de carácter elimina los espacios
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main () {
char arreglo[500];
int c_caract,cont,e,espacios;
printf("Escriba una Cadena de Caracteres Menor a 20 Caracteres\n\n");
fflush(stdin);
gets(arreglo);
c_caract=strlen(arreglo);
cont=c_caract;
espacios=cont;
while(cont>=0)
{
if((arreglo[cont] == ' ') ||(arreglo[cont]=='\t'))
{
c_caract=c_caract-1;
for(cont;cont<=c_caract;cont++)
arreglo[cont]=arreglo[cont+1];
}
cont=cont-1;
}
for (e= c_caract+1; e<=16; e++)
arreglo[e]=NULL;
printf("\n\n\nLA CADENA QUEDO ORGANIZADA ASI\n%s \n", arreglo);
printf("\n\nSe eliminaron %i Espacios",espacios-c_caract);
printf("\n\n\nla Cadena Tiene %i Caracteres\n\n\n\n\n",c_caract);
}
Ecuación de Segundo Grado
#include <stdio.h>
#include <cmath.h>
main()
{
float a,b,c,d,x,y;
printf ("ingrese a: ");
scanf ("%f,&a");
printf ("ingrese b: ");
scanf ("%f,&b");
printf ("ingrese c: ");
scanf ("%f,&c");
if (a == 0)
printf ("no cumple la condicion. ");
else
{
d = (b*b) - (4*a*c);
x= ((-b) + sqrt(d))/(2*a);
y= ((-b) - sqrt(d))/(2*a);
}
printf (" el resultado para x es: %f", x /n);
printf (" el resultado para y es: %f", y /n);
}
};
--------------------------------------------------------------
#include<stdio.h>
main()
{
int i,numero1,numero2;
printf("\introduzca primer numero");
scanf("%i",&numero1);
printf("\introduzca segundo numero");
scanf("%i",&numero2);
for(i=1;i<=1;i++)
{
if(numero1>numero2)
printf("el mayor es el primer %i",numero1);
else
{
printf("el mayor es el segundo numero %i",numero2);
}
}
}
------------------------
#include<stdio.h>
main()
{float c,f;
printf("ingrece el valor de f");
scanf("%f",&f);
c=(f-32)*5/9;
printf("el valor en centigrado es=>%f",c);
return 0;}
Insertar un elemento en la pila
#include<stdio.h>
#include<conio.h>
int main()
{
int tamaño pila,tope,opciòn,elemento,espacios vacios,recorrido;
char pila [25],si_no [1]
tamaño pila=25
while(opcion!==6)
{
sclrcr ()
printf ("/n sistema de actualizacion de pilas/n");
printf ("/n); printf ("menu de opciones/n");
printf ("1 insertar un elemento/n");
printf ("2 consultar un elemento/n");
printf ("3 eliminar un elemento/n");
printf ("4 consultar estado de pila/n");
printf ("5 tamaño de la pila/n");
printf ("6 salir del sistema/n");
printf ("/n ingrese su opcion/n");
scanf ("%i",&opcion); sclrcr ()
si_no='s'.
while (opcion==1&& si_no=='s')
{ if tope ==tamañopila
{ printf ("/n pila en el tope .no puede insertar/n");
si_no='n'.
else
{ tope=tope+1
printf ("introdusca el elemento a insertar");
scanf("%c",&elemento);
pila [tope]=elemento;
printf ("ya esta cargado.insertar otro? s/n");
scanf (("%c,&si_no);
}
}
si_no='s'
while ((opcion==2)&& (si_no='s'))
{
clrscr();optar=0 recorrido=0
printf ("cual posicion suiche consultar?(pulse"0" para ver todos),&");
scanf("%c,&optar);
while optar=0 && recorrido<tamaño tabla
{
recorrido==recorrido+1
printf ("posicion pila n.%i:%i/n",recorrido,pila [recorrido]);
}
if optar>0
{ clrscr ()
printf("la posicion %i/n",optar,pila[optar]);
}
printf ("/n desender otra opcion? s/n:");
scanf("%c",&si_no)
}
si_no='s'
while ((opcion==3&&(si_no='s'));
{ if tope==0
{
printf ("pila vacia.no puede eliminar");
}
si_no='n'
else
{ pila [tope]="b";
tope=tope-1;
printf("/n desea eliminar otro ? s/n);
scanf("%c",&si_no);
}
if opcion=4
{ clrscr();
espaciosvacios=tamaño pila-tope
print ( "/n/n el tope de la pila esta en %i,por tanto,quedan%i espacios vacios en la pila/n"),tope
}
if opcion=5
{ clrscr
print(" el tamaño de la pila es de %i/n",tamaño pila)
}
getch ()
}
}
Cual numero es par cual es impar
#include<stdio.h>
main()
{
int N,i=0,r,d=0,e=0,f,g;
int par[20],impar[20],entrada[20];
printf("\nIntroduzca el numero de datos:\t");
scanf("%d",&N);
for(i=0;i<N;i++)
{
printf("Ingrese dato %d:\t",i+1);
scanf("%d",&entrada[i]);
r=entrada[i] % 2;
if(r==0)
{
par[d]=entrada[i];
f=d;
d++;
}
else
{
impar[e]=entrada[i];
g=e;
e++;
}
}
printf("\n");
printf(" Pares\n");
printf("\n");
for(d=0;d<=f;d++)
{
printf("\t%d\n",par[d]);
}
printf("\n");
printf(" Impares\n");
printf("\n");
for(e=0;e<=g;e++)
{
printf("\t%d\n",impar[e]);
}
printf("\n");
}
Volumen, Factura ,Pasaporte
#include<stdio.h>
float ladoa,ladob,area;
main()
{
printf("ingrese el valor de ladoa");
scanf("%f",&ladoa);
printf("ingrese el valor de ladob");
scanf("%f",&ladob);
area=ladoa*ladob;
printf("el area del rectangulo es: %f\n",area);
}
-------------------------------------------------
FACTURA
#include<stdio.h>
#include<conio.h>
int main()
{
int cliente, nombre,descripcion,codigopro, cedula, fecha, nif, rif, factura, punitario, ptotal, cantidad, precioiva, opcion, pcompra;
do
{
printf("FACTURACION DE LA LIBRERIA UNIOJEDA.\n\n");
printf("1.Facturacion para un cliente. \n");
printf("2.Facturacion para una empresa. \n");
printf("3.Salir del Sistema. \n");
scanf("%i",&opcion);
switch(opcion)
{
case 1:
printf("Introducir la fecha en este formato dia/mes/año:\n\n");
scanf("%i",&fecha);
printf("Introducir nombre del cliente: \n\n");
scanf("%i",&cliente);
printf("Introducir la cedula del cliente: \n\n");
scanf("%i",&cedula);
printf("Introducir el codigo del articulo: \n\n");
scanf("%i",&codigopro);
printf("Introducir el nombre del articulo: \n\n");
scanf("%i",&descripcion);
printf("Introducir el precio del articulo: \n\n");
scanf("%i",&punitario);
printf("Introducir la cantidad de articulos: \n\n");
scanf("%i",&cantidad);
ptotal = (cantidad * punitario);
precioiva = (ptotal * (0.16));
pcompra = ptotal+precioiva;
factura = factura + 1;
printf("\n\nFecha: %i\n",fecha);
printf("Factura N°: %i\n",factura);
printf("Nombre: %i\n",cliente);
printf("Cedula: %i\n",cedula);
printf("Codigo del art: %i\n",codigopro);
printf("Nombre del Producto: %i\n",descripcion);
printf("Precio del Producto: %i\n",punitario);
printf("Cantidad de Articulos: %i\n",cantidad);
printf("TOTAL: %i\n",ptotal);
printf("IVA: %i\n",precioiva);
printf("El total de su compra es de: %i\n",pcompra);
printf("¡¡GRACIAS POR SU COMPRA!!");
printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");
getch();
break;
case 2:
printf("Introducir la fecha en este formato dia/mes/año:\n\n");
scanf("%i",&fecha);
printf("Introducir el nombre de la empresa: \n\n");
scanf("%i",&nombre);
printf("Introducir el nif de la empresa: \n\n");
scanf("%i",&nif);
printf("Introducir el rif de la empresa: \n\n");
scanf("%i",&rif);
printf("Introducir el codigo del articulo: \n\n");
scanf("%i",&codigopro);
printf("Introducir el nombre del articulo: \n\n");
scanf("%i",&descripcion);
printf("Introducir el precio del articulo: \n\n");
scanf("%i",&punitario);
printf("Introducir la cantidad de articulos: \n\n");
scanf("%i",&cantidad);
ptotal = (cantidad * punitario);
precioiva = (ptotal * (0.16));
pcompra = ptotal+precioiva;
factura = factura + 1;
printf("\n\nFecha: %i\n",fecha);
printf("Factura N°: %i\n",factura);
printf("Nombre de la Empresa: %i\n",nombre);
printf("Nif: %i\n", nif);
printf("Rif: %i\n", rif);
printf("Codigo del art: %i\n",codigopro);
printf("Nombre del Producto: %i\n",descripcion);
printf("Precio del Producto: %i\n",punitario);
printf("Cantidad de Articulos: %i\n",cantidad);
printf("TOTAL: %i\n",ptotal);
printf("IVA: %i\n",precioiva);
printf("El total de su compra es de: %i\n",pcompra);
printf("¡¡GRACIAS POR SU COMPRA!!");
printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");
getch();
break;
}
}
while(opcion!=3);
return 0;
}
_____________________________________________________________________
FACTURA 2
#include<stdio.h>
#include<conio.h>
int main()
{
int descuento, codigo, cedula, dia,mes,ano,fecha, nit, rif, factura, punitario, ptotal1, ptotal2, cantidad, precioiva, opcion, pcompra, totalventas;
char cliente[30], descripcion[10], nombre[15], apellido[30];
factura=0;
totalventas=0;
do
{
printf("\n\n <<<<<BIENVENIDO A EL SISTEMA DE FACTURACION DE LA LIBRERIA UNIOJEDA>>>>>\n\n");
printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
printf("1.Facturacion para un cliente personal. \n\n");
printf("2.Facturacion para empresas. \n\n");
printf("3.Salir del Sistema. \n\n");
scanf("%i",&opcion);
switch(opcion)
{
case 1:
printf("\nIntroducir el dia de compra: ");
scanf("%i",&dia);
printf("Mes: ");
scanf("%i",&mes);
printf("año: ");
scanf("%i",&ano);
printf("Introducir nombre: \n");
scanf("%s",&cliente);
printf("Introducir apellido: \n");
scanf("%s",&apellido);
printf("Introducir la cedula del cliente: \n");
scanf("%i",&cedula);
printf("Introducir el codigo del articulo: \n");
scanf("%i",&codigo);
printf("Introducir el nombre del articulo: \n");
scanf("%s",&descripcion);
printf("Introducir el precio del articulo: \n");
scanf("%i",&punitario);
printf("Introducir la cantidad de articulos: \n");
scanf("%i",&cantidad);
if(cantidad>=6)
{
ptotal1=(cantidad*punitario);
descuento=ptotal1*0.10;
ptotal2=ptotal1-descuento;
precioiva = (ptotal2 * (0.16));
pcompra=ptotal2+precioiva;
}
else if(cantidad>=12)
{
ptotal1=(cantidad*punitario);
descuento=ptotal1*0.15;
ptotal2=ptotal1-descuento;
precioiva = (ptotal2 * (0.16));
pcompra=ptotal2+precioiva;
}
else
{
ptotal1 = (cantidad * punitario);
descuento=0;
ptotal2=ptotal1-descuento;
precioiva = (ptotal1 * (0.16));
pcompra=ptotal1+precioiva;
}
factura = factura + 1;
printf("\n\nFecha: %i/%i/%i\n",dia,mes,ano);
printf("Factura N°: %i\n",factura);
printf("_______________________________________________________________________________\n\n");
printf("Nombre completo: %s %s\n",cliente,apellido);
printf("Cedula: %i\n",cedula);
printf("Codigo del art: %i\n",codigo);
printf("Nombre del Producto: %s\n",descripcion);
printf("Precio del Producto: %i\n",punitario);
printf("Cantidad de Articulos: %i\n",cantidad);
printf("Precio completo: %i\n",ptotal1);
printf("Descuento: %i\n",descuento);
printf("SUB-TOTAL: %i\n",ptotal2);
printf("IVA: %i\n",precioiva);
printf("El total de su compra es de: %i\n",pcompra);
totalventas=totalventas+pcompra;
printf("\n\n ¡¡GRACIAS POR SU COMPRA!!");
printf("\n\n_______________________________________________________________________________\n\n");
printf("\n\nPresione una tecla para volver a la pantalla inicial del sistema\n\n");
getch();
break;
case 2:
printf("\nIntroducir el dia de compra: ");
scanf("%i",&dia);
printf("Mes: ");
scanf("%i",&mes);
printf("año: ");
scanf("%i",&ano);
printf("\nIntroducir el nombre de la empresa: \n");
scanf("%s",&nombre);
printf("\nIntroducir el nit de la empresa: \n");
scanf("%i",&nit);
printf("\nIntroducir el rif de la empresa: \n");
scanf("%i",&rif);
printf("\nIntroducir el codigo del articulo: \n");
scanf("%i",&codigo);
printf("\nIntroducir el nombre del articulo: \n");
scanf("%s",&descripcion);
printf("\nIntroducir el precio del articulo: \n");
scanf("%i",&punitario);
printf("\nIntroducir la cantidad de articulos: \n");
scanf("%i",&cantidad);
if(cantidad>=6)
{
ptotal1=(cantidad*punitario);
descuento=ptotal1*0.10;
ptotal2=ptotal1-descuento;
precioiva = (ptotal2 * (0.16));
pcompra=ptotal2+precioiva;
}
else if(cantidad>=12)
{
ptotal1=(cantidad*punitario);
descuento=ptotal1*0.15;
ptotal2=ptotal1-descuento;
precioiva = (ptotal2 * (0.16));
pcompra=ptotal2+precioiva;
}
else
{
ptotal1 = (cantidad * punitario);
descuento=0;
ptotal2=ptotal1-descuento;
precioiva = (ptotal1 * (0.16));
pcompra=ptotal1+precioiva;
}
factura = factura + 1;
printf("\n_______________________________________________________________________________\n\n");
printf("\nLIBRERIA UNIOJEDA");
printf("\n\nFecha: %i/%i/%i\n",dia,mes,ano);
printf("Factura N°: %i\n",factura);
printf("Nombre de la Empresa: %s\n",nombre);
printf("Nit: %i\n", nit);
printf("Rif: %i\n", rif);
printf("Codigo del art: %i\n",codigo);
printf("Nombre del Producto: %s\n",descripcion);
printf("Precio del Producto: %i\n",punitario);
printf("Cantidad de Articulos: %i\n",cantidad);
printf("Precio completo: %i\n",ptotal1);
printf("Descuento: %i\n",descuento);
printf("SUB-TOTAL: %i\n",ptotal2);
printf("IVA: %i\n",precioiva);
printf("El total de su compra es de: %i\n",pcompra);
totalventas=totalventas+pcompra;
printf("\n\n ¡¡GRACIAS POR SU COMPRA!!");
printf("\n\n_______________________________________________________________________________\n\n");
printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");
getch();
break;
}
}
while(opcion!=3);
printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");
printf("\n El total vendido del dia: %i/%i/%i es de %i Bs\n", dia,mes,ano,totalventas);
printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
return 0;
}
____________________________________________________________________________________________
PROGRAMA 3
#include<stdio.h>
#include<conio.h>
int main()
{
int sum,num1,num2,p,d,opcion;
do
{
printf("\nSeleccione proceso\n");
printf("1.Quieres Sumar 2 numeros\n");
printf("2.Quieres obtener toda la tabla de multiplicar\n");
printf("3.Quieres ver todo el abecedario\n");
printf("4.Quieres salir del sistema\n");
scanf("%i",&opcion);
switch(opcion)
{
case 1:
printf("Ingrese los dos numeros que desea sumar\n");
scanf("%i%i",&num1,&num2);
sum=num1+num2;
printf("La suma de los dos numeros es: %i\n",sum);
printf("\n\nPresione una tecla para volver a la pantalla incial del sistema");
getch();
break;
case 2:
for(d=1;d<=10;d++)
{
printf("La tabla del numero %i\n",d);
for(p=1;p<=10;p++)
{
printf("%i\n",d*p);
}
}
printf("\n\nPresione una tecla para volver a la pantalla incial del sistema");
getch();
break;
case 3:
int abc=65;
do
{
printf(" %c",abc);
abc++;
}
while(abc<=90);
getch();
break;
}
}
while(opcion!=4);
getch();
}
__________________________________________________________________________________________
PROGRAMA 4
#include<stdio.h>
int main()
{
int cont1=0,cont2=0,cont3=0,acum1=0,acum2=0,acum3=0,total2,opcion;
do
{
printf("SELECCIONE EL COMBO QUE DESEE:\n\n");
printf("1.Hamburguesa,papas grandes y refresco $50.00\n");
printf("2.Hamburguesa con queso y doble carne, papas grandes y refresco $65.00\n");
printf("3.Orden de tacos y refresco $32.00\n");
printf("4.Salir del sistema\n");
scanf("%i",&opcion);
switch(opcion)
{
case 1:
cont1=cont1+1;
break;
case 2:
cont2=cont2+1;
break;
case 3:
cont3=cont3+1;
break;
}
}
while(opcion!=4);
acum1=cont1*50;
acum2=cont2*65;
acum3=cont3*32;
total2=acum1+acum2+acum3;
printf("%i Personas seleccionaron el combo 1\n la venta total del combo 1 fue:%i\n\n",cont1,acum1);
printf("%i Personas seleccionaron el combo 2\n la venta total del combo 2 fue:%i\n\n",cont2,acum2);
printf("%i Personas seleccionaron el combo 3\n la venta total del combo 3 fue:%i\n\n",cont3,acum3);
printf("La venta total fue de:%i\n",total2);
return 0;
}
___________________________________________________________________________________________
PROGRAMA 5
#include<stdio.h>
#include<conio.h>
int main()
{
int num,fex,origen,fvacuna,fimpu,exit=1,pven=0,pext=0,a=0,b=0;
while(exit==1)
{
printf("Ingrese el Numero de pasaporte\n");
scanf("%i",&num);
printf("\nIngrese la Fecha de expedicion del pasaporte correspondiente\n" "1.Vencida 2.Vigente\n");
scanf("%i",&fex);
if(fex==1)
{
printf("Disculpe...REUCAUDO NO VIGENTE\n");
}
printf("\nOrigen del pasaporte: 1. Venezolano 2. Extranjero\n");
scanf("%i",&origen);
if(origen==1)
{
pven=pven+1;
}
else
{
pext=pext+1;
}
printf("\nFecha de expedicion del certificado de vacuna\n" "1. Vencido 2. Vigente\n");
scanf("%i",&fvacuna);
if(fvacuna==1)
{
printf("Disculpe... RECAUDO NO VIGENTE\n");
a=a+1;
}
printf("\nFecha de expedicion de la declaracion de impuesto\n" "1. Vencido 2. Vigente\n");
scanf("%i",&fimpu);
if(fimpu==1)
{
printf("Disculpe...RECAUDO NO VIGENTE\n");
b=b+1;
}
printf("\nDesea salir del sistema 1.NO 2.SI\n");
scanf("%i",&exit);
}
printf("El total de clientes que tienen pasaportes Venezolanos:%i\n",pven);
printf("El total de clientes que tienen pasaportes Extanjeros:%i\n",pext);
printf("El total de clientes con certificado de vacuna vencido:%i\n",a);
printf("El total de clientes con declaracion de impuestos vencido:%i\n",b);
getch();
return 0;
}
____________________________________________________________________________________________
ANÁLISIS LÉXICO
ANÁLISIS SINTÁCTICO
ANÁLISIS SEMÁNTICO
GENERACIÓN DE CÓDIGO
INTERMEDIO
GENERACIÓN DE CÓDIGO (ADMINISTRACIÓN DE LA MEMORIA)
OPTIMIZACIÓN DE CÓDIGO
CÓDIGO OBJETO
EN LENGUAJE ESNSAMBLADOR
Tabla de Símbolos
Compilador
Programa Fuente
Programa Objeto
Detección de Errores
Etapa de Análisis
Detección de Errores
y
Verificación con la Tabla de Símbolos
Etapa de Síntesis
Generador de Código
Intermedio
Optimización de Código
Ascendente
Descendente
Descargar
Enviado por: | Donatelo |
Idioma: | castellano |
País: | Venezuela |