Tipos de datos en Pascal

Anuncio
Apunte del curso ALGORITMOS y PROGRAMACIÓN (FI-UBA, Prof. Ing. F. J. LAGE, J.
T. P. Ing. Z. CATALDI; A.T.P. Srta. A Pauluzzi, Sr. C Corradino, Sr. F Gómez
TIPOS DE DATOS
Los diferentes objetos de información con los que un programa Pascal trabaja se conocen colectivamente como datos. Todos las datos tienen un tipo asociado can ellos. Un dato puede ser un
simple carácter, tal como 's', un valor entero tal como 35 o un número real tal como 1415,92. Una
operación de suma no tiene sentido con caracteres, sólo con números. Por consiguiente, si el compilador detecta una operación de suma de dos caracteres, normalmente producirá un error. Incluso
entre tipos numéricos, la operación de suma se almacena de modo distinto. Esto se debe a que números enteros y reales se almacenan de modos diferentes. A menos que el programa conozca el tipo
de datos, si es un valor entero a real, no Puede ejecutar correctamente la operación de suma
La asignación de tipos a los datos tiene dos objetivos principales.
1. Detectar errores de operaciones en programas
2. Determinar cómo ejecutar las operaciones
Pascal se conoce como lenguaje "fuertemente tipeado" (strongly.typed) o de tipos fuertes. E sto significa que todos las datos utilizados deben tener sus tipos declarados explícitamente y el lenguaje limita la mezcla de tipos en las expresiones. Pascal detecta muchos errores de programación antes que el programa se ejecute. La ventaja de los lenguajes de tipos fuertes (ricos en tipos de datos)
es que se gasta menos esfuerzo en la depuración de programa, ya que el compilador detecta muchos de esos errores
El tipo de un dato determina la naturaleza del conjunto de valores que puede tomar una variable.
Otro concepto importante a tener en cuenta es la representación interna de los números, o al menos
el espacio de memoria ocupado por una variable de un tipo dado.
La unidad de medida de la capacidad de memoria, como ya hemos visto es el byte (octeto). Un
byte se compone de ocho cifras binarias (bits) que Pueden tomar cada una el valor 0 ó 1.
Ordinales
Integer
Boolean
Char
Enumerado
Subrango
No Ordinales
Reales
Tipos Simple
Datos Estáticos
Tipos Cadena
String
Array
Tipos de Datos
Registro
Tipos Estructurado
Conjunto
Archivo
Tipos procedimientos
Datos Dinámicos
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Procesos
Tipos Punteros
Página 1 de 16
Tipos Enteros
Tipo
byte
integer
longint
shortint
word
Rango
Formato
0 .. 255
-32768 .. 32767
-247483648 .. 24748367
-128 .. 127
0 .. 65535
1
2
4
1
2
Byte
Bytes
Bytes
Byte
Bytes
El tipo integer se almacena en memoria como 2 (dos) bytes, el bit de mayor peso de los dos bytes es el bit de signo. Se puede separar un entero en sus dos bytes utilizando las funciones internas
Hi y Lo
Hi devuelve el byte de mayor peso de los dos bytes de memoria
Lo devuelve el byte de menor peso
Números Reales
Tipo
real
single
double
extended
comp
Rango
2.9x 10-39 .. 1.7x103 8
1.5x 10-45 .. 3.4x103 8
5.0x 10-324 .. 1.7x10308
1.9x 10-4932 .. 1.1x104932
-(263 +1) .. 2 63 +1
Cifras
11-12
7-8
15-16
19-20
19-20
bytes
6
4
8
10
8
Tipos carácter (Char)
El tipo char es un tipo de datos que puede contener un solo carácter. Cada uno de estos caracteres puede ser expresado gracias al código ASCII ampliado.
Ejemplo
‘A’ ‘a’ ‘b’ ‘*’ ‘5’ ‘ ‘
Se le puede asignar a una constante un carácter por medio de su código
#65
equivale a
chr(65)
equivale A
#26 o ^Z
cierre del archivo
#27
tecla ESC
#13
tecla ENTER
Tipos lógicos (boolean)
El tipo lógico (boolean) es, al igual que el carácter, parte de ISO Pascal estándar. Los valores
de tipa lógico pueden tomar sólo das valores posibles: true (verdadero) y false (falso). Al igual que el
tipo char, el tipo boolean es un tipo ordinal, que significa que tiene un núméro fijo de posibles valores
que existen en un orden definido. Una variable lógica ocupa sólo un byte en memoria. Los valores
lógicas son de tipo ordinal, y sus relaciones son:
faÍse < true
Tipos de datos definidos por el usuario
Todos los tipos de datos estudiados hasta ahora son de tipo simple, predefinidos por Turbo y
listos para utilizar. Sin embargo, uno de los aspectos más potentes de Turbo Pascal es su capacidad
para crear estructuras de datos a partir de estos datos simples. Los datos estructurados aumentan la
legibilidad de los programas y simplifican su mantenimiento.
Los tipos de datos definidas por el usuario se clasifican en:
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 2 de 16
q
q
q
q
q
q
q
Escalares definidos por el usuario (enumemdo y subrango)
Registros
Arrays
Conjunto (set).
Archivo (file).
Puntero
Procedimiento
Estos tipos de datos se verán en sucesivas clases.
Tipo cadena (string)
Un tipo string (cadena) es una secuencia de caracteres de cero o más caracteres correspondientes al código ASCII, escrito en una línea sobre el programa y encerrada entre apóstrofos.
El tratamiento de cadenas es una característica muy potente de Turbo Pascal que no contiene
ISO Pascal estándar, aunque tiene mucha similitud con el tipo packed array.
Ejemplos
'Turbo'
Notas
'Estás de acuerdo'
#13#10
‘,’
Una cadena sin nada entre las apóstrofos se llama cadena nula o cadena vacía
La longitud de una cadena es el número de caracteres encerrados entre los apóstrofos.
CONSTANTES
Una constante es un valor que no puede cambiar durante la ejecución del programa, recibe un
valor en el momento de la compilación del programa y este valor no puede ser modificado.
Las constantes pueden ser
constantes literales
constantes con nombres o declaradas
constantes expresión (sólo en la versión 5.0)
constantes de tipos (tipeadas)
Las constantes deben ser declaradas antes de su utilización y pueden ser enteros o reales, caracteres o cadenas de caracteres, conjuntos o arrays, e inclusive de tipo enumerado
Constantes literales
Una constante literal es un valor de cualquier tipo que se utiliza como tal.
VolumenEsfera := 4/3 * Pi * Radio * Rádio * Rádio,
4 y 3 son constantes literales de valores 4 y 3.
Constantes con nombres
Son constantes que se identifican por un nombre y el valor asignado.
Formato
const
identificador = valor,
Ejemplos
const
Pi = 3.141592;
DosPi = 2 * Pi;
Direccion = $06;
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
{lee un valor real}
{ representa valor hexadecimal }
Página 3 de 16
caracter = 'B';
{ es un carácter }
cuenta = 625;
{ lee un entero }
Epsilon = 1E-4;
{ lee un real }
Esc = #27;
{ carácter de control }
CRLF = ^M^J; { secuencia CR/LF. retorno de carro/avance de lineal }
En Pascal estándar, la declaración de constantes se sitúa inmediatamente después de la cabecera Program. En Turbo Pascal no es obligatoria la situación anterior, pero si recomendable.
VARIABLES
Las variables son objetos cuyo valor puede cambiar durante la ejecución del programa. El cambio se produce mediante sentencia ejecutables.
Todas las variables de un programa Pascal deben ser declaradas antes de ser usadas
Declaraciones
var
variable1 : tipo1;
variable2 : tipo2;
.........................
.........................
variableN : tipoN;
Ejemplos
NumeroEmpleado : Integer;
Horas
: real;
Tasas
: real;
Edad
: Integer;
Apellidos
: string [30];
Letra1, Letra2, Letra3 : char;
Num1, Num2
: integer;
{ número de empleado }
{ horas trabajadas }
{ tasa horaria }
{ edad del empleado }
{ apellidos del empleado }
Notas
Es buena práctica de programación utilizar nombres de variables significativas
que sugieren lo que ellas representan, ya que esto hace al programa más legible y
fácil de comprender, también es buena práctica incluir breves comentarios que indiquen cómo se utiliza la variable. Un comentario es cualquier frase encerrada entre llaves { } o bien entre signos (*, *)
SENTENCIAS
Las sentencias describen las acciones algorítmicas que pueden ser ejecutadas En general las
sentencias se clasifican en, ejecutables (especifican operaciones de cálculos aritméticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legibilidad del
programa, pero no afectan en la ejecución del Programa). Las sentencias ejecutables aparecen en el
cuerpo del programa a continuación de la palabra reservada
Begin
LA SENTENCIA DE ASIGNACION
La sentencia de asignación se utiliza para asignar (almacenar) valores o variables. La asignación es una operación que sitúa un valor determinada en una posición de memoria. la operación de
asignación se demuestra en pseudocódigo con el símbolo '←', para denotar que el valor situado a su
derecha se almacena en la variable situada a la izquierda
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 4 de 16
Formato
Variable ← expresión
variable
identificador válido declarado anteriormente
expresión variable, constante o una expresión o fórmula a evaluar
En Pascal el operador '←-' se sustituye por el símbolo := , que se denomina operador de asignación
Variable := expresión
El valor de expresión se asigna a la variable.
Precaución
El tipo de expresión debe ser del mismo tipo que el de la variable.
Ejemplos
A :=16 ;
16 se asigna a la variable A
Inicial := 'LJ’;
se asigna LJ a la variable Inicial
Interruptor :=true;
se asigna el valor true. (verdadero) a Interruptor
N1 := N2;
el valor de la variable N1 se cambia por el valor de la variable N2
N1 := N1 + 5;
el valor de la variable N1 se incrementa en 5
Car := #70;
se asigna a la variable Car el carácter 70 del código ASCII, es decir ‘F’
Operaciones especiales de asignación
Contador Un contador es una variable que se incrementa, cuando se ejecuta, en una unidad o
en una cantidad constante.
Contador .= 25
Contador := Contador + 1;
x: = 5
x := x + 1;
N = 15
N :=N + 1;
Al ejecutar Las sentencias de asignación, los nuevos valores de Contador y N son 25+1=26 y
50+1 =51.
Acumulador Es una variable que se incrementa en una cantidad variable.
Suma := Suma + x;
x es una vanable
Si x vale 7 y Suma 40, el nuevo valor de Suma será 47
Las operaciones contador y acumulador son de gran utilidad en programación.
EXPRESIONES Y OPERACIONES ARITMETICAS
Las variables y constantes estudiadas anteriormente se pueden procesar utilizando operaciones y funciones adecuadas a sus tipos En este punto se examinarán las expresiones y operaciones
que se utilizan con datos numéricos.
Operadores aritméticos: +, -, *, /
Los operadores aritméticos (+,-, *) pueden ser utilizados con tipos enteros o reales. Si ambos
son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.
2+3 = 5
2+3.0 = 5.0
Operadores aritméticos div y mod
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 5 de 16
Solo se pueden utilizar con enteros, la salida es otro entero. Div devuelve el valor de la división entera y Mod da el resto de la división entera.
17 DIV 5 ⇒ 3
17 MOD 5 ⇒ 2
Reglas de expresiones (prioridad)
Se respeta las mismas prioridades del álgebra.
OPERACIONES ENTRADA/SALIDA
Los datos se pueden almacenar en memoria de tres formas diferentes: asociados con constantes, asignados a una variable con una sentencia de asignación o una sentencia de lectura. Ya se han
examinado las dos primeras. El tercer método, la sentencia de lectura, es cl más indicado si se desea manipular diferentes datos cada vez que se ejecuta cl problema. Además. la lectura de datos permite asignar valores desde dispositivos hasta archivos externos (por ejemplo, un teclado o una unidad
de disco) en memoria se denomina operación de entrada o lectura
A medida que se realizan cálculos en un programa, se necesitan visualizar los resultados Esta
operación se conoce como operación de salida o de escritura
En los algoritmos las instrucciones de entrada/salida escritas en pseudocódigo son:
leer (listas de variables entrada) leer (v. z, x)
escribir (listas de variables salida)
escribir (a, b, c)
En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de programa
especiales denominadas procedimientos de entrada/salida que forman parte del compilador Pascal y
sus nombres son identificadores estándar:
Procedimientos de entrada Read ReadLn procedimientos de salida Write WriteLn
La escritura de resultados (salida)
Los programas para ser útiles deben proporcionar información de salida (resultados) Esta salida toma información de la memoria y la sitúa (almacena) en: la pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para comunicaciones o impresoras, normalmente paralelos)
Procedimiento WriteLn
El propósito de WriteLn es escribir (visualizar) información en la pantalla
Formato
WriteLn (ítem, ítem..): 1
ítem el objeto que desea visualizar: un valor literal (entero, real, un carácter una cadena, o un valor
lógico—true o false—). una constante con nombre, una variable, o una llamada a función
Cuando se ejecuta el procedimiento WriteLn, se visualizan todos los elementos en el orden dado
y en la misma línea. Al terminar de visualizar toda la línea, el cursor avanza (salta) al comienzo de la
siguiente línea.
Procedimiento Write
Como se ha dicho, después de ejecutar el procedimiento WriteLn, el cursor avanza (salta) al
comienzo de la siguiente línea. Si se desea que el cursor quede en ;a misma línea se debe utilizar el
procedimiento Write.
Formatos de salida
Turbo Pascal permiten controlar en cierta medida las instrucciones de salida que presentan resultados. Es posible especificar el número de posiciones del campo de escritura. Para los números
reales es posible precisar el número de decimales deseado.
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 6 de 16
Se pueden utilizar especificadores de formato de campo para definir dicha anchura.
x := 265.7892
WriteLn(x :10 :4);
WriteLn(x :10 :2);
WriteLn(x :6 :4);
X := 14;
WriteLn(x :4);
X := ‘AB’
WriteLn(x :4);
265.7892
265.79
*********
14
AB
Lo anteriormente expresado es válido para el proceso WRITE
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 7 de 16
Impresión de resultados (salidas a impresora)
Las salidas a pantalla se obtienen mediante los procedimientos Write y WriteLn. Si se desea
enviar resultados a otro dispositivo, es preciso especificar el nombre del archivo como primer argumento de las instrucciones Write y WriteLn. Para poder realizar la operación de enviar salidas a la
impresora, en lugar de a la pantalla, se necesita la unidad Printer.
Printer define un archivo llamado lst y asocia este archivo al puerto de comunicaciones LPTI
(impresora) del DOS. Se pueden enviar datos a la impresora, incluyendo lst en las instrucciones Write y WriteLn.
Es preciso, sin embargo, definir previamente en la sección uses la unidad printer.
Ejemplo
uses
Printer
var
.........................
begin
.........................
Write (Lst, 'el .......................... )
WriteLn (Lst, 'pl............ )
.........................
end.
Este programa imprime en la impresora:
Regla
Siempre que desee escribir en impresora, deberá incluir en su programa la l ínea
uses printer
y luego añadir en cada sentencia Write/WriteLn la palabra lst
La entrada de datos (lectura)
Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. No se puede leer un boolean o un elemento de tipo enumerado.
Los datos estructurados, arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a diseñar procedimientos específicos.
Los procedimientos de lectura son Read y ReadLn.
Formato
Read (van, var2, ...);
ReadLn (van, var2, ...);
var igual que WRITE
La entrada de datos desde el teclado se hace un valor cada vez. Las instrucciones ReadLn y
Read esperan hasta que se pulsa la tecla INTRO (RETURN o ENTER) antes de asignar un valor a la
variable.
Ejemplo
ReadLn (Nombre);
ReadLn (Horas);
Read (Tasas)
El usuario debe introducir los datos de entrada en el orden en que aparecen las instrucciones read,
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 8 de 16
Diferencias entre Read y ReadLn
En Read, después de pulsar la tecla INTRO, el cursor permanece inmediatamente después del
último carácter introducido. En ReadLn, el cursor se envía al principio de la siguiente línea, tras pulsar
la tecla INTRO.
No es aconsejable utilizar más de un dato por instrucción.
OPERACIONES BASICAS DE UTILIDAD
En este punto se describen dos utilidades:
Clrscr
GotoXY
limpieza o borrado de la pantalla
movimiento del cursor
El borrado (limpieza) de la pantalla: Clrscr
Las órdenes o procedimientos que podrá utilizar a partir de ahora: Clrscr y GotoXY, aunque posteriormente se volverán a mencionar. Ambos procedimientos pertenecen a la unidad Crt.
La orden (procedimiento) Clrscr borra (limpia) la pantalla (ventana actual) y sitúa el cursor en la
esquina superior izquierda. Turbo Pascal considera las coordenadas de la esquina superior izquierda
:1,1.
Para poder utilizar Clrscr, deberá declarar en la cláusula uses la unidad Crt.
Regla
Es una buena costumbre utilizar en todos los programas la unidad Crt, mediante la
cláusula uses; ello permite el uso de Clrscr y GotoXY, entre otras rutinas de utilidad.
Movimiento del cursor
La orden (procedimiento) GotoXY mueve el cursor a la posición x, y, donde x es la columna
(contando de izquierda a derecha) e y es la fila (contando de arriba-abajo).
Formato
GotoXY (x, y)
La esquina superior izquierda es 1.1. GotoXY requiere el uso de la unidad Crt.
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 9 de 16
EL ESTILO DE PROGRAMACIÓN
El buen estilo de programación es, sin lugar a duda, una de las características más notables
que debe tener un programador. Un programa con buen estilo es más fácil de leer, de corregir -si
contiene un error- y de mantener. Aunque la experiencia proporciona el estilo, existen una serie de
reglas que se recomiendan seguir desde el principio del aprendizaje en programación.
Sangrado (indentación)
Aunque los programas escritos en Pascal no exigen reglas estrictas en su escritura, es práctica
habitual realizar sangrado en los bloques y unidades de programas fundamentales
Comentarios
La legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario
es un texto explicativo más o menos largo, situado en el programa e ignorado por el compilador. Los
comentarios no se consideran (son invisibles) en la fase de compilación y ejecución, pero de importancia primordial en las fases de análisis, puesta a punto y mantenimiento.
Los comentarios son una parte importante de la documentación de un programa, ya que ayudan
al programador y a otras personas a la comprensión del programa. No es raro encontrar programas
en los cuales los comentarios ocupan más sitio, incluso, que las propias instrucciones.
Formato
1 . { comentario }
2. (* comentario *)
Cualquiera de los dos formatos se pueden utilizar indistintamente. Los comentarios pueden
aparecer en una sola línea de programa, al final de una línea después de una sentencia, o embebido
en una sentencia. En general se debe incluir en las diferentes partes de un programa, pero con la
condición de que sean significativos. Se deben evitar comentarios superfluos o redundantes, como
A := B-C
(el valor de B-C se asigna a A)
cuyo significado es evidente.
Es conveniente situar comentarios en la cabeza que al menos especifiquen:
q . el nombre del programador,
q . la fecha de la versión actual,
q . una breve descripción de lo que hace el programador.
El siguiente programa ilustra modos de especificar comentarios.
program Prueba;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{programa escrito por : Juan Perez
}
{Fecha :
}
{Version :
}
{Nombre del archivo :
}
{Este programa permite listar direcciones postales}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
const
Es posible anidar comentarios con delimitadores de tipo diferentes, pero no es posible con delimitadores del mismo tipo. El programador puede tener libertad para los comentarios.
{
un comentario puede extenderse
en varias líneas o paginas de programas}
{comentarios anidados (* como este caso *)}
Líneas en blanco
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 10 de 16
Otro medio de hacer un programa más legible es dejar líneas en blanco entre partes importantes o que estén lógicamente separados. Es muy frecuente dejar líneas en blanco entre la cabecera y
la sección de declaraciones, entre sus diferentes partes, así como entre los procedimientos y funciones, entre sí y con el programa principal, etc.
Elección de nombres de identificadores significativos
Las variables, constantes e incluso nombres de subprogramas y programas deben ser significativos para orientar al usuario sobre lo que representan: x, As, JJ no son identificadores significativos.
Salario := Horas * SalarioHoras;
Nomina_Mayor >= 10000;
Nombre_Apellidos = 'Mortimer';
Los nombres es conveniente que comiencen con una letra mayúscula, y si son largos es preferible
utilizar palabras compuestas o con subrayado.
Evitar puntos y comas superfluos
Antes de las palabras end y until se puede suprimir el separador punto y coma. Los puntos y
comas espurios pueden afectar al mal funcionamiento de un programa.
Líneas de programa mayores de 80 caracteres
El editor Turbo permite escribir líneas de hasta 126 caracteres de longitud, aunque en la panta
lla sólo se ven 80 columnas a la vez. Utilizando las teclas HOME (Inicio), END (Fin) y de movimiento
de cursor se puede desplazar el texto a izquierda y derecha.
Alinear operaciones (o separadores) en líneas consecutivas
Cuando diferentes líneas consecutivas contienen el mismo operador (o separador), es buena
práctica alinear estos símbolos utilizando blancos si es necesario.
for j := 1 to 10 do (operador =)
begin
Prueba := Random;
Total := Total + Prueba;
Valor [j]:= Prueba;
WriteLn l'Estrella errante')
end;
Blancos no significativos
q Poner un espacio en cada lado de un operador
if A = B then
Encontrado := true;
q
representa un blaco
Incluir un espacio después de los signos de puntuación: coma, punto y coma, dos puntos.
Otras reglas de escritura
q Poner cada sentencia en una línea distinta.
q Las palabras reservadas program, const, var, procedure, function, uses, begin, end deben ir en
líneas distintas.
q Si una sentencia continúa en otra línea, se deben sangrar la(s) linea(s) siguientes.
q Insertar lineas en blanco antes de la sección const, var, uses, procedure, function y el begin del
programa principal; y en cualquier segmento o bloques de sentencias significativas.
q Utilizar espacios entre los elementos de una sentencia para hacerla más legible.
PUESTA A PUNTO DE PROGRAMAS
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 11 de 16
En esta sección se incluirán: Técnicas de resolución de problemas y de programación (diseño
de programas), errores típicos de programación y estilo de programación.
Técnicas de programación (diseño de programas)
1. Los programas no pueden considerarse correctos hasta que han sido validados utilizando un
rango amplio de datos de test.
2. Los programas deben ser legibles y comprensibles.
3. Utilizar comentarios significativos que describan el propósito de un programa o segmentos de
programas, así como elementos importantes de programas, variables, funciones, etc.
4. Etiquetar todas las salidas producidas por un programa
5. Los programas deben ser eficientes. Por ejemplo, cálculos innecesarios: Se deben evitar calcular dos veces cualquier variable.
6. Programas generales y flexibles. Deben ser relativamente fáciles de modificar para solucionar
un problema similar sin necesidad de cambiar mucho el programa. El uso de las constantes limita la flexibilidad.
7. Antes de utilizar variables, asegurarse de que son inicializadas por el programa.
8. En programación interactiva, incluya siempre una línea con un mensaje de aviso al usuario
cuando desee introducir datos.
9. Los programas deben hacer -en general- siempre "eco" de la entrada.
Antes de escribir un programa en Pascal se deben seguir los pasos:
q
q
Análisis del programa (entrada, salida, datos auxiliares y proceso).
Diseño del algoritmo (con preferencia pseudocódigo), siguiendo -esencialmente- el método
descendente.
Errores típicos de programación
1. Las constantes reales deben tener al menos un dígito antes y al menos un dígito después
del punto decimal.
2. Las constantes de cadena deben estar encerradas entre apóstrofos (simples comillas). Un
apóstrofo se representa con un par de apóstrofos 'Kant"s'.
3. Los paréntesis dentro de expresiones deben concordar. Tantos paréntesis a izquierda como
a derecha.
4. La división entera se representa por div y la real por /.
5. Las multiplicaciones deben ser indicadas por *.
6. Puntos y comas (ausencia, exceso, superfluos).
7. Debe haber un punto detrás del end final de cada programa.
8. Todos los identificadores deben ser declarados.
9. Todas las variables están inicialmente indefinidas (Turbo Pascal no sigue esta regla inicializa a cero o cadena vacia-, pero es conveniente la inicialización).
10. Un signo igual (=) se utiliza en declaraciones de constantes o como signo igual. El operador
:= se utiliza en sentencias de asignación. No confundir = con := (ojo, programadores de BASIC).
11. Los problemas que implican números de tipo real no pueden utilizar test/comparaciones para
comprobar exactitud de igualdad o desigualdad (= o < > ). Como los números están aproximados en la computadora, no tiene sentido la igualdad/desigualdad.
12. Es buena idea verificar errores tales como división por cero y raices cuadradas de números
negativos dentro de un programa.
Estilo de programación
q Un programa Turbo Pascal se prepara con el editor. Después de teclear el programa completo
se sale al menú principal y se compila el programa. Si hay errores, se vuelve al editor; en caso
contrario, se guarda y ejecuta.
q Los errores de un programa pueden ser: sintaxis, en tiempo de ejecución y lógicos.
La planificación de un programa comienza con el análisis del problema [especificaciones de entrada y
salida (E/S), el proceso necesario para producir la salida desde la entrada] y sigue con el algoritmo
(pseudocódigo). Especialmente en programas grandes, seguir el diseño descendente y refinamiento
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 12 de 16
sucesivo. A continuación debe realizars e la documentación externa, la escritura del programa con
toda la documentación interna (comentarios) necesaria.
Ejemplo:
Se ingresan dos números enteros, obtener su suma.
Análisis
¿Qué ingresa?
Dos números enteros
¿Qué sale?
Otro número entero
¿Qué vincula la entrada con la salida?
La operación suma
Pseudocódigo
Inicio
Leo A (entero)
Leo B (entero)
Obtengo C como suma de A y B
Imprimo C
Fin
Diagrama N
S
Inicio
Leo A
Leo B
C←A+B
Imprimo C
Fin
Código Pascal
program Sumas;
{* Este es el primer programa en PASCAL*}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{* programa escrito por : Fernando Javier LAGE
*}
{* Fecha : 7 de abril de 1998
*}
{* Version : 01
*}
{* Nombre del archivo : progra01
*}
{* Este programa permite sumar dos números enteros *}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
uses
crt,dos; {* declaraciones de librerias *}
const
Enter = #13; {* declaraciones de constantes *}
{* type *} {* en este programa no hay declaraciones de tipos *}
var
{* definici¢n de las variables *}
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 13 de 16
A, B, C : Integer;
begin {* Comienzo del programa *}
ClrScr;
{* Ingreso de datos *}
Write ('Ingrese el primer valor ');
ReadLn(A);
Write ('Ingrese el segundo valor ');
ReadLn(B);
{* Cálculo de los resultados *}
C := A + B;
{* Salida de la información *}
WriteLn ('El resultado es = ', C:6);
{* Esta estructura se verá en próximas clases *}
Repeat
Until Readkey = Enter
end. {* Fin del programa *}
Nota
En el ejemplo tenemos una típica estructura secuencial sin condiciones, ni ciclos repetitivos,
como se verán en el próximo ejemplo
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 14 de 16
Las estructuras secuenciales son aquellas donde todas las instrucciones se ejecutan una después de la otra.
En ellas no hay repetición ni ejecución de un grupo seleccionado.
Un problema típico de este tipo de estructura es el siguiente.
Ejemplo:
Un comerciante requiere un programa que realice las siguientes tareas: Se ingrese el costo
de un producto, a dicho costo le cargue un 30% y al valor así obtenido le incremente un 20% por IVA.
El programa deberá sacar por pantalla el costo del producto, el precio final, y el valor del impuesto.
Pseudocódigo
Inicio
Definir constantes
Leer el costo
Calcular el costo más el 30%
Calcular el valor del impuesto
Calcular el Precio
Imprimir Costo
Imprimir Impuesto
Imprimir Precio
Fin
Diagrama N-S
gan ← 30.0
iva ← 30.0
Leer el costo
Costo1 ← costo * (1+gan/100)
Impuesto ← costo1 * iva /100
Precio ← Costo1 + Impuesto
Imprimir Costo
Imprimir Impuesto
Imprimir Precio
program Primer_Ejemplo;
{* Este es el primer programa en PASCAL *}
uses
crt,dos; {* declaraciones de librerías *}
const
gan = 30.0;
iva = 20.0; {* declaraciones de las constantes *}
var
{* definición de las variables *}
costo : real;
costo1, impuesto, precio : real;
begin {* Comienzo del programa *}
clrscr;
{* Limpieza de pantalla *}
write ('Ingrese el costo: ');
{* Salida de mensaje *}
readln (costo);
{* Ingreso del dato *}
costo1 := costo * ( 1 + gan/100); {* Cálculo de la ganancia *}
impuesto := costo1 * (iva /100); {* Cálculo del impuesto *}
precio := costo1 + impuesto;
{* Cálculo del precio final *}
writeln ('Costo : ', costo);
{* Salida de mensaje y variable *}
writeln ('Impuesto : ', impuesto); {* Idem anterior *}
writeln ('Precio : ', precio); {* Idem anterior *}
end. {* Fin del programa *}
program Primer_Modulos;
{* Este es el primer programa en PASCAL, con módulos *}
uses
crt,dos; {* declaraciones de librerias *}
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 15 de 16
const
gan = 30.0;
iva = 20.0; {* declaraciones de las constantes *}
var
{* definición de las variables *}
costo : real;
costo1, impuesto, precio : real;
procedure limpieza;
begin
{* Comienzo del procedimiento limpieza *}
clrscr; {* Limpieza de pantalla *}
end;
{* Fin del procedimiento limpieza *}
procedure ingreso;
begin
{* Comienzo del procedimiento de ingreso de datos *}
write ('Ingrese el costo: '); {* Salida de mensaje *}
readln (costo);
{* Ingreso del dato *}
end;
{* Fin del procedimiento ingreso *}
procedure calculos;
begin
{* Comienzo del procedimiento de cálculo de valores *}
costo1 := costo * ( 1 + gan/100); {* Cálculo de la ganancia *}
impuesto := costo1 * (iva /100); {* Cálculo del impuesto *}
precio := costo1 + impuesto;
{* Cálculo del precio final *}
end;
{* Fin del procedimiento calculos *}
procedure salidas;
begin
{* Comienzo del procedimiento de egreso de valores *}
writeln ('Costo : ', costo);
{* Salida de mensaje y variable *}
writeln ('Impuesto : ', impuesto); {* Idem anterior *}
writeln ('Precio : ', precio); {* Idem anterior *}
end;
{* Fin del procedimiento salidas*}
begin {* Comienzo del programa *}
limpieza; {* llamado a cada uno de los módulos (procedimientos) *}
ingreso;
calculos;
salidas;
end. {* Fin del programa *}
Prof. : Ing. Fernando Javier LAGE
J.T.P. : Ing. Zulma CATALDI
Página 16 de 16
Descargar