Apuntes

Anuncio
FUNDS. INFORMÁTICA
1
TEMA 1. CONCEPTOS BÁSICOS
¾ Obtención de un programa. Fases:
• Análisis → Solución del problema o algoritmo (razonamiento).
• Codificación → Transcripción del algoritmo a un lenguaje de programación.
• Resultado → Un programa.
¾ Algoritmo:
• Consta de una descripción de la información asociada al problema y una descripción del
modo de tratamiento de esta información.
• Algoritmo: secuencia ordenada y finita de pasos, exenta de ambigüedades, que lleva a la
solución de un problema dado.
• Propiedades:
9
9
9
Generalidad
Eficiencia
Independencia de la máquina y del lenguaje
• Programar: es la técnica (arte) de desarrollar algoritmos.
• Programa: conjunto de instrucciones directamente comprensibles por un sistema de
tratamiento de información que permite ordenar la ejecución de la secuencia de pasos elegida
para resolver el problema dado.
• Codificación: la tarea de expresar un algoritmo en términos de lenguaje comprensible por
el computador.
• Sistema operativo: conjunto de programas que facilitan la utilización del sistema
informático permitiendo:
9
9
9
9
9
Edición, puesta a punto y ejecución de programas
Gestión de ficheros
Seguridad y protección
Facturación y contabilidad
Etc…
Controla el funcionamiento de la máquina:
9
9
9
9
9
Gestión de memoria
Control de periféricos
Acceso a ficheros
Asignación de recursos y ordenación de tareas
Etc…
¾ Lenguajes de programación:
Elementos de un lenguaje:
9
Léxica (palabras, símbolos, etc…)
9 Palabras clave (IF, DO, GOTO, ARRAY, etc…)
9 Identificadores
9 Operadores
9 Separadores
9 Sintaxis (unión de palabras y frases)
9 Semántica (significado)
¾ Ejecución de un programa:
• Ejecución interpretada:
1)
Obtención de la siguiente instrucción del programa
2)
Análisis de la instrucción y determinación de las acciones a ejecutar
3)
Ejecución de las correspondientes acciones
• Ejecución compilada:
1)
Traducción previa (compilación) del programa fuente a una versión equivalente en
lenguaje máquina. Esta versión se denomina programa objeto
2)
El programa objeto se une, eventualmente, con los subprogramas de biblioteca que
utiliza para formar lo que se denomina el programa ejecutable, tarea ejecutable o
aplicación. Esta operación se denomina edición de uniones (link)
3)
El programa ejecutable puede ser cargado en la memoria del computador para ser
ejecutado cuantas veces se desee, sin necesidad de volverlo a compilar
FUNDS. INFORMÁTICA
program p1
begin
write(‘Hola’);
end.
Hola
0100110101110010
0100100101000110
0100101100101001
0001110011001001
COMPILADOR
p1.p (nombre del fichero fuente)
2
p1.0 (nombre del fichero objeto)
EJECUCIÓN
¾ Obtener un programa ejecutable:
FASE
ANÁLISIS
EDICIÓN
COMPILACIÓN
EDICIÓN DE
UNIONES
(LINKING)
EJECUCIÓN
Se hace con...
Papel y boli
Editor de textos
E.I.P. (I.D.E.)
Compilador E.I.P.
En merlin...
----------
Resultado
Algoritmo(s)
Tipo fichero
----------
nedit
Programa fuente
Fichero de texto
pc ___
Programa objeto
Fichero binario
Sí
Compilador E.I.P.
pc___
Programa
ejecutable
Fichero binario
¿Errores?
Programa
ejecutable
(<nombre
programa>)
Ejecución del
El elegido
programa para los
datos elegidos
E.I.P.: Entorno Integrado de Programación
nedit: editor de textos
pc: pascal compiler
¾ Errores:
• Léxico-sintácticos: se detectan en fase de Compilación
• Semánticos: son causados por errores en el Análisis y se detectan (a veces) en fase de
Ejecución
¾ Estructura general de un programa:
• Cabecera
Algoritmo nombre_alg (lista de parámetros)
• Declaraciones
(Descripción del algoritmo)
Principio
(Pre: Descripción de los parámetros de entrada)
9 Instrucciones
(Post: Descripción de los parámetros de salida)
fin.
Tipos
Constantes y Variables
Procedimientos y Funciones
Asignaciones
Instrucciones de entrada-salida
Instrucciones de control
Llamadas a procedimientos y funciones
...
(Cabecera)
(Declaraciones)
(Instrucciones)
TEMA 2. TIPOS DE DATOS. ACCIONES ELEMENTALES
¾ Dato:
Abstracción de la realidad que se clasifica en tipos (predefinidos o no)
• Abstracción
• Asociado a un valor
9 Constante: valor inalterable
9 Variable: valor alterable
No
FUNDS. INFORMÁTICA
3
• Se opera
• Representado internamente en un sistema informático
¾ Tipo de dato:
Caracterizado por:
• Dominio de posibles valores
• Modo común de representación de sus valores (interno y externo)
• Conjunto de operadores asociados
¾ Clasificación:
• Estáticos (tamaño fijo)
9 Simples (un solo valor)
9
9
9
Escalares numerables
9 Definidos por enumeración
9 Entero
9 Booleano
9 Carácter
Escalares no numerables
9 Real
Puntero
9 Estructurados (varios valores)
9
9
9
9
Arrays (vectores, matrices, etc…)
Registros
Conjuntos
Ficheros secuenciales
• Dinámicos (tamaño variable)
9 Listas
9 Tablas
9 Árboles
¾ Tipos de datos escalares:
Un tipo de datos escalar viene caracterizado por:
• Un dominio finito de valores
• Relación de orden total entre sus valores
Admiten operadores binarios de relación (se obtiene como resultado un valor de tipo
booleano):
= igual que
<> desigual que
< menor que
<= menor o igual que
> mayor que
>= mayor o igual que
Funciones sucesor y predecesor (si y solo si el conjunto de valores del tipo de datos es
numerable):
sucesor (17) = 18
predecesor (5) = 4
sucesor (‘H’) = ‘I’
predecesor (‘n’) = ‘m’
Estas funciones no están definidas para el mayor y el menor elementos del dominio de
valores con respecto a sucesor y predecesor respectivamente.
•
Tipos escalares numerables estándar: ENTERO, CARÁCTER, BOOLEANO
Suelen estar predefinidos
¾ Tipo ENTERO:
Está definido como un intervalo de valores enteros comprendidos entre dos
valores constantes: minentero y maxentero.
integer: enteros, 2 bytes, 4 bytes
longint: enteros largos, 8 bytes
Representación algorítmica
456
-3452 0
etc…
Representación interna
2 bytes
0000 0000 0000 0000 (1er bit → signo)
FUNDS. INFORMÁTICA
4
0 → 0000 0000 0000 0000
1 → 0……………… 0001
2 → 0……………… 0010
3 → 0……………… 0011
4 → 0……………… 0100
-1→ 1111 1111 1111 1111
Operaciones
9 Típicas (de relación, sucesor y predecesor)
9 Aritméticas
+ suma
- resta
* producto
div división entera
mod resto de la división entera
9 Ordinal
¾ Tipo CARACTER:
char
Comprende como mínimo
• Caracteres alfabéticos: ‘A’, ‘B’, …, ‘Z’, ‘a’, ‘b’, …, ‘z’
• Caracteres numéricos o dígitos: ‘0’, ‘1’, …, ‘9’
• Otros caracteres imprimibles: ‘+’, ‘-‘, …
Representación algorítmica
Entre apóstrofos (‘’)
Representación interna
Códigos alfanuméricos (ASCII). Un dato de tipo carácter se almacena ocupando
1 byte (8 bits)
ASCII: American Standard Code for Interchange of Information
Operaciones
9 Relación
9 Ordinal y cardinal
ord(‘A’) = 65
chr(65) = ‘A’
ord(‘o’) = 48
chr(48) = ‘o’
ord(‘ ‘) = 32
chr(32) = ‘ ‘
¾ Tipo BOOLEANO:
boolean
Dominio del tipo booleano: falso, verdad
Representación interna
Sería suficiente con 1 bit, pero se emplean bytes
Operaciones
9 Lógicas binarias
OR
ó lógico o unión lógica
AND y lógico o intersección lógica
9 Lógicas unitarias
NOT negación lógica
TABLAS DE VERDAD
v ≡ 1; f ≡ 0
A
1
1
0
0
¾ Tipo REAL:
real
B
1
0
1
0
A and B
1
0
0
0
A or B
1
1
1
0
not A
0
0
1
1
FUNDS. INFORMÁTICA
5
Problema de precisión: R solo se puede representar con una determinada
precisión. La precisión con límite de paso constante (de 0,1 en 0,1 p.e.) no es adecuada.
Representación de tipo exponencial: para números pequeños la precisión es mayor y para
números grandes la precisión es menor.
Mantisa · Bexponente
B: base (2 ó potencia de 2
Ojo con la comparación de números reales (a = b)
Representación algorítmica
456.3
-3156.77
+456.5E-7
(E+n = 10n)
-18.7E+8
22.222
-23.45E+3
Operaciones
9 Relación (como escalares) excepto predecesor y sucesor
9 Aritméticas
+ suma
- resta
* producto
/ cociente
(no hay función potenciación)
9 De biblioteca
abs(x)
valor absoluto
sqr(x)
elevar al cuadrado
sqrt(x)
raíz cuadrada
sin(x)
seno de x (en radianes)
cos(x)
coseno de x (en radianes)
arctan(x)
arco tangente (resultado en radianes)
ln(x)
logaritmo neperiano
exp(x)
exponencial (ex)
trunc(x)
truncar “x” devolviendo el mayor valor entero “y” tal que y<=x
...
round: redondear
odd: impares
¾ ASIGNACIÓN INTERNA
Una variable declarada (creada) tiene un valor indefinido
Operador asignación :=
Sintaxis
<variable> := <expresión>
Semántica
1)
Evaluar
2)
Asignar
El valor resultante de evaluar <expresión> debe pertenecer al mismo tipo de dato que
<variable>; sino incompatibilidad.
Ejemplos:
x := x + 1;
c := a * b + c / d
respuesta := (a < b + c) and not (x > 10.5)
Nivel de prioridad de operadores:
Mayor prioridad NOT
*
/
DIV MOD AND
+
OR
Menor prioridad <
<=
=
>=
>
<>
IN
En caso de conflicto de operadores de un mismo nivel, la expresión se evalúa de izda a dcha
¾ ASIGNACIÓN EXTERNA
FUNDS. INFORMÁTICA
6
Datos introducidos desde el exterior
Sintaxis
leer(<variable>)
read(<variable>)
leerypasarlinea(<variable>)
readln(<variable>)
lecturamúltiple(<variables>) read(<variable1>,<variable2>,<...>)
Semántica
1)
Se busca el tipo de dato de <variable>
2)
Se lee del dispositivo de entrada una secuencia de caracteres cuya sintaxis
corresponda a la representación en notación algorítmica de un dato del tipo asociado
a la variable
3)
Se realiza la conversión
4)
Se asigna el valor
¾ Instrucción para la SALIDA
Salida de los datos por el dispositivo de salida (pantalla)
Sintaxis
escribir(<expresión>)
write(<expresión>)
escribirypasarlinea(<expresión>)
writeln(<expresión>)
escrituramúltiple(<expresiones>)
write(<expresión1>,<expresión2>,<...>)
Semántica
1)
Se evalúa <expresión> obteniendo un resultado
2)
Se realiza la conversión del valor obtenido desde su representación interna a su
representación algorítmica equivalente
3)
Se escribe el valor resultante en su forma algorítmica por el dispositivo de salida de
datos
Modificadores de formato
 Variable entero o carácter:
write(a : 5) →deja 5 espacios totales para escribir la variable
 Variable real:
write(b : 5 : 2) → deja 5 espacios totales de los cuales destina dos para decimales
¾ Tipo STRING: introducción.
string[25] → longitud máxima entre corchetes (256 por defecto)
Sirve para almacenar cadenas de caracteres
TEMA 3. COMPOSICIÓN
¾ Tipos de composición:
• Secuencial → secuencia de instrucciones
• Iterativa → repetición de instrucciones
• Condicional → ejecución condicional de una u otra instrucción
• Recursiva
¾ Composición SECUENCIAL:
Se necesita para establecer el orden en el que deben ser ejecutadas las acciones del algoritmo.
Éste será determinado simplemente por el orden en el que aparecen las instrucciones en el
algoritmo.
¾ Composición CONDICIONAL:
Se establece una condición a través de la cual se seguirá la ejecución de un bloque de
instrucciones u otro.
Sintaxis
if <condición> then
<bloque1>
else
<bloque2>
FUNDS. INFORMÁTICA
7
Semántica
1)
Evalúa <condición> obteniendo un valor booleano (verdadero o falso)
2)
Si es verdadero ejecuta <bloque1> y si es falso ejecuta <bloque2>
Caso degenerado
if <condición> then <bloque>
Selección múltiple
Se trata de una composición condicional en la que tenemos un número finito de acciones
alternativas (se debe ejecutar una y sólo una de ellas en función del estado del algoritmo). No
hay que dejar ningún caso sin especificar, es decir, debe cubrir todo el rango de valores
posibles para <variable>
case <variable> of
<valor1> : <bloque1>;
* En algunos lenguajes de
<valor2> : <bloque2>;
programación se utiliza ‘else’ o
‘others’
...
<valor-n> : <bloque-n>;
otherwise* <bloque-otros-casos>
end
¾ Composición ITERATIVA:
• Tipo primero (iteración condicionada)
Sintaxis
while <condición> do
<bloque>
Semántica
1)
Evalúa <condición> obteniendo un valor booleano (verdadero o falso)
2)
Si es falso concluye la ejecución de la iteración, si es verdadero se ejecuta
<bloque> y se vuelve al punto anterior
Aplicación
Método de inducción
1)
Identificar el caso trivial y su solución
2)
Ley de recurrencia
3)
Condición para su resolución
Resolución del problema en un caso trivial; {Solución de P0}
i := 0 {“i” representa el índice del problema resuleto}
while “no esté resuelto el problema” do begin
i := i + 1; {actualización, sino bucle infinito}
“Resolver el problema Pi a partir de la solución del problema Pi-1”
end;
Comprobaciones
1)
2)
3)
4)
•
¿Funciona bien el caso trivial?
¿Funciona bien el caso general? → hacer la traza con un caso sencillo
¿Se actualiza la condición de salida?
¿Se ha ajustado la condición de salida?
Tipo segundo (iteración condicionada)
Sintaxis
repeat
<bloque>
until <condición>
Semántica
1)
Ejecuta <bloque>
2)
Evalúa <condición>
3)
Si el valor anterior es falso vuelve al punto 1; sino concluye la iteración
FUNDS. INFORMÁTICA
•
8
Equivalencia con tipo primero
Equivale a
<bloque>
while not <condición> do
<bloque>
Tipo tercero (iteración indexada)
Sintaxis
for <índice>: = <valor-inicial> to (o bien downto) <valor-final> do
<bloque>
Observaciones
1)
Una vez ejecutado <bloque> el índice incrementa su valor de forma automática
2)
<índice> es un identificador de variable perteneciente a un tipo escalar numerable
3)
<valor-inicial> y <valor-final> son expresiones del mismo tipo
4)
El valor de la variable <índice> no debe ser modificado
5)
Después de ejecutar el bucle, el valor de <índice> queda indefinido
TEMA 4. SUBALGORITMOS: PROCEDIMIENTOS Y FUNCIONES
¾ Procedimiento: es un algoritmo parametrizado que define una instrucción virtual y puede ser
utilizado tantas veces como se desee
¾ Comunicación entre algoritmos:
• Sólo entrada = transmisión por valor
Sintaxis
Cabecera del procedimiento
procedure <nombre_procedimiento>(<nombre_n-variables> : <tipo_variables>; ...);
{...}
Llamada al procedimiento (desde el programa principal)
<nombre_procedimiento>(<expresión1>,<expresión2>,...,<expresión-n>)
Semántica
1)
Se evalúan <expresión1>, ..., <expresión-n>, obteniendo n valores
2)
Se asigna al parámetro i-ésimo del procedimiento <nombre_procedimiento> el valor
resultante de evaluar <expresión-i>
3)
Se ejecuta el algoritmo correspondiente al procedimiento <nombre_procedimiento>
Los parámetros y las variables de un procedimiento son variables locales:
 Tienen un nombre
 Pertenecen a un tipo de dato
 Se les asigna un valor (parámetros sólo) en el momento de la llamada y puede ser
alterado
 Su ámbito es el propio procedimiento
El ámbito de un objeto (variable) se situará en el algoritmo en el cual esté definido e irá desde
el punto de su definición hasta el fin del algoritmo
A
ALGORITMO A
Definición de los
objetos X, Y, Z
ALGORITMO B
Definición de los
objetos Y, V
Begin
...
end; {de B}
Begin
...
end. {de A}
Xa
Ya
Za
B
Yb
Vb
FUNDS. INFORMÁTICA
9
Comunicación mediante variables globales
Problemas:
1)
Los algoritmos no pueden ser diseñados independientemente del entorno
2)
Falta de parametrización (utilización inadecuada de variables)
3)
Efectos laterales
La comunicación mediante transmisión de datos por valor permite una independencia del
entorno y la introducción de parámetros de entrada. Se recomienda evitar la técnica de
comunicación mediante variables globales.
• Entrada y salida = transmisión por referencia
Sintaxis
Cabecera del procedimiento
procedure <nombre_procedimiento> ( var <nombre_n-variables> : <tipo_variables>;...);
{...}
Llamada al procedimiento (desde el programa principal)
<nombre_procedimiento> (<variable1>,<variable2>,...,<variable-n>)
Observaciones
1)
Tanto en la declaración como en la llamada los parámetros transmitidos por
referencia deben ser identificadores de variables, no expresiones
2)
Los parámetros quedan definidos en la declaración del procedimiento y no deben
redefinirse en la lista local de variables
3)
El número y el tipo de los parámetros deben coincidir en la declaración y en la
llamada
4)
Los identificadores de los parámetros de los procedimientos son “alias” locales de los
identificadores de las variables que reciben
5)
Los parámetros por valor se pueden representar mediante cajas a caballo del ámbito
del procedimiento simbolizando la duplicación producida (se crea una nueva variable
donde se almacenará el valor transmitido). En la llamada se pone el valor recibido en
dicha caja
6)
Los parámetros recibidos por referencia se representan poniendo su nombre a caballo
del ámbito del procedimiento simbolizando que su nombre local se asocia al nombre
de la variable que se transmita (no se duplica la variable). En la llamada, una línea o
flecha pueden representar la asociación de ambas
¾ Funciones:
Una función es un algoritmo, eventualmente parametrizado, que devuelve un valor.
Relación de operandos, que pueden ser:
9 Constantes
0.5
9 Variables
x
9 Funciones
sin(x)
9 Subexpresiones
(x + 0.5 * cos(y))
Se necesita:
9 El nombre
9 Los parámetros
9 El tipo del valor que devolverá
Sintaxis
function <nombre_función>(<variables-n> : <tipo_variables> ; ...) : <tipo-valor-devuelve>
{...}
.........
<nombre_función> : = <valor-obtenido>
Semántica
Llamada
1)
Se evalúan los argumentos por valor y se asignan los valores
2)
Se establece la correspondencia entre parámetros por referencia y sus argumentos
3)
Se ejecutan las acciones de la función
FUNDS. INFORMÁTICA
4)
10
Se retiene como valor “devuelto” por la función el “último” valor obtenido al ejecutar
una acción devuelve
TEMA 5. SECUENCIAS DE DATOS
¾ El problema es el siguiente: necesitamos recorrer una secuencia de datos y tratarla como
convenga a nuestros fines. Para ello se proponen una serie de ejemplos ilustrativos.
¾ Contar el número de veces que aparecen las vocales en una frase
algoritmo contar_vocales
variables
letra: carácter;
{otras variables}
principio
“Resolución del problema trivial (secuencia vacia)”
{Esquema iterativo}
leer(letra);
mientras que letra <> ‘.’ hacer
“Tratamiento de una letra”
leer(letra)
fmq;
“Salida de resultados”
fin.
¾ Subsecuencias de dos elementos: contar el número de veces que aparece la subsecuencia
‘LA’ en una frase
algoritmo cuenta_Las
variables
contador: entero; letra: carácter;
principio
{Resolución del problema trivial (secuencia vacia)}
contador :=0;
{Esquema iterativo}
leer(letra);
mientras que letra <> ’.’ hacer
si letra = ‘L’ entonces
leer(letra);
si letra = ‘A’ entonces
contador := contador + 1;
leer(letra)
fsi
sino leer(letra)
fsi
fmq;
{Salida de resultados}
escribirlinea(contador, ‘Las’)
fin.
¾ Contar palabras en una frase que acaba en punto
algoritmo contar_palabras
variables
contador: entero; letra: carácter;
principio
{Resolución del problema trivial (secuencia vacía o cero palabras)}
contador := 0;
{Esquema iterativo}
leer(letra);
FUNDS. INFORMÁTICA
11
{Saltar espacios en blanco al principio}
mientras que c <> ‘.’ hacer
mientras que c = ‘ ‘ hacer
leer(letra)
fmq;
{Contar palabras}
si c <> ‘.’ entonces
contador := contador + 1;
leer(letra)
fsi;
{Saltar caracteres de una palabra}
mientras que (c <> ‘.’) y (c <> ‘ ‘) hacer
leer(letra)
fmq;
fmq;
escribelinea(‘En la serie hay ‘,contador,’ palabras’);
fin.
¾ Analizar la ordenación creciente de una secuencia de números enteros acabada en cero
algoritmo comprueba_ordenación
variables
numero, siguiente: entero;
estan_ordenados: booleano
principio
{Resolución del problema trivial (secuencia vacia)}
estan_ordenados := verdad;
{Esquema iterativo}
leer(siguiente); numero := siguiente;
mientras que (siguiente <> 0) y estan_ordenados hacer
{Tratamiento de un elemento}
si numero > siguiente entonces
estan_ordenados := falso
fsi;
numero := siguiente; leer(siguiente)
fmq;
{Salida de resultados}
si estan_ordenados entonces escribirlinea(‘Ordenados’)
sino escribirlinea(‘No ordenados’)
fsi;
mientras que numero <> 0 hacer
leer(numero)
fmq
fin.
TEMA 6. VECTORES
¾ Un vector, v, es una aplicación de un conjunto de valores escalares, ordenados y
consecutivos, llamado conjunto de índices del vector, en otro conjunto de datos variables de
un mismo tipo.
v: I → D
i1 → d1
i2 → d2
...
i-n → d-n
FUNDS. INFORMÁTICA
12
El conjunto de índices I (i1, i2, ..., i-n) es un tipo definido por enumeración (subrango de
enteros o subrango de caracteres)
Sintaxis de la declaración de tipo
type
<identificador> = array[<subrango-índices>] of <tipo_datos>
Una variables de tipo vector es una estructura de datos. La componen un número fijo de
componentes del tipo de base del vector.
Sintaxis del acceso a un componente
<nombre_vector>[<expresión>]
¾ Operaciones elementales:
• Asignación en bloque de valores (vectores del mismo tipo)
<nombre_vector> : = <dato_vector>
• Recorrido
for k := i1 to i-n do
{Tratar el elemento v[i-k]}
¾ Vectores MULTIDIMENSIONALES:
− 1 ... 3
M
M  Estructura de datos multiindexada: Matriz

 2 ... 5
Sintaxis de la declaración de tipo
Opción 1
type
fila = array[<índicesfila>] of <tipo-datos>;
matriz = array[<índicescolumna>] of fila
Opción 2
type
matriz = array[<índicesfila>,<índicescolumna>] of <tipo-datos>
El acceso a un elemento de un vector multiindexado es igual que el de un vector normal pero
hay que especificar todos los índices del elemento (en matrices 2 índices)
TEMA 7. REGISTROS
¾ Un registro es una agrupación o estructura de datos. El número de datos agrupados es fijo,
pero, a diferencia del vector, un registro puede agrupar datos de diferentes tipos
Nombre
Apellido_1
Apellido_2
Sexo
Fecha_nacimiento
Sintaxis de la declaración de tipo
type
<tipo_registro> = record
<nombrecampo1> : <tipo1>;
<nombrecampo2> : <tipo2>;
...
<nombrecampo-n> : <tipo-n>
end;
Sintaxis del acceso a un campo
<nombre_registro> . <nombrecampo-i>
Campos
FUNDS. INFORMÁTICA
13
• Operaciones con registros
9 Asignación en bloque de valores en registros del mismo tipo
<nombre_registro> : = <dato_registro>
TEMA 8. FICHEROS
Dispositivo externo
Buffer (variable)
Memoria
v
pc.dat
Fichero externo: se crea o se destruye o se utiliza
¾ Un fichero secuencial (o simplemente fichero) es una estructura de datos de tipo secuencia
con un conjunto de operadores para acceder secuencialmente a sus componentes.
Sintaxis de la declaración de tipo
type
<tipo_fichero> = file of <tipo-datos>
Sintaxis del acceso a uno de los datos del fichero
<nombre_fichero> ∧
(no definida en Turbo Pascal)
Observaciones
1)
Sólo se puede acceder de forma inmediata a uno de los componentes del fichero. Para
ello es preciso haber accedido a todos los elementos anteriores
2)
La creación (escritura) e inspección (lectura) no pueden mezclarse
•
*
Operaciones
9 Escritura
9 Creación
 rewrite(<fich>) → abre <fich> para escritura (fichero interno, salvo si ya está
abierto)
 rewrite(<fich>,’nombrefichero’) → asigna <fich> al fichero externo
‘nombrefichero’ y abre <fich> para escritura (NDTP*)
 assign(<fich>,’nombrefichero’); rewrite(<fich>) → ídem, para Turbo Pascal
9 Adición
 write(<fich>,<dato>) → escribe un dato y avanza <fich>∧
 put(<fich>) → escribe el contenido de <fich>∧ y avanza <fich>∧ (Previamente
f ∧ := dato) (NDTP)
9 Lectura
9 Iniciación
 reset(<fich>) → abre <fich> para lectura y posiciona la ventana sobre el
primer dato de fichero (interno, salvo si ya está abierto)
 reset(<fich>,’nombrefichero’) → asigna <fich> al fichero externo
‘nombrefichero’, abre <fich> para lectura y posiciona la ventana sobre el
primer dato del fichero (NDTP)
 assign(<fich>,’nombrefichero’); reset(<fich>) → ídem, para Turbo Pascal
9 Búsqueda
 read(<fich>,<dato>) → lee un dato (asigna a dato el contenido de <fich>∧) y
avanza <fich>∧
NDTP: No Definida para Turbo Pascal
FUNDS. INFORMÁTICA
14
 get(<fich>) → avanza <fich>∧ (si se desea guardar el contenido dato :=
<fich>∧; get(<fich>∧) (NDTP)
9 Detección y cierre
9 Acabar las operaciones
 close(<fich>) → cierra el fichero (se hace automáticamente al salir del ámbito
donde se abrió)
9 Final de fichero (función que devuelve un booleano)
 eof(<fich>) → si <fich>∧ está sobre la marca fin de fichero entonces
eof(<fich>) = verdad sino eof(<fich>) = falso
9 Alternativas:
• get(<fich>) ≡ read(<fich>,<variable>)
• put(<fich>) ≡ write(<fich>,<expresión>)
¾ Búsqueda en ficheros secuenciales
• Para los siguientes ejemplos predefinimos lo siguiente:
tipo
tpInfo = ...;
tpDato = registro
clave: entero;
información: tpInfo
freg;
Fich_Datos = fichero de tpDato
algoritmo Dato_Buscado(valor d: tpDato) devuelve: booleano;
principio
devuelve (expresión lógica que define el/los dato(s) a buscar)
fin;
algoritmo Tratar_Dato(valor d: tpDato);
principio
{Tratamiento asociado a los datos que verifican la condición de búsqueda}
fin;
algoritmo Fin_Búsqueda(valor d: tpDato) devuelve: booleano;
principio
devuelve (expresión lógica que define la condición de fin de la búsqueda)
fin;
• Algoritmo general de búsqueda:
algoritmo Búsqueda(referencia elFichero: Fich_Datos);
variable
unDato: tpDato; HayQueBuscar: booleano;
principio
IniciaLectura(elFichero);
HayQueBuscar := no FinFichero(elFichero);
mientras que HayQueBuscar hacer
leer(elFichero, unDato);
si Dato_Buscado(unDato) entonces
Tratar_Dato(unDato)
fsi;
HayQueBuscar := no FinFichero(elFichero) y no Fin_Busqueda(unDato)
fmq;
fin;
FUNDS. INFORMÁTICA
•
Búsqueda exhaustiva (recorre todo el fichero):
•
algoritmo Busqueda_Lineal_Exhaustiva(referencia elFichero: Fich_Datos);
variable
unDato: tpDato
principio
IniciaLectura(elFichero);
mientras que no FinFichero(elFichero) hacer
leer(elFichero, unDato);
si Verifican_Condición(unDato) entonces
Tratar_Dato(unDato)
fsi;
fmq;
fin;
Búsqueda (hasta que encuentra el primer dato):
15
algoritmo Búsqueda_Lineal(referencia elFichero: Fich_Datos; referencia encontrado:
booleano);
variable
unDato: tpDato;
principio
IniciaLectura(elFichero);
encontrado := falso;
mientras que no FinFichero(elFichero) y no encontrado hacer
leer(elFichero, unDato);
si Verifican_Condición(unDato) entonces
Tratar_Dato(unDato);
encontrado := verdad
fsi;
fmq;
fin;
¾ Inserción, eliminación y mezcla:
• Cualquier operación sobre un fichero que implique la modificación de uno de sus datos
implica a su vez la creación de otro fichero nuevo
• Inserción:
No se pueden efectuar operaciones de lectura y escritura simultáneamente
1)
Búsqueda del punto de inserción
2)
Escritura del elemento a insertar en el nuevo fichero
3)
Copia del resto de elementos
algoritmo Inserción_Posición(referencia orig, nuevo: FichDatos; valor pos: entero; valor
dato: tpDato);
variable
i: entero; x: tpDato;
principio
IniciaLectura(orig); IniciaEscritura(nuevo); i := 0;
mientras que no FinFichero(orig) y (i < pos-1) hacer
{Buscar punto de insercción}
i := i + 1; leer(orig , x); escribir(nuevo , x)
fmq;
{Copiar el nuevo elemento}
escribir(nuevo , dato);
FUNDS. INFORMÁTICA
16
{Copiar el resto del fichero}
mientras que no FinFichero(orig) hacer
leer(orig , x); escribir(nuevo , x)
fmq;
fin;
•
algoritmo Inserción_Valor(referencia orig, nuevo: Fich_Datos; valor dato: tpDato);
variable
encontrado: booleano; datoleido: tpDato;
principio
IniciaLectura(orig) ; IniciaEscritura(nuevo); encontrado := falso;
mientras que no FinFichero(orig) y no encontrado hacer
leer(orig , datoleido);
si ordenados(dato , datoleido) entonces
encontrado := verdad;
escribir(nuevo, dato)
fsi;
escribir(nuevo, datoleido)
fmq;
si no encontrado entonces
escribir(nuevo , dato)
sino {Copiar el resto del fichero}
mientras que no FinFichero(orig) hacer
leer(orig , datoleido); escribir(nuevo , datoleido)
fmq;
fsi;
fin;
Eliminación:
Al igual que antes, debemos crear un nuevo fichero
algoritmo Eliminación_Posición(referencia orig, nuevo: FichDatos; valor pos: entero;
valor dato: tpDato);
variable
i: entero; x: tpDato;
principio
IniciaLectura(orig); IniciaEscritura(nuevo); i := 0;
mientras que no FinFichero(orig) y (i < pos-1) hacer
{Buscar punto de insercción}
i := i + 1; leer(orig , x); escribir(nuevo , x)
fmq;
{Hay que saltar el elemento a eliminar}
si no FinFichero(orig) entonces
tomar(orig)
fsi;
{Copiar el resto del fichero}
mientras que no FinFichero(orig) hacer
leer(orig , x); escribir(nuevo , x)
fmq;
fin;
algoritmo Eliminación_Valor(referencia orig, nuevo: Fich_Datos; valor dato: tpDato);
variable
encontrado: booleano; x: tpDato;
principio
IniciaLectura(orig) ; IniciaEscritura(nuevo); encontrado := falso;
FUNDS. INFORMÁTICA
17
mientras que no FinFichero(orig) hacer
leer(orig , x);
si x <> dato entonces
escribir(nuevo , x)
fsi;
fmq;
fin;
•
Mezcla:
Necesitamos obtener una secuencia ordenada partiendo de dos (mezcla binaria) o más
(mezcla múltiple) secuencias ordenadas
algoritmo Mezcla_Binaria(referencia Fich1, Fich2, Nuevo: Fich_Datos);
algoritmo copiaResto(referencia f: Fich_Datos);
principio
mientras que no FinFichero(f) hacer
Nuevo∧ := f∧;
poner(Nuevo);
tomar(f)
fmq;
fin;
principio
IniciaLectura(Fich1); IniciaLectura(Fich2); IniciaEscritura(Nuevo);
mientras que no FinFichero(Fich1) y no FinFichero(Fich2) hacer
si ordenados(Fich1∧, Fich2∧) entonces
Nuevo∧ := Fich1∧;
tomar(Fich1)
sino
Nuevo∧ := Fich2∧;
tomar(Fich2)
fsi;
poner(Nuevo)
fmq;
copiaResto(Fich1); copiaResto(Fich2)
fin;
¾ Ficheros de TEXTO:
Los ficheros de textos son un tipo de ficheros predefinidos en lenguaje Pascal como text.
Se organizan en líneas, cada una de las cuales se define como una secuencia de caracteres; por lo
tanto, un fichero de texto es un fichero de datos de tipo carácter
• Procedimientos
9 AcabarLinea(<fich_texto>)
9 EscribirLinea(<fich_texto>,<dato1>,<dato2>,...)
9 SaltarLinea(<fich_texto>)
9 LeerLinea(<fich_texto>,< variable1>,<variable2>,...)
• Función
9 FinLinea(<fich_texto>) → eoln(<fich_texto>)
Descargar