Está en la página 1de 98

1

TEMA 2
PROGRAMACIN
2
TEMA 2. PROGRAMACIN
1. ALGORITMOS Y PROGRAMAS
2. ELEMENTOS BSICOS DE UN LENGUAJE DE PROGRAMACIN. PASCAL
3. DATOS. TIPOS BSICOS
4. ENTRADA Y SALIDA
5. SELECCIN
6. ITERACIN
7. OTROS TIPOS DE DATOS
3
CAPITULO 1. ALGORITMOS Y PROGRAMAS
1. ALGORITMOS
2. EL LENGUAJE PASCAL
4
1. ALGORITMOS
Un algoritmo es un procedimiento o un conjunto finito
de pasos que conducen a la resolucin de un
problema o ejecucin de un trabajo.
Algoritmo:
Secuencia de pasos finita, ordenada y no ambigua que
describe la resolucin de un problema.
5
Cuando la ejecucin de ese trabajo queremos que la
realice el ordenador tambin hay que decirle la
secuencia de pasos o instrucciones que debe
ejecutar, pero adems debemos expresar estas
instrucciones en un lenguaje que sea compresible para
el ordenador (en un lenguaje de programacin):
realizaremos un programa.
6
Dos fases para realizacin un programa:
1. Resolucin del problema realizacin del algoritmo
2. Implementacin realizacin del programa
Un programa es un conjunto de instrucciones que
indican al procesador las operaciones que tiene que
realizar.
7
Problema
Algoritmo
Programa
Resolucin
Codificacin
8
Un algoritmo tiene que cumplir las siguientes caractersticas:
- Ser preciso
- Debe expresar el orden entre los pasos
- Debe comportarse siempre de la misma forma en iguales
condiciones
- Debe finalizar
- Independiente del lenguaje de programacin
9
En el diseo de algoritmos, en especial para la resolucin
de un problema complicado, es conveniente subdividir el
problema en varios mas pequeos e intentar
separadamente la resolucin de estos ltimos
(metodologa de diseo descendente).
10
Para expresar el algoritmo se suele usar un pseudocdigo
o utilizar diagramas de flujo.
Por ejemplo vamos a expresar, primero mediante el uso de
un pseudocdigo y despus mediante un diagrama de
flujo, el algoritmo para calcular la suma de los nmeros
desde el 1 y un nmero dado (incluido dicho nmero).
11
Pseudocdigo
Inicio
leer (N);
C:=1;
S:=0;
mientras C<=N hacer
S:=S+C;
C:=C+1
fmientras
escribir (S);
Fin.
12
Inicio
Leer N
C<=N
S S+C
C C+1
Fin
NO SI
MOSTRAR S
S 0
C 1
13
Niklaus Wirth, profesor en el Instituto de Tecnologa de Zrich (Suiza), desarroll en
el ao 1971 el lenguaje Pascal. El nombre de Pascal lo puso en honor al matemtico
francs Blaise Pascal (Pascal destac como matemtico, fsico, filsofo, telogo y
escritor y fue el primero en disear y construir una mquina sumadora).
El profesor Wirth abarc innumerables campos:
- Algoritmos y estructura de datos.
- Desarroll otros lenguajes de programacin adems del Pascal.
- Realiz diseo de hardware y de herramientas CAD.
- ...
Una de sus publicaciones titulada Algoritmos + Estructuras de datos =
Programas es un libro imprescindible.
Todo el trabajo de Wirth ha contribuido enormemente al desarrollo de la informtica
en general y los lenguajes de programacin en particular.
2. LENGUAJE PASCAL
14
El lenguaje Pascal fue creado por Wirth con el objetivo de
disponer de un lenguaje para la enseanza de la
programacin de modo disciplinado y sistemtico, fcil de
utilizar y con la complejidad suficiente para permitir un
correcto aprendizaje.
Por eso existe una gran similitud entre la sintaxis del
pseudocdigo y la de pascal.
15
Pseudocdigo
INICIO
leer (N);
C:=1;
S:=0;
mientras C<=N hacer
S:=S+C;
C:=C+1;
fmientras
escribir (S);
FIN.
BEGIN');
read(N);
C:=1;
S:=0;
while C<=N do
begin
S:=S+C;
C:=C+1;
end;
write ('S);
END.
Pascal
16
Wirth originalmente slo quera que Pascal fuese una
herramienta que sirviera para ensear los conceptos y las
tcnicas de programacin a sus alumnos. Nunca intent
que se usara con fines comerciales (como al final acab
ocurriendo).
PASCAL es especialmente til para la enseanza de buenos
modos de programacin. El hecho de que tenga una
estructuracin muy marcada permite que los programas sean
fciles de leer e interpretar y facilita la escritura de programas
de modo correcto.
17
1. INTRODUCCIN
2. ELEMENTOS DE UN PROGRAMA EN PASCAL
3. ESTILO DE PROGRAMACIN
4. ESTRUCTURA DE UN PROGRAMA PASCAL
CAPITULO 2. ELEMENTOS BSICOS DE UN
LENGUAJE DE PROGRAMACIN
18
Un lenguaje de programacin es un conjunto de reglas,
smbolos y palabras especiales usadas para construir un
programa.
Sintaxis y semntica de los lenguajes:
Sintaxis: conjunto de reglas gramaticales para la
escritura de cada instruccin.
Semntica: conjunto de reglas que dan significado a
cada instruccin.
1. INTRODUCCIN
19
Las palabras y secuencias de palabras que se pueden
utilizar en un programa Pascal se clasifican en:
Literales
Identificadores
Palabras reservadas
Comentarios
2. ELEMENTOS DE UN PROGRAMA EN PASCAL
20
Los literales se utilizan para expresar valores constantes que
pueden ser:
- nmeros enteros: 0 60 -32767
- nmeros reales: 2.9E-39 1.0 3.1416
- caracteres: H : 3
- secuencias de caracteres o cadenas : Hora: #!? 321
21
Los identificadores son nombres que se utilizan para
denominar a las constantes, variables, tipos de datos, nombres
de procedimientos y funciones, etc.
Hay dos tipos:
- Estndares o definidos en el lenguaje. Ejemplos: integer, real, byte,...
- Definidos por el usuario. Ejemplos: total, Nota, DATO1,...
22
Las palabras reservadas son palabras que tienen un
significado especial para el compilador. No se pueden
cambiar, ni se pueden usar como identificadores definidos
por el usuario.
and, array, asm, begin, case, const, constructor
div, do, downto, else, end, file, for, function, goto
if , implementation, in, inline, interface, label, mod
nil, not, object, of, or, packed, procedure, program
record, repeat, set, shl, shr, string, then, to, type
unit, until, uses, var, while, with, xor
23
Un comentario es un texto que se puede insertar en cualquier
lugar del programa, generalmente para explicar algo. No
generan cdigo ejecutable. Se delimitan con llaves { } o
con (* *).
Ejemplos:
- (* Esto es un comentario *)
- {Esto es otro comentario}
24
La mayora de los programas son ledos por otros programadores, distintos del
propio autor.
Todos los lectores deben poder identificar fcilmente el funcionamiento del
programa, localizar y corregir posibles errores y/o modificar el cdigo original.
La lectura de un programa escrito con un estilo inapropiado resulta desagradable
incluso para su autor.
Se recomienda la utilizacin de comentarios para explicar el funcionamiento de
cada porcin de cdigo.
Deben seleccionarse identificadores lo ms descriptivos posibles y atenerse
siempre a los mismos criterios (uso de maysculas o minsculas, _, etc.).
3. ESTILO DE DE PROGRAMACIN
25
Program nombre_programa (parmetros);
.....
declaraciones
.....
begin
.....
instrucciones
.....
end.
4. ESTRUCTURA GENERAL DE UN PROGRAMA PASCAL
26
Cabecera del programa
Program nombre_programa (parmetros);
Todo programa Pascal empieza con la palabra Program seguida
de un nombre que elige el programador para identificar el
programa. A continuacin entre parntesis y separados por
comas, se pueden indicar los ficheros que contienen los datos de
entrada y salida respectivamente.
27
Seccin de declaraciones
La seccin de declaraciones del programa sirve para especificar sin ambigedad
el significado de todos los identificadores que se utilizarn en el programa.
Se pueden incluir diversos tipos de declaraciones:
Declaracin de unidades (Uses)
Declaracin de etiquetas (Label)
Declaracin de constantes que aparecen en el programa (Cons)
Declaracin de tipos de datos definidos por el programador (Type)
Declaracin de las variables que se van a utilizar y la especificacin de
su tipo de datos (Var)
Declaracin de procedimientos y funciones (Procedure y Function)
28
Seccin de sentencias o cuerpo del programa
begin
instrucciones
end.
La seccin de sentencias especifica las acciones que deben ser
ejecutadas por el programa. Consta de un conjunto de instrucciones
separadas por ;
29
Ejemplo:
Program potencia_de_2;
var
a,b : integer;
begin
writeln (Escribe un nmero);
readln (a);
b := sqr (a);
writeln (El cuadrado de , a, es ,b);
end.
CABECERA
DECLARACIONES
CUERPO
30
31
1. LOS DATOS. CONSTANTES Y VARIABLES
2. TIPOS DE DATOS
3. TIPOS DE DATOS BSICOS
4. DECLARACIONES DE CONSTANTES Y VARIABLES
5. ASIGNACION DE VALORES A LAS CONSTANTES
6. ASIGNACION DE VALORES A LAS VARIABLES
7. EXPRESIONES ARITMTICAS. OPERADORES Y FUNCIONES
8. EXPRESIONES LGICAS. OPERADORES
9. FUNCIONES PARA DATOS DE TIPO CARCTER
CAPITULO 3. DATOS. TIPOS BSICOS
32
Un programa opera sobre datos.
Los datos se almacenarn en la memoria el ordenador, en
una determinada posicin, pero para referirnos a ellos
utilizaremos nombres.
Cuando un nombre se utiliza para referirnos a un dato que no
se puede modificar en toda la ejecucin del programa se trata
de una constante.
Cuando un nombre se utiliza para referirnos a una posicin de
memoria cuyo contenido puede variar durante la ejecucin del
programa se trata de una variable.
1. LOS DATOS. CONSTANTES Y VARIABLES
33
Cada dato debe de ser de un tipo especifico.
El tipo de datos afecta a su representacin interna y define la
serie de valores que puede tomar una variable. Cada una de
las variables de un programa debe tener asociado un tipo de
datos y solo uno.
El tipo de datos delimita las operaciones que pueden
realizarse con los datos.
2. TIPOS DE DATOS
34
Tipos de datos
Simples
Estructurados
Bsicos
Definidos por el usuario
3. TIPOS DE DATOS BSICOS
35
1. Numricos
a) Para representar datos naturales y enteros hay varios tipos:
Byte naturales entre 0 y 255
Shortint enteros entre 128 y 127
Integer enteros entre 32768 y 32767
Word naturales menores de 65536
Longint enteros entre 2147483648 y 2147483647
b) Para representar datos numricos reales hay varios tipos:
Real. 11-12 dgitos significativos de 2.9x10
-39
a 1.7x10
38
(en positivos y en negativos)
Single. 7-8 dgitos significativos de 1.5x10
-45
a 3.4x10
38
(en positivos y en negativos)
Double. 15-16 dgitos significativos de 5.0x10
-324
a 1.7x10
308
(en positivos y en negativos)
Extended. 19-20 dgitos significativos de 3.4x10
-4932
a 1.1x10
4932
(en positivos y en negativos)
36
2. Caracteres
Para representar un carcter alfanumrico existe el tipo:
Char
Para un dato del tipo Char se reserva un solo byte de
memoria.
37
3. Booleanos
Una variable booleana solamente puede tomar los valores
Verdadero o Falso.
Para representar los valores TRUE o FALSE se usa el tipo:
Boolean
Para un dato del tipo Boolean se reserva un solo bit de
memoria.
38
En la seccin de declaraciones de un programa se
deben indicar las constantes y variables que se van a
utilizar y expresar el tipo de datos de las variables.
4. DECLARACIONES DE CONSTANTES Y VARIABLES
39
EJEMPLO:
Program Ejemplo;
Const
PI = 3.14159;
UNIDADES = ' radianes ';
Var
n , m : Integer;
z : Real;
Begin
....
....
End.
40
a) Declaracin de constantes
Informa al compilador de que se va a usar un determinado nombre
para referirse a una constante (dato que no va a cambiar en toda la
ejecucin del programa).
Por ejemplo, para declarar las constantes N y C con valores 54 y a
respectivamente, en la seccin de declaraciones del programa,
escribiremos:
Const
N=54;
C=a;
41
El tipo de dato de una constante no es preciso declararlo
explcitamente puesto que queda especificado por el formato
del valor que tiene la constante. Por tanto, el compilador
decide el tipo de la constante ( y el espacio de memoria que ha
de reservar para ella) por el modo en que est escrito el valor
de dicha constante.
42
- Constante entera: es una constante cuyo valor es un nmero
entero.
Por ejemplo, si en la seccin de declaraciones de un programa, se
realizan las siguientes declaraciones de constantes:
P= 21;
M= -38;
N= +89;
P, M y N representan constantes enteras.
43
- Constante real: es una constante cuyo valor es un nmero real
(constante que tiene el punto decimal o est en notacin
cientfica).
Por ejemplo, si en la seccin de declaraciones de un programa,
se realizan las siguientes declaraciones de constantes:
R= -34.45;
T=12.0
L= -23.12E34;
S= 12E-23;
R, T, L y S representan constantes reales.
44
- Constante tipo carcter: es una constante cuyo valor es uno o
varios caracteres entre comas.
Por ejemplo, si en la seccin de declaraciones de un programa,
se realizan las siguientes declaraciones de constantes:
SALUDO= Hola!;
Telfono= 916456123;
C= a ;
SALUDO, Telfono y C representan constantes de tipo
carcter.
45
- Constante booleana: es una constante cuyo valor es True o
False.
Por ejemplo, si en la seccin de declaraciones de un programa,
se realiza la siguiente declaracin de constante:
RESULTADO= TRUE;
RESULTADO representa una constante de tipo booleano.
46
b) Declaracin de variables
Informa al compilador de que se va a usar un determinado
nombre para referirse a una variable y el tipo de datos de dicha
variable (el tipo de las variables ha de indicarse explcitamente).
Por ejemplo, para declarar las variables i de tipo entero, j de tipo
entero y r de tipo real, en la seccin de declaraciones del programa,
escribiremos:
Var
i, j : integer;
r : real;
47
A una constante se le asigna el valor, en el
momento en el que se realiza la declaracin de
dicha constante, en la seccin de declaraciones.
La asignacin se realiza mediante el operador =
A la izquierda del = se escribe el nombre de la
constante y a la derecha su valor.
5. ASIGNACION DE VALORES A LAS CONSTANTES
48
Por ejemplo en la siguiente declaracin:
Const
N= 47.53;
N es el nombre de la constante y 47.53 es el valor
asignado a dicha constante.
49
A una variable se le asigna un valor, en el cuerpo del programa, mediante una
instruccin de asignacin.
La asignacin de un valor a una variable se realiza mediante el smbolo :=
La instruccin de asignacin es de la forma:
v := expresin;
donde v es una variable y la sentencia indica que se asigna a v el valor que resulta
al calcular expresin.
Una expresin esta formada por datos (variables o constantes), operadores y/o
funciones (la expresin puede ser un nico dato, o varios datos unidos por
operadores o funciones).
6. ASIGNACION DE VALORES A LAS VARIABLES
50
Por ejemplo:
- Si queremos asignar a una variable i el nmero 83
escribiremos la instruccin:
i:=83;
- Si queremos asignar a una variable r el resultado de la
suma del coseno de otra variable k con el numero 20
escribiremos:
r:= cos(k)+20;
y si suponemos que la variable k vale (en este momento)
60, la variable r tomara el valor de 20.5
51
IMPORTANTE: Se debe tener en cuenta que el tipo de
valor que devuelve la expresin sea compatible con el tipo
de la variable a la que le es asignado dicho valor.
Por ejemplo en el siguiente programa:
52
Program Uno;
const
Doce = 12.0;
Once = 11;
var
i : Integer;
z : Real;
begin
....
....
end.
Asignaciones incorrectas
i := Doce
i := 24.0
Asignaciones correctas:
i := Once
i := 24
z := Doce
z := 22.4
53
Una expresin aritmtica esta formada por datos (variables o
constantes), operadores aritmticos y/o funcionesaritmticas.
Su resultado es un nmero.
7. EXPRESIONES ARITMTICAS. OPERADORES Y
FUNCIONES
54
Operadores aritmticos
PASCAL dispone de varios operadores aritmticos: +, -, *, ...
NOTA: Cuando se desea operar con mas de dos datos hay
que especificar claramente y sin ambigedad el orden en que
se quieren realizar las operaciones, para ello, podemos
utilizar los parntesis.
55
+
Operador binario suma
Operandos enteros, reales, etc.
Resultado: depende de los operandos
-
Operador binario resta
Operandos enteros, reales, etc.
Resultado: depende de los operandos
*
Operador binario producto
Operandos enteros, reales, etc
Resultado: depende de los operandos.
/
Operador binario divisin real
Operandos enteros, reales, etc.
Si el denominador es 0 da error
Resultado: Siempre de tipo real
DIV
Operador binario divisin
entera
Se aplica sobre enteros
Resultado: De tipo entero
MOD
Operador binario resto
Se aplica sobre enteros
Resultado: De tipo entero
56
IMPORTANTE: PASCAL considera de tipo Integer el
resultado de una expresin aritmtica si en la expresin
aparecen solo datos de tipo integer y no est implicada
una divisin real.
57
EJEMPLO
Program Dos;
Var
i, j, k, l : Integer;
z : Real;
Begin
j := 8;
i := j / 4; Expresin aritmtica incorrecta
k:= j div 5; Expresin aritmtica correcta
l:= j mod 5; Expresin aritmtica correcta
z := j / 4; Expresin aritmtica correcta
....
End.
58
Funciones aritmticas
En Pascal estn predefinidas varias funciones aritmticas
- Tienen un nombre
- Admiten como argumento un dato de tipo numrico determinado
(integer, real)
- Devuelven un valor de un tipo numrico determinado (integer, real)
- Pueden aparecer como parte de una expresin
- Tienen prioridad de clculo dentro de la expresin
59
FUNCIN RESULTADO argumento valor devuelto
abs (x)
devuelve el valor absoluto de x real o entero igual a argumento
arctan (x)
devuelve el arcotangente de x real o entero real
cos (x)
devuelve el coseno de x real o entero real
exp (x)
devuelve el valor de e
x
real o entero real
frac (x)
devuelve la parte decimal de x real o entero real
int (x)
devuelve la parte entera de x real o entero real
ln (x)
devuelve el logaritmo neperiano de x real o entero real
pred (x)
devuelve el nmero entero anterior a x entero entero
random (x)
devuelve un n aleatorio entero entre 0 (incluido) y x entero entero
round (x)
devuelve el entero ms prximo a x (longint) real entero
sin (x)
devuelve el seno de x real o entero real
sqr (x)
devuelve el cuadrado de x real o entero real
sqrt (x)
devuelve la raz cuadrada de x real o entero real
succ (x)
devuelve el nmero entero posterior a x entero entero
trunc (x)
devuelve la parte entera de x (longint) real entero
60
Una expresin lgica esta formada por datos (variables o constantes) no
necesariamente Booleanos y operadores.
Su resultado es un valor Booleano: True o False.
Los operadores lgicos que proporciona el PASCAL son de dos tipos:
1. Relacionales: Operadores que actan sobre datos no Booleanos y
devuelven un valor Booleano.
2. Booleanos: Operadores que actan sobre datos Booleanos devuelven
un valor Booleano.
8. EXPRESIONES LGICAS. OPERADORES
61
Operadores relacionales
Operan con 2 operandos (constantes o variables) del mismo tipo.
Los operandos pueden ser nmeros reales, enteros o caracteres. En el caso de que los
operandos sean caracteres, las operaciones de comparacin se realizan sobre el valor
entero del carcter ASCII correspondiente.
Devuelven siempre un booleano (FALSE o TRUE).
Estos operadores son:
= (igual que)
> (mayor que)
< (menor que)
>= (mayor o igual que)
<= (menor o igual que)
<> (distinto que)
62
Operadores Booleanos
NOT
Opera con un operando de tipo booleano
Devuelve verdadero si se aplica sobre falso y
viceversa
AND
Opera con dos operandos de tipo booleano
Devuelve verdadero si los dos operandos son
verdaderos y falso en caso contrario
OR
Opera con dos operandos de tipo booleano
Devuelve verdadero si uno de los dos
operandos es verdadero y falso en caso contrario
A Not A
V F
F V
A B A and B
V V V
V F F
F V F
F F F
A B A or B
V V V
V F V
F V V
F F F
63
Prioridades de los Operadores
Cuando en una expresin se combinan operadores lgicos y aritmticos tener
cuidado con el orden de prioridad establecido por PASCAL para la aplicacin de
operadores y si es necesario utilizar los parntesis. Los operadores aritmticos
se aplican siempre antes que los lgicos.
Prioridades de ejecucin entre los operadores
=, <>, <, <=, >, >=
4
+, - , OR, AND
3
*, /, DIV, MOD
2
NOT
1
Operador Prioridad
-
+
64
Funciones para datos de tipo carcter
char char devuelve el carcter
posterior a x
succ (x)
char char devuelve el carcter
anterior a x
pred (x)
entero (byte) char devuelve el nmero
que le corresponde al
carcter x en la tabla
ASCII
ord (x)
char entero (byte) devuelve el carcter
que le corresponde al
nmero x en la tabla
ASCI I
chr (x)
TIPO DEL VALOR
DEVUELTO
TIPO DEL
ARGUMENTO
RESULTADO FUNCIN
9. FUNCIONES PARA DATOS DE TIPO CARCTER
65
CAPTULO 4. ENTRADA Y SALIDA
1. Dispositivos de entrada y salida
2. Funciones de entrada/salida
3. La funcin Read
4. La funcin Readln
5. La funcin Write
6. La funcin Writeln
66
1. DISPOSITIVOS DE ENTRADA Y SALIDA
La comunicacin entre el ordenador y el usuario se realiza a travs de los
dispositivos denominados de entrada y salida (E/S , I/O).
Lo mas usual es que un programa tenga que comunicarse con el exterior.
Unas veces la comunicacin se realiza directamente con el usuario a travs del
teclado y la pantalla. Otras, se utilizan los dispositivos de almacenamiento
externo y el programa lee los datos desde un archivo y tambin puede escribir
los resultados en el archivo que se haya indicado para el almacenamiento.
Los dispositivos de E/S por defecto en T. PASCAL son el teclado (entrada) y la
pantalla (salida).
67
Para la entrada de datos desde el exterior a la memoria del ordenador, PASCAL
dispone del procedimiento bsico Read y para la salida de Write.
Ejemplo:
ProgramUno;
{ calcula el cuadrado de un numero entero }
Var
base, resultado: integer;
Begin
Read(base);
resultado := base * base;
Write(resultado);
End.
2. FUNCIONES DE ENTRADA/SALIDA
68
La funcin Read(argumento) asigna a la variable argumento el
valor que le introducimos por el teclado.
La funcin Read realiza una verificacin de que el dato
suministrado corresponde al tipo de dato que se ha definido para
la variable.
Cuando se teclea un dato para una variable de tipo Char o String
no debe ir entre comillas ( ' ' ).
Los valores de variables de tipo Boolean no pueden leerse.
3. LA FUNCIN READ
69
La funcin Read admite varios argumentos, separados por comas.
Read(argumento1, argumento2, argumento3,...)
donde argumento1, argumento2,... son nombres de variables.
La instruccin:
Read(argumento1, argumento2, argumento3,...);
es equivalente al conjunto de instrucciones:
Read(argumento1);
Read(argumento2);
Read(argumento3);
...
- Si los argumentos son de tipo numrico los datos de entrada se deben separar
mediante espacios en blanco (o con la tecla Enter) y finalizar con la tecla Enter.
- Si los argumentos son de tipo char solamente se lee un carcter para cada
argumento (si se escribe un espacio en blanco lo puede tomar como valor de la
variable).
70
Ejemplo:
ProgramDos;
Var
area, base , altura : Integer;
Begin
Read(base, altura);
area := base * altura;
Write(area);
End.
Las siguientes entradas son equivalentes:
a) 20 12 <eoln>
b) 20 <eoln>
12 <eoln>
71
La funcin Readln admite varios argumentos, separados por comas.
Readln(argumento1, argumento2, argumento3,...)
donde argumento1, argumento2,... son nombres variables.
Readln lee el valor de sus argumentos y realiza un cambio de lnea.
La instruccin:
Readln(argumento1, argumento2, ..., argumenton);
es equivalente al conjunto de instrucciones:
Read(argumento1);
Read(argumento2);
...
Readln(argumenton);
4. LA FUNCIN READLN
72
Ejemplo:
ProgramTres;
var
area, base , altura: Integer;
Begin
Readln(base);
Readln(altura);
area := base * altura;
Write (area);
End.
a) Si se introduce como entrada:
20 12 <eoln>
solamente leer el valor 20 para la variable base
b) Si se introduce como entrada:
20 <eoln>
12 <eoln>
leer el valor 20 para la variable base y 12 para la variable altura
73
La funcin Write admite varios argumentos, separados por comas.
WRITE(argumento1, argumento2, argumento3,...)
donde argumento1, argumento2,... pueden ser nombres de variables,
nombres de constantes, formulas o texto entre comillas ( ' ' ).
El procedimiento WRITE escribe en el dispositivo de salida el
contenido de las variables, el contenido de las constantes, el resultado
de la formula o el texto, segn sea el argumento.
5. LA FUNCIN WRITE
74
Ejemplo:
ProgramCuatro;
Var
area, base , altura : Integer;
Begin
Write(Introduce la longitud de los lados en centmetros);
Readln(base,altura);
area := base * altura;
Write(El rea es: , area, cm2);
End.
Si se dan como datos de entrada:
10 12
La salida ser:
El rea es: 120 cm2
75
Formato de salida:
En PASCAL cualquier variable, constante o formula que se incluya en
el argumento del procedimiento Write puede acompaarse de una
especificacin del formato de salida del siguiente modo:
WRITE(nombre: n: m)
donde nombre es el identificador de la variable o constante (tambin se
puede poner una formula), n es el nmero total de espacios que ha
de utilizar cuando se muestra, y m el nmero de que ha de ocupar
la parte decimal (despus del punto) cuando el tipo de variable o
constante sea real.
Los espacios que puedan sobrar, segn sea el contenido de la
variable o la constante, se sitan a la izquierda.
76
Por ejemplo,
Program Cinco;
var
area, base , altura : Integer;
Begin
Write(Introduce la longitud de los lados en centmetros);
Read(base,altura);
area := base * altura;
Write('Area del rectangulo: ':40, area:6, cm2);
End.
Si damos, por ejemplo, los valores 10 y 12 dar como resultado:
Area del rectangulo: 120 cm2
77
En el caso de tratarse de nmeros reales, si no se especifica el nmero de
cifras decimales, se toma por defecto la notacin cientfica.
Estos son algunos ejemplos de escritura de un nmero real:
Write(5632.60:8:1) mostrar: 5632.6
Write(5632.60:10:1) mostrar: 5632.6
Write(5632.60:14:2) mostrar: 5632.60
78
La funcin Writeln es equivalente al Write salvo que despus de escribir los
argumentos realiza un cambio de lnea.
Writeln admite varios argumentos, separados por comas.
Writeln(argumento1, argumento2, argumento3,...)
Writeln puede no tener argumentos (ni parntesis):
Writeln
esta instruccin realiza nicamente un salto de lnea
La instruccin:
Writeln (argumento1, argumento2, ..., argumenton);
es equivalente al conjunto de instrucciones:
Write(argumento1);
Write(argumento2);
...
Writeln(argumenton);
6. LA FUNCIN WRITELN
79
Ejemplo
ProgramSiete;
var
resultado: real;
base, altura: Integer;
Begin
Write(Introduce la base del triangulo en cms: );
Readln(base);
Write(Introduce la altura del triangulo en cms: );
Readln(altura);
resultado := (base * altura)/2;
Writeln(rea del triangulo: ', resultado:5:2, cm2);
End.
Si se le da como datos de entrada el 9 para la base y el 15 para la altura la salida ser:
rea del triangulo: 67.50 cm2
80
81
CAPTULO 5. SELECCIN
1. Introduccin
2. La sentencia IF
3. La sentencia CASE
82
Tres mtodos de control de la ejecucin de las
instrucciones de un programa :
Secuencial
Seleccin
Iteracin
Para la realizacin de una estructura de control selectiva
disponemos de las siguientes sentencias:
- Sentencia IF
- Sentencia CASE
1. INTRODUCCIN
83
SINTAXIS:
if condicin then accin1 else accin2
o bien,
if condicin then accin1
DONDE:
- Condicin: es una expresin Booleana ( su valor ser TRUE o FALSE)
- accin1: es la instruccin (o conjunto de instrucciones) que se ejecutar cuando
la condicin sea verdadera (TRUE).
- accin2: es la instruccin (o conjunto de instrucciones) que se ejecutar cuando
la condicin sea falsa (FALSE).
2. LA SENTENCIA IF
84
Se pueden expresar en el programa en la forma:
if condicin then
accin1
else
accin2;
if condicin then
accin1;
85
Ejemplo: programa que lee una nota e imprime Suspenso si la nota
es menor que 5 y aprobado en caso contrario.
PROGRAMuno;
VAR
nota: real;
BEGIN
writeln (Introduzca el valor de la nota );
read (nota);
If nota < 5 then
writeln ( Suspenso)
else
writeln( Aprobado);
END.
CUIDADO!. No se pone el ;
86
En la sentencia:
If condicin then accin1 else accin2
Tanto accin1 como accin2 pueden ser un conjunto de instrucciones
en vez de una nica instruccin (sentencias compuestas), en este caso
dicho conjunto de instrucciones deben de estar entre Begin y End.
Ejemplo: Programa que lee 3 nmeros enteros e imprime la suma de los
tres nmeros si el primero es negativo y el producto en caso contrario.
87
PROGRAMdos;
VAR
n1, n2, n3, suma, producto: integer;
BEGIN
writeln (Introduzca tres nmeros enteros );
readln (n1,n2,n3);
If n1 < 0 then
begin
suma:=n1+n2+n3;
writeln (La suma es , suma);
end
else
begin
producto:=n1*n2*n3;
writeln (El producto es , producto);
end;
END.
88
PROGRAMdos;
VAR
n1, n2, n3, suma, producto: integer;
BEGIN
writeln (Introduzca tres nmeros enteros );
readln (n1,n2,n3);
If n1 < 0 then
suma:=n1+n2+n3;
writeln (La suma es , suma);
else
producto:=n1*n2*n3;
writeln (El producto es , producto);
END.
ERROR
ERROR
ERROR
ERROR
89
Sentencias IF anidadas:
En una sentencia :
if condicin then
accin1
else
accin2;
Tanto accin1 como accin2 pueden ser instrucciones IF, es decir
puede haber una IF dentro de una IF y dentro de estas IF otras IF y
as sucesivamente.
Ejemplo: programa que dada una nota numrica escriba su
calificacin de texto (suspenso, aprobado,...)
90
PROGRAM tres;
VAR
nota: real;
BEGIN
writeln (Introduzca el valor de la nota );
read (nota);
If nota < 5 then
writeln ( Suspenso)
else
If nota < 7 then
writeln ( Aprobado)
else
If nota < 9 then
writeln ( Notable)
else
writeln ( Sobresaliente);
END.
91
PROGRAM TRES_b;
{programa mucho menos eficiente}
USES CRT;
VAR nota: real;
BEGIN
ClrScr;
WRITE ('Escribe la nota numrica: ');
READLN (nota);
IF nota<5 THEN
WRITE ('SUSPENSO');
IF (nota>=5) and (nota<7) THEN
WRITE ('APROBADO');
IF (nota>=7) and (nota<9) THEN
WRITE ('NOTABLE');
IF (nota>=9) THEN
WRITE ('SOBRESALIENTE');
END.
92
La bifurcacin mltiple mediante sentencias IF anidadas puede ser difcil de leer. Cuando
deben de realizarse diferentes acciones segn sea el resultado de una variable de tipo
ordinal (integer, char) PASCAL proporciona la sentencia de control CASE...END.
SINTASIS:
Case variable of
valores1: accin1;
valores2: accin2;
valores3: accin3;
......
End;
variable es el nombre de una variable de tipo integer o char
valores1, valores2,...son valores que puede tomar la variable. Puede haber un nico valor en cada
lnea o varios. Para especificar estos valores si es un nico valor se escribe dicho valor y si son
varios se separan con comas. Si son varios valores consecutivos se puede escribir el rango:
valor inicial y valor final separados por dos puntos.
accin1, accin2,..: son instrucciones (simples o compuestas)
3. LA SENTENCIA CASE
93
En la sentencia:
Case variable of
valores1: accin1;
valores2: accin2;
valores3: accin3;
......
End;
valores1, valores2,... deben cumplir :
- deben ser valores constantes
- un mismo valor no puede aparecer dos veces
94
EJEMPLO: Programa que escriba el nombre de un mes dado su nmero.
PROGRAM cuatro;
VAR
mes: byte;
BEGIN
writeln (Introduzca el nmero del mes );
read (mes);
Case mes of
1: Writeln ( Enero);
2: Writeln ( Febrero);
..........
12: Writeln ( Diciembre)
End;
END.
95
EJEMPLO: Programa que dada una nota numrica entera escriba su calificacin de texto
(suspenso, aprobado, ...)
PROGRAM cinco;
VAR
nota: byte;
BEGIN
writeln (Introduzca el valor de la nota );
read (nota);
Case nota of
1..4: writeln ( Suspenso);
5,6: writeln ( Aprobado);
7,8: writeln ( Notable);
9 : writeln ( Sobresaliente);
10 : writeln ( Matricula de Honor);
End;
END.
96
Sentencia CASE -ELSE
Case variable of
valores1: accin1;
valores2: accin2;
valores3: accin3;
......
Else
accind
End;
97
EJEMPLO
Programa que al entrar un carcter por el teclado nos diga si se trata de una
letra mayscula, de una letra minscula, de un nmero o si no es letra ni
nmero.
PROGRAM seis;
VAR
c: char;
BEGIN
writeln (teclear un caracter );
read (c);
Case c of
a..z: writeln ( Letra minscula);
A..Z: writeln ( Letra mayscula);
0..9: writeln ( Dgito numrico)
Else
writeln ( No es una letra ni un nmero);
End;
END.
98
99
CAPTULO 6. ITERACIN
1. Introduccin
2. La sentencia WHILE
3. La sentencia REPEAT
4. La sentencia FOR
5. Criterios de eleccin de una sentencia iterativa
100
Todos los programas que hemos visto hasta ahora ejecutan
cada una de sus instrucciones 1 0 veces.
En muchas ocasiones puede interesarnos que una o varias
instrucciones se ejecuten ms de una vez.
- Muchos datos deben tratarse de la misma forma
- Es necesario hacer lo mismo repetidas veces
Para ello disponemos de las siguientes sentencias:
- Sentencia WHILE
- Sentencia REPEAT
- Sentencia FOR
1. INTRODUCCIN
101
Sintaxis:
WHILE condicin DO
accin;
donde:
condicin: es una expresin Booleana ( su valor ser TRUE o FALSE)
accin: es una instruccin o un conjunto de instrucciones que se ejecutar
repetidamente mientras la condicin sea verdadera (TRUE). Se le llama
cuerpo del bucle. Cuando accin sea un conjunto de instrucciones en vez de
una nica instruccin (sentencia compuesta), dicho conjunto de instrucciones
deben de estar entre Begin y End.
2. SENTENCIA WHILE
102
La sentencia:
WHILE condicin DO
accin;
Se ejecuta de la siguiente forma:
Se realiza la 1 comprobacin de la condicin
- si es verdad se ejecuta accin
despus de ejecutar accin se vuelve a comprobar la condicin
si es verdad se ejecuta accin
y as sucesivamente hasta que la condicin sea falsa
- si es falsa no se ejecuta ninguna vez accin y pasa a la siguiente
instruccin (despus de WHILE)
103
Por ejemplo, el siguiente programa suma todos los nmeros
enteros que le introduzcamos hasta que escribamos el 0.
104
ProgramUno;
Var
n , suma: Integer;
BEGIN
suma:=0; {Inicializa la variable suma a 0}
Writeln ( Escribe los nmeros para calcular su suma, termina con el 0);
Read (n); {Debemos leer el primer nmero antes de entrar en el bucle}
{para que se pueda realizar la comparacin de la condicin}
While n <> 0 do {Si el nmero ledo la 1 vez es el 0, no har las
instrucciones}
Begin
suma:= suma + n;
Read (n);
End;
Writeln ( La suma es: , suma);
END.
105
WHILE condicin DO
accin;
Iteracin: cada vez que se ejecuta el cuerpo de un bucle se dice que se
ha producido un paso o iteracin del bucle.
Salida del bucle: cuando se realiza el ltimo paso a travs del bucle y
se pasa a la siguiente instruccin despus de WHILE se dice que el
programa ha salido del bucle.
106
Ejemplo: Programa que calcula el factorial del nmero 8.
Tenemos que calcular
8!
Es decir
1*2*3*4*5*6*7*8
Mientras el ltimo nmero sea menor o igual a 8, vamos a ir
sucesivamente guardando en una variable llamada factorial :
1
1*2
(1*2)*3
(1*2*3)*4
...
(1*2*3*4*5*6*7)*8
107
Program Dos;
Var
i , factorial: Integer;
BEGIN
factorial:=1; {Inicializa la variable factorial a 1}
i:=1; {Debemos inicializar la variable i antes de entrar en el
bucle}
While i <= 8 do
Begin
factorial:= factorial * i;
i:= i+1;
End;
Writeln ( El factorial de 8 es , 8! = , factorial);
END.
108
El ejemplo anterior corresponde a un bucle controlado por contador.
Los bucles controlados por contador se ejecutan un nmero
especificado de veces. Hacen uso de una variable de control del bucle
o variable contadora.
La variable de control debe:
- inicializarse antes del bucle
- la condicin de WHILE es una comparacin en la que
interviene esta variable
- la variable debe incrementarse dentro del bucle
109
Otro ejemplo de bucle controlado por contador:
Programa que lee 10 nmeros enteros y calcula su suma (similar al
Program Uno pero ahora sabemos cuantos nmeros hay que sumar).
110
Program Tres;
Var
n, cont, suma: Integer;
BEGIN
suma:=0; {Inicializa la variable suma a 0}
cont:=1; {Debemos inicializar la variable cont antes de entrar en el bucle}
Writeln ( Escribe los 10 nmeros que quieres sumar ');
While cont <= 10 do
Begin
Read (n);
suma:= suma + n;
cont:= cont + 1;
End;
Writeln ( La suma es: , suma);
END.
111
A veces se utiliza una variable contadora pero no se trata de
un bucle controlado por contador.
La condicin de terminacin del bucle no depende de esta
variable, para lo que se utiliza es para llevar la cuenta de
cuantas veces se ejecuta un bucle.
Ejemplo:
Programa que va leyendo nmeros hasta llegar al 0 y calcula
su media (excluyendo el 0).
112
Program Cuatro;
Var
n, cont , suma: Integer;
BEGIN
suma:=0; {Inicializa la variable suma a 0}
cont:=0; {Inicializa la variable cont a 0}
Writeln ( Escribe los nmeros, para calcular su media , termina con el 0);
Read (n); {Debemos leer el primer nmero antes de entrar en el bucle}
{para que se pueda realizar la comparacin de la condicin}
While n <> 0 do
Begin
suma:= suma + n;
cont:= cont + 1
Read (n);
End;
If cont=0 then
Writeln ( No has introducido ningn nmero)
Else
Writeln ( La media es: , suma/cont:4:2)
END.
113
Sintaxis:
REPEAT
instruccin1;
instruccin2;
. . .
UNTIL condicin
donde:
condicin: es una expresin Booleana ( su valor ser TRUE o FALSE)
instruccin1, instruccin2,...: son las instrucciones que se ejecutaran repetidamente
hasta que la condicin sea verdadera (TRUE), es decir se ejecutan mientras la
condicin es falsa.
3. LA SENTENCIA REPEAT
114
REPEAT
instruccin1;
UNTIL condicin
WHILE condicin DO
instruccin;
WHILE condicin DO
BEGIN
instruccin1;
instruccin2;
. . .
END;
COMPARACIN SINTAXIS:
REPEAT
instruccin1;
instruccin2;
. . .
UNTIL condicin
115
La sentencia:
REPEAT
instruccin1;
instruccin2;
. . .
UNTIL condicin
Se ejecuta de la siguiente forma:
Se ejecuta el bucle siempre una vez
Se comprueba la condicin al final de dicha ejecucin
- si es verdad se termina y pasa a la pasa a la siguiente instruccin (despus de
REPEAT-UNTIL)
- si es falsa se vuelve a ejecutar el bucle
despus de ejecutar bucle se vuelve a comprobar la condicin
si es verdad se termina
si es falsa se vuelve a ejecutar el bucle
. . .
116
EJEMPLO: Realizacin con REPEAT del programa para calcular la suma de
varios nmeros introducidos por el teclado, hasta que escribamos el 0
(anteriormente realizado con WHILE: Programa Uno).
PROGRAM cinco;
Var
n , suma: Integer;
BEGIN
suma:=0;
Writeln ( Escribe los nmeros para calcular su suma, termina con el 0);
Read (n);
Repeat
suma:= suma + n;
Read (n);
Until n = 0;
Writeln ( La suma es: , suma);
END.
117
Qu ocurre si al ejecutar este programa se introduce como primer
nmero el 0?
Si se introdujera como primer nmero el 0, el bucle se
ejecutara una vez y se detendra el programa a la espera de que
le introduzcamos un segundo valor para leer con la instruccin
Read (de dentro del bucle). Adems se habra realizado la
instruccin suma:= suma + n.
Read (n); primer valor
Repeat
suma:= suma + n;
Read (n); espera 2 valor
Until n = 0;
118
Este otro programa soluciona esto ltimo, pero no evita que se haga la
instruccin suma:= suma + n cuando el primer nmero introducido sea
con el que queremos terminar, es ms sumar este nmero siempre:
Program Cinco;
Var
n , suma: Integer;
BEGIN
suma:=0;
Writeln ( Escribe los nmeros para calcular su suma, termina con el 0);
Repeat
Read (n);
suma:= suma + n;
Until n = 0;
Writeln ( La suma es: , suma);
END.
119
EJEMPLO: Programa que calcula el factorial del nmero 8 (Este es un caso de
bucle controlado por contador que en el programa Dos se ha realizado con WHILE).
ProgramSeis;
Var
i, factorial: Integer;
BEGIN
factorial:=1;
i:=1;
Repeat
factorial:= factorial * i;
i:= i+1;
Until i>8
Writeln ( El factorial de 8 es 8! = , factorial);
END.
120
EJEMPLO:
Realizar, con REPEAT-UNTIL, un programa que lee 10 nmeros
enteros y calcula su suma. (Este es otro caso de bucle controlado
por contador que en el programa Tres se ha realizado con WHILE).
121
ProgramSiete;
Var
n, cont, suma: Integer;
BEGIN
suma:=0;
cont:=0; { o poner aqu cont:= 1 y salir del bucle con cont>10}
Writeln ( Escribe los 10 nmeros para calcular su suma ');
Repeat
Read (n);
suma:= suma + n;
cont:= cont + 1;
Until cont = 10;
Writeln ( La suma es: , suma)
END.
122
EJEMPLO:
Realizar, con REPEAT_UNTIL, un programa que lee nmeros
enteros hasta la introduccin de 0 y calcula su media aritmtica,
excluyendo el 0. (Este es un caso de bucle con variable
contadora que en el programa Cuatro se ha realizado con
WHILE).
123
Program Ocho;
Var
n ,cont , suma: Integer;
BEGIN
cont:=0;
suma:=0;
Write ( Escribe los nmeros para calcular ) ;
Writeln ( su media. Termina con el 0);
Read (n);
Repeat
suma:= suma + n;
cont:= cont + 1;
Read (n);
Until n = 0;
Writeln ( La media es: , suma/cont:4:2);
END.
124
En este programa sucede lo mismo que en el programa Cinco: Si
se introdujera como primer nmero el 0, el bucle se ejecutara una
vez y se detendra el programa a la espera de que le
introduzcamos un segundo valor para leer con la instruccin Read
(de dentro del bucle). Adems se habran realizado las
instruccines suma:= suma + n y cont:= cont + 1.
Read (n); primer valor
Repeat
suma:= suma + n;
cont:= cont + 1;
Read (n); espera 2 valor
Until n = 0;
125
Cuando utilizar Repeat-Until en vez de WHILE?
Cuando la iteracin se vaya a ejecutar como mnimo
una vez se puede utilizar Repeat_Until en vez de
While.
126
Sintaxis:
FOR identificador:= valor_inicial TO valor_final DO
accin;
donde:
accin: es una instruccin o un conjunto de instrucciones que se quiere ejecutar
repetidamente. Cuando accin sea un conjunto de instrucciones en vez de una nica
instruccin (sentencia compuesta), dicho conjunto de instrucciones deben de estar
entre Begin y End.
identificador es una variable de tipo ordinal (integer; char) a la que se le asigna
inicialmente el valor valor_inicial y en cada iteracin se incrementa en una unidad
este valor hasta alcanzar el valor_final. El bucle se realiza por ltima vez cuando
identificador ha alcanzado este valor_final.
4. LA SENTENCIA FOR
127
Existe la versin:
FOR identificador:= valor_inicial DOWNTO valor_final DO
accin;
En este caso la variable de control del bucle identificador se
decrementa en uno en cada iteracin (en este caso deber ser
valor_inicial >= valor_final).
128
IMPORTANTE en la utilizacin de FOR
El valor del ndice cambia automticamente dentro del cuerpo del for. El
programador NO lo puede modificar.
En cada paso de la iteracin el valor del ndice se incrementa (si es to) o
decrementa (si es downto) en 1, no puede incrementarse-decrementarse
en otro valor.
El valor del ndice queda indefinido al finalizar la sentencia FOR y no debe
utilizarse. Si puede utilizarse (pero no cambiarse) dentro del bucle.
El bucle se ejecuta con el ndice en su valor_inicial, en su valor_final y en
los valores intermedios.
Si valor_inicial > valor final la sentencia FOR ..TO no se ejecuta ni una sola
vez.
Si valor_inicial < valor final la sentencia FOR .. DOWNTO no se ejecuta ni
una sola vez.
Si valor_inicial=valor final la sentencia FOR se ejecuta una vez.
valor_inicial y valor_final puede ser cualquier expresin que d un
resultado del mismo tipo que el ndice (integer o char)
129
La sentencia FOR se ha diseado para simplificar la escritura
de los bucles controlados por contador, cuando este contador
es de tipo ordinal (entero, char) y varia de uno en uno.
Por ejemplo el programa que calcula el factorial del nmero
8 o el programa que calcula la media de 10 nmeros
(anteriormente hechos con WHILE y con REPEAT) resultan
ms simples con FOR.
130
EJEMPLO: Programa que calcula el factorial del nmero 8.
Program Nueve;
Var
i, factorial: Integer;
BEGIN
factorial:=1;
For i:=1 to 8 do
factorial:= factorial * i;
Writeln ( El factorial de 8 es ,8! = , factorial);
END.
131
EJEMPLO: Programa que calcula el factorial de un
nmero (generalizacin del programa anterior, que
calculaba el factorial del nmero 8, para encontrar el
factorial del nmero que se desee).
132
Program Diez;
Var
n, i, factorial: Integer;
BEGIN
Writeln ( Escribe el nmero del que quieres hallar el factorial ');
Readln (n);
factorial:=1;
For i:=1 to n do
factorial:= factorial * i;
Writeln ( El factorial de , n, es , n,! = , factorial);
END.
133
EJEMPLO
Realizar un programa que calcule la media de 10 nmeros
que sern ledos desde el teclado.
134
Program Once;
Var
n, i , suma: Integer;
BEGIN
suma:=0;
Writeln ( Escribe los 10 nmeros que quieres calcular la media ');
For i:= 1 to 10 do
Begin
Read (n);
suma:= suma + n;
End;
Writeln ( La media es: , suma/10:4:2)
END.
135
Cuando utilizar una u otra sentencia?
For: cuando el nmero de iteraciones sea
conocido antes de entrar en el bucle
utilizaremos For.
La variable de control debe ser ordinal
Repeat Until: si la iteracin se debe ejecutar
como mnimo una vez podemos
utilizar Repeat.
While: En el resto de casos
5. Criterios de eleccin de una sentencia iterativa
136
137
CAPTULO 7. OTROS TIPOS DE DATOS
1. Datos escalares y ordinales
2. Datos estructurados
3. Arrays
6. Tipo de datos string
138
Tipos escalares
Los cuatro tipos de datos bsicos que hemos visto hasta ahora
(Integer, Real, Boolean y Char) tienen dos propiedades:
- estn formados por valores atmicos: a cada identificador
(constante o variable) solamente se le puede asociar un valor
indivisible, es decir que no tiene partes o componentes que puedan
ser accedidas individualmente.
- estn ordenados
1. DATOS ESCALARES Y ORDINALES
139
Los tipos de datos con estas propiedades se dice que son tipos
de datos escalares.
Tipo de datos escalar: Un tipo escalar es aqul en el que el
conjunto de valores est ordenado y cada valor es atmico.
Por ejemplo:
Los valores del tipo CHAR son atmicos y estn ordenados de
forma que se verifica que 'A'<'B'<'C'<'D'...
Los valores del tipo INTEGER son atmicos y estn
ordenados- de forma que se verifica que 1 < 2 < 3 < 4...
140
Tipos ordinales
Los tipos de datos Integer, Boolean y Char tienen adems la propiedad
de propiedad de que cada valor (excepto el primero) tiene un nico
predecesor y cada valor (excepto el ltimo) tiene un nico sucesor.
Los tipos de datos con estas propiedades son tipos de datos ordinales.
Tipo de datos ordinal: Tipo de datos en el que cada valor (excepto el
primero) tiene un nico predecesor y cada valor (excepto el ltimo)
tiene un nico sucesor.
141
Un tipo de datos es estructurado si a cada identificador
(constante o variable) se le puede asociar una coleccin
organizada de valores de otro tipo de datos.
Cada componente de la constante o variable puede ser
accedida individualmente especificando su posicin dentro
de la coleccin organizada.
Un ejemplo de tipo de datos estructurados son los ARRAYS.
2. DATOS ESTRUCTURADOS
142
- ARRAYS UNIDIMENSIONALES
2
3
4
5
1
2
7 5 8
9
7
6
3
8
4
2
1
5
V
- ARRAYS BIDIMENSIONALES
34 27 -12
45 21 7
-16 14 93
77 1 23
A
3. LOS ARRAYS
143
- Qu son?
- Como se declaran en el programa
- Como se accede a cada una de sus componentes
-Como asignarles valores
a) ARRAYS UNIDIMENSIONALES
144
Hay veces en que es necesario almacenar y operar con varios datos. Esto es muy
difcil de hacer si son muchos los valores y cada dato debe almacenarse en una
variable individual.
Por ejemplo, si un conjunto de 20 valores enteros deben leerse e imprimirse en orden
inverso se deben declarar 20 variables distintas de tipo Integer, se debe leer y
guardar cada valor en cada una de las variables y se bebe escribir (en orden inverso)
cada una de las variables. Es decir declararemos las variables (supongamos que
sean a, b, c, e, f, g, ...), leeremos los valores de las variables:
read(a);
read(b);
. . .
read(t);
y escribiremos, en orden inverso, dichos valores:
write(t);
write(' ');
write(s);
write(' ');
. . .
write(a);
145
El problema anterior queda resuelto utilizando una nica variable de tipo
array, a dicha variable le asignaremos los 20 valores y podremos acceder
directamente a cada uno de ellos.
146
Definicin
Un array unidimensional es una coleccin estructurada de
componentes del mismo tipo, cuyas componentes individuales
pueden ser accedidas por su posicin dentro de la coleccin.
Por ejemplo la siguiente variable V, es de tipo array y consta de 10
valores de tipo entero (integer):
23 45 12 7 5 89 76 38 42 15
V
147
donde:
- rango es la especificacin del rango de variacin del ndice. Cada valor
del ndice (dentro de ese rango) identifica la posicin de un elemento de la
tabla. El rango se puede dar especificando el primer y ltimo valor del
ndice separados por dos puntos.
- tipo es el tipo de datos que se almacena en cada una de las posiciones de la
tabla
Declaracin
Una variable de tipo array se puede declarar directamente en la
seccin VAR del programa con la siguiente sintaxis:
Var
Nombrev: Array [rango] of tipo;
148
Por ejemplo la variable V anterior se puede declarar de la siguiente
forma:
Var
V : Array [1..10] of integer;
donde se observa que:
- el rango es 1..10, es decir , el ndice va desde 1 hasta 10
- el tipo de datos de las componentes de V es Integer
149
La declaracin anterior se puede tambin escribir declarando
previamente una constante:
Const
n=10;
Var
V : Array [1..n] of integer;
De esta manera podramos cambiar el programa para que se ejecute
con un array con un nmero diferente de elementos, modificando
para ello nicamente el valor de la constante n.
150
Por ejemplo en las siguientes declaraciones, la variable de nombre
texto, tiene 3001 componentes de tipo char
1 Sin declarar previamente la constante:
Var
texto : Array [0..3000] of char;
2 Declarando previamente la constante:
Const
n=3000;
Var
texto : Array [0..n] of char;
151
El ndice no tiene porque ser de tipo entero, puede ser
tambin de tipo char, enumerado o subrango. En caso de
ser entero no es necesario que empiece en 0 o 1, puede ir
de un valor entero cualquiera a otro (mayor que el
anterior). As, si para un programa tiene sentido utilizar,
por ejemplo, el rango [27..34] se puede hacer.
152
Otra forma de declarar las variables consiste en definir
antes el tipo de variable array, en la seccin Type del
programa, con la siguiente sintaxis:
Type
Nombrearray = Array [rango] of tipo;
y, posteriormente, cualquier variable de este tipo
Nombrearray podr ser declarada en la seccin Var.
153
Por ejemplo, podemos declarar las variables A, B, C (de tipo Array [1..30] of
real) de estas dos maneras:
a) en la forma vista anteriormente:
Var
A, B, C: Array [1..30] of real;
b) realizar primero una definicin de tipo, en la que llamamos vector al tipo
Array [1..30] of real, y posteriormente declarar las variables A, B y C de tipo
vector:
Type
vector = Array [1..30] of real;
Var
A, B, C: vector;
154
Acceso a las componentes del array
Para referirnos a una componente de una variable array, pondremos el nombre de
la variable seguido del nmero de dicha componente entre corchetes.
Por ejemplo para referirnos a la componente 4, o valor incluido en la 4
posicin, de la variable V escribiremos V[4].
En general, si tenemos una variable de nombre Nombrev
Nombrev[expresin]
hace referencia a la componente que ocupa la posicin expresin. Donde
expresin ser un valor o una formula que de cmo resultado un valor
(necesariamente del mismo tipo que el ndice).
155
Con cada componente se pueden realizar todas las operaciones que
permita el tipo de tatos al que pertenecen dichas componentes.
Por ejemplo, en el caso de la variable V, podramos tener la
siguiente instruccin (donde m y n representan variables enteras):
m:= 2*V[5]+n;
Para escribir el valor de una componente, utilizaremos el
procedimiento write (o writeln) y, entre parntesis, la referencia de
la componente. Por Ejemplo:
Writeln( V[6]);
156
Asignacin de valores a un array
Una vez declarada una variable de tipo array podemos
asignarle los valores mediante la instruccin de
asignacin := o leerlos desde el teclado mediante el
procedimiento READ o READLN.
157
Asignacin de valores a un array
instruccin de asignacin (:=)
leerlos desde el teclado (con READ)
158
En la primera forma Pascal permite la asignacin directa (completa)
entre 2 variables del mismo tipo array o bien ir asignando los valores
a cada una de las componentes.
Por ejemplo, supongamos que hemos declarado las siguientes variables:
Var
i: integer;
A, B : Array [1..10] of integer;
la instruccin:
For i:=1 to 10 do A[i]:=2*i;
asigna a la matriz A los 10 primeros nmeros pares
y la instruccin:
B:=A;
asigna a la matriz B los mismos valores que tiene A
159
Para asignar valores a un array, introducindolos desde el teclado, se
deben ir asignando los valores a cada una de las componentes.
Supongamos, por ejemplo que declaramos la variable V:
Var
V: Array [1..7] of integer;
y queremos asignar el valor a dicha variable leyndolo desde el
teclado. La instruccin que utilizaremos para ello ser (en la forma
ms simplificada):
For i:=1 to 7 Read(V[i]);
160
Ejemplo : programa para introducir las notas de un grupo de 25 estudiantes y escribir la de un
estudiante determinado.
ProgramDos;
Const
Numestudiantes = 25;
Var
NOTAS: ARRAY[1.. Numestudiantes] of Real;
n, i: integer
BEGIN
For i:= 1 to Numestudiantes do
Begin
Write (Introducir la nota del estudiante , i, : );
Readln( NOTAS[i]);
End;
Writeln ( De qu estudiante se quiere saber la nota? );
Readln( n);
Writeln (La nota es , NOTAS[n]:3:1 );
END.
161
b) ARRAYS bidimensionales
- Qu son?
- Como se declaran en el programa
- Como se accede a cada una de sus componentes
- Como asignarles valores
162
Definicin
Al igual que un array unidimensional es la estructura de datos usada para
representar una lista o vector, un array bidimensional es la estructura de datos
utilizada para representar una tabla con filas y columnas (o matriz
bidimensional), siendo todos los elementos de la tabla del mismo tipo de
datos.
Array bidimensional: Es una coleccin de componentes, todas del mismo
tipo, de dos dimensiones.
163
34 27 -12
45 21 7
-16 14 93
77 1 23
Por ejemplo la siguiente matriz representa a una variable A,
array bidimensional de nmeros enteros (integer), que tiene 4
filas y 3 columnas:
A
164
Declaracin
Una variable de tipo array bidimensional se declara de la misma forma que una
de tipo array unidimensional, excepto que deben especificarse los dos rangos
correspondientes a la fila y la columna.
Var
Nombrev: Array [rango1, rango2] of tipo.
fila
columna
165
Por ejemplo la variable A anterior se puede declarar de la siguiente
forma:
Var
A : Array [1..4, 1..3] of integer;
donde se observa que:
- el primer rango es 1..4, es decir, el ndice de las filas va desde 1
hasta 4
- el segundo rango es 1..3, es decir, el ndice de las columnas va
desde 1
hasta 3
- el tipo de datos de las componentes de A es Integer
166
La declaracin anterior se puede tambin escribir, como en el caso de
los arrays unidimensionales, declarando previamente las constantes:
Const
m=4;
n=3;
Var
A : Array [1..m, 1..n] of integer;
De esta manera podramos cambiar el programa para que se ejecute
con un array con un nmero diferente de elementos, modificando para
ello nicamente el valor de la constantes m y n.
167
En el caso de los arrays bidimensionales tambin se puede definir
antes el tipo de variable array, en la seccin Type del
programa, con la siguiente sintaxis:
Type
Nombrearray = Array [rango1, rango2] of tipo;
y, posteriormente declarar cualquier variable de tipo Nombrearray
en la seccin Var.
168
Por ejemplo, podemos declarar las variables A, B, C (de tipo Array [1..10, 1..15]
of real) en la forma usual:
Var
A, B, C: Array [1..10, 1..15] of real;
o bien, realizar primero una definicin de tipo, y posteriormente declarar alas
variables A, B y C de tipo matriz:
Type
matriz = Array [1..10, 1..15] of real;
Var
A, B, C: matriz;
169
Acceso a las componentes del array
A cada componente de una variable array bidimensional, se accede
mediante un par de ndices :
- el primer ndice ser una expresin que indique la fila
- el segundo ndice ser una expresin que indique la columna
170
Se pueden utilizar dos sintaxis diferentes:
- Una forma es poner cada uno de los ndices entre corchetes detrs del nombre de
la variable:
nombrev[expresion1] [expresin2]
Por ejemplo para referenciar el elemento que est en la fila 3 y columna 4 de la variable A,
escribiramos:
A[3][4]
- La segunda forma, llamada forma abreviada, es la ms comnmente utilizada y
consiste en poner el nombre de la variable seguido de los dos ndices separados por
comas y entre corchetes:
nombrev[expresion1, expresin2]
Por ejemplo para referenciar el elemento que est en la fila 3 y columna 4 de la variable M,
escribiramos:
A[3 , 4]
171
Asignacin de valores
a un array bidimensional
- En la primera forma, se puede realizar una asignacin directa entre dos
variables del mismo tipo o bien ir asignando los valores a cada una de
las componentes.
- Si queremos leer los valores del array se debe realizar componente a
componente.
instruccin de asignacin (:=)
leerlos desde el teclado (con READ)
172
Por ejemplo, supongamos que se declaran las siguientes variables:
Type
tablanotas=array [1.. 100,1..5] of Integer;
Var
NOTAS: tablanotas;
alumno, asig: Integer;
La variable notas se ha definido para que contenga las notas finales
de 100 alumnos en cada una de las 5 asignaturas de un curso y estas
notas se quieren leer desde el teclado.
173
Las instrucciones para introducir los valores (las notas
en la matriz) seran:
Asignaturas
A
l
u
m
n
o
s
10
0
2
1
5 4 3 2 1
5 4 0 8 8
10 9 8 7 5
5 10 9 8 6
For alumno:=1 to 100 do
For asig:=1 to 5 do
Begin
Write (Alumno: , alumno, Asignatura: , asig,: , Nota: );
Readln (NOTAS [alumno, asig]);
End;
174
Esta sentencia har que en la ejecucin del programa tengamos
(en cursiva y rojo los valores que vamos introduciendo desde el
teclado):
Asignaturas
A
l
u
m
n
o
s
10
0
2
1
5 4 3 2 1
5 4 0 8 8
10 9 8 7 5
5 10 9 8 6
Alumno: 1 Asignatura: 1 Nota: 6
Alumno: 1 Asignatura: 2 Nota: 8
Alumno: 1 Asignatura: 3 Nota: 9
Alumno: 1 Asignatura: 4 Nota: 10
Alumno: 1 Asignatura: 5 Nota: 5
Alumno: 2 Asignatura: 1 Nota: 5
Alumno: 2 Asignatura: 2 Nota:
175
Las instrucciones anteriores realizan una lectura secuencial de una
matriz por filas: se van leyendo los valores de una fila antes de pasar
a leer los de la siguiente fila.
La introduccin de datos puede hacerse tambin por columnas:
For asig:=1 to 5 do
For alumno:=1 to 100 do
Begin
Write (Asignatura: ,asig, Alumno: ,alumno,: Nota: );
Readln (NOTAS [alumno,asig]);
End;
176
Si una vez introducidos los datos en una matriz queremos mostrarlos, las
instrucciones para ello podran ser:
For alumno:=1 to 100 do
Begin
Writeln(El alumno: , alumno);
For asig:=1 to 5 do
Writeln( Tiene en la asignatura , asig, la nota: ,
NOTAS[alumno,asig]);
Writeln;
End;
177
Esta sentencia har que en la ejecucin del programa veamos:
Asignaturas
A
l
u
m
n
o
s
10
0
2
1
5 4 3 2 1
5 4 0 8 8
10 9 8 7 5
5 10 9 8 6
El alumno: 1
Tiene en la asignatura 1 la nota: 6
Tiene en la asignatura 2 la nota: 8
Tiene en la asignatura 3 la nota: 9
Tiene en la asignatura 4 la nota: 10
Tiene en la asignatura 5 la nota: 5
El alumno: 2
Tiene en la asignatura 1 la nota: 5
Tiene en la asignatura 2 la nota: 7
Tiene en la asignatura 3 la nota: 8
Tiene en la asignatura 4 la nota: 9
Tiene en la asignatura 5 la nota: 10
...
El alumno: 100
Tiene en la asignatura 1 la nota: 8
Tiene en la asignatura 2 la nota: 8
Tiene en la asignatura 3 la nota: 0
Tiene en la asignatura 4 la nota: 4
Tiene en la asignatura 5 la nota: 5
178
Las instrucciones anteriores realizan una escritura secuencial de una matriz por
filas: se van escribiendo los valores de una fila antes de pasar a escribir los de la
siguiente fila.
La escritura secuencial de datos puede hacerse tambin por columnas:
For asig:=1 to 5 do
Begin
Writeln(Asignatura: ,asig);
For alumno:=1 to 100 do
Writeln(Alumno: ,alumno, Nota: ,NOTAS[alumno,asig]);
Writeln;
End;
179
- Qu son?
- Como se declaran en el programa
- Como se accede a cada una de sus componentes
- Como asignarles valores
4. TIPO DE DATOS STRING
180
Cuando se quieren manipular grupos de caracteres ordenados
o cadenas de caracteres, como por ejemplo un texto, se
dispone del tipo de datos String.
Este tipo de datos es una especializacin basada en los
arrays unidimensionales de caracteres a la que se aade
funcionalidad.
181
Declaracin
La declaracin de una variable de este tipo es:
Var
Nombrev: string[n]
donde n es el mximo nmero de caracteres que
queremos guardar en la variable.
En la versin de Turbo-Pascal que estamos usando no se
pueden definir tipos string cuyo tamao mximo supere
los 255 caracteres (es decir con n>255).
182
Cuando declaramos una variable como string[n] se reservan n+1
bytes en la memoria, uno por cada carcter que se puede
almacenar y otro byte adicional para guardar la longitud actual
que tiene la cadena almacenada en la variable.
Nota: En las ltimas versiones de Turbo Pascal se puede usar este
formato string[n] o simplemente string que equivale a
string[255] y ocupar 256 bytes.
183
Se puede acceder a cada elemento de una variable (o constante)
string con el nombre de dicha variable (o constante) seguido de una
expresin entre corchetes cuyo valor especifica la componente
individual que ha de ser accedida
nombre [expresin]
Slo puede accederse, en un momento dado, a aquellos elementos
(caracteres) de una variable string cuyo ndice se encuentre
comprendido entre 1 y la longitud actual de la variable string. La
informacin referente a la longitud actual de la variable se obtiene
mediante la funcin predefinida length.
Acceso a las componentes del string
184
Funcin Lenght
La funcin Lenght proporciona la longitud lgica (actual) de una
variable de tipo string, devuelve un valor de tipo entero.
Por ejemplo, supongamos que se ha declarado la siguiente variable:
Var
cad: string[25];
y que el valor de dicha variable en un momento dado del programa
es:
'Esto es un string'
el valor de Lenght(cad) sera entonces 17
185
Una vez declarada una variable de tipo STRING podemos asignarle
su valor mediante la instruccin de asignacin := o leerlo desde el
teclado mediante el procedimiento READ o READLN.
Asignacin de valores a un string y escritura de un
string
186
En el primer caso Pascal permite:
- la asignacin de valor a una variable componente a componente
(como en el caso de los arrays).
- la asignacin de todo el valor a la variable mediante una nica
instruccin de asignacin (la asignacin directa de una cadena).
- la asignacin de otra variable del mismo tipo STRING (esta
asignacin tambin estaba permitida en los arrays).
187
Por ejemplo, supongamos que hemos declarado las siguientes variables:
Var
Cad1, Cad2: string;
- Asignacin directa de una cadena:
la instruccin:
Cad1:= 'Este es el valor de la variable ahora';
asignar a la variable Cad1 el texto entre comillas.
- Asignacin de otra variable del mismo tipo STRING.
la instruccin:
Cad2:=Cad1;
asignar a la variable Cad2 el valor que tenga Cad1.
188
Por ejemplo, el siguiente programa:
Program Cuatro
Var
cad: string[20];
Begin
cad:='Hola';
Writeln(Lenght (cad));
End.
asigna a la variable cad el valor Hola y escribe 4 (ya que esta es la
longitud de la variable puesto que su valor es Hola)
189
Para dar un valor a una variable de tipo STRING introducindolo desde
el teclado utilizaremos el procedimiento READ o READLN. Se puede
leer el valor de la variable componente a componente (como en el
caso de los arrays) pero tambin se puede leer todo el valor de la
variable mediante una nica instruccin READ.
Por ejemplo, supongamos que hemos declarado la variable:
Var
Cad: string;
-la instruccin:
Read(Cad);
asignar a la variable Cad el texto que escribamos.
190
La escritura del valor de una variable o constante de tipo string
puede realizarse, de forma secuencial, componente a
componente, pero tambin es posible escribir el valor de todo el
contenido de la variable o constante con una nica instruccin
write que tenga por argumento dicha constante o variable.
191
EJEMPLO:
Program Cinco
Const
saludo = 'Que tal estas';
Var
persona: string[20];
Begin
Readln(persona);
Writeln(saludo, ' ', persona);
End.
192
si hemos introducido como valor para la variable persona
Mara Luisa
escribir:
Que tal estas Maria Luisa
193
Operaciones que se pueden realizar con valores de tipo STRIG:
Comparacin.
Se pueden utilizar los operadores relacionales: <, >, >=, >=, <>
( para ello se tiene en cuenta el orden alfabtico)
Concatenacin
Concatenar dos valores de tipo strnig consiste en unirlos, esto se
puede hacer de dos formas:
- Con el operador +
- Con la funcin Concat(argumento1, argumento2,...,
argumenton)
Donde argumento1; argumento2;...; argumenton son variables o constantes de tipo string
194
Ejemplo:
PROGRAM Seis;
Const
Lugar = saln';
Var
facultad : Char;
modulo , clase : String[6];
BEGIN
facultad := 'C';
modulo := '-XVI';
clase := facultad + modulo;
Writeln(' Sera en el ',Lugar,' ',clase);
END.
sera igual poner:
clase :=Concat(facultad, modulo);
195
En el programa anterior
Lugar:
Lugar es una constante del tipo String ya que su valor es un
conjunto de caracteres
modulo, clase:
modulo y clase son dos variables de tipo String a las que,
en el cuerpo del programa, se les asigna su valor

También podría gustarte