Apuntes Pascal
Apuntes Pascal
UNIDAD I: Presentación
Historia de Pascal. Lenguajes de Programación.
Formato general de un programa de Pascal. Palabras Reservadas. Creación de Programas.
Objetos de un Programa. (Identificadores, Comentarios, etc.)
Variables.
Tipos de Datos: Clasificación General. Ordinales Predefinidos (Enteros, Boolean, Char) y
Definidos por el usuario, (Enumerados, Subrango). No Ordinales Predefinidos (Reales).
Tipo Cadena (String).
LENGUAJES DE PROGRAMACIÓN:
Los lenguajes de programación utilizados para escribir programas de computadoras que puedan ser
entendidas por ellas, se denominan: “Lenguajes de Programación”.
Los lenguajes de programación se clasifican en tres categorías:
Lenguaje máquina:
Los lenguajes máquina son aquellos cuyas instrucciones son directamente entendidas por la
computadora y no necesitan traducción posterior, para que la CPU pueda comprender y ejecutar
programas. Las instrucciones en lenguaje máquina se expresan en términos de la unidad de
memoria
más pequeña: el Bit (dígito binario) cuyo valor puede ser cero o uno.
Una serie de instrucciones en lenguaje máquina son:
0010 0000 0000 1001
1001 0001 1001 1110
Como se puede observar estas instrucciones son fáciles de leer por la computadora y difícil por un
programador.
Lenguaje de bajo nivel
La programación en lenguaje máquina es difícil, por ello se necesitan programas que permitan
simplificar este proceso. Los lenguajes de bajo nivel han sido diseñados para ese fin, el lenguaje
típico
es el Ensamblador. En este lenguaje, las instrucciones se escriben en códigos alfabéticos
conocidos
como nemotécnicos.
ADD (suma) MPY (multiplicar)
SUB (resta) DIV (dividir)
Las palabras nemotécnicas son más fáciles de recordar que las secuencias de dígitos 0,1. Una
instrucción típica del ensamblador puede ser:
ADD x,y,z (suma x + y, lo almacena en z)
Lenguaje de alto nivel
Los lenguajes de alto nivel son aquellos en que las instrucciones o sentencias a la computadora
están escritos en lenguaje similar a los lenguajes del ser humano. En general el lenguaje inglés
como
es el caso de Turbo Pascal. Lo que facilita la escritura y comprensión por el programador.
INTRODUCCIÓN A PASCAL:
La estructura de un programa:
En esta sección se analiza en detalle las reglas de estructura que se debe seguir siempre que se
escriban
programas en este lenguaje.
PROGRAM identificador
USES identificadores
LABEL lista de etiquetas
CONST
Definiciones de constantes
TYPE
Declaración de tipos de datos definidos por el usuario
VAR
Declaración de variables
------------ ----------- --------- ----------
PROCEDURE
Definiciones de procedimientos
FUNCTION
Definiciones de funciones
------------ ----------- --------- ----------
BEGIN {cuerpo del programa}
sentencias
END.
Las cinco secciones de declaración (label, const, type, procedure, y/o function) así como la cláusula
uses, no tiene que existir en todos los programas. Las secciones de declaraciones están seguidas del
cuerpo del programa o programa principal que siempre existirá y que contará de un número
determinado de sentencias. Es recomendable seguir siempre el orden establecido en la figura.
Nota: Efectúe una lectura comprensiva. Elabore un resumen de cada una de las partes de la
estructura
de un programa.
PALABRAS RESERVADAS
Las palabras reservadas de T. Pascal tienen significado especial y no se pueden utilizar para otros
propósitos. Una palabra reservada no puede ser utilizada como identificador.
Absolute end inline procedure type
And external interface program Unit
Array File Interrupt Record Until
Begin For Label Repeat Uses
Case Forward Mod Set Var
Const Function Nul Shl While
Div Goto Not Shr With
Do If Of String xor
Downto Implementation Or Then
Else in packed to
CREACIÓN DE PROGRAMAS:
Sitúese en la ventana de edición de TP y escriba el siguiente ejemplo:
Program primero:
Uses CRT;
Begin
Write(‘Hola’);
Write(‘Mi nombre es.......’);
End.
Cuando termina de escribir y no observa errores a simple vista puede hacer dos cosas: guardarlo en
un
disco o bien compilarlo. El orden lógico que deberá seguir para evitar pérdidas es:
• Editar
• Guardar el programa fuente en disco (Menú: FILE- Opción: SAVE)
• Compilar (Menú: COMPILE- Opción: COMPILE)
• Ejecutar (Menú: RUN -Opción: RUN)
Nota: Efectúe una lectura comprensiva. Elabore un resumen de cada una de los siguientes puntos:
(Pág. 21-24)
• Codificación de un programa.
• Documentación interna.
• Compilación y ejecución de un programa (Programa Fuente, Objeto, Ejecutable)
• Verificación y depuración de un programa.
• Documentación y mantenimiento.
Objetos de un Programa:
Un programa en Pascal se construye en base de objetos (tokens) y separadores (Blancos o
comentarios). Los objetos son las unidades significativas más pequeñas de texto de un programa y
se
dividen en:
• Identificadores
• Etiquetas
• Constantes
• Variables
• Directivas, etc.
IDENTIFICADORES
Los identificadores representan los objetos de un programa (constantes, variables, tipos de datos,
procedimientos, funciones, unidades, programas y campos de registros). Es una secuencia de
caracteres
que puede ser de cualquier longitud, pero los 63 primeros son significativos.
Un identificador se caracteriza por éstas reglas:
1. Debe comenzar con una letra (mayúscula o minúscula) y no puede contener blancos.
2. Letras, dígitos, caracteres subrayados, están permitidos después del primer carácter.
3. No se puede utilizar una palabra reservada como identificador, sin embargo, los identificadores
estándares se pueden volver a redefinir.
Identificador estándar:
Tipos: integer, read, byte, ....
Procedimientos: write, writeln, read, reset, ...
Funciones: sin, cos, abs, ....
Nota. Analice cual sería la correcta elección de un identificador según las recomendaciones
expuestas
COMENTARIOS
* El estilo de programación:
El buen Estilo de Programación es la característica más notable de un programador.
Sangrado (identación): 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.
{comentario}
(*comentario*)
Pueden aparecer en una sola línea, al final o embebido en una sentencia.
Nota: Analice el ejemplo presentado en el libro de referencia.
VARIABLES
Las variables son objetos de un programa cuyo valor puede cambiar durante la ejecución del
programa.
El cambio se produce mediante sentencias ejecutables.
Una variable es una posición de memoria con nombre. El nombre de la posición (un identificador)
se
llama “NOMBRE DE LA VARABLE”, el valor almacenado en la posición se llama “VALOR DE
LA
VARIABLE”.
Las variables se asemejan a cajas o buzones, cada una de las cuales tiene un nombre y contiene un
valor.
Nombre de la variable Valor de la variable
Todas las variables de Pascal deben ser declaradas antes de ser utilizadas.
Las variables se deben declarar en la sección de declaración del programa, mediante la palabra
reservada VAR. Declarar variables con sus tipos de datos asociados.
TIPOS DE DATOS
Los diferentes objetos de información con los que un programa Pascal trabaja se conocen
colectivamente como datos. Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un
simple carácter, tal como “B”, un valor entero como el 35, o un número entero como 141592. Una
operación de suma no tiene sentido con caracteres, solo con números. La operación de suma se
almacena de modo distinto para números entero y números reales.
La Asignación de Tipos de Datos, tiene dos objetivos principales:
1- Detectar errores de operaciones en programas.
MONEDAS 100
2- Determinar como ejecutar las operaciones.
Pascal se conoce como lenguaje “Fuertemente Tipeado”, o de tipos fuertes. Esto significa que todos
los
datos deben tener sus tipos de datos declarados. La ventaja de los lenguajes de tipos fuertes (ricos
en
tipos de datos) es que gasta menos esfuerzo en la depuración de programas ya que el programa
detecta
estos errores. (Variables con tipos mal declarados).
El Tipo de 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 ocupado por una variable de un tipo dado.
Clasificación:
TIPOS ENTEROS
Pascal dispone de cinco tipos predefinidos:
TIPO RANGO FORMATO
byte 0 .. 255 8 bits sin signo
integer -32768 .. 32767 16 bits con signo
longint -247483648 .. 2147483647 32 bits con signo
Shortint -128 .. 127 8 bits con signo
word 0 .. 65535 16 bits sin signo
Integer
Los enteros se expresan en el rango de valores -32768 .. 32767, y no pueden tener parte decimal.
Los
enteros INTEGER se almacenan en memoria como dos bytes. El bit de mayor peso (orden) de los
dos
bytes en memoria es el bit de signo, 0-positivo o 1-negativo.
Nota: Efectúe una lectura comprensiva. Elabore un resumen cada uno de los tipos de datos enteros
no
detallados en el párrafo anterior.
TIPOS REALES
Tipos de Datos
Datos Estáticos Datos Dinámicos
Tipos
Simples
Tipos
Cadenas
Tipos Estructurados
Tipos Procedimiento
Tipos
Puntero
Ordinales:
*Predefinidos
-Integer
-Boolean
-Char
*Definidos por el usuario
-Enumerado
-Subrango
No Ordinales:
- Reales
Array
Registro
Conjunto
Archivo
Los tipos de datos reales son aquellos que representan al conjunto de los números reales. Los
cálculos
matemáticos normales exigen dos tipos de datos numéricos: enteros y reales. Las computadoras
diferencian uno y otro tipo. Las diferencias residen en la representación interna en memoria.
Formato binario Formato real
Nota: Efectúe una lectura comprensiva. Elabore un resumen cada uno de los tipos de datos Reales
no
detallados en el párrafo anterior.
1-Notación Científica o de coma flotante
El área ocupada por un real se divide en dos zonas: Mantisa y Exponente.
mantisa: Fracción binaria entre 0.5 y 1.0 (o –0.5 y –1.0 para negativos)
exponente: potencia de 10
numero real = mantisa x 10exponente
Esta notación se utiliza para representar números muy grandes o muy pequeños. En notación
decimal
los números se escriben en notación E (E de exponente) y significa multiplicar por 10 la potencia
que
sigue.
n E ± dd .
n = número decimal (con o sin signo + o - )
dd = exponente entero (positivo, negativo o cero)
1.6125E-10 equivale a 1.6125x10-10 = 0.00000000016125
3.492E-02 equivale a 3.492x10-2 = 0.0349
2-Notación en coma fija:
Expresar el número real con un punto decimal (no con comas).
3.141592 0.0056 -18.8
El tipo real se representa en memoria con 6 bytes y en un rango de 10-38 a 1038 .
Los diferentes tipos reales se diferencian por el dominio de definición, el número de cifras
significativas (precisión) y el espacio ocupado en memoria.
TIPO RANGO CIFRAS TAMAÑO Y BYTES
Real 2.910-39 .. 1.71038 11-12 6
Single 1.510-45 .. 3.41038 7-8 4
Double 5.010-324 .. 1.710308 15-16 8
Extended 1.910-4931 .. 1.1104932 19-20 10
Comp -263 +1 .. 263 -1 19-20 8
TIPO STRING
Una cadena de caracteres (string) es una aserie de caracteres cuya serie puede tener una longitud de
1a
255 caracteres.
T. Pascal tiene el Tipo de Dato string que almacena información de texto. Este dato se puede
almacenar en constates y en variables de cadena. Una variable de cadena está declarada por la
palabra
string seguida de la longitud máxima de la cadena de caracteres entre corchetes.
Declaración en VAR y en TYPE
Var
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
entrada/salida
de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legibilidad del programa)
Las sentencias ejecutables aparecen en el cuerpo del programa a continuación de la palabra
reservada
Begin.
Cada sentencia ejecutable se traduce por el compilador en una o varias instrucciones de lenguaje
máquina, que se copian en el archivo objeto y posteriormente se ejecutan.
Las declaraciones describen el significado y el propósito de cada identificador definido por el
usuario:
no se traducen a instrucciones de lenguaje máquina y no aparecen en el archivo objeto.
Las sentencias se clasifican en:
• Simples.
• Estructuradas.
Sentencias Simples:
Es una sentencia que no tiene ninguna otra sentencia. Se clasifican en:
Asignación: Asignan valores a variables.
Procedure: Un procedimiento es un subprograma que realiza una tarea específica. Un
procedimiento
está compuesto por un grupo de sentencias a las que se les asigna un nombre (identificador).
Goto: Su uso no es recomendable en Turbo Pascal.
Sentencias Estructuradas
Son sentencias compuestas de otras sentencias: ( compuestas y sentencias with), condicionalmente
(sentencias condicionales o selectivas), o repetitivas (sentencias repetitivas).
SENTENCIAS DE ASIGNACIÓN
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 determinado en una posición de memoria. En seudo código se denota
con
el símbolo ← que en pascal se sustituye por “:=” que se denomina operador de asignación.
Nota: Efectúe una lectura comprensiva. Elabore un resumen de las reglas de asignación. Examine
los
ejemplos presentados en el libro (Pág. 77-79.
Analice el tema tratado bajo el título: Operaciones de asignación especiales.
EXPRESIONES
Expresiones y Operaciones Aritméticas:
Las variables y constantes se pueden procesar utilizando operaciones y funciones adecuadas.
Una expresión es un conjunto de datos o funciones unidos por operadores aritméticos.
Operador Significado Ejemplo Resultado
+ Suma A+b Suma de a y b
- Resta a-b Diferencia a y b
* Multiplicación A*b Producto de a por b
/ División A/b Cociente de a por b
Div División entera A div b Cociente entero de a por b
Mod Resto entero A mod b Resto de a por b
Shl Desplazamiento a izquierda A shl b Desplaza a izquierda b bits
Shr Desplazamiento a derecha A shr b Desplaza a derecha b bits
Operadores DIV y MOD
Los operadores DIV y MOD solo se pueden utilizar con números enteros.
Nota: Realice el ejercicio número dos del TP N° 1, declarando las variables Tipo Real. Modifique el
programa declarando las mismas variables tipo integer.
Analice los inconvenientes presentados. Efectúe las correcciones necesarias.
Reglas de evaluación de expresiones (Prioridad):
La siguiente tabla presenta a todos los operadores con su respectiva prioridad.
Operador Prioridad
Not Más alta (se evalúa primero)
*, /, div, mod, and
+, - , or
<, <= , = , <> , >= , > Más baja (se evalúa el último)
Ejemplo 4:
Readln(selección);
CASE selección OF
‘N’,’n’: begin
write(‘su nombre es: ’);
write(nombre)
end;
‘D’,’d’: begin
write(‘su dirección es: ’);
write(dirección)
end;
‘F’,’f’: {no hace nada}
ELSE
Writeln(‘Elección no válida’)
END;
Nota: Si en cada círculo en rojo, se escribiera un punto y como ¿ cuál sentencia provocaría un
mensaje
de error?.
La sentencia REPEAT
Una de las características de los bucles while-do es que la condición se evalúa al principio de cada
iteración.
La sentencia Repeat especifica un bucle condicional que se repite hasta que la condición se hace
verdadera. Este bucle se denomina Repeat-until.
Reglas de funcionamiento
1- La expresión se evalúa al final después de ejecutarse todas las sentencias.
2- Si la expresión es F, se vuelve a repetir el bucle y se ejecutan todas las sentencias.
3- Si la expresión lógica es V, se sale del bucle y se ejecuta la siguiente sentencia a until.
4- La sintaxis no requiere begin-end.
REPETIR
Sentencias
HASTA_QUE condicion = V
Nota: La condición se evalúa al final. Si es V sale del bucle. Si es F continúa.
Nota: Efectúe una lectura comprensiva. Analice el cuadro comparativo de la página 163.
Complementar una condición:
Para cambiar de un bucle a otro se necesita complementar la condición. Se puede complementar una
condición simple cambiando el operador relacional de la forma siguiente:
Operador Operador que complementa
< >=
<= >
> <=
>= <
= <>
<> =
La sentencia FOR
En numerosas ocasiones se puede desear que un bucle se ejecute un número determinado de veces,
y
cuyo número se conozca por anticipado.
DESDE I ← inicio HASTA fin HACER
Sentencias
FIN_DESDE
Nota: La condición se evalúa un número determinado de veces.
Incrementos del contador FOR (TO)
Al ejecutarse la sentencia FOR la primera vez, el valor inicial se asigna a la variable que se la
denomina variable de control, y a continuación se ejecuta la sentencia del interior del bucle.
Al llegar a la sentencia END se verifica si el valor final es mayor que el inicial en caso negativo se
incrementa el valor de variable, y se vuelven a ejecutar las sentencias, hasta que la variable de
control
sea mayor que el valor final.
15
sentencias
condición
I←1
I←i+1 I≤10
Sentencia
Taller I - “T. Pascal”
FOR variable : = inicio HASTA final DO
Sentencia;
Si la sentencias son compuestas entonces:
FOR variable : = inicio HASTA final DO
BEGIN
Sentencias1;
Sentencias2
END;
Decremento del contador FOR (DOWNTO)
El contador del bucle se puede decrementar de uno en uno en lugar de incrementar.
FOR i:= 5 DOWNTO 1 DO
Writeln(i);
EJEMPLO
PROGRAM ejemplo;
USES CRT;
VAR
I: integer;
Num, suma, prom: real;
BEGIN
Clrscr;
Suma:= 0; prom:=0;
Writeln (‘Ingrese diez valores para determinar el promedio: ‘);
I:=0;
WHILE I < 10 DO
BEGIN
Readln(num);
Suma:=suma+num;
I:=i+1
END;
I:=0;
REPEAT
Readln(num);
Suma:=suma+num;
I:=i+1
UNTIL I>=10;
{no se inicializa I}
FOR i := 1 TO 10 DO
BEGIN
Readln(num);
Suma:=suma+num
END;
Prom:= suma/10;
Writeln(‘El promedio es: ‘, prom:5:2);
Repeat until keypressed
END.
Nota: Analice el ejemplo para cada una de las estructuras repetitivas.
Leer: “ Reglas de funcionamiento”. Pág. 168.
“Bucles anidados”. Pág. 171.
“Elección de la estructura repetitiva adecuada”. Pág. 177.
Iteraciones:
VALOR WHILE REPEAT
I : = 0 I < 10 I >=10
I : = 1 I <= 10 I > 10
FUNCIONES ESTANDAR
Las Funciones
Una función es un subprograma que recibe como argumento o parámetros datos de tipo numérico o
no
numéricos (char, string, bollean u otros), y devuelve un resultado. Esta es la característica que le
diferencia de un procedimiento.
Formato General.
Nombre_funcion(Argumento1, Argumento2,...)
Argumento............... dato de tipo char, string, etc.,
El argumento se conoce también con el nombre de PARÁMETRO.
En T. Pascal existen dos grandes grupos de funciones:
• Funciones predefinidas, estándar o internas.
• Funciones definidas por el usuario.
Funciones Predefinidas:
Las funciones están divididas en los siguientes grupos:
1. De asignación dinámica de memoria.
2. De transferencia.
3. Aritméticas.
4. Ordinales.
5. Cadena.
6. Dirección y punteros.
7. Especiales.
Funciones Matemáticas:
Las funciones matemáticas, denominadas también aritméticas, son aquellas que realizan
operaciones
matemáticas y devuelven un valor. Las funciones son referenciadas directamente en una expresión o
sentencia genérica y el valor calculado por la función es sustituido por la referencia de la función.
1.-Función de conversión: (reales/enteras, y enteros/reales)
El valor entero se puede asignar a variables de tipo real. Y lo inverso NO es posible porque un real
tiene parte decimal y no hay forma de expresar una parte decimal en tipo integer..
TRUNC: La función Trunca la parte decimal de un número real.
Formato : Trunc(x)
.x ... expresión numérica de tipo real en el rango de los entero largo.
Trunc devuelve un valor entero largo Longint.
Ejemplo:
Trunc(5.2) {Devuelve: 5}
Trunc(5.99) {Devuelve: 5}
ROUND: La función round redondea un real a un entero.
Formato Round(x)
.x….. expresión de tipo real dentro del rango de los enteros largos.
Ejemplo
Round(4.448) {Devuelve 4}
Round(5.6125) {Devuelve 6)
Round devuelve un valor entero que es el entero más próximo a x.
2.- Funciones Aritméticas elementales:
ABS: Devuelve el valor absoluto de un número.
Formato Abs(x)
.x.... expresión de tipo entero o real.
El resultado es del mismo tipo que x.
FRAC: Devuelve la parte decimal de un número.
Formato Int(x)
.x.... expresión de tipo real.
Ejemplo
Frac(4.85962) {Devuelve 0.85962} Rdo Tipo REAL
INT: Devuelve la parte entera de un número real.
Formato: Int(x)
.x..... expresión de tipo real.
Ejemplo
Int(321.0004) {Devuelve 321.0} Rdo Tipo REAL
3.- Funciones Exponenciales y Logarítmicas:
EXP: Devuelve la función exponencial de x. Potencia de e elevado a x (ex), (x número real o
entero),
siendo su resultado siempre real.
LN: Devuelve el Logaritmo Natural (logaritmo en base e) de x. El resultado es real.
XY: Al contrario que otros lenguajes, Pascal no contiene la función de potencia (xy). Sin embargo ,
Exp
y Ln permiten diseñar una función que eleva un número a una potencia dada.
XY = Exp(y * Ln(x) )
SQR / SQRT: Sqr(x) equivale a x2 o de otro modo x*x. La función Sqrt(x) es la función raíz
cuadrada
del argumento.
Formato: Sqr(x) .x de tipo real o entera
Sqrt(x) .x de tipo real.
4. Funciones Trigonométricas:
SIN, COS, ATN
Tan, Cot, Sec, Cosec.
5.- Funciones Ordinales:
22
Taller I - “T. Pascal”
Son aquellas que se aplican a argumentos o parámetros de tipo ordinal.
ORD: devuelve la posición ordinal (un entero) del valor x.
Ejemplo
Ord (false) {Devuelve 0)
Ord(True) {Devuelve 1)
Ord(6) {Devuelve 6)
Ord(B) {Devuelve 66)
CHR: Es la opuesta de Ord. Devuelve el carácter del código ASCII correspondiente al x-enésimo
carácter (x es un entero).
Ejemplo:
Chr(66) {Devuelve B}
Chr(13) {Devuelve un retorno de carro (Enter)}
PRED y SUCC: Dado un valor ordinal Pred y Succ, devuelven el predecesor y el antecesor del
valor
del argumento.
Ejemplo:
Pred(43) {Devuelve 42}
Succ(456) {Devuelve 457)
PI: devuelve el valor de la constante matemática Pi. (3.141592)
ODD: verifica si el argumento de la función es un número impar. Recibe un número entero y
devuelve
un valor lógico.
Resultado: T si es impar. F si es par.
Incremento y Decremento:
Se añaden dos procedimientos estándar que operan sobre tipos ordinales.
INC: Incrementa un valor tipo ordinal.
DEC: Decrementa un valor tipo ordinal.
Inc y Dec, son equivalentes a Pred y Succ, con la diferencia que éstas son funciones en lugar de
procedimientos. La razón de utilizar Inc, Dec reside en el hecho de su mayor velocidad de
ejecución.
Nota: Realice un ejercicio donde pueda aplicar cada una de las funciones.
Puede tomar como referencia los presentados en la bibliografía.
Números Aleatorios:
Existen numerosas ocasiones en que se necesitan realizar simulaciones y que implican elementos
dependientes del azar como por ejemplo juegos de lotería. En estas ocasiones se debe utilizar la
computadora y un método generador de números aleatorios.
Random: es una función que genera números pseudoaleatorios.
Randomize: en una sentencia encargada de reinicializar la semilla RaadSeed (semilla aleatoria) que
la
función Random utiliza para la generación de números pseudoaleatorios.
Formato
Function Nombre(p1,p2,):tipo
{declaraciones locales y subprogramas}
Begin
{Cuerpo de la función}
nombre:= valor de la función
end;
p1,p2.... lista de parámetros formales.
Tipo...... tipo de dato del resultado que devuelve la función.
Comparación entre funciones y procedimientos:
1. En lugar de la palabra Procedure se debe utilizar la palabra Function.
2. Al igual que en los procedimientos, el nombre de la función es un identificador. Sin embargo el
nombre de la función se refiere a la posición de memoria que contiene el valor devuelto por la
función.
3. La lista de parámetros formales son los identificadores utilizados para recibir los valores del
programa.
4. El tipo de dato del resultado coincide con el tipo expresado en la cabecera de la función.
5. En el cuerpo de la función debe existir una sentencia de asignación similar a:
nombre_funcion:=valor_funcion. Donde esta definido el valor de la función.
6. La función solo devuelve un valor, el procedimiento puede devolver cero, uno o varios valores.
7. El tipo de dato del resultado en la función debe estar indicado en la cabecera y puede ser
cualquier tipo de dato escalar (integer, real, booean o char) o un tipo enumerado o un tipo
subrango o un tipo puntero.
Ejemplo:
Función triple de un número.
Function triple(numero:real): real;
begin
triple:=3* numero
end;
* Función signo de un número
Function signo(x:real): integer;
{ devuelve signo del parámetro x: 1,0,-1. para pos, cero, neg.}
Var
Aux:integer;
Begin
If x > 0 then aux:= 1;
If x = 0 then aux:=0;
If x< 0 then aux:=-1;
signo:= aux
end;
Llamadas a la función.
Se llama igual que una función predefinida haciendo referencia a ella en una extensión.
La llamada se realiza con un designador de la función nombre(lista de parámetros) en una sentencia
de asignación o en una sentencia de salida (escritura).
Formato (designador de una función)
Nombre_funcion(lista de parámetros actuales)
• Los parámetros actuales deben estar separados por comas.
• El número de parámetros Actuales y Formales debe ser el mismo y de igual tipo.
Funciones con resultado no numérico:
Un función puede devolver un valor perteneciente a cualquier tipo estándar, un tipo enumerado, un
tipo subrango, o un tipo puntero.
Un ejemplo la función Mayúscula recibe un argumento tipo carácter, y devuelve una mayúscula o el
mismo argumento.
Ej.
Function mayúscula(ch:char):char;
Begin
If ch in [‘a’..’z’] then
Mayuscula:= chr( Ord(ch) – Ord(‘a’) + ord(‘A’))
Else
Mayuscula:=ch;
End;
Parámetros variables sin tipo
Cuando un parámetro formal es un parámetro sin tipo, el parámetro real (actual) correspondiente
puede
ser cualquier referencia a variable con independencia de su tipo.
FUNCIONES DE CADENA:
Concepto de cadena de caracteres (String):
Una cadena de caracteres es una serie de caracteres cuya longitud (número de caracteres que
contiene)
puede variar de 1 a 255 caracteres.
T.P. tiene un tipo de dato String que almacena información de texto. Este dato se puede almacenar
en
constantes y en variables de cadena. Una variable de cadena esta declarada por la palabra string
seguida
de la longitud máxima de la cadena de caracteres entre corchetes.
Declaración de una variable tipo cadena: Se declaran en la sección VAR
VAR
nombre: string;
El contenido de una cadena de caracteres se debe encerrar entre apóstrofos.
En los procedimientos de Entrada/Salida resultaría:
Readdln(nombre);
Writeln(‘Su nombre es: ‘ , nombre);
Longitud de una cadena:
Una cadena físicamente es una estructura tipo array de caracteres con índice cero a longitud física.
Una
variable de cadena puede tener de 0 a 255 caracteres de longitud. La ocupación en memoria de una
cadena es un número de bytes igual al de caracteres de la cadena más uno. Así la cadena
‘Mortimer’
Tiene una longitud de 8 bytes, pero ocupa 9. Esto se debe a que el primer byte en una cadena
contiene
la longitud de la cadena actualmente almacenada en memoria.
VAR
Nombre: string[10]
Si la variable nombre contiene ´Mortimer’ ocupará en memoria 9 bytes.
Una cadena en Pascal tiene dos longitudes:
Longitud Física: es la cantidad de memoria que la cadena ocupa realmente.
Longitud Lógica: es el número de caracteres actualmente almacenados en la cadena, este dato puede
cambiar durante el tratamiento de la cadena.
VAR
Nombre: string[15]
....
....
nombre:=’Computación’;
25
Taller I - “T. Pascal”
Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
11 C o m p u t a c i ó n
Longitud Lógica: 11
Longitud Física: 15
Asignación de cadenas:
Se les puede asignar valores por medio de una sentencia de asignación o bien con una sentencia de
lectura.
Caso 1: Destino = Fuente → No existen inconvenientes
Caso 2: Destino > Fuente → No existen inconvenientes
Caso 3: Destino < Fuente → Fuente se trunca al tamaño de Destino.
Nota: Analice los inconvenientes que se presentan cuando en una asignación de cadenas, destino y
fuente no tienen igual longitud. Pág. 384.-
Operaciones entre cadenas:
Las operaciones son:
* Asignación: es posible asignar el contenido de una cadena a otra cadena.
* Comparación: las comparaciones se realizan según el orden de los caracteres en el código ASCII
y
con los operadores de relación.
* Concatenación: es el proceso de combinar dos o más cadenas en una sola cadena. Es posible
concatenar con el operador de concatenación (+), y la función concat.
Procedimientos y funciones de cadenas internos:
Funciones Función
De Conversión
Procedimientos Procedimiento de
Conversión
• Concat
• Length
• Pos
• Copy
• Upcase • Delete
• Insert
• Str
• Val
Función Concat
Proceso de combinar dos o más cadenas de caracteres en una sola.
Formato
Concat(S1,S1,....,Sn)
S1, S2 …… cadenas o variables de tipo string
Si la cadena en mayor a 255 se truncan los caracteres después del 255.
Función Length
Proporciona la longitud lógica de una cadena de caracteres y devuelve un valor entero.
Formato
Length(s)
s... expresión de tipo cadena.
Función Pos
Permite determinar si una cadena está contenida en otra. En este caso la función devuelve la
posición
donde comienza la cadena buscada en la cadena fuente. Si la cadena no existe, se devuelve el
resultado
cero (0).
Formato:
Pos(cadena_buscada, cadena_fuente)
Función Copy
Esta función devuelve una cadena de caracteres (subcadena) extraída de una cadena.
Formato:
Copy(S, Posición, Número)
S expresión tipo cadena (fuente).
Posición primer carácter a extraer (tipo entero)
Número total de caracteres a extraer (tipo entero)
Función de conversión a mayúscula: Upcase
Permite cambiar letras minúsculas a mayúsculas. La función Upcase toma un argumento de tipo
CHAR
y devuelve la mayúscula correspondiente.
Formato:Upcase(s)
s... tipo char
Procedimiento Delete
Delete borra o elimina una subcadena de una cadena. Una subcadena es una cadena contenida en
otra
cadena de mayor longitud. Delete, en esencia, borra uno o varios caracteres de una cadena a partir
de
una posición dada.
Formato:Delete(S, Posición, número)
S cadena
Posición expresión entera que indica la posición del primer carácter a suprimir
Número cantidad de caracteres a suprimir. (Tipo entero).
Procedimiento Insert
Inserta una subcadena en una cadena.
Formato:
Insert(cad1, S, Posición)
Cad1 cadena a insertar
S posición donde se inserta
Posición carácter a partir del cual se inserta.
Procedimiento de conversión Números / Cadenas:
Recordemos que un número y una cadena equivalente no son intercambiables. En otras palabras 63
no
es igual ‘63’, son dos datos diferentes.
Str
Efectúa la conversión de un valor numérico en una cadena.
Formato:
Str(Valor,S)
Valor expresión numérica
S cadena
Val
Convierte una cadena de caracteres en variable numérica. Formato:
Val(S, Variable, Código)
S Cadena, equivalente numérica de tipo entero o real.
Variable Variable tipo entero o tipo real.
Código Si la conversión se efectuó, toma el valor cero, en caso contrario contiene la
posición del primer carácter de la cadena que impide la conversión y en ese caso la variable no
queda
definida. Tipo entero.
Nota: Realice un ejercicio donde pueda aplicar cada una de las funciones.
Puede tomar como referencia los presentados en la bibliografía.
Otras Propiedades de las Cadenas:
Además de las ya analizadas propiedades fundamentales de los datos tipos string (cadena) se
pueden
considerar una serie de características complementarias que es necesario tener presente a la hora de
realizar una buena programación de las cadenas. Algunas características ya han sido tratadas
anteriormente, pero se vuelven a analizar para reforzar su importancia en el tratamiento de cadenas.
• Cadena nula o vacía
• Compatibilidad de datos tipo char y tipo string
• Acceso a posiciones individuales en una cadena.
• Arrays de datos tipo char.
Nota: Efectúe una lectura comprensiva de los items descriptos en el párrafo anterior. Resúmalos.
Ejercicios:
1.- Escribir un programa que lea una cadena de caracteres y la visualice dentro de un cuadro
**********************
*** CURSO PASCAL ***
**********************
2.- Escribir un programa que tenga como entrada el apellido y nombre de una persona separados por
una coma. Y que visualice el apellido y el nombre en variable por separado.
Este procedimiento detiene la ejecución del programa el número de milisegundos indicado, estos
van
de 0 a 65535, la precisión del tiempo depende de los ciclos de reloj del procesador.
Pantalla de Texto
Las computadoras personales tienen dos modos de presentación o vídeo, texto y gráficos. Cuando
están
en modo texto, pueden visualizar los 256 caracterwes estándar ASCII que soporta.
Modos Texto
Los diferentes modos de visualización de texto se pueden seleccionar mediante el procedimiento
textmode
Formato
TextMode(Modo)
Modo: valores posibles recogidos de la siguiente tabla
Constante Valor Modo de video
BW40 0 40x25 Blanco y negro en tarjeta de color
CO40 1 40x25 Color
BW80 2 80x25 Blanco y negro en tarjeta de color
CO80 3 80x25 Color
Mono 7 80x25 Monocromático
Font 8 x 8 256 Juego de caracteres en ROM
Colores de Texto y Atributos del Vídeo
Los procedimientos que permiten controlar los colores del texto son: TextColor y TextBackGround.
Estos dos procedimientos actúan sobre monitores monocromos o color, pero con presentaciones
diferentes.
TextColor
Este procedimiento selecciona el color de primer plano del carácter, es decir, el color del texto.
Formato
TextColor(color)
Color: es una expresión entera en el rango 0...7, correspondiente a una de las dieciséis
constantes de color definidas en CRT.
Se puede hacer parpadear a los caracteres, añadiendo 128 al valor del color. Blink es una constante
entera predefinida que sirve para ese propósito. Blink vale 128. Si se añade Blink a una constante de
color, se hará parapadear a ese carácter.
Ejemplos
Textcolor(4); { selecciona amarillo}
Textcolor(red); {selecciona rojo}
Textcolor(Green-Blink); {parpadeo}
Textcolor(lightred+blink); {caracteres amarillos}
TextBackGround
Selecciona el color de fondo
Formato
TextBackGround(color)
Color expresión entera en el rango 0..7, correspondiente a una de las ocho primeras constantes
de color.
Tabla de Colores
Existen 8 constantes predefinidas para los fondos de la pantalla, este rango va de 0 a 7, estos
representan los primero 3 dígitos del byte de atributo, los caracteres cuentan con 16 constantes para
el
color, este rango va de 0 a 15, estos representan los 4 dígitos siguientes, y por ultimo un dígito de
parpadeo.
Constante Valor Color
Black 0 Negro
Blue 1 Azul
Green 2 Verde
Cyan 3 Cian
Red 4 Rojo
Magenta 5 Magenta
Brown 6 Marrón
Light Gray 7 Gris claro
Dark gray 8 Gris oscuro
Light Blue 9 Azul claro
Light Green 10 Verde claro
Light Cyan 11 Cyan claro
Light Red 12 Rojo claro
Light Magenta 13 Magenta claro
Yellow 14 Amarillo
White 15 Blanco
Blink 128 Parpadeo