25
Ingeniería en Sistemas de Información Algoritmos y estructuras de datos Codificación en Pascal v1.2

Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Embed Size (px)

Citation preview

Page 1: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Ingeniería en Sistemas de Información Algoritmos y estructuras de datos

Codificación en Pascal v1.2

Page 2: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 2 de 25

Índice Índice ....................................................................................................................................................... 2

Estructura de un programa Pascal .......................................................................................................... 3

Program ............................................................................................................................................... 3

Uses ..................................................................................................................................................... 4

Const .................................................................................................................................................... 4

Type ..................................................................................................................................................... 4

Var ....................................................................................................................................................... 4

Variables Numéricas de Tipo Entero ............................................................................................... 5

Variables Numéricas de Tipo Real .................................................................................................. 5

Variables de Tipo Lógico .................................................................................................................. 5

Variables de Tipo Carácter .............................................................................................................. 6

Declaración de Variables ................................................................................................................. 6

Procedimientos y funciones ................................................................................................................. 6

Estructuras del Cuerpo del Programa ..................................................................................................... 7

Asignación ........................................................................................................................................... 7

Lectura (READ / READLN) .................................................................................................................. 8

Visualización / impresión / grabación (WRITE / WRITELN) ................................................................ 8

Expresiones ....................................................................................................................................... 10

Expresiones Aritméticas ................................................................................................................. 10

Expresiones Lógicas ...................................................................................................................... 11

Operadores booleanos ................................................................................................................... 13

Decisión (IF THEN ELSE) ................................................................................................................. 14

Caso 1 ............................................................................................................................................ 14

Caso 2 ............................................................................................................................................ 14

Caso 3 ............................................................................................................................................ 14

Caso 4 ............................................................................................................................................ 15

Caso 5 ............................................................................................................................................ 16

Selección múltiple (CASE OF) ........................................................................................................... 16

Estructura repetitiva exacta (FOR DO): ............................................................................................. 18

Hacer mientras (WHILE DO) ............................................................................................................. 18

Repetir hasta (REPEAT UNTIL) ........................................................................................................ 19

Recomendaciones para una adecuada codificación ......................................................................... 20

Instrucciones para el borrado y ubicación del cursor en la Pantalla ................................................. 21

Posicionamiento del cursor (GOTOXY) ..................................................................................... 21

Limpiar / borrar la pantalla (CLRSCR) ....................................................................................... 21

Ejemplo de un Algoritmo codificado en Pascal ..................................................................................... 21

Referencias ........................................................................................................................................... 25

Page 3: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 3 de 25

Estructura de un programa Pascal Pascal plantea la codificación de acuerdo a la siguiente estructura:

PROGRAM Identificador_NN;

USES

CONST

TYPE

VAR

PROCEDURE Identificador_NN (parámetros);

…………

PROCEDURE Identificador_NN (parámetros);

…………

FUNCTION Identificador_NN (parámetros): TipoIdentif icador_NN;

……………

FUNCTION Identificador_NN (parámetros): TipoIdentif icador_NN;

…………

BEGIN

………

END.

Program A continuación de la palabra PROGRAM, se indica el nombre del programa.

El nombre de un programa es un identificador con las mismas características que los que utilizaremos para definir nombres de constantes, tipos, variables, procedimientos, funciones, unidades, programas y campos de registros.

Para definir un identificador hay que tener en cuenta las siguientes características:

1. Es una secuencia de 63 caracteres como máximo.

2. El primer carácter debe ser una letra (A..Z, a..z) o un carácter de subrayado ( _ ).

3. A partir del segundo carácter se pueden utilizar letras, números, y el carácter de subrayado ( _ ).

4. No están permitidas las letras acentuadas (á, é, í, ó, ú), con diéresis (ü), ni las siguientes (ñ, Ñ).

5. Pascal no diferencia entre letras mayúsculas y minúsculas.

6. Es recomendable definir identificadores que den una idea de lo que representan. En el caso del identificador del programa, si por ejemplo se tratara de un algoritmo que realiza

Page 4: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 4 de 25

la inscripción de alumnos a la facultad, podría denominarse ‘inscribe’. Una buena elección de los identificadores favorece la lectura y comprensión de un programa.

7. No se pueden utilizar como nombres de identificadores palabras reservadas del Pascal.

Uses En esta sección se indican las bibliotecas (unidades) que utilizará el programa.

Pascal posee una lista de procedimientos y funciones estándar, por lo que si se desean utilizar en un programa funciones adicionales, se deberá indicar en la sección USES el nombre de la/s bibliotecas que las contienen.

Ejemplo: El comando para borrar la pantalla: CLRSCR no es una función estándar, está contenida en la biblioteca CRT, por lo que si se desea utilizar dicho comando, será necesario indicar el uso de esta biblioteca, es decir:

USES CRT;

Const En esta sección se declaran las constantes del programa. Son similares a las variables, pero a diferencia de estas mantienen el valor que se les asigna en el momento de su declaración, durante toda la ejecución del programa.

Ejemplo: Supongamos un programa, en el que se procesan Notas de alumnos de un establecimiento, y sobre la base de estas se realizan distintas estadísticas con relación a la cantidad de alumnos que aprobaron o desaprobaron materias. Existirá un valor que permanecerá constante durante toda la ejecución del programa, y es la Nota mínima con la que se aprueba una materia. Si declaramos una constante con este valor y la utilizamos a lo largo del programa en todas las sentencias donde se desee determinar si un alumno aprobó o no una materia, en el caso de que la misma cambiara, bastaría simplemente con reemplazar el valor anterior por el nuevo en un sólo lugar del programa, es decir en la declaración:

CONST

NotaMin := 4;

El Pascal predefine automáticamente algunas constantes como (PI 3.1415...).

Las constantes pueden almacenar distintos tipos de datos (enteros, reales, carácter, etc.), y sólo podrán ser utilizadas en expresiones que permitan su uso.

Type Si bien Pascal tiene sus tipos de variables estándar (INTEGER, REAL, STRING, etc.), en esta sección podemos declarar nuestros propios tipos, para utilizarlos en la definición de variables, como así también de estructuras de datos más complejas (registros, arreglos, etc.).

Más adelante volveremos a esta sección para detallar su uso.

Var En esta sección se declaran la totalidad de las variables estáticas que va a utilizar el programa a codificar.

Page 5: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 5 de 25

Los tipos predefinidos que provee el Pascal para la declaración de variables son los siguientes:

Variables Numéricas de Tipo Entero

Tipo de Variable

Rango de Valores Espacio en

Memoria

Formato

BYTE 0..255 1 byte 8 bits sin signo

SHORTINT -128..127 1 byte 8 bits con signo

WORD 0..65535 2 bytes 16 bits sin signo

INTEGER -32768..32767 2 bytes 16 bits con signo

LONGINT -2147483648..2147483647 4 bytes 32 bits con signo

Para clarificar el rango de valores de cada uno de los tipos de variables tomemos como ejemplo el tipo INTEGER:

16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01

Las variables de tipo INTEGER utilizan dos bytes, lo que equivale a 16 bits.

Como el tipo INTEGER expresa números con signo, el bit 16 se utiliza para indicar el mismo (0 positivos, 1 negativos), quedando para representar los números que se almacenan en este tipo de variables 15 bits. Es decir, se pueden expresar valores del orden de 215 – 1 = 32767 que llega a 32768 para los negativos, por una forma particular en que se almacenan los negativos.

Variables Numéricas de Tipo Real

A diferencia de las variables enteras se almacenan en memoria como mantisa y exponente (ambos con signo).

Tipo de Variable

Rango de Valores Dígitos significativos

Espacio en

Memoria

SINGLE 1.5e-45..3.4e38 7 / 8 dígitos 4 bytes

REAL 2.9e-39..1.7e38 11 / 12 dígitos 6 bytes

DOUBLE 5.0e-324..1.7e308 15 / 16 dígitos 8 bytes

EXTENDED 3.4e-4932..1.1e4932 19 / 20 dígitos 10 bytes

COMP -9.2e18..9.2e18 19 / 20 dígitos

(sólo enteros)

8 bytes

Se almacenan en memoria en forma semejante a la descripta para el tipo INTEGER, pero en este caso algunos bits son utilizados para la mantisa y otros para el exponente.

Variables de Tipo Lógico

Boolean : Toman valores booleanos (verdadero/falso), expresados como TRUE y FALSE y ocupan 1 byte de memoria.

Page 6: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 6 de 25

Variables de Tipo Carácter

Tipo de Variable

Cantidad de Caracteres Espacio en Memoria

STRING 255 caracteres 256 bytes

STRING[X] X caracteres X + 1 bytes

CHAR 1 carácter 1 byte

Los caracteres que se deseen almacenar en este tipo de variables, deben ser encerrados entre apóstrofes. Ejemplo:

A:= ‘Ejemplo’

Declaración de Variables

La declaración de una variable define el tipo de dato que esta va a almacenar. El Pascal no asigna un valor inicial como ocurre con otros lenguajes.

VAR

a: STRING[20]; Declara la variable a como STRING de 20 caracteres.

cont1, cont2: INTEGER; Declara las variables cont 1 y cont2 de tipo INTEGER.

tot1, tot2: REAL; Declara a las variables tot1 y tot2 de tipo REAL.

Procedimientos y funciones

PROCEDURE Identificador (Parámetros);

BEGIN

Cuerpo del Procedimiento

END;

FUNCTION Identificador (Parámetros): TipoIdentifica dor;

BEGIN

Cuerpo de la Función

END;

.................

Tanto los procedimientos como las funciones que utiliza un programa se indican a continuación de la sección VAR. Para comenzar sólo nos referiremos a los procedimientos y/o funciones sin parámetros ni variables locales, conceptos que detallaremos más adelante.

Estos procedimientos y/o funciones al igual que el programa tienen un cuerpo dónde se detallan las instrucciones que deben ejecutarse una a continuación de otra.

Page 7: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 7 de 25

PROGRAM identificador;

Declaraciones, Procedimientos y Funciones

BEGIN

Cuerpo del Programa

END.

Es importante observar que el END del PROGRAM, es seguido por un punto ‘.’ y no por ‘; ‘ como ocurre en los procedimientos, funciones y demás estructuras de Pascal a las que nos referiremos más adelante.

Estructuras del Cuerpo del Programa

Asignación Asigna a una variable, el resultado de una expresión. La expresión debe determinar un tipo de resultado del mismo del que ha sido definida la variable, o aceptable por la misma.

A:= B - 1;

A:= 5;

A:= C3 + R;

A:= ABS(-5);

Si A es una variable del tipo entero, las expresiones deben dar un resultado entero.

Si A es una variable del tipo real, las expresiones pueden dar un resultado entero o real.

B: = ‘Ejemplo’;

B debe ser una variable del tipo STRING[7] como mínimo.

C:= M < N;

D:= TRUE;

Las variables C y D deben ser de tipo BOOLEAN.

Como se puede observar todas las sentencias finalizan con un ´;´ .

El ´;´ es el símbolo que indica la finalización de una instrucción y es obligatoria su utilización cuando a continuación comienza otra, siendo opcional cuando así no fuera, excepto que a continuación hubiera un ELSE en cuyo caso está prohibido.

Variable ← Expresión

Page 8: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 8 de 25

Lectura (READ / READLN) Permite cargar información en variables, ingresada por teclado, o leída de un archivo.

Datos ingresados por teclado

Variable_1, Variable_2, ..., Variable_N

Datos leídos de un archivo

Registro

Archivo

Se recomienda realizar la lectura desde teclado mediante READLN pues en algunos casos la sentencia READ tiene un comportamiento no deseable, debido a que su forma de operar es compleja para el uso que se le da en nuestra asignatura.

READ(Variable_1);

......

READ(Variable_N); o

READLN(Variable_1, Variable_2, … , Variable_N)

La lectura desde un archivo puede realizarse indistintamente con las sentencias READ o READLN.

READ(Archivo, Registro);

El concepto de registro, necesario para la lectura de archivos, será explicado más adelante en el desarrollo de la sección TYPE.

Ejemplos:

READLN(A);

READLN(A, B, C);

Visualización / impresión / grabación (WRITE / WRIT ELN) Permite visualizar datos por monitor, imprimir datos por impresora, o grabar información en archivos.

1) Visualización de datos (por monitor)

Variables, 'XXXXXX', ExpresionAritmetica

WRITELN(A, B, C, ‘xxxxxxx’, F * 325);

WRITE(A, B, C, ‘xxxxxxx’, F * 325);

Page 9: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 9 de 25

2) Impresión de datos (por impresora)

LST, Variables, 'XXXXX', Expresión Aritmética

WRITELN(LST, A, B, C, ‘xxxxxxx’, F * 325);

WRITE(LST, A, B, C, ‘xxxxxxx’, F * 325);

3) Grabación de datos en un archivo

ArchivoRegistro

WRITE(Archivo, Registro);

Para poder indicar salida por impresora, es necesario incluir la biblioteca PRINTER en la sección USES, es decir: USES PRINTER;

Ejemplos:

WRITELN(‘El resultado es: ‘, total:3, ‘%‘);

WRITELN(‘El Cociente entre A y B es ‘, A / B:6:2);

WRITELN(2500);

WRITELN; Produce un salto de renglón

Formato de impresión:

Se pueden utilizar a continuación de cada ítem (constante, variable de caracteres, o expresión numérica) en una lista de salida correspondiente a una impresión o visualización, colocando dos puntos ‘:’ y a continuación un valor entero. El valor indica la cantidad total de espacio asignado al ítem, el cual se alineará a la derecha del mismo. Si el ítem es numérico y tiene un valor real, podrá repetirse a continuación dos puntos ‘:’ y un valor entero, que asignará en este caso espacio para los dígitos decimales. Es importante Notar que si no alcanzara el espacio los decimales se verán truncados, no así la parte entera.

En caso de imprimirse valores reales, si no se utiliza formato de impresión, se producirá una salida en Notación exponencial.

Ejemplo 1:

WRITELN(1350.4:10:2);

resultará

1350.40 (7 enteros, 2 decimales)

Ejemplo 2:

Page 10: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 10 de 25

A:= 1670; WRITELN(A:8:2);

resultará

1670.00 (5 enteros, 2 decimales)

Expresiones Expresiones Aritméticas

Están constituidas por variables y/o constantes relacionadas entre sí por los siguientes operadores aritméticos.

Operador Descripción Ejemplo Observación Prioridad

* Multiplicación A * B Si los dos operandos son enteros el resultado es entero, en caso contrario real (1).

1

/ División A / B El resultado es real.

DIV Cociente de una división entera

A DIV B Los dos operandos deben ser enteros. 9 DIV 2, resulta 4.

MOD Resto de una división entera

A MOD B Los dos operandos deben ser enteros. 9 MOD 2, resulta 1.

+ Suma A + B (1) 2

- Resta A – B (1)

Cuando el símbolo ‘+’ se aplica a variables de tipo carácter, recibe el nombre de concatenación.

Ejemplo: X:= ‘A’ + ‘B’, entonces X = ‘AB’

La evaluación de las expresiones se realiza efectuando primero las operaciones de mayor prioridad (1), continuando con las de menor (2). En el caso de producirse igualdad de prioridades, se procede de izquierda a derecha. Se pueden utilizar juegos de paréntesis ( ), para forzar prioridades pues tienen la máxima.

Ejemplo:

A * (B - C)

Los resultados parciales que se obtienen durante la evaluación dependen de los operandos participantes de la misma, siendo igual al del operando que tiene un tipo que posee mayor precisión:

• Si ambos son BYTE, el resultado es BYTE, excepto que el uso del operador de REAL.

• Si uno es BYTE y el otro INTEGER, el resultado es INTEGER, excepto que el uso del operador de REAL.

• Si uno es entero y el otro REAL, el resultado es REAL.

El Pascal dispone además, de un conjunto de funciones estándar que permiten realizar operaciones de gran utilidad. Son referenciadas mediante un identificador seguido entre paréntesis de un argumento, que es una expresión numérica, sobre la cual una vez evaluada actúa la función. El resultado de la evaluación del argumento debe ser de un tipo admitido por la función. Las funciones trigonométricas trabajan con ángulos expresados en radianes.

Page 11: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 11 de 25

Función Descripción Tipo del argumento

Tipo del resultado

Ejemplos

ABS(x) Valor absoluto Entero o Real Igual al del argumento

ABS(-5) → 5

ABS(-7.3) → 7.3

ARCTAN(x) Arco tangente Real Real ARCTAN(1) → PI / 4

ARCTAN(-1) → -PI / 4

COS(x) Coseno del ángulo Real Real COS(PI) → -1

EXP(x) Exponencial: ex Real Real EXP(1) → 2.71……

FRAC(x) Parte decimal Real Real FRAC(2.54) → 0.54

INT(x) Parte entera Real Real INT(2.54) → 2.0

LN(x) Logaritmo natural: ln x Real > 0 Real LN(2.71….) → 1

LN(EXP(1)) → 1

ROUND(x) Entero más próximo Real LONGINT ROUND(1.5) → 2

ROUND(-1.2) → -1

ROUND(-1.6) → -2

SIN(x) Seno del ángulo Real Real SIN(PI) → 0

SQR(x) Cuadrado: x2 Entero o Real Igual al del argumento

SQR(5) → 25

SQR(3.0) → 9.0

SQRT(x) Raíz cuadrada Real ≥ 0 Real SQRT(25.0) → 5.0

TRUNC(x) Parte entera Real LONGINT TRUNC(2.54) → 2

Expresiones Lógicas

Estas expresiones se utilizan en la comparación de datos y en el cumplimiento o no de determinadas condiciones o situaciones.

Se pueden comparar datos del mismo tipo (numéricos, carácter, lógicos).

Operadores relacionales:

Operador Descripción Ejemplo Observación

= Igual A = B Todos los operadores tienen la misma prioridad y esta es menor que la de los numéricos. Si se desea forzar su prioridad, deberán utilizarse juegos de paréntesis, tal como se indicara en la evaluación de las expresiones numéricas.

<> Distinto A <> B

> Mayor A > B

< Menor A < B

>= Mayor o igual A >= B

<= Menor o igual A <= B

• Toda comparación devuelve un valor lógico TRUE o FALSE (Verdadero o Falso, se cumple o no se cumple).

• Si se comparan datos de tipo lógico, tener presente que FALSE < TRUE.

• Si se comparan datos de tipo carácter, se comienza con el primer carácter de cada dato, de ser iguales, el segundo, luego el tercero, y así sucesivamente, hasta determinar el cumplimiento o no de la condición testeada. Para este tipo de datos, Pascal determina que un

Page 12: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 12 de 25

carácter es menor o mayor a otro basándose en sus valores ASCII, los cuales se detallan en la siguiente tabla, universalmente reconocida.

0 32 64 @ 96 ` 128 Ç 160 á 192 224 α

1 33 ! 65 A 97 a 129 ü 161 í 193 225 ß

2 34 “ 66 B 98 b 130 é 162 ó 194 226 Γ

3 ♥ 35 # 67 C 99 c 131 â 163 ú 195 227 π

4 ♦ 36 $ 68 D 100 d 132 ä 164 ñ 196 228 Σ

5 ♣ 37 % 69 E 101 e 133 à 165 Ñ 197 229 σ

6 ♠ 38 & 70 F 102 f 134 å 166 ª 198 230 µ

7 39 ‘ 71 G 103 g 135 ç 167 º 199 231 τ

8 40 ( 72 H 104 h 136 ê 168 ¿ 200 232 Φ

9 41 ) 73 I 105 i 137 ë 169 _ 201 233 Θ

10 42 * 74 J 106 j 138 è 170 ¬ 202 234 Ω

11 43 + 75 K 107 k 139 ï 171 ½ 203 235 δ

12 44 , 76 L 108 l 140 î 172 ¼ 204 236 ∞

13 45 - 77 M 109 m 141 ì 173 ¡ 205 237 φ

14 46 . 78 N 110 n 142 Ä 174 « 206 238 ε

15 47 / 79 O 111 o 143 Å 175 » 207 239 ∩

16 48 0 80 P 112 p 144 É 176 208 240 ≡

17 49 1 81 Q 113 q 145 æ 177 209 241 ±

18 50 2 82 R 114 r 146 Æ 178 210 242 ≥

19 ‼ 51 3 83 S 115 s 147 ô 179 211 243 ≤

20 ¶ 52 4 84 T 116 t 148 ö 180 212 244 ⌠

21 § 53 5 85 U 117 u 149 ò 181 213 245 ⌡

22 54 6 86 V 118 v 150 û 182 214 246 ÷

23 55 7 87 W 119 w 151 ù 183 215 247 ≈

24 ↑ 56 8 88 X 120 x 152 ÿ 184 216 248 °

25 ↓ 57 9 89 Y 121 y 153 Ö 185 217 249 ·

26 → 58 : 90 Z 122 z 154 Ü 186 218 250 ·

27 ← 59 ; 91 [ 123 155 ¢ 187 219 251 √

28 ∟ 60 < 92 \ 124 | 156 £ 188 220 252 ⁿ

29 ↔ 61 = 93 ] 125 157 ¥ 189 221 253 ²

30 62 > 94 ^ 126 ~ 158 P 190 222 254

31 63 ? 95 _ 127 159 ƒ 191 223 255

Los 256 valores (contando el cero) son los que pueden expresarse con un byte, dado que el byte está formado por 8 bits, resulta 28 = 256 valores posibles.

Si observamos esta tabla detenidamente podemos sacar algunas conclusiones:

• Los códigos del 0 al 31, no pueden ser representados gráficamente, indican movimientos de cursor, pitidos (7), retorno del cursor al principio del renglón, etc.

• En orden numérico creciente, los caracteres que usualmente se utilizan, están en primer lugar el espacio en blanco, luego los dígitos, las letras mayúsculas y por último las letras minúsculas.

• Las letras acentuadas, la ñ y Ñ dificultan un ordenamiento alfabético, pues tienen un valor ASCII que no las ubicaría en la posición correcta. Ejemplo: Si ordenamos en forma ascendente, la palabra ‘pera’ resultaría antes que ‘ñato’.

Page 13: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 13 de 25

• Utilizando adecuadamente los valores comprendidos entre el 179 y el 218, se puede mejorar notoriamente el diseño de las pantallas:

• Para la impresión mediante una impresora de matriz de puntos son importantes los valores ASCII 10(Mueve el cabezal al principio del renglón siguiente), 12 (Expulsa la hoja), 13 (Mueve el cabezal al principio del renglón actual) y 32 (Espacio en blanco).

Operadores booleanos

Sólo actúan con operandos booleanos.

Si A, B, C y D son variables booleanas y contienen:

A TRUE B TRUE C FALSE D FALSE

Operador Descripción Ejemplo Observaciones Prioridades

NOT Negación

NOT A → FALSE

NOT C → TRUE Opera con un único operando y da como resultado la inversa de su valor.

1

AND Conjunción A AND B → TRUE

B AND C → FALSE

Opera con dos operandos y da como resultado TRUE, sólo si ambos contienen TRUE.

2

OR Adición A OR B → TRUE

A OR C → TRUE

B OR D → TRUE

C OR D → FALSE

Opera con dos operandos y da como resultado TRUE, si por lo menos uno de ellos contiene TRUE.

3

En las expresiones lógicas, se puede utilizar paréntesis ( ), para priorizar operaciones.

Ejemplo: 1) (A > B) AND (A > C) OR (B = C)

2) NOT (A > B) (equivalente a A <= B)

En el siguiente cuadro se unifican las prioridades de todos los operadores:

Operadores Prioridad

NOT 1

* , / , DIV , MOD , AND 2

+ , - , OR 3

< , > , = , <= , >= , <> 4

Page 14: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 14 de 25

Decisión (IF THEN ELSE) Permite al programa realizar 2 acciones diferentes basándose en el resultado de una condición representada por una Expresión Lógica (TRUE/FALSE).

Caso 1

IF Condición

THEN

Sentencia_1

ELSE

Sentencia_2;

Si resulta verdadera la condición se ejecuta la Sentencia_1, en caso contrario la Sentencia_2. Analizando la codificación podemos decir que Pascal determina que la sentencia IF THEN ELSE ha terminado cuando encuentra el ‘;’.

Caso 2

IF Condición

THEN

Sentencia_1

Como se observa en el Caso 2, no es obligatorio que la sentencia IF THEN ELSE tenga codificada la parte ELSE si no se desea ejecutar alguna sentencia en caso de no cumplirse la condición. Analizando el código podemos observar que el compilador al encontrar un ‘;’ a continuación de la Sentencia 1 determina que ha finalizado la sentencia IF THEN ELSE

Caso 3 IF Condición

THEN

BEGIN

Sentencia_1;

Sentencia_2

END

ELSE

Sentencia_3;

Condición

Sentencia_1 Sentencia_2

Condición

Sentencia_1

Condición

Sentencia_1Sentencia_2 Sentencia_3

Page 15: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 15 de 25

En este caso como debemos ejecutar dos sentencias en caso de que se cumpla la condición, resulta necesario transformar a estas en una sentencia compuesta encerrándolas entre un BEGIN y un END y no terminar con un ‘;’ por estar este prohibido precediendo a un ELSE.

Caso 4

IF Condición_1

THEN

BEGIN Sentencia compuesta de IF Cond ición_2 y Sentencia_4

IF Condición_2

THEN

BEGIN Sentencia compuesta de Sentencia _1 y Sentencia_2

Sentencia_1;

Sentencia_2

END

ELSE

Sentencia_3;

Sentencia_4

END

ELSE

IF Condición_3

THEN

Sentencia_5

ELSE

BEGIN Sentencia compuesta de Sentencia _6 y Sentencia_7

Sentencia_6;

Sentencia_7

END; Indica fin de la Sentencia I F Condición_3, y a su

vez fin de la Sentencia IF Con dición_1

Condición_1

Condición_3

Sentencia_5 Sentencia_6Sentencia_7

Condición_2

Sentencia_1Sentencia_2 Sentencia_3

Sentencia_4

Page 16: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 16 de 25

Obsérvese que el IF Condición_3 THEN ELSE no es considerado como una sentencia compuesta (encerrado entre un BEGIN y un END), dado que el IF THEN ELSE se cuenta como una única sentencia independientemente de la complejidad del mismo.

Caso 5

Este es un caso particular, ya que si se codificara simplemente, resultaría:

IF Condición_1

THEN

IF Condición_2

THEN

Sentencia_1

ELSE

Sentencia_2;

Dado que el compilador Pascal no tiene en cuenta las indentaciones, la Sentencia_2 se efectuará cuando la Condición_2 resulte FALSE y no cuando sea FALSE la Condición_1, pues aparea cada ELSE con el THEN anterior más próximo correspondiente a una sentencia IF no terminada.

Para salvar esta situación, recurrimos a dar por terminado el IF Condición_2 con un ELSE vacío, como se muestra a continuación:

IF Condición_1

THEN

IF Condición_2

THEN

Sentencia_1

ELSE (Para que la Sentencia_2, corre sponda a la salida

ELSE por FALSE de la Condición_1)

Sentencia 2;

Selección múltiple (CASE OF)

Condición_1

Sentencia_2

Condición_2

Sentencia_1

Page 17: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 17 de 25

Permite al programa realizar diferentes acciones sobre la base del contenido de un Selector. La expresión selector debe dar un resultado del tipo ordinal, es decir, integer (-32768 a 32767), char, boolean o enumerado.

Se codifica de la siguiente manera:

CASE Selector OF

ListaDeValores_1:

Sentencia_1;

ListaDeValores_2:

Sentencia_2;

ListaDeValores_3:

Sentencia_3;

ListaDeValores_4:

Sentencia_4;

ELSE

Sentencia N

END;

ListaDeValores_N puede contener constantes de tipo: integer, char, boolean o enumerado y se expresan:

Lista de Valores Coincidencia con alguno

1) valor1, valor2, valor3 De los 3 valores

2) valor1..valor2 De los valores comprendidos entre valor1 y valor2

3) valor1, valor2..valor3 Valor1 o los valores comprendidos entre valor2 y valor3

4) ‘valor1’, ‘valor2’ De los 2 valores tipo CHAR

5) ‘valor1’..’valor2’ De los valores tipo CHAR comprendidos entre ‘valor 1’ y ‘valor 2’

6) ‘valor1’..’valor2’, ‘valor3’ De los valores tipo CHAR valor1 o comprendidos entre ‘valor2 y ‘valor3’

La lógica del CASE OF es la siguiente: En caso de que el valor del Selector coincida con alguno de los valores indicados en lista de valores 1, se ejecuta la sentencia 1, en caso de coincidir con alguno de los valores indicados en la lista de valores 2, se ejecuta la sentencia 2 y así sucesivamente. En caso de que no coincida con ninguna lista de valores, se ejecuta la sentencia indicada en la sección ELSE.

Selector

Sentencia_1 Sentencia_2 Sentencia_3 Sentencia_NSentencia_4

ListaDeValores_1 ListaDeValores_2 ListaDeValores_3 ELSEListaDeValores_4

Page 18: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 18 de 25

La sección ELSE puede no ser indicada, en cuyo caso el compilador en caso de que el valor del Selector no coincida con ninguna lista de valores, no realizará ninguna acción.

En cualquiera de las alternativas, la sentencia a ejecutar, puede ser simple o compuesta.

CASE Selector OF

Lista de Valores 1: BEGIN

Sentencia 1;

Sentencia 2

END;

Lista de Valores 2: Sentencia 3;

...................

END;

Estructura repetitiva exacta (FOR DO): Repite una sentencia simple o compuesta haciendo que una variable (Indice) de tipo ordinal (entera, char, boolean o enumerado) tome valores durante cada repetición comprendidos entre un valor inicial (expresión Vi) y un valor de prueba (expresión Vp) (ambos del mismo tipo de Indice) con incrementos o decrementos de 1.

FOR Indice := Vi TO/DOWNTO Vp DO

Sentencia_1;

FOR Indice := Vi TO/DOWNTO Vp DO

BEGIN

Sentencia_1;

Sentencia_2

END;

La sentencia se repetirá N veces. En la primera iteración la variable Indice almacenará el valor Vi, luego la incrementará (TO) o decrementará (DOWNTO) en 1, y así sucesivamente hasta finalizar con el valor Vp en la última iteración. Si se utiliza TO y es Vi > Vp o DOWNTO y es Vi < Vp, no se efectúa ninguna iteración.

Hacer mientras (WHILE DO) Repite una sentencia simple o compuesta mientras se cumpla una Condición Lógica. También se lo suele llamar ciclo 0 a N, ya que en caso de no cumplirse la Condición Lógica la primera vez, la sentencia no se realizará ninguna vez.

Page 19: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 19 de 25

WHILE CondiciónLógica DO

Sentencia_1;

WHILE CondiciónLógica DO

BEGIN

Sentencia_1;

Sentencia_2

END;

Ejemplo 1:

Cant:=0;

Total:=0;

READLN(Valor);

WHILE Valor <> -1 DO

BEGIN

Total := Total + Valor;

Cant := Cant + 1;

READLN(Valor)

END;

WRITELN(‘Promedio:’, Total / Cant:8:2);

Ejemplo 2: Reemplazar con WHILE DO la estructura FOR DO

FOR J := 1 TO Fin Do

Sentencia_N;

J := 1;

WHILE J <= Fin DO

BEGIN

Sentencia_N;

J := J + 1

END;

Repetir hasta (REPEAT UNTIL) Repite una o varias sentencias hasta que se cumpla una condición.

Page 20: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 20 de 25

REPEAT

Sentencia_1

UNTIL CondiciónLógica;

REPEAT

Sentencia_1;

Sentencia_2

UNTIL CondiciónLógica;

Se puede observar que independientemente de que se quieran repetir 1 o más instrucciones, no es necesaria la transformación en una sentencia compuesta dado que los identificadores REPEAT y UNTIL las delimitan.

La Lógica de esta estructura es la siguiente:

1) Ejecuta la Sentencia 1,2,...

2) Si no cumple la condición lógica, vuelve a ejecutar la sentencia 1,2,...

Es decir que a diferencia del WHILE DO, esta estructura ejecuta la/las sentencias por lo menos una vez. Por esto, también se la llama ciclo 1 a N.

Recomendaciones para una adecuada codificación

1) Utilizar indentaciones para permitir visualizar mejor las estructuras, o sentencias subordinadas a otras. Esto permite una más fácil interpretación del código (al humano, pues para el compilador es indistinto).

2) Utilizar comentarios en diferentes lugares del programa, para describir por ejemplo que función cumple un conjunto de instrucciones (Ej.: Calcular un Promedio). Para que el compilador reconozca que se trata de un comentario y no de una sentencia, se debe utilizar uno de los siguientes formatos: (* Comentario *) o Comentario

3) Utilizar una codificación uniforme:

a) Sentencias / Palabras Reservadas de Pascal con mayúsculas, variables con minúsculas.

b) Todos los identificadores elegidos por el programador (ej.: nombre de variable, nombre de programa, nombre de procedimiento, etc.) van en minúscula, excepto la primera letra que va en mayúscula. En nombres largos compuestos por dos o más palabras debe ir en mayúscula la inicial de cada palabra.

c) Para facilitar la interpretación del programa se recomienda elegir los identificadores de modo que puedan fácilmente asociarse con lo que representa o significan.

Page 21: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 21 de 25

Instrucciones para el borrado y ubicación del curso r en la Pantalla

Posicionamiento del cursor (GOTOXY)

Posiciona el cursor en el lugar de la pantalla que se le indique, permitiendo que las sentencias READ, READLN, WRITE, WRITELN, soliciten valores o informen resultados a partir de esa posición. Para el uso de esta sentencia es necesario incluir la biblioteca CRT en la sección USES, es decir:

USES CRT;

Se codifica:

GOTOXY(Columna de la Pantalla, Fila de la Pantall a);

Las coordenadas X e Y de una pantalla se encuentran normalmente establecidas con rangos de 1 a 80 para columnas y de 1 a 25 para filas.

Limpiar / borrar la pantalla (CLRSCR)

Borra toda la información de la pantalla, posicionando el cursor en la fila 1, columna 1. Para el uso de esta sentencia es necesario incluir la biblioteca CRT en la sección USES, es decir: USES CRT;

Se Codifica:

CLRSCR;

Ejemplo:

CLRSCR;

GOTOXY(20,10);

WRITELN(‘Ingrese Nombre’);

GOTOXY(52,10);

READLN(Nombre);

1

25

10

1 5220 80X

Y

Ingrese Su Nombre y Apellido:

Ejemplo de un Algoritmo codificado en Pascal

Page 22: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 22 de 25

Dada una cantidad de alumnos recibidos en una Universidad, de los que se conoce la Edad a la que se recibieron y su mejor Nota en la carrera (valores enteros entre 1 y 10), informar:

a) Cantidad de alumnos que obtuvieron 7, 8, 9 y 10.

b) Porcentaje de alumnos con Notas mayores o iguales a 9.

c) Cantidad de alumnos recibidos, mayores a 27 años.

C

Notas7 <--- 0Notas8 <--- 0Notas9 <--- 0Notas10 <--- 0Mayor27 <--- 0

Cant

Porce <--- (Notas9 + Notas10)*100/Cant

Notas7, Notas8, Notas9, Notas10, Porce, Mayor27

F

Cant1

IEdad, Nota

Nota

INC(Notas7) INC(Notas8) INC(Notas9) INC(Notas10)

7 8 9 10

Edad > 27

INC(Mayor27)

PROGRAM Alumnos;

USES CRT;

Page 23: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 23 de 25

se utiliza la biblioteca CRT pues se usa la sente ncia CLRSCR

VAR

Declaración de variables

Notas7, Notas8, Notas9, Notas10, Mayor27, Cant, I: WORD;

Edad, Nota : BYTE;

Porce: REAL;

BEGIN

Inicialización de contadores

Notas7:= 0;

Notas8:= 0;

Notas9:= 0;

Notas10:= 0;

Mayor27:= 0;

CLRSCR;

WRITELN('Ingrese la cantidad de alumnos recibidos') ;

READLN(Cant);

FOR I := 1 TO Cant DO Proceso de datos de l os alumnos

BEGIN

WRITELN('Ingrese la Edad a la que se recib ió y la Nota máxima del alumno ', I);

READLN(Edad, Nota);

CASE Nota OF

7: INC(Notas7);

8: INC(Notas8);

9: INC(Notas9);

10: INC(Notas10)

END;

IF Edad > 27

THEN

INC(Mayor27);

WRITELN;

END;

Porce := (Notas9 + Notas10)*100 / Cant;

Impresión de resultados

Page 24: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 24 de 25

WRITELN('Cantidad de alumnos con Nota máxima 7: ' , Notas7:5);

WRITELN('Cantidad de alumnos con Nota máxima 8: ' , Notas8:5);

WRITELN('Cantidad de alumnos con Nota máxima 9: ' , Notas9:5);

WRITELN('Cantidad de alumnos con Nota máxima 10: ' , Notas10:5);

WRITELN('Porcentaje de alumnos con Nota máxima >= a 9: ', Porce:6:2);

WRITELN('Cantidad de alumnos recibidos con m s de 2 7 años: ', Mayor27:5);

GOTOXY(1, 25);

WRITE('Presione una tecla para finalizar');

READKEY

END.

Page 25: Apunte Codificacion en Pascal V1 - …ayemaimonides.wdfiles.com/local--files/start/Apunte Codificacion en... · Algoritmos y estructuras de datos - Codificación en Pascal v1.2 Página

Algoritmos y estructuras de datos - Codificación en Pascal v1.2

Página 25 de 25

Referencias El presente apunte corresponde a material extraído de documentos generados por Proyecto de Investigación COVIE-FRBA-UTN.