Está en la página 1de 7

Lenguajes de programación Lenguajes de programación

Contenido:
1. Lenguajes de programación
• Lenguaje Maquina,
LENGUAJES DE PROGRAMACIÓN • Lenguaje de bajo nivel,
• Lenguajes de Alto nivel,
• Traductores,
Prof: Nourdine Aliane
• Compiladores
• Ensambladores
Dpto: DIAC - EP
2. Programación procedural: Repaso del lenguaje C
Universidad Europea de Madrid
Madrid - Spain
aliane@uem.es

N . Aliane DIAC- EP-UEM informática industrial Pag: 1 N . Aliane DIAC- EP-UEM informática industrial Pag: 2

Lenguajes de programación Lenguajes de programación

1. Lenguajes de programación La instrucción maquina.


• Un lenguaje de programación es un conjunto limitado de • A nivel maquina, una instrucción es una serie de bits (0, 1).
palabras y de símbolos que permiten expresar
• Las instrucciones están organizadas en campos, donde se
procedimientos (decisiones, cálculos y otros) que se pueden
especifican el código de operación y las direcciones de los
ejecutar mediante un ordenador.
operándos.
• Los lenguajes de programación se clasifican en:
Codop Dirección operando-1 Dirección operando-2
• Lenguaje maquina, Lenguaje de bajo nivel (ensamblador)
• Lenguajes de alto nivel • El formato de las instrucciones puede ser regular (igual
Lenguaje máquina para todas las instrucciones), “Maquinas RISC”.
• Es el lenguaje nativo de las maquinas. Cada -procesador tiene su • Pero, puede ser irregular, habiendo instrucciones de 1 byte,
propio lenguaje. de 2 bytes, de 3 bytes, y de 4 bytes, “Maquinas CISC”.
• El lenguaje maquina de los -procesadores de Intel es diferente
del lenguaje maquina de los de Motorola.
N . Aliane DIAC- EP-UEM informática industrial Pag: 3 N . Aliane DIAC- EP-UEM informática industrial Pag: 4

Lenguajes de programación Lenguajes de programación

Ejemplo de programación en lenguaje maquina (micro Z-80) Codificación.


• Se quiere sumar 3 números de 1 bytes cada uno, almacenados • De las tablas de instrucciones del Z-80, se obtiene el código
en las posiciones 4F35, 4F36 y 4F37 de la memoria, y maquina (en Hexadecimal) de las instrucciones anteriores.
finalmente, el resultado se deja en la posición 4FFC.
• Se utilizarán los registros (A como Acumulador y HL para el Programa
direccionamiento). [HL ← 4F35 ] 21354F
Algoritmo [A ← M(HL) ] 7E
1. Inicializar el registro HL con la dirección 4F35 [HL ← 4F35 ] [HL ← HL +1 ] 23
2. Cargar el primer dato en el acumulador [A ← M(HL) ] [A← A + M(HL) ] 86
3. Incrementar HL [HL ← HL +1 ] [HL ← HL + 1 ] 23
4. Sumar el segundo dato al acumulador [A← A+M(HL) ]
[A ← A + M(HL) ] 86
5. Incrementar HL [HL ← HL + 1 ]
[M(4FFC) ← A ] 3FC4F
6. Sumar el tercer dato [A ← A+M(HL) ]
7. Guardar en 4FFC [M(4FFC) ← A ]
N . Aliane DIAC- EP-UEM informática industrial Pag: 5 N . Aliane DIAC- EP-UEM informática industrial Pag: 6

1
Lenguajes de programación Lenguajes de programación

Lenguaje ensamblador Ejemplo de programación en ensamblador del 8086


• El lenguaje ensamblador surge como herramienta para • Se quiere sumar 3 números de 1 bytes cada uno, almacenados en
simplificar la programación en lenguaje máquina. las posiciones 200, 201 y 202 de la memoria, y el resultado se
dejará en la posición 203.
• Se da a las instrucciones nombres (en inglés) que nos
indican y recuerdan la operación que se realiza.
Programa
• Ejemplo: ADD, SUB, SHIFT, MOV AL, [200]
• Estos nombres se llaman nemónicos y son más sencillos de ADD AL, [201]
recordar que sus equivalentes en código máquina. ADD AL, [202]
MOV [203], AL
• Un programa escrito en lenguaje ensamblador no puede
ser ejecutado directamente por la computadora, sino que
requiere una fase de traducción al lenguaje máquina.

N . Aliane DIAC- EP-UEM informática industrial Pag: 7 N . Aliane DIAC- EP-UEM informática industrial Pag: 8

Lenguajes de programación Lenguajes de programación

Ventajas e inconvenientes: Lenguajes de alto nivel


• Los lenguajes ensambladores presentan la ventaja frente a • Permiten a los programadores escribir programas de un
los lenguajes maquina por su facilidad de codificación. modo más fácil todavía que los lenguajes ensambladores.
• Las reglas sintácticas de los lenguajes de alto nivel son
• Los inconvenientes más notables de los lenguajes similares al lenguaje humano (Read, Write, Open, etc).
ensambladores son: • Los programas escritos en un lenguaje de alto nivel son
• Los programas en ensamblador dependen mucho de la independientes de la maquina ya que no tenemos que
maquina (No hay portabilidad de los programas). conocer a fondo la maquina.
• La programación en ensamblador es compleja. • El aprendizaje de los lenguajes de alto nivel es corto
comparado con otros lenguajes.
• El programador debe conocer la estructura de la
maquina, (sus registros, organización de la memoria, las • Los leguajes más utilizados: FORTRAN, PASCAL, ADA, C,
interrupciones, etc.) C++, JAVA,

N . Aliane DIAC- EP-UEM informática industrial Pag: 9 N . Aliane DIAC- EP-UEM informática industrial Pag: 10

Lenguajes de programación Lenguajes de programación

Inconvenientes: Lenguajes compilados: Compiladores


• Los ejecutables son demasiados grandes y requieren más • Un compilador es un programa que traduce un código
memoria para su ejecución. fuente escrito en un lenguaje de alto nivel a código
• El tiempo de ejecución de los programas es mucho mayor. máquina.

• Los programas fuente tienen que ser traducidos para la • La compilación suele tener varias fases intermedias:
obtención de un código ejecutables. • Procesamiento del código fuente: (Preprocesador en C)
• Eliminación de comentarios, líneas en blanco, etc
Traductores de Lenguajes • Despliegue de macros,
• Los traductores de lenguajes son programas que traducen • inclusión de los ficheros, etc.
un código fuente escrito en un lenguaje de alto nivel a • Compilación del código preprocesado.
código máquina. • Verificar y corregir errores de compilación
• Obtención del programa objeto.
• Hay 3 tipos de traductores: Los compiladores, los
• El montaje (Linker) junta el programa objeto con las
interpretes y los ensambladores
librerías para obtener el ejecutable.
N . Aliane DIAC- EP-UEM informática industrial Pag: 11 N . Aliane DIAC- EP-UEM informática industrial Pag: 12

2
Lenguajes de programación Lenguajes de programación

Lenguajes Interpretados: Interpretes Diferencias ente Compiladores e Interpretes


• Un interprete es un traductor que toma un código fuente, lo • Un ejecutable (un programa compilado)
traduce y ejecuta las instrucciones una por una, hasta llegar • Es un programa auto-contenido y se puede ejecutar por
al final. si solo (suponiendo que están las dll).
• Un interprete chequea los errores en fase de ejecución. • Solo funciona sobre la plataforma por la que ha sido
• No se produce ningún código objeto. creado (maquina y su sistema operativo).
• Un lenguaje con un traductor de tipo intérprete se denomina • Un programa interpretable (como un fuente de Matlab)
lenguaje interpretado. • Requiere un interprete para su ejecución (Matlab)
• BASIC es un lenguaje interpretado. • Son independientes de las plataformas.
• A ciertos lenguajes interpretados también se les conoce • La velocidad de ejecución de un ejecutable es de (10…20)
como lenguajes de SCRIPT: Matlab, Matemática, veces más rápido que un archivo interpretable.
JavaScript, Perl, Python,
N . Aliane DIAC- EP-UEM informática industrial Pag: 13 N . Aliane DIAC- EP-UEM informática industrial Pag: 14

Lenguajes de programación Lenguajes de programación

Lenguajes Ensamblador: Ensambladores


• El programa ensamblador es un traductor de programas
escritos en algún lenguaje ensamblador a un programa
objeto. REPASO:
• NOTA: No se debe confundir un programa ensamblador, LENGUAJE DE PROGRAMACIÓN C
encargado de la traducción de un fuente a un objeto, con el
lenguaje ensamblador.
• La traducción es bastante sencilla.
• El ensamblador utiliza tablas que proporcionan el código
de operación de todas las instrucciones.
• Ejemplo 8086: (En hexadecimal, ADD: 86 y INC: 23)
• El programa procesa todas las instrucciones y genera
un ejecutable.
N . Aliane DIAC- EP-UEM informática industrial Pag: 15 N . Aliane DIAC- EP-UEM informática industrial Pag: 16

Lenguajes de programación Lenguajes de programación

Estructura de un programa en C Variables globales y locales.


/* Mi primer programa en C */ float x ; //variable global
#include <stdio.h>
void main()
int main() {
{ int a = 0, c; //variable locales
printf(“Hola mundo \n “); float y, z;
return 0; ...
} }

 /* … */ para comentarios.  Las variables globales se inicializan por defecto a 0.


 # include <…>. Incluye los archivos de cabecera donde está  Las locales no se inicializan y contienen cualquier valor (basura).
declarada la función printf.  Los tipos básicos son char, int, float, double.
 la función main() es el punto de entrada de un programa C.  Existen modificadores sobre el int como long, short, unsigned, ...
N . Aliane DIAC- EP-UEM informática industrial Pag: 17 N . Aliane DIAC- EP-UEM informática industrial Pag: 18

3
Lenguajes de programación Lenguajes de programación

Operadores típicos Salida de datos: la función printf(...)

sizeof Tamaño de una variable o tipo sizeof(long int) int a = 1, b = 2;


++, -- Incremento o Decremento ++n, n++, --n, n-- char c = ‘q’;
+=, *=, /= Compactación de operaciones n+=2 es (n=n+2) float x = 0.0;
Operadores lógicos
printf(“Esto es un mensaje ... \n”);
==, != Igual que , Distinto que if(n==0)
printf(“Suma a+b = %d, %c, %f \n”, a+b, c, x);
&&, | | Operaciones lógicas AND y OR if(expr1 && expr2)
! NOT if(!expr)
Operadores sobre de bits
 La función printf() tiene un campo de control para la especificación
&, | AND y OR a nivel de bits (enteros) n3 = n1&n2 de los formatos de salida y otro para las variables.
^ XOR n3 = (n1^n2)  Los formatos se especifican con el símbolo %:
>>, << Desplazamiento a la derecha e izquierda n2 = (n1 << 2 ) char: %c, int: %d, float: %f y %g,
~ Complemento a 1 n2 = ~n1
 Ejemplo de modificador (%4d un entero sobre 4 dígitos).
N . Aliane DIAC- EP-UEM informática industrial Pag: 19 N . Aliane DIAC- EP-UEM informática industrial Pag: 20

Lenguajes de programación Lenguajes de programación

Entrada de datos: la función scanf(…) Sentencia if, if else, ..


int a, b,
int c; if(condicion){ if(condicion){ if(condicion){
printf(" Dame el primer dato:"); ............ ............ ...........
scanf("%d", &a); } } }
printf(" Dame el Segundo y el tercero:"); ........... else{ else if{
scanf("%d %d", &b, &c); ........... ...........
printf("El resultado es %d \n", a+b+c); } } else ..

 La función scanf tiene un campo para especificar el tipo y un campo  La parte else es opcional.
para especificar la dirección de la variable (&a);  Se pueden anidar varios if, pero a partir de 2 es mejor usar un switch
 Se pueden recoger varios datos a la vez.  C no dispone de un tipo Booleano. Las expresiones que producen
resultados numéricos se interpretan: (0: falso) y (!=0 verdadero)
 Los separadores: espacio en blanco, tabulador y retorno de carro.

N . Aliane DIAC- EP-UEM informática industrial Pag: 21 N . Aliane DIAC- EP-UEM informática industrial Pag: 22

Lenguajes de programación Lenguajes de programación

Sentencia switch Ejemplo de utilización de switch


switch (variable) { char op;
case cte1 : ...........; printf ("Escriba: la operación a op b \n");
break; scanf ("%f %c %f", &a, &op, &b);
case cte2 : ...........; switch(op) {
break; case '+': printf("= %g \n", a+b);
default : ...........; break;
} case '-': printf("= %g \n", a-b);
break;
case '*': printf("= %g \n", a*b);
 La variable de selección solo puede ser de tipo char o int. break;
 Se puede tener una condición de encaje múltiple: case '/': if(b==0) printf("Division por Cero \n");
case ‘a’: else printf("= %g \n", a/b);
break;
case ‘A’: sentencias;
default : printf("Operador desconocido\n");
 Una selección termina cuando encuentra la palabra break. }

N . Aliane DIAC- EP-UEM informática industrial Pag: 23 N . Aliane DIAC- EP-UEM informática industrial Pag: 24

4
Lenguajes de programación Lenguajes de programación

Bucles for, while, do-while. Ejemplo de bucle for(…)


/* Imprimir solo valores positivos
for(inicialización; condición; incremento) y salir si es cero
{ sentencias;} */

do{ while (condición) int i


........... sentencia;
}while(condicion); for(;;){
scanf(%d”, &i);
if (i < 0) continue;
 Todos los elementos del bucle son opcionales: for ( ; ; ) es un bucle if (i == 0) break;
infinito. printf ("%d",i);
 El bucle do-while se ejecuta por lo menos una vez. }

 Las instrucciones relacionadas con los bucles.


continue: Ir a la siguiente iteración. break: términa un bucle
N . Aliane DIAC- EP-UEM informática industrial Pag: 25 N . Aliane DIAC- EP-UEM informática industrial Pag: 26

Lenguajes de programación Lenguajes de programación

Las funciones: prototipo, definición y llamadas Los punteros y los operadores * y &
int suma(int, int); // prototipo int i, j, *p; // p es un puntero a entero

void main() { // función principal p = &i; // Inicialización del puntero


int a=1, b=2, c; *p = 5; // asignamos un valor a dirección
c = suma(a, b); // llamada a la función // apuntada por p
} j = i; // valor de i se asigna a j
int suma(int i, int j) // definición de la función
{ printf("%d %d %d \n", i, j, *p);
return (i+j);
} • Un puntero sirve para manejar direcciones y sus contenidos.
• El operador & sirve para obtener la dirección de una
variable.
 No se puede definir una función dentro de otra.
• El operador * sirve para obtener el contenido de la dirección
 Una función void no devuleve nada (es un procedimiento).
apuntada.
N . Aliane DIAC- EP-UEM informática industrial Pag: 27 N . Aliane DIAC- EP-UEM informática industrial Pag: 28

Lenguajes de programación Lenguajes de programación

Paso de parámetros: por valor y por referencia Ejemplo int a = 5, b = 10;


void swap1(int i, int j)
/* prototipo función con paso de parámetros por valor */ { swap1(a, b);
void swap1(int , int ); int temp; printf("%d %d\n", a, b);
temp = i;
/* paso por referencia */ i = j; swap2(&a, &b);
void swap2(int *, int *) j = temp; printf("%d %d\n", a, b);
}
 Por valor:
void swap2(int *i,int *j)
Se crea una copia en la pila de la función. Cualquier {
modificación de los parámetros no es perceptible fuera. int temp; Resultado
temp = *i;
 Por referencia: *i = *j; $ 5 10
$ 10 5
Se pasa un puntero o la dirección de una variable. Cualquier *j = temp;
}
modificación de estos parámetros es perceptible fuera.
N . Aliane DIAC- EP-UEM informática industrial Pag: 29 N . Aliane DIAC- EP-UEM informática industrial Pag: 30

5
Lenguajes de programación Lenguajes de programación

Los arrays Las cadenas de caracteres

int vector[5]; // Array de 5 posiciones char cadena[5]={'h','o','l','a','\o'}; //una cadena


float vector[4][4]; // Una matriz 4x4. char cadena[] = “hola” //otra forma más sencilla de
int datos[3]={3,-2,1}; // Inicialización de un array // definir un array.
int tabla[2][3]={{0, 0, 0},
{1, 1, 1}  El lenguaje C no tiene un tipo para las cadenas (string).
}; // Inicializar una matriz  Las cadenas se obtiene mediante un array de caracteres.
int lista[]={1, 2, 3}; // No hace falta la dimensión  Una cadena siempre termina con el carácter ‘\0’.
int vector[5]= {}; // inicializa a cero el vector
 Cuando se inicializa un array en la declaración, no hace falta
 En la declaración la matriz[m][n] tiene (m filas)x(n columnas) poner la dimensión.
 Un matriz se guarda en memoria por filas: (1º fila, 2º fila, ….  Existen varias funciones de librería (string.h) para el manejo de
 El nombre de un array contiene la dirección del primer cadenas: como strcpy(), strcat(), strlen(), strcmp(), …
elemento. El identificador matriz contiene lo mismo que
&matriz[0][0].
N . Aliane DIAC- EP-UEM informática industrial Pag: 31 N . Aliane DIAC- EP-UEM informática industrial Pag: 32

Lenguajes de programación Lenguajes de programación

Los arrays y los punteros. Los enumerados

int lista[10]; // El identificador lista contiene la /*definición de un enumerado */


// dirección del primer elemento: enum colores {azul, verde, magenta, rojo, amarillo };
// &lista[0].
/* definición de variables y su inicialización*/
int *p, lista[10]; enum colores primerplano, fondo = rojo;
p = lista; //Se iniciliza el puntero p a la
//dirección del array lista. /* Asignación */
primerplano = azul.
lista[5]=100;
*(p+5) //Otra forma de accerder a lista[5];  Los enumerados permiten definir variables que pueden tomar solo
unos cuantos valores.
 El identificador de un array (como lista) contiene la dirección del
primer elemento del y representa su dirección en memoria.  Las constantes de un enumerado son enteros, donde la primera
constante tiene asignado 0, la segunda 1, etc..
 El nombre de un array se puede considerar como un puntero
constante.  Son muy útiles para construir código más legible ( if(fondo==azul)).
N . Aliane DIAC- EP-UEM informática industrial Pag: 33 N . Aliane DIAC- EP-UEM informática industrial Pag: 34

Lenguajes de programación Lenguajes de programación

Las constantes simbólicas Las estructuras: definición y declaración de variables


struct cuenta {
#define falso 0 char nombre[30];
#define verdadero 1 int numero;
float saldo;
#define UNOS 0xffff
}cliente1, cliente2;
#define pi 3.1416F
#define MENSAJE "Hola“ //Inicialización de una estructura
struct cuenta cliente20 = {“Santiago”, 21001, 25.0};
 Las constantes simbólicas sirven para asociar un nombre a struct cuenta clientes[10]; // Array de estructura
constantes.
 Hace que el código sea legible: (perimetro=2*pi*radio.)  Un estructura se puede inicializar justo en el momento de su
 El compilador remplaza las constantes simbólicas por su valor en la declaración.
fase de pre-procesamiento.  Se pueden definir array de estructuras.
 Una estructura se puede asignar a otra (cliente2 = cliente1)

N . Aliane DIAC- EP-UEM informática industrial Pag: 35 N . Aliane DIAC- EP-UEM informática industrial Pag: 36

6
Lenguajes de programación Lenguajes de programación

Las estructuras, referencia a los campos de una estructura. Los tipos predefinidos (typedef )
struct cuenta cliente, clientes[20], *pc;
// Aplicación para las estructuras.
// El Operador punto . typedef { // Tipo predefinido
cliente.nombre = "Jose"; float r; // parte real
cliente.saldo = 950.0; float i; // parte imaginaria
}COMPLEX; // nombre del tipo
clientes[5].nombre = “Pepe”;
clientes[5].saldo = 20.0 ; COMPLEX z1={1.0, 1.0}; // Declaración de variables

// Operador flecha ->


pc = &cliente;
 typedef crea un alias para los tipos existentes, pero posibilita dar
pc->saldo = 200.0; un nombre a las estructuras como si fueran tipos nuevos.

 Las estructuras pueden tener como campo a otra estructura. En este


caso, se utiliza el operador (. o ->) las veces que hagan falta.
N . Aliane DIAC- EP-UEM informática industrial Pag: 37 N . Aliane DIAC- EP-UEM informática industrial Pag: 38

Lenguajes de programación Lenguajes de programación

Paso de estructuras a funciones. Paso de arrays a funciones


int main() /*prototipo */
{ void suma_v(float [], float [], float [], int nc);
COMPLEX z1 = {1, -1}, z2 = {2, 3}, z3;
/**** Suma de 2 vectores ****************/
void suma_v(float a[], float b[], float c[], int nc){
z3 = suma(z1, z2); int i;
printf(“z3 = %f + j%f \n”,z3.r, z3.i); for(i = 0; i < nc ; ++i)
} c[i] = a[i]+b[i];
}
COMPLEX suma(COMPLEX a, COMPLEX b){
COMPLEJO result; /******************
result.r = a.r + b.r; int nc=4; // dimensión de los vectores.
result.i = a.i + b.i; float v1[4] = {1,2,3,4}, v2[4] = {2,4,6,8}, v3[4] = {};

suma_v(v1, v2, v3,nc); //llamada a la función.


return(result);
}  El paso de arrays a una función siempre se hace por referencia
N . Aliane DIAC- EP-UEM informática industrial Pag: 39 N . Aliane DIAC- EP-UEM informática industrial Pag: 40

También podría gustarte