6.7. Algunas funciones incorporadas del lenguajes Pascal.
6.7.1. Funciones matemáticas: abs, sin, cos, arctan, round, trunc,
sqr, sqrt, exp, ln, odd, potencias.
En el apartado 1.6.3 vimos algunas de las funciones matemáticas que incluye
Pascal. Es hora de ver una lista un poco más detallada:
- Abs: valor absoluto de un número.
- Sin: seno de un cierto ángulo dado en radianes.
- Cos: coseno, análogo.
- ArcTan: arco tangente. No existe función para la tangente, que podemos calcular como sin(x)/cos(x).
- Round: redondea un número real al entero más cercano.
- Trunc: trunca los decimales de un número real para convertirlo en entero.
- Int: igual que trunc, pero el resultado sigue siendo un número real.
- Sqr: eleva un número al cuadrado.
- Sqrt: halla la raíz cuadrada de un número.
- Exp: exponencial en base e, es decir, eleva un número a e.
- Ln: calcula el logaritmo neperiano (base e) de un número.
- Odd: devuelve TRUE si un número es impar.
- Potencias: no hay forma directa de elevar un número
cualquiera a otro en pascal, pero podemos imitarlo con "exp" y "ln", así:
(* ELEVAR.PAS, Elevar un número real a otro *)
(* Parte de CUPAS5, por Nacho Cabanes *)
program elevar;
function elevado(a,b: real): real;
begin
elevado := exp(b *ln(a) );
end;
begin
writeln(elevado(2,3));
end.
La deducción de esta fórmula es fácil, conociendo
las propiedades de los logaritmos y las exponenciales
a^b = exp ( ln ( a^b )) = exp ( b * ln ( a ))
6.7.2. Funciones para manipular cadenas de texto.
En el apartado 4.2.3 vimos también algunas de las funciones de manipulación
de cadenas de texto. Vamos a resumirlas ahora y a ver un ejemplo conjunto:
Las funciones incorporadas para el manejo de cadenas son:
- copy. Devuelve una subcadena. Su formato es function
copy(cad: string; posic: integer; cuantos: integer): string; Es decir,
le indicamos en qué cadena nos queremos basar, desde qué
posición queremos empezar a tomar las letras y cuántas queremos
leer. Así, copy('JUAN PEREZ', 1, 4) daría 'JUAN'
-
concat. Concatena varias cadenas. Su formato es function
concat(cad1 [, cad2,..., cadN]: string): string; (lo que hay entre corchetes
es opcional). Lo que hace es crear una cadena de texto a partir de varias
que va concatenando. cadena := concat(cad1, cad2,
cad3) es lo mismo que si tecleásemos: cadena
:= cad1 + cad2 + cad3
- delete. Borra parte de una cadena. El formato es procedure
delete(var cad: string; posic: integer; cuantos: integer): string;
y lo que hace es eliminar "cuantos" letras a partir de la posición
"posic": si TEXTO es 'JUAN PEREZ', delete(texto, 2, 5) haría
que TEXTO pasase a ser 'JEREZ'.
- insert. Inserta una subcadena dentro de una cadena.
Su formato es procedure Insert(texto: string; var donde: string;
posic: integer); donde "texto" es la cadena que queremos insertar,
"donde" es la cadena inicial en la que queremos que se inserte, y "posic"
es la posición de "donde" en la que se insertará "texto".
- length. Dice la longitud de una cadena de texto:
function length(cad: string): integer;
- pos. Indica la posición de una subcadena dentro de
una cadena: function pos(subcadena: string; cadena: string): byte; Por
ejemplo, pos('Pérez', 'Juan Pérez') devolvería un
6. Si la subcadena no es parte de la cadena, devuelve 0.
- val. Obtiene el valor numérico de una cadena de texto. Por
ejemplo, en VAL('250', valor, codigoDeError), "valor" obtendría el valor 250,
mientras que en VAL('250 es un numero', valor, codigoDeError), "valor"
obtendría el valor 0, y "codigoDeError" sería 4, que es la posición en la que
se ha encontrado un símbolo no numérico.
Vamos a ver un ejemplo que las use:
(* CADENAS.PAS, Ejemplo de funciones de cadenas *)
(* Parte de CUPAS5, por Nacho Cabanes *)
program cadenas;
var
frase: string;
numero: integer;
codigoError: integer;
begin
frase := 'Esta es una frase de ejemplo';
writeln('La primera palabra (letras 1 a 4) es: ', copy(frase, 1, 4) );
writeln('Si anadimos mas texto: ', concat(frase, ' facilito') );
delete(frase, 6, 2);
writeln('Si borramos la segunda palabra (letras 5 a 7) es: ', frase );
insert('si es', frase, 6);
writeln('Y si insertamos una nueva segunda (y tercera) palabra: ', frase);
writeln('La longitud de la frase es: ', length(frase) );
writeln('Y la primera a parece en la posicion: ', pos('a', frase) );
frase := '25 unidades';
writeln('Ahora la frase es: ', frase);
val(frase, numero, codigoError);
writeln('Y el doble de su valor es: ', numero*2 );
writeln('La conversión ha sido correcta hasta la posición: ', codigoError );
end.
(* Resultado de este programa:
La primera palabra (letras 1 a 4) es: Esta
Si anadimos más texto: Esta es una frase de ejemplo facilito
Si borramos la segunda palabra (letras 5 a 7) es: Esta una frase de ejemplo
Y si insertamos una nueva segunda (y tercera) palabra: Esta si es una frase de ejemplo
La longitud de la frase es: 31
Y la primera a parece en la posicion: 4
Ahora la frase es: 25
Y el doble de su valor es: 50
Finalmente la frase es: 25 unidades
Y el doble de su valor es: 0
La conversion ha sido correcta hasta la posicion: 3
*)