Title: Pascal, un lenguaje de programación
Other Placeholder: En este tema estudiamos aspectos comunes a muchos lenguajes de programación
Prácticamente todos los lenguajes que siguen el paradigma imperativo (= dar órdenes al ordenador)
Por estudiar un lenguaje concreto usaremos Pascal que, como dijimos, es un lenguaje apropiado para aprender
¿Cómo podemos explicar Pascal?
De manera informal (lo habitual al principio)
De manera formal (usando BNF, EBNF o diagramas sintácticos para describir la sintaxis del lenguaje, por ejemplo)
Forma básica de un programa en Pascal
Datos deentrada
Datos desalida
Algoritmo
program nombre-programa;
const
idCte1 = valor1;
…
idCteN = valorN;
var
lista-variables1 : tipo1;
…
lista-variablesM : tipoM;
begin
sentencia1;
…
sentenciaK-1;
sentenciaK
end.
Sección de
declaración
de datos
Sección de
código(programa principal)
Forma básica de un programa en Pascal
Ej: Programa que convierte un valor expresado en pulgadas, proporcionado por el usuario a través de teclado, en el equivalente expresado en centímetros y lo muestra por pantalla
Implementación del algoritmo en Pascal
program conversion;
const
centPorPulg = 2.54;
var
pulgadas, cent: real;
begin
writeln('¿Longitud?');
readln(pulgadas);
cent:= pulgadas * centPorPulg;
writeln('En cms:', cent)
end.
Datos de entrada
Pulgadas
Datos de salida
Centímetros
Algoritmo
Obtención del valor expresado en pulgadas
Conversión al valor equivalente
Visualización del valor equivalente
program conversion;
const
centPorPulg = 2.54 ;
var
pulgadas , cent : real ;
begin
writeln ( '¿Longitud?' );
readln ( pulgadas );
cent:= pulgadas * centPorPulg;
writeln ( 'En cms:' , cent )
end.
(Gp:) Palabrasreservadas
(Gp:) Identificadoresnormales
(Gp:) Identificadorespredefinidos
(Gp:) Identificadorespredefinidos
(Gp:) Literales
Uso del espacio “en blanco” y de los comentarios
Los elementos léxicos (que marcábamos con colores antes) pueden separarse por un número cualquiera de espacios en blanco, saltos de línea y tabuladores
El espacio dejado a la izquierda de cada línea (indentación) no tiene significado para la máquina
El objetivo de estos “arreglos en el formato” es simplemente hacer más legibles los programas para otros programadores
En cualquier parte del programa el programador puede escribir comentarios para explicar su código
Si son de una sola línea basta con comenzarlos por //
Si son varias líneas deben ir entre (* y *) necesariamente
// Conversor PulgCent, por Federico Peinado.(* Este programa convierte un número de pulgadas a su equivalente en centímetros. Ha sido escrito por Federico Peinado. *)
¡Los comentarios ayudan a documentar bien nuestro trabajo!
(********************************** Este programa convierte pulgadas a centímetros. Por Federico Peinado **********************************)program conversion;
const
centPorPulg = 2.54;
var
pulgadas, cent: real;
begin
writeln('¿Longitud?');
readln(pulgadas);
cent:= pulgadas * centPorPulg;
writeln('En cms:', cent)
end.
program conversion;
const centPorPulg = 2.54; var
pulgadas,cent:real; begin
writeln('¿Longitud?');readln(pulgadas);
cent:= pulgadas * centPorPulg;
writeln('En cms:', cent) end.
Mismo programa, pero… ¿qué formato es más cómodo de leer?
Datos de un programa
Todos los datos tienen:
Identificador
Nombre simbólico que se usa para representar el dato
Identifica de forma legible las celdas de memoria donde está guardado el dato
Tipo
El tipo de los valores que puede tener el dato
Ej: Números enteros, números reales, cadenas de texto…
Clasificación como Constante o Variable
Constante, si el valor del dato no cambia nunca en ningún momento de la ejecución del programa
Variable, si el valor del dato cambia o puede cambiar en algún momento de la ejecución del programa
Un identificador es un nombre para un dato concreto
Si el valor de ese dato no cambia nunca, el identificador es una constante
Si el valor de ese dato puede cambiar durante la ejecución del programa, el identificador será una variable
Los identificadores deben ser autoexplicativos
Ej: numero_alumnos está bastante claro
Ej: nx6 no hay quien lo entienda
Sintaxis en EBNF:
Identificador ::= Letra {[Subrayado] Letra | Dígito}
Letra ::= “a” | “b”| … | “z” | “A” | “B”| … | “Z”
Dígito ::= “0” | “1” | … | “9”
Subrayado ::= “_”
Identificadores en Pascal
Identificadores en Pascal
Resumen informal de la sintaxis de un identificador de Pascal:
No puede ser un número solo
Ha de empezar necesariamente por una letra
La ñ no es una letra válida, ni las vocales con tildes o con diéresis (se usa solamente el alfabeto inglés)
No puede acabar en subrayado (_), ni puede haber dos subrayados seguidos (__)
Y por supuesto… ¡no puede ser una palabra reservada!
Identificadores predefinidos en Pascal, por ejemplo program
La longitud de los identificadores en teoría no tiene límite
Pascal no distingue entre letras mayúsculas y minúsculas
NUMEntero, numEntero, numENTERO… ¡todos hacen referencia exactamente al mismo dato!
No puede haber identificadores con nombres repetidos dentro de un mismo bloque de programa, para evitar confusiones
Identificadores en Pascal
¿Los siguientes son identificadores válidos en Pascal?
pulgadas cent valido
2veces salu2 duda?
x x_ x_a
Datos cuyo valor no cambia a lo largo de la ejecución del programa
Tipos de constantes en Pascal
Literales: se usan “a pelo” en el programa, sin identificador
‘Longitud’ 2.54 ‘a’ true
Constantes con nombre: llevan un identificadorpi = 3.1416
La sentencia const de Pascal anuncia que se van a declarar e inicializar las constantes con nombre del programa
program conversion;
const
centPorPulg = 2.54;
…
Constantes
Sintaxis de la sección de declaración de constantes en Pascal
SeccionConstantes ::= [ “const” DefCte “;” { DefCte “;” }]
DefCte ::= Identificador “=” Valor
Identificador ::= No terminal que ya hemos descrito antes…
Valor ::= Ventero | Vreal | Vcaracter | Vbooleano | Cadena | [Signo] Identificador
Ventero ::= [Signo] Digito {Digito}
Signo ::= “+” | “-”
Vreal ::= Fnormal | Fcientifico
Fnormal ::= [Signo] Pentera “.” Pdecimal
Pentera ::= Digito {Digito}
Pdecimal ::= {Digito}
Fcientifico ::= Fnormal “E” Signo Pentera
Vbooleano ::= “true” | “false”
Vcaracter ::= “ ’ ” Car “ ’ ”
Car ::= “a” | “b”| … | “z” | “A” | “B”| … | “Z” | “ ” | “?” | …
Cadena ::= “ ’ ” {Car} “ ’ ”
¿Este es un ejemplo válido de declaración de constantes?
const
pi = 3.1416;
centPorPulg = 2.54;
iva = 0.16;
dolar = ‘$’;
cinco = 5;
max = 100;
min = -max;
mensaje = ‘Error’;
El tipo de una constante se decide de manera automática al inicializarse, según el tipo del dato que reciba
Por ejemplo cinco será de tipo entero e iva será de tipo real
Constantes
Variables
Datos cuyo valor cambia o puede cambiar a lo largo de la ejecución del programa
La sentencia var de Pascal anuncia que se van a declarar las variables del programa
program conversion;
const
centPorPulg = 2.54;
var
pulgadas, cent: real;
…
SeccionVariables ::= [ “var” DefVar “;” {DefVar “;”}]
DefVar ::= Identificador { “,” Identificador} “:” Tipo
Identificador ::= No terminal que ya hemos descrito antes…
Tipo ::= “integer” | “real” | “char” | “boolean” | DefinidoPorUsuario
Sintaxis de la sección de declaración de variables en Pascal
var
pulgadas, cent: real;
letra: char;
valido: boolean;
base: integer;
altura: integer;
(Gp:) Lo explicaremos en el Tema 5
program conversion;
const
centPorPulg = 2.54;
var
pulgadas, cent: real;
begin
…
end.
Situación de constantes y variables en memoria
La cadena 01110010 puede ser…
… un número entero (¿el primer bit representa el signo?)
… un número real (¿dónde estaría la coma y la parte decimal?)
… un carácter textual (¿en que tipo de codificación?)
… un valor booleano (¿sólo es significativo el último bit?)
¡Para programar hay que saber qué significan esos 0’s y 1’s!
Asignar un tipo a un dato es una manera de indicar:
Cuál es la interpretación correcta de las cadenas de 0’s y 1’s
Qué rango de posibles valores puede tomar el dato
Cuáles son las operaciones posibles sobre dicho dato
Los lenguajes de alto nivel, como Pascal, tienen una fuerte comprobación de tipos para evitar que el programador use los datos de manera incorrecta, sin tener en cuenta sus tipos
Ej: No te deja multiplicar un número entero por un carácter textual
Representación interna de los datos en memoria
Página siguiente |