sábado, 31 de mayo de 2008

Instrucciones

Aunque un programa en Pascal puede contar con una sola instrucción (también llamada enunciado, sentencia o estatuto), normalmente incluye una cantidad considerable de ellas. Uno de los tipos de instrucciones más importantes lo forman las instrucciones de asignación; las cuales asignan a una variable (por medio del símbolo := ) , el resultado de la evaluación de una expresión.

La sintaxis para las instrucciones de asignación es :

identificador := expresión ;

Al símbolo := le llamaremos, en lo sucesivo : "simbolo de asignación"

Los siguientes son ejemplos de instrucciones de asignacion :

numero     := 100 ;
importe := precio * cantidad ;
hipotenusa := sqrt(sqr(cateto_op)+sqr(cateto_ad ));

Es posible construir una instrucción vacía escribiendo sólamente el punto y coma de una instrucción.

Así podemos escribir :

valor := valor + 1;;

Lo que incluye las dos instrucciones :

valor := valor + 1;
y la instrucción vacía : ;

Bloques de instrucciones

En todo lugar donde sea válido utilizar una instrucción simple, es posible utilizar una instrucción compuesta o bloque de instrucciones, el cual se forma agrupando varias instrucciones simples por medio de los identificadores begin y end.

Por ejemplo:

begin 
suma := 1000.0;
incr := 20.0;
total := suma + incr
{Obsérvese la ausencia de punto y coma
al final de la instrucción}

end.

No es necesario escribir el punto y coma antes de end ya que el punto y coma se usa para separar instrucciones, no para terminarlas.

begin y end son delimitadores de bloque.

Manejo de cadenas

En matemáticas o en programación, una cadena de caracteres, palabra, ristra de caractares o frase (String en inglés) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos).

En matemáticas es habitual usar las letras w, x, y,... para referirnos a las cadenas. Por ejemplo, si tenemos un alfabeto Σ = {a, b, c}, una cadena podría ser: x = aacbbcba.

Desde un punto de vista de la programación, si no se ponen restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo el juego caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc). En este mismo ámbito (el de la programación), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array en inglés). Las cadenas se pueden almacenar físicamente:

  • Seguidas.
  • Enlazados letra a letra.

Generalmente son guardados un carácter a continuación de otro por una cuestión de eficiencia de acceso.

Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la llama cadena vacía.


Operaciones con cadenas

Siguiendo en el ámbito de la informática, al considerar las cadenas como un tipo de datos, hay que definir (o conocer) cuales son las operaciones que podemos hacer con ellas, en principio estas podrían ser muchas y llegar a ser muy sofisticadas, pero las que podríamos considerar básicas son:

  • Concatenación: Consiste en unir dos cadenas o más (o una cadena con un carácter) para formar una cadena de mayor tamaño.
  • Búsqueda: Consiste en localizar dentro de una cadena una subcadena más pequeña o un carácter.
  • Extracción: Se trata de sacar fuera de una cadena una porción de la misma según su posición dentro de ella.

(Operaciones con cadenas en el lenguaje C)

Representación

Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carácter de esa cadena (un char en inglés) suele ser representado entre comillas simples ('p'). Por ejemplo, en C:

char c = 'a';

char str[5] = "hola";

Generalmente para acceder a un carácter en una posición determinada se suele usar la forma variable[posición] como cuando se accede a un vector.

Para poder mostrar una comilla (") dentro de la cadena y no tener problemas con las comillas que la delimitan, se usan secuencias de escape. Esto se aplica a otros caracteres reservados o no imprimibles como el retorno de carro. No obstante, las expresiones para producir estas secuencias de escape dependen del lenguaje de programación que se esté usando. Una forma común, en muchos lenguajes, de escapar un carácter es anteponiéndole un «\» (sin comillas), p. e.: «\"» (sin comillas).

Cadenas dinámicas y estáticas

Las cadenas pueden ser de naturaleza dinámica (pueden alterar su longitud durante el tiempo de ejecución), o de naturaleza estática (su longitud es fija a lo largo del tiempo de ejecución). En este segundo caso el programador debe prever que al recorrer la cadena los indíces no se vayan de los límites previstos (C no permite que las cadenas crezcan automáticamente de forma explíta, mientras que C# sí).

El final de la cadena se delimita de diferente manera en uno u otro caso:

  • Mediante un carácter de fin de cadena ("\0" en C) para las cadenas de tipo dinámico.
  • Mediante una propiedad de la cadena que delimite su longitud (Count en C#) para las de tipo estático.

Operadores

Los operadores sirven para combinar los términos de las expresiones.

En Pascal, se manejan tres grupos de operadores :


Operadores aritméticos

Son aquellos que sirven para operar términos numéricos. Estos operadores podemos clasificarlos a su vez como :

  1. UNARIOS
  2. BINARIOS

Los operadores UNARIOS son aquellos que trabajan con UN OPERANDO.

Pascal permite el manejo de un operador unario llamado :

MENOS UNARIO

Este operador denota la negación del operando, y se representa por medio del signo menos ( - ) colocado antes del operando.

Por ejemplo :

Si x tiene asignado el valor 100, -x dará como resultado -100 ; esto es que el resultado es el inverso aditivo del operando.

Los operadores BINARIOS, son los que combinan DOS OPERANDOS , dando como resultado un valor numérico cuyo tipo será igual al mayor de los tipos que tengan los operandos.

La siguiente tabla muestra los símbolos de los operadores binarios de Pascal así como los nombres de las operaciones que realizan.

Operadores aritméticos básicos

Operador Operación Operandos Ejemplo Resultado
+ Suma real , integer a + b suma de a y b
- Resta real , integer a - b Diferencia de a y b
* Multiplicación real , integer a * b Producto de a por b
/ División real , integer a / b Cociente de a por b
div División entera integer a div b Cociente entero de a por b
mod Módulo integer a mod b Resto de a por b
shl Desplazamiento a la izquierda
a shl b Desplazar a la izquierda b bits
shr Desplazamiento a la derecha
a shr b Desplazar a la derecha b bits

Conviene observar lo siguiente :

  1. Cuando los dos operandos sean del tipo integer, el resultado será de tipo integer.
  2. Cuando cualquiera de los dos operandos, o ambos, sean del tipo real, el resultado será de tipo real.
  3. Cuando, en la operación div, OPERANDO-1 y OPERANDO-2 tienen el mismo signo, se obtiene un resultado con signo positivo; si los operandos difieren en signo, el resultado es negativo y el truncamiento tiene lugar hacia el cero.

Ejemplos :

7    div 3     = 2
(-
7) div (-3) = 2
(-
7) div 3 = -2
7 div (-3) = -2
15.0 div 3.0 = no válido
15 div (4/2) = no válido

La operación div almacena sólo la parte entera del resultado, perdiéndose la parte fraccionaria (truncamiento).

  1. La operación MODULO está definida solamente para OPERANDO-2 positivo. El resultado se dará como el entero no negativo más pequeño que puede ser restado de OPERANDO-1 para obtener un múltiplo de OPERANDO-2 ; por ejemplo :
6     mod 3    = 0
7 mod 3 = 1
(-
6) mod 3 = 0
(-
7) mod 3 = -1
(-
5) mod 3 = -2
(-
15) mod (-7) = -1

En la operaciones aritméticas, debe asegurarse que el resultado de sumar, restar o multiplicar dos valores, no produzca un resultado fuera de los rangos definidos por la implementación para los diferentes tipos.


Operadores relacionales


Una RELACIÓN consiste de dos operandos separados por un operador relacional. Si la relación es satisfecha, el resultado tendrá un valor booleano true ; si la relación no se satisface, el resultado tendrá un valor false. Los operadores deben ser del mismo tipo, aunque los valores de tipo real, integer y byte pueden combinarse como operandos en las relaciones. A continuación se describen los operadores relacionales utilizados en Pascal:

Símbolo Significado
= IGUAL que
<> NO IGUAL que
< MENOR que
> MAYOR que
<= MENOR o IGUAL que
>= MAYOR o IGUAL que

Ejemplos:

Relación Resultado
20 = 11 false
15 <> true
PI > 3.14 true
'A' <> false
'A' = 65 true



Operadores lógicos


Al igual que las relaciones, en las operaciones con operadores lógicos se tienen resultados cuyo valor de verdad toma uno de los valores booleanos true o false.

Los operadores lógicos en Pascal son :

NOT

Sintaxis : not operando

Descripción : Invierte el valor de verdad de operando.

Ejemplo :
Si bandera tiene un valor de verdad true, not bandera produce un resultado con valor de verdad false.

AND

Sintaxis : operando.1 and operando.2

Descripción : Produce un resultado con valor de verdad true cuando ambos operandos tienen valor de verdad true; en cualquier otro caso el resultado tendrá un valor de verdad false.

OR

Sintaxis : operando.1 or operando.2

Descripción : Produce un resultado con valor de verdad false cuando ambos operadores tienen valores de verdad false; en cualquier otro caso el resultado tendrá un valor de verdad true.

XOR

Sintaxis : operando.1 xor operando.2

Descripción : Un operando debe tener valor de verdad true y el otro false para que el resultado tenga valor de verdad true.

Turbo Pascal también permite las siguientes operaciones entre los bits de operandos exclusivamente de tipo entero :

AND

Sintaxis : operando.1 and operando.2

Descripción: Pone a ceros los bits de operando.2
cuyos correspondientes en operando.1 estén en ceros.

Los valores se pasan a binario, y, sobre cada bit de operando.1 se
realiza la operación and lógica con el correspondiente bit de operando.2.

Ejemplo : 29 and 30 = 28

Cuya forma en binario es :

    0000000000011101 = 29 (operando.1)
and 0000000000011110 = 30 (operando.2)
_____________________
0000000000011100 = 28 (resultado)
OR ( o inclusiva )

Sintaxis : operando.1 or operando.2

Descripción : Pone a uno los bits de operando.1 cuyos correspondientes bits en operando.2 están a uno.

Ejemplo : 17 or 30 = 31

En binario:

   0000000000010001 = 17 (operando.1)
or 0000000000011110 = 30 (operando.2)
_____________________
0000000000011111 = 31 (resultado)
XOR ( o exclusiva )

Sintaxis : operando.1 xor operando.2

Descripción : Invierte el estado de los bits de operando.1, cuyos correspondientes en operando.2 están a uno.

Ejemplo : 103 xor 25 = 126

En binario:

    0000000001100111 = 103 (operando.1)
xor 0000000000011001 = 25 (operando.2)
______________________
0000000001111110 = 126 (resultado)
SHL

Sintaxis : operando.1 shl operando.2

Descripción : Desplaza hacia la izquierda los bits de operando.1, el número de posiciones establecidas por operando.2.

Los bits que salen por el extremo izquierdo se pierden.

Ejemplo : 10 shl 2 = 40

En binario:

         0000000000001010 = 10 (operando.1)
shl 2 <= 0000000000101000 = 40 (resultado)
(operando.2)
SHR

Sintaxis : operando.1 shr operando.2

Descripción : Desplaza hacia la derecha los bits de operando.1 el número de posiciones establecidas por operando.2.

Los bits que salen por el extremo derecho se pierden

Ejemplo : 125 shr 3 = 15

En binario :

         0000000001111101 = 125 (operando.1)
shr 3 => 0000000000001111 = 15 (resultado)
(operando.2)

Definicion de constantes

En la definición de constantes se introducen identificadores que sirven como sinónimos de valores fijos.

El identificador reservado Const debe encabezar la instrucción, seguido por una lista de asignaciones de constantes. Cada asignación de constante debe consistir de un identificador seguido por un signo de igual y un valor constante, como se muestra a continuación:

Const
valor_maximo =255;
precision =0.0001;
palabra_clave='Tutankamen';
encabezado =' NOMBRE DIRECCION TELEFONO ';

Un valor constante puede consistir de un número ( entero o real ), o de una constante de caracteres.

La constante de caracteres consiste de una secuencia de caracteres encerrada entre apóstrofes ( ' ), y, en Turbo-Pascal, también puede formarse concatenándola con caracteres de control ( sin separadores ), por ejemplo :

'Teclee su opción ==>'^G^G^G ;

Esta constante sirve para desplegar el mensaje :

Teclee su opción ==> 

y a continuación suena el timbre tres veces.

Las constantes de caracteres pueden estar formadas por un solo carácter de control, p.ej. :

hoja_nueva = ^L 

Existen dos notaciones para los caracteres de control en Turbo Pascal, a saber :

  1. El símbolo # seguido de un número entero entre 0 y 255
    representa el carácter al que corresponde dicho valor decimal en el codigo ASCII.
  2. El símbolo ^ seguido por una letra, representa el correspondiente carácter de control.

Ejemplos :

#12  representa el valor decimal 12
( hoja_nueva o alimentación de forma ).
#$1B representa el valor hexadecimal 1B ( escape ). 
^G   representa el carácter del timbre o campana. 
^M   representa el carácter de retorno de carro.

Pascal proporciona las siguientes CONSTANTES PREDEFINIDAS :

Nombre Tipo Valor
pi real 3.1415926536 (Sólo en Turbo Pascal)
false boolean
true boolean
MaxInt integer 32767
idemás de las constantes literales para los tipos integer y real con representación decimal y hexadecimal, y las constantes literales para el conjunto de caracteres ASCII, más los caracteres especiales ( no incluidos en el conjunto estándar del ASCII )

Variables

Una variable es un contenedor de bits que representan a un valor. Se emplean para almacenar datos que pueden cambiar durante la ejecución de un programa. En función de los datos que almacenan se clasifican en:

  • Variables primitivas: almacenan datos numéricos, valores lógicos o caracteres.
  • Variables referenciadas: asociadas a objetos o instancias de una clase. Por ejemplo, para almacenar cadenas de caracteres se empleará una variable referenciada asociada a la clase String, para almacenar información sobre la fecha actual, otra asociada a la clase Date, etc. Se estudiarán más adelante.

Además de estos dos tipos de variables se estudiarán los arrays de variables primitivas y de variables referenciadas. Un array, como se verá en el tema correspondiente, es una variable referenciada asociada a la clase Object (clase madre de todos los objetos Java).

Se va a profundizar un poco más en el concepto de variable: como se ha comentado anteriormente, no es nada más que un contenedor de bits que representan a un valor. Ocurre lo siguiente:

  • En el caso de variables primitivas, los bits representan un número entero que coincide con el valor de la variable, con lo que se va a trabajar a lo largo del programa. Por ejemplo, se tienen variables de tipo byte (utilizan 8 bits en memoria) que pueden almacenar números enteros comprendidos entre -128 y 127, de tipo int (utilizan 32 bits en memoria) para almacenar enteros entre, aproximadamente, -2150 millones y 2150 millones, de tipo float para números decimales, etc.

  • En el caso de variables referenciadas o asociadas a objetos, los bits representan un numerajo que permite acceder al valor de la variable, es decir, al objeto, pero no es el valor u objeto en sí.

Todos los nombres empleados para hacer referencia a variables deben cumplir lo siguiente:

  • Su primer carácter debe ser una letra, el símbolo del subrayado o el carácter dólar $.
  • No son válidos las palabras reservadas de Java.
  • No se admiten espacios en blanco.
  • Son case-sensitive (sensibles a mayúsculas).

Aparte de estas normas conviene que los nombres de las variables indiquen qué dato almacenan con el fin de facilitar la lectura del programa y, por otra parte, si un nombre tiene más de dos palabras la primera letra de la primera palabra irá en minúscula, la primera letra de la segunda palabra en mayúscula, ídem con la tercera y así sucesivamente.

Ejemplo:

int miVariableEntera=100;

Variables primitivas

Son variables que almacenan números enteros. Se pueden dividir en los siguientes tipos:

NOTA: el tipo de variable en que se almacena por defecto un numero entero es int. El valor por defecto asociado a cualquier variable entera no inicializada es 0.

Son variables que almacenan datos numéricos con decimales. Se pueden dividir en los siguientes tipos:

NOTA: el tipo de variable en que se almacena por defecto un numero decimal es double. El valor por defecto asociado a cualquier variable real no inicializada es 0.0.

Son variables que almacenan dos posibles valores: true o false. No se corresponden con ningún valor numérico.

Ejemplo:

boolean tienesCalor=true;

NOTA: el valor por defecto asociado a cualquier variable booleana no inicializada es false.

Son variables que almacenan caracteres individuales (letra, numero, signo ?, etc...). El carácter que se inicializa debe ir entre apóstrofes o comillas simples 'a'.

El código de caracteres empleado por Java es Unicode y recoge los caracteres de prácticamente todos los idiomas importantes del mundo (son unos 65.536). Los caracteres Unicode del alfabeto occidental corresponden a los primeros 256 enteros; es decir van desde [0, 255].

A cada carácter le corresponde unívocamente un número entero perteneciente al intervalo [0, 65536] o a [0, 255] si se trabaja sólo con el alfabeto occidental. Por ejemplo, la letra ñ es el entero 164. Más adelante se verá que el casting entre variables primitivas enteras y la variable char está permitido.

Ejemplo:

char miCaracter='n';

char miCaracter1=110; (ídem antes, pero mediante el entero que le corresponde según Unicode)

char miCaracter2='\u006E'; (ídem antes, pero según notación Unicode. La notación Unicode, en general, es así: \uXXXX siendo X un dígito o cifra fundamental del sistema de numeración hexadecimal (0,1,2,...,9,A,B,...,F))

Asociado a este tipo de variable se tienen las secuencias de escape. Se emplean para representar caracteres especiales (por ejemplo, unas comillas dentro de una instrucción que exige una cadena entrecomillada) y caracteres no imprimibles como el tabulador, salto de línea, etc. Van precedidos de la contrabarra. Algunos de ellos se detallan en la tabla siguiente:

Palabras Reservadas

Este es el listado de algunas de las palabras reservadas, es decir aquellas que no puedes usar para darle el nombre a las variables o constantes que vayas a definir:

AND, ARRAY, BEGIN, CASE, CONST, DIV, DO, DOWNTO, ELSE, END, FILE, FOR, FORWARD, FUNCTION, GOTO, IF, IN, LABEL, MOD, NIL, NOT, OF, OR, PACKED, PROCEDURE, PROGRAM, RECORD, REPEAT, SET, THEN, TO, TYPE, UNTIL, VAR, WHILE, WITH, ABSOLUTE, ASM, DESTRUCTOR, IMPLEMENTATION, INTERFACE, OBJECT, PRIVATE, SHR, UNIT, VIRTUAL, CONSTRUCTOR, EXTERNAL, INLINE, INTERRUPT, SHL, STRING, USES, XOR.

Tampoco se pueden usar nombres de procedimientos o funciones incluidas en Turbo Pascal, por ejemplo : circle, random, settime, entre otros.

Nombres de variables (identificadores)

Un identificador es un nombre que define a una variable, una función o un tipo de datos.
Un identificador válido ha de empezar por una letra o por el carácer de subrayado _, seguido de cualquier cantidad de letras, dígitos o subrayados.
OJO: Se distinguen mayúsculas de minúsculas.
No se pueden utilizar palabras reservadas como int, char o while.
Muchos compiladores no permiten letras acentuadas o eñes.


Ejemplos válidos:


  char letra;
int Letra;
float CHAR;
int __variable__;
int cantidad_envases;
double precio123;
int __;


Ejemplos no válidos:


int 123var; /* Empieza por dígitos */
char int; /* Palabra reservada */
int una sola; /* Contiene espacios */
int US$; /* Contiene $ */
int var.nueva; /* Contiene el punto /
int eñe; /* Puede no funcionar */

TIPOS DE DATOS


Un tipo de datos consiste en una colección de valores junto con unas operaciones básicas y una relaciones definidas para esos valores. Un tipo de datos es simple si sus valores no pueden dividirse en otros valores.
Un tipo de datos es estructurado si sus valores están formados por colecciones de valores de otro tipo (simple o estructurado). Un tipo de datos simple es ordinal si se puede definir un orden sobre los valores del tipo.
Ejemplo de tipos de datos simples ordinales.

El tipo integer : valores: {-32768,32767}
operaciones : +, -, *, DIV, MOD
relaciones : <, <=, >, >=, =, <>

El tipo boolean: valores: {true, false}
operaciones: NOT, AND, OR
relaciones: <, <=, >, >=, =, <>

El tipo char: valores: Caracteres del código ASCII
operaciones: succ, pred, ord, chr
relaciones: <, <=, >, >=, =, <>

Introducción a la programación

Tipos de datos ordinales.
EL TIPO ENUMERADO
Tipo enum
Valores: Los definidos por los identificadores

Operaciones:

  • succ(x) – Sucesor de x. No está definido para el último valor del tipo enumerado.
  • pred(x) – Predecesor de x. No está definido para el primer valor del tipo enumerado.
  • ord(x) – Número ordinal de un valor en el orden del tipo, empezando la numeración por 0
  • chr(x) – Carácter cuyo número ordinal es x en el orden del tipo.

Relaciones: = ,<>, <, >, <=, >=.

  • Los identificadores nombran los valores del tipo y no deben aparecer en otros tipos enumerados.
  • Los valores están ordenados por el orden en que aparecen en la definición.
  • Las variables pueden utilizarse como variables de control de un bucle FOR
  • Los valores de un tipo enumerado no se pueden leer de teclado ni mostrarse por pantalla. Se deben escribir
procedimientos de e/s

Ejemplo:
(Lunes, martes, Miercoles, Jueves, Viernes, Sabado, Domingo)
(Primera, Segunda, Litera)
(Sota, caballo, Rey)
( Identificador )


EL TIPO SUBRANGO

• Las constantes son valores de algún tipo ordinal llamado tipo base.
• Debe cumplirse Constante1 ≤ Constante2

Valores : los valores x del tipo base asociado tales que:

Constante1 ≤ x ≤ Constante2.
Operaciones: las del tipo base.
Relaciones: las del tipo base.
Dos tipos de datos son compatibles si son el mismo tipo, si uno es subrango del otro o ambos son subrangos del mismo tipo base.
Si A y B son dos tipos compatibles, entonces si se puede utilizar A también se puede utilizar B.

Ejemplos:
Lunes..Viernes
1..5
-5..5
‘a’..’z’
0..maxint
VAR

x : 1..5;
y : -5..5;
z : integer;

BEGIN

x:=3;
y:=x;
z:=x+y
Constante .. Constante

I
LA SECCIÓN TYPE

La sección de tipos se utiliza para declarar nuevos tipos o para renombrar tipos previamente definidos.
Secc. tipos
Los identificadores dan nombre al tipo.
Los tipos son tipos de datos predefinidos o tipos de datos definidos por el usuario.
Ejemplo:
TYPE

Simbolo = char;
Colores = (Rojo, Negro, Azul, Blanco);
DiasMes = 1..31;
Uso de los tipos en la definición de variables:

VAR

Codigo : Simbolo;
ColorAsiento, ColorCarroceria : Colores;
NumDias : DiasMes;
Parámetros con tipos definidos por el usuario
PROCEDURE Ejemplo
(Marca : Simbolo, VAR Color : Colores);

VAR

CuantosDias : DiasMes;

BEGIN
...
Los tipos enumerados y subrangos no pueden aparecer como tipos de retorno ni como parámetros de un subprograma. Deben usarse los nombres simbólicos de los tipos dados en la sección de tipos.

TYPE Identificador = Tipo ;


EJEMPLO

TYPE

DiasSemana = (Lunes, Martes, Miercoles, Jueves,
Viernes, Sabado, Domingo);
{Procedimiento para escribir los días de la semana.}
PROCEDURE EscribirDia (Dia : DiasSemana);

INICIO

CASE Dia OF
Lunes : escriba ‘Lunes’;
Martes : escriba‘Martes’;
Miercoles : escriba‘Miercoles’;
Jueves : escriba‘Jueves’;
Viernes : escriba‘Viernes’;
Sabado : escriba‘Sabado’;
Domingo : escriba‘Domingo’;
FIN
FIN;
{Procedimiento para leer un día de la semana}

LeerDia (VAR Dia : DiasSemana);
VAR c : char;

Inicio

escriba:(‘Introduzca el primer carácter del dia’); lea(c);
CASE c OF
‘L’ : Dia := Lunes;
‘M’ : Dia := Martes;
‘X’ : Dia := Miercoles;
‘J’ : Dia := Jueves;
‘V’ : Dia := Viernes;
‘S’ : Dia := Sabado;
‘D’ : Dia := Domingo;
fin
fin;

CADENAS DE CARACTERES

Tipo : string[Limite]
Valores :
Cadenas de caracteres de longitud máxima Limite.
Operaciones :
  • Acceso a los caracteres de la cadena. cad[n]
  • Asignación. La longitud del valor que se asigna debe ser menor que la declarada para la cadena. Sila longitud es mayor sólo se asignan los caracteres de más a la izda.
  • Lectura. read, readln. Se lee la cadena hasta el fin de línea o hasta el fin de fichero. Si la longitud de la cadena resultante es mayor que la declarada para la variable la cadena se trunca.
  • Escritura : write, writeln
  • Longitud : length(x). Función que devuelve la longitud de la cadena x.
  • Concatenación : concat(c1,c2,...cn). Función que devuelve la cadena formada al concatenar c1..cn en este orden.
  • Es equivalente a : c1+c2+....+cn,
  • Copiar : copy(cad, indice, tamaño). Función que devuelve la subcadena de tamaño tamaño que se encuentra en cad a partir de la posición indice.
  • Posición : pos(cad1, cad2). devuelve la posición inicial de la primera aparición de cad1 dentro de
  • cad2 o 0 si cad1 no aparece en cad2.
  • Inserción : insert(cad1, cad2, posicion). Se modifica la cadena cad2, insertando el valor de cad1 en la posición especificada.

Borrar : delete(cad, posicion, tamaño). El procedimiento modifica la variable cad borrando la subcadena del tamaño especificado que comienza en la posición dada.

Relaciones :
<, <=, >, >= ,=, <>.
Si las cadenas tienen longitudes diferentes se comparan como si la cadena más corta tuviese blancos al final.
• Limite debe ser una constante.
• Si se omite el Limite: String, entonces la longitud máxima es de 255 caracteres.
• La cadena vacia se representa mediante un par de comillas consecutivas ‘’.

Ejemplos

CONST tam = 100;
VAR
Nombre : string[30];
Direccion : string[25];
Observaciones : string;
Carta : string[Tam];

inicio
Nombre := ‘Ana Lopez Esteban’;
IF Nombre[1] = ‘A’ entonces.....
Carta := ‘Querido ‘ + Nombre+‘estoy en’+Direccion; lea (Observaciones);
Nombre := copy(Obsevaciones, 8,5);
escriba(Carta)