Proceso de traducción y ejecución de un programa escrito en un lenguaje a alto nivel:
Usamos un editor y obtenemos el programa fuente, y el compilador es el que traduce el programa al lenguaje máquina. El compilador internamente ha sido diseñado para traducir.
El compilador obtiene el programa o el fichero objeto. El compilador tiene que buscar los errores.
Normalmente no sale un ejecutable, sino que necesita elementos, librerías, ...
Mediante un linkador juntamos el programa objeto y las librerías, y se forma un programa ejecutable.
Cuando se ejecuta el programa, el cargador lleva al programa a memoria para que éste pueda ser ejecutable.
Debbuger: Depura el programa ejecutándolo paso a paso, viendo la memoria paso a paso para encontrar el error.
Programa fuente (Editor)
Compilador
Error
Programa objeto Librerias
Linkador
Ejecutables
Para traducir puedo utilizar el compilador o un interprete, con el compilador cojo todo el programa al completo y el interprete lee cada instrucción y lo va ejecutando.
El interprete es más rápido, pero menos eficiente.
Todos los lenguajes tienen compiladores, pero no todos tienen interpretes.
LISP (Lenguaje de inteligencia artificial) : Sólo tiene interpretes.
4. DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS:
- Dato: Es un objeto o elemento que tratamos a lo largo de diversas operaciones.
Tienen 3 caracteristicas:
- Un nombre que los diferencia del resto.
- Un tipo que nos determina las operaciones que podemos hacer con ese dato.
- Un valor que puede variar o no a lo largo de la operación.
Existen diferentes tipos de datos.
- Caracteristicas de los tipos:
- Cada tipo se representa o almacena de forma diferente en la computadora.
Bit:1/0; Byte=8 bits.
- Un tipo agrupa a los valores que hacen las mismas operaciones.
- Si tiene definida una relación de orden es un tipo escalar.
- Cardinalidad de un tipo: Número de valores distintos que puede tomar un tipo.
Pueden ser finitos (caracteres), y si son infinitos el ordenador los toma como finitos porque esta limitado por el tamaño de los bytes en el que la cifra es almacenada.
- Los datos pueden ser:
- Simples: Un elemento.
- Compuestos: Varios elementos.
- Los tipos pueden ser:
- Estandar: Que vienen en el sistema por defecto.
- No estandar: Son los que crea el usuario.
- Los tipos simples más importantes son:
- Numéricos.
- Lógicos.
- Caracteres.
- Numéricos:
- Entero: Subconjunto finito del conjunto matemático de los numéros enteros. No tiene parte decimal. El rango de los valores depende del tamaño que se les da en memoria.
- Real: Subconjunto finito del conjunto matemático de los números reales. Llevan signo y parte decimal. Se almacenan en 4 Bytes (dependiendo de los modificadores). Si se utilizan números reales muy grandes, se puede usar notación científica que se divide en mantisa, base y exponente; tal que el valor se obtiene multiplicando la mantisa por la base elevada al exponente.
- Lógicos o booleanos:
- Aquel que sólo puede tomar uno de los dos valores, verdadero o falso (1/0).
- Carácter:
- Abarca al conjunto finito y ordenado de caracteres que reconoce la computadora (letras, digitos, caracteres especiales, ASCII).
Tipo de cadena o String: Conjunto de caracteres, que van a estar entre “”.
El propio lenguaje puede añadir más tipos, o se pueden añadir modificadores.
Entero : Int Long int
En algunos lenguajes se definen tipos especiales de fecha y hora, sobre todo en los más modernos.
5. CONSTANTES Y VARIABLES:
- Constantes: Tienen un valor fijo que se le da cuando se define la constante y que ya no puede ser modificado durante la ejecución.
- Variables: El valor puede cambiar durante la ejecución del algoritmo, pero nunca varia su nombre y su tipo.
Antes de usar una variable hay que definir la o declararla, al hacerlo hay que dar su nombre y su tipo. El nombre que le damos tiene que ser un nombre significativo, va a ser un conjunto de caracteres que dependiendo del lenguaje hay restricciones. Tiene que empezar por una letra, y el tamaño depende del lenguaje.
Identificador: Palabra que no es propia del lenguaje.
El valor de la variable si al declararla no se la inicia liza, en algunos lenguajes toma una por defecto. En cualquier caso el valor de la variable podemos darle uno inicial o podemos ir variando a lo largo de la ejecución.
Las constantes pueden llevar asociados un nombre o no, si no lo llevan, se llaman literales. Su valor hay que darlo al definir la constante y ya no puede cambiar a lo largo de la ejecución, y en cuanto al tipo, dependiendo de los lenguajes en algunos hay que ponerlo, y en otros no hace falta ponerlo porque toma el tipo del dato que se le asigna. Consta PI=3,1416.
Hay que inicial izar todas las variables.
< > Hay que poner algo obligatoria mente.
[ ] Puede llevar algo o no llevarlo.
La ventaja de usar constantes con nombre es que en cualquier lugar donde quiera que vaya la constante, basta con poner su nombre y luego el compilador lo sustituirá por su valor.
Las constantes sin nombres son de valor constante: 5, 6, `a', “hola”.
Cuando una cadena es de tipo carácter, se encierra entre `' `a'.
Relación entre variables y constantes en memoria:
Al detectar una variable o una constante con nombre, automáticamente se reserva en memoria espacio para guardar esa variable o constante. El espacio reservado depende del tipo de la variable.
En esa zona de memoria es en la que se guarda el valor asociado a la variable o constante y cuando el programa use esa variable, ira a esa zona de memoria a buscar su valor.
Expresiones lógicas: Operadores relacionales y lógicos.
Una expresión lógica es aquella que sólo puede devolver dos valores (Verdadero o Falso). Los valores que pueden aparecer en una expresión lógica son de 2 tipos: lógicos y relacionales.
La particularidad de las expresiones lógicas es que mientras en una expresión numérica por devolver un valor numérico los operando solo pueden ser números, en una expresión lógica los operando no tienen porque ser booleanos aunque se devuelva un valor booleano. Esto es lo que ocurre cuando en la expresión lógica utilizamos operadores relacionales con lo cual se obtienen valores lógicos o booleanos a partir de otros que no lo son.
En cambio cuando los operadores son lógicos los operando obligatoria mente también tienen que ser lógicos.
Operadores relacionales:
<
>
=
<> en C: !=
"
"
< Operando> operador < Operando>
5 > 3 Verdadero
¿Cómo se evalúa una expresión relacional?:
- Primero se evalúa el primer operando y se sustituye por su valor.
- Luego se evalúa el segundo operando y se sustituye por su valor.
- Finalmente se aplica el operador relacional y se devuelve el valor booleano correspondiente.
((3*2)+1-5^2) < (2-1)
-18 < 1 Verdadero.
El problema del tipo real:
Desde la informática, los números reales son finitos, ya que tenemos un máximo de cifras decimales. Cuando trabajamos con un =, matemáticamente da un valor exacto, pero informalmente no es exacto.
1/5 * 5 =1
1.0/5.0 *5.0 <>1.0
Soluciones:
- La que nos aporte el propio lenguaje de programación. Se considera un valor de error.
- Trabajar con números enteros siempre que sea posible.
- Utilizar las comparaciones <> en vez de " " si es posible.
- Si hay que preguntar por igual, cambiar la condición utilizando valores absolutos y un valor mínimo de error.
Si la diferencia < 0.00000001 y ABS (A-B)< min ; son iguales.
Operadores lógicos:
El problema es que a veces queremos preguntar o evaluar por más de una condición al mismo tiempo y para esto están los operadores lógicos.
Y and &&
O or !!
No not ~!
Y, O, son operadores binarios (necesitan 2 operando de tipo lógico).
Operando 1 Operador Operando 2
El No es uranio y se coloca primero el No, y después el operando.
El resultado es lógico y depende de:
Operando 1
|
Operando 2
|
AND
|
OR
|
V
|
V
|
V
|
V
|
V
|
F
|
F
|
V
|
F
|
V
|
F
|
V
|
F
|
F
|
F
|
F
|
El No niega :
NOT
|
1/0
|
V
|
F
|
F
|
V
|
Prioridades de los operadores:
- Lo más prioritario es el NOT
- Luego el Y y el O.
- <, > =,...
Tabla de prioridades:
^ NO
/ div mod y
+ - O
<, >, =, <>,...
No hay comentarios.:
Publicar un comentario