Uploaded by agarrepton

Resumen P1

advertisement
RESUMEN PROGRAMACIÓN 1 SEGUNDO SEMESTRE
COMPUTADOR
LENGUAJES
PASCAL
SALIDA Y ENTRADA
SECUENCIA Y SELECCIÓN
ESTRUCTURAS DE CONTROL
ARREGLOS Y SUBRANGOS
REGISTROS, ORDINALES, ENUMERADOS Y CONJUNTOS
ARRAY CON TOPE Y REGISTROS VARIANTES
ESTRUCTURAS DE DATOS DINÁMICAS Y PUNTEROS.
1
2
2
3
6
7
13
18
23
25
1
COMPUTADOR
Componentes
●
Dispositivos de entrada
○
Teclado
○
Mouse
○
Pantalla
○
Táctil
○
Micrófono
❖ Dispositivos de salida
➢ Monitor Impresora
➢ Parlante Memoria: interna, externa.
➢ Unidad Central de Proceso (CPU)
Dentro del CPU
●
●
Unidad de control
○
Carga instrucciones en memoria (es un programa).
○
Ejecuta las instrucciones.
Unidad aritmética lógica
○
Ejecuta operaciones aritméticas y lógicas.
LENGUAJES
Lenguajes de alto nivel
●
Pascal
●
Python
●
JAVA
●
C
Compilador
●
El compilador traduce los lenguajes de alto nivel a lenguaje máquina.
●
(El computador no entiende los lenguajes de alto nivel).
Código fuente
●
Es aquel programa que contiene código lenguaje X (Pascal, Java, etc).
2
PASCAL
Sintaxis de los identificadores
identificador = {letra|dígito}
Identificadores
●
Un identificador es una secuencia de caracteres alfanuméricos.
●
El primero de los cuáles debe ser alfabético.
●
No pueden ser palabras reservadas.
○
Ej: program
Declaración de constantes
const
PI = 3.14
Observación
-maxint es válido para las declaraciones de constantes.
Declaración de variables
var
tipo de identificador (real, integer, etc).
Cuerpo
begin
instruccion { ';' instruccion }
end.
Tipos de instrucciones
●
Entrada
○
●
Asignación
○
●
ReadLn (instrucción que permite ingresar datos).
area := base * altura / 2
Salida
○
WriteLn
SALIDA Y ENTRADA
Entrada estándar
●
Secuencia de caracteres.
●
Las instrucciones de secuencia consumen caracteres de entrada.
3
●
Después se carga la información en memoria.
●
Los caracteres consumidos en la entrada desaparecen.
●
El final de la entrada se puede identificar por programa.
●
Enter indica el final de la línea.
Entrada como secuencia de líneas
●
Está organizada en líneas.
●
El fin de cada línea está marcado por una secuencia de caracteres especiales.
●
Los caracteres del final de la línea son dependientes del entorno.
Salida estándar
●
Secuencia de caracteres.
●
Dividida en líneas.
●
Asociada a la terminal donde se ejecuta el programa.
Asignación
●
Instrucción.
●
Permiten modificar el contenido de una variable.
●
Esto se hace mediante expresiones.
●
La variable y la expresión deben ser compatibles en cuanto a tipos.
Tipos
●
Toda variable tiene un tipo.
●
Demuestran características y propiedades de los valores usados en el programa.
●
Sucede también con los operadores, las funciones estándar y las definidas por el
user.
●
El chequeo de tipos se hace en tipo de compilación (Pascal).
Clasificación de tipos
●
Estructura
○
Elementales
■
○
Valores simples e indivisibles.
Estructurados
4
■
●
Los valores están compuestos por otros varios valores.
Otros:
○
Predefinidos o estándar.
○
Definidos por el user.
Expresión
●
Se construye mediante
○
Variables.
○
Constantes.
○
Funciones
○
Operadores.
■
Producto: *
■
Suma: +
■
Resta: -
■
División: div (para enteros) y / (para reales).
■
Módulo: mod.
Observación: Al realizarse una expresión que combina enteros y reales, se realiza una conversión
automática.
Funciones aritméticas estándar
●
sqr(x):retorna el cuadrado de x.
●
sqrt(x):retorna la raíz cuadrada de x.
●
trunc(x), round(x):es la conversión real a entero.
●
abs(x):retorna el valor absoluto de x.
Valores de tipo Real
●
Se puede escribir en forma de notación científica.
●
Los valores reales pueden o no tener punto decimal.
5
Valores de tipo boolean (True, false)
●
Constantes
○
●
(True, false)
Operadores
○
not (negación)
○
and
○
or (disyunción)
(Están en orden de precedencia)
Valores de tipo char
●
Caracteres simples.
●
Se representan con comillas simples. (‘’)
Para evaluar con el operador And: (E 1 and E2)
●
Se evalúa E1 , sea b1 su valor.
●
Se evalúa E2 , sea b2 su valor.
(conjunción)
6
●
Posteriormente se evalúa b1 and b2.
Observación : Es análogo para el or.
Booleanos por circuito corto
●
Para evaluar E1 and E2.
●
Se evalúa el valor de E1, siendo su valor igual a b1.
●
Si b1 es FALSE, se termina el proceso y el resultado es FALSE.
●
Si b1 es TRUE se evalúa el valor de E2. Siendo el valor b2 el valor de la afirmación
concluye en el valor de b2.
SECUENCIA Y SELECCIÓN
Instrucciones simples
●
Llamadas a procedimientos.
●
Asignaciones.
Instrucciones compuestas
●
Secuencia.
●
Selección.
●
Repetición (For, while, repeat).
Ejemplo: Determinar si un número es par o impar.
program ParImpar;
var
numero : integer;
begin
(* Ingresar numero *)
write('Ingrese numero: ');
readln(numero);
(*analizar el numero*)
if numero mod 2 = 0 then
writeln('El numero ingresado es par')
else
writeln('El numero ingresado es impar')
end.
7
La ejecución de if:
if expresión then
instrucción 1
else
instrucción 2
end
1. Se evalúa la expresión booleana; sea b su valor.
2. Si b es TRUE se ejecuta la instrucción 1.
3. Si b es FALSE se ejecuta la instrucción 2.
(si la instrucción es del tipo if - then, si b es falso no se ejecuta nada)
Anidamiento de las instrucciones compuestas
if i > 0 then
begin
i:= i+1;
writeln('Es positivo')
end
else (sin punto)
begin
i:= i*4;
writeln('Es negativo')
end
ESTRUCTURAS DE CONTROL
¿Qué es un centinela?
●
Sirve para marcar el fin de una secuencia/lista de datos de la entrada estándar.
Instrucción case
●
Permite seleccionar una instrucción de un conjunto de instrucciones.
●
Se escribe de la siguiente manera:
begin
readln(‘valor de la constante’)
case Expresión of
constante1, constante2 : Writeln(‘enunciado’)
.
.
.
end; (este end termina el case)
end.
8
Instrucción While
●
Es una repetición condicional.
●
Se escribe de la siguiente forma:
while Expresión do Instrucción
●
La expresión es de tipo boolean.
●
La instrucción es de cualquier tipo.
●
Ejecución:
○
Evalúa la condición del while, si resulta FALSE se termina el while.
○
Si es TRUE ejecuta la instrucción y vuelve al paso 1.
Instrucción Repeat
●
Es una expresión de tipo boolean.
●
No hay necesidad de delimitar las instrucciones mediante begins y ends.
●
Se escribe de la siguiente forma:
Repeat
Instrucción
Instrucción
.
.
.
Until Expresión
●
Se ejecuta el Repeat ( se repite por lo menos una vez).
●
Se evalúa la Expresión (until), si el valor de Expresión es FALSE se vuelve al
paso 1.
●
Si el valor de Expresión (until) es TRUE se termina el proceso.
Instrucción For
●
Instrucción controlada por una variable que toma valores en un rango
determinado.
●
La instrucción se escribe de la manera:
●
For variable To variable
writeln(‘escribir algo’)
o
Expresión
Cuando usar el For:
○
En una función numérica expresada por sumatoria o productoria.
○
Recorrer un rango de enteros (o de caracteres) completamente.
9
○
Repetir algo N-veces. (Donde N es una expresión entera).
Errores generales con acumuladores
●
Vida de un acumulador:
○
Inicialización: Se le da un valor inicial a una variable (v = valor).
○
Acumulación: Dentro de la repetición, sucede la actualización del valor del
acumulador en función al anterior (v = f(v)).
○
Utilización del resultado después de la iteración.
●
Incluir un control en donde diga que el primer valor es menor o igual al segundo.
●
Modificar el valor de la variable de control “para avanzar más rápido”.
●
Usar la variable de control una vez terminada la repetición.
●
Anidar innecesariamente un “ if ” dentro del cuerpo de la iteración.
SUBPROGRAMAS, PROCEDIMIENTOS Y FUNCIONES
Subprograma
●
Es un fragmento de código que se comporta de forma independiente dentro de un
programa.
●
Pueden ser invocados varias veces desde otras partes del programa.
●
Se comunican por el pasaje de parámetros.
●
Tienen sus propios espacios de nombres (identificadores locales).
●
Los identificadores locales pueden ser compartidos entre subprogramas y el
programa principal (identificadores globales).
●
Son herramientas de modularización.
Función
●
Subprograma.
●
Retorna valores tipo simples.
10
●
Funciones estándar: succ, ord, pred, sqrt, chr, trunc, etc.
●
Son declaradas después de la declaración de variables.
●
Se escribe de la siguiente manera:
function nombre(lista de parametros): Integer
const
...
type
...
begin
...
end;
● Los tipos de funciones deben ser simples (Integer, char, boolean)
●
La lista de parámetros se escribe de la forma:
function nombre(var a: real; c: char; var n: integer (LISTA DE PARÁMETROS) ):
Integer;
●
Hay dos tipos de parámetros:
○
Nominales o Formales: aparecen en el encabezado de la función.
○
Efectivos o verdaderos: aparecen en la invocación de la función.
○
Los dos parámetros deben ser respectivamente compatibles.
●
No hacer instrucciones de entrada y salida (read, write, etc).
●
No utilizar variables globales (variables usadas en el programa principal).
●
Definir funciones para cálculos intermedios independientes.
●
Definir funciones de semántica clara.
Procedimientos
●
No retornan valor en su nombre.
●
Se invoca como instrucción independiente.
●
Se escribe de la forma:
procedure procedure_Name(variable1: Tipo);
●
Podemos ver que se pueden categorizar los procedimientos:
○
Salida: No hacen entrada, solo despliegan resultados en la salida. No tiene
parámetros por referencia.
○
Entrada: Se ingresan datos de entrada y se cargan en variables. Solo
hacen salida para pedir que el usuario ingrese estos. Contiene datos de
referencia.
○
Internos: No realizan entrada-salida, solo devuelven valores de variables
modificadas del programa. Contiene parámetros por referencia y por
valor.
11
Pasaje de parámetros por valor
●
Parámetros no precedidos por var.
●
En el momento de invocación se realiza una copia de los parámetros nominales a
los parámetros efectivos.
●
Los parámetros efectivos pueden ser expresiones.
Pasaje de parámetros por referencia
●
Los parámetros efectivos deben ser variables.
●
Deben ser compatibles (ser del mismo tipo).
●
Todo cambio en el parámetro nominal se ve reflejado en el parámetro efectivo.
●
Lo anterior no sucede al revés. (No es recíproco)
●
Es recomendado no usarlo para funciones.
Alcance
●
Característica de un identificador.
●
Es una porción del programa donde el identificador es visible.
Localidad y globalidad de identificadores
●
Los identificadores definidos es un bloque son visibles en el bloque y todos los
sub-bloques que se contengan dentro de este.
●
Los parámetros nominales x e y, y la variable z son identificadores locales de p.
●
Los parámetros nominales x e y, y la variable z son identificadores globales de f
(por estar dentro de p).
●
Se puede hacer referencia a x, y, z dentro de las sentencias que se llevan a cabo
dentro de p y f.
●
No son visibles fuera de p.
●
El parámetro nominal a y la variable b son locales a f pero no se pueden
12
referenciar fuera de f (únicamente en las sentencias de f).
●
Si dos identificadores locales y globales comparten el mismo nombre, los
identificadores locales tienen prioridad en las sentencias que se llevan a cabo.
●
El parámetro nominal x de p es visible en p.
●
El parámetro nominal x de p no es visible en f.
●
Toda referencia a x que se haga dentro de f corresponde al parámetro nominal de
f y no a la variable global x.
Llamamiento a funciones y procedimientos
●
●
f es llamada desde:
○
Las sentencias de p (local a este).
○
Dentro de las propias sentencias de f (llamada recursiva).
○
Dentro de g (incluyendo a k).
g es llamada desde:
○
Las sentencias de p.
○
Dentro de g.
○
Las sentencias de k (por ser global a k).
13
●
La función g no puede ser llamada desde f por el orden de declaración.
●
El procedimiento k no puede ser llamado desde afuera de g por ser local a g.
ARREGLOS Y SUBRANGOS
●
Pascal permite al programador crear distintos tipos en el programa.
●
Se hace con la palabra reservada “type”.
●
Subrangos, enumerados, estructurados, etc pueden ser tipos de datos definidos
por el programador.
●
Declaración de tipos:
type
Nombre_Tipo = Tipo;
Subrangos de enteros
●
Se pueden acotar los valores en un rango especificado.
Subrangos de caracteres
●
Se basan en el orden predefinido en el tipo Char (en Pascal es la tabla ASCII).
●
Decimal <> Dígito.
14
Operaciones con subrangos
●
Cualquier variable, constante, expresión de tipo subrango se va a comportar como
el tipo base que lo contiene.
●
Si el valor de una variable de tipo subrango se pasa del rango de valores puesto
por el programador, ocurre un error en el tiempo de ejecución.
●
El compilador de Pascal debe ser configurado (flag -Cr) para realizar una
verificación de rangos.
Declaración de subrangos
type
identificador= C1..C2;
●
C1 y C2 deben ser del mismo tipo ordinal (Char, Integer, Boolean y enumerado).
Tipos estructurados
●
Arreglos (arrays).
●
Registros (records).
●
Conjuntos (set).
¿Para qué sirven los tipos estructurados?
●
Almacenar un conjunto de valores a un mismo nombre de valores.
●
Los valores se pueden acceder mediante un índice.
●
Están inspirados tal cual como en la matemática (a1 , a2 , … , an).
Declaración de los arreglos
type
nombre = array [tipo_indice] of tipo_base;
Arreglos
●
Secuencias homogéneas.
●
Tienen un tamaño fijo.
●
Su orden importa.
●
Pueden haber repetidos.
15
●
Ejemplo:
type
RangoArreglo = 1..9;
Arreglo = array [RangoArreglo] of integer;
var
A : Arreglo;
●
Si materializamos lo escrito:
●
Los índices deben ser del tipo ordinal.
●
Tipo_base debe ser de cualquier tipo de Pascal.
Tipos anónimos
●
Sirven para los tipos que aparecen una sola vez.
●
Se asignan sin nombres.
type
(* índice anónimo *)
arreglo = array [0..9] of real;
var
(* arreglo anónimo *)
arr : array ['A'..'Z'] of boolean;
Acceso a un arreglo
●
●
A cada celda se le puede acceder como una variable independiente.
16
Inicialización del arreglo
●
Se deben inicializar todas las celdas por separado.
(* celdas de 1 a 10 en cero *)
procedure ArregloEnCero(var A: arreglo);
var i: integer;
begin
for i:= 1 to 10 do
A[i]:= 0;
end;
(* celdas de 1 a 10 en pares 2, 4, 6, ... *)
procedure ArregloEnPares(var A: arreglo);
var i: integer;
begin
for i:= 1 to 10 do
A[i]:= 2 * i;
end;
(* celdas leídas desde la entrada *)
procedure Leer Arreglo(var A: arreglo);
var i: integer;
begin
for i:= 1 to 10 do
ReadLn(A[i]);
end;
Recorridas de arreglos
●
Es correcto usar la estructura “for” para recorrer todo el arreglo.
...
for i:= 1 to 10 do
suma:= suma + A[i];
SumarTodos := suma;
...
Búsqueda en arreglos
●
En este caso no se usa el “for”.
●
Es ineficiente usar “for” porque seguirá buscando una vez encontrada la celda que
cumpla con la condición buscada.
●
Es eficiente usar iteraciones condicionales (while).
●
La búsqueda debe detenerse cuando se halla el valor que cumpla la condición
puesta. (Por eso es ineficiente usar “for”).
●
Tener en cuenta que Pascal evalúa por circuito corto.
(ver ejemplos del repartido)
17
Arreglos multidimensionales
●
Son arreglos de arreglos.
●
Arreglos de índice múltiple.
●
Son/pueden ser matrices.
●
Se acceden mediante el identificador A[i,j] o A[i] [j].
●
Declaración de arreglos multidimensionales.
type
nombre = array [1..20, 1..15] of char;
datos = array ['0'..'9', 1..10] of integer;
tabla = array [-10..10, 1..15] of char;
REGISTROS, ORDINALES, ENUMERADOS Y CONJUNTOS
Registro
●
Colección heterogénea de datos.
●
A la misma vez es ordenada.
●
Son conocidos como tuplas.
●
Tienen tamaños fijos.
Record
●
Es la estructura más usada para la representación de entidades u objetos de la
realidad.
●
Es una tupla de datos de diferente tipo.
●
Cada uno se accede mediante un nombre de campo.
Declaración de registros
type
●
T= record
campo1 : tipo1;
campo2 : tipo2;
...
campoN : tipoN
end;
Donde campo-i es un identificador de campo.
●
Donde tipo-i es el tipo correspondiente.
18
Posibilidades para usar registros
Acceso a los componentes de los registros
●
“.campo” se utiliza como método de acceso a los componentes de un registro.
...
q.campo1:= tipo1;
q.campo2 := tipo2;
writeln(q.campo3)
...
Lectura y escritura de registros
●
No se le puede aplicar un read/ln a una variable de un tipo registro.
●
Para mostrar un registro se deben aplicar write/ln campo por campo.
Instrucción with
●
Simplifica la forma de acceder a los campos de un registro.
●
Se escribe de la siguiente manera:
...
with q do
begin
…
end
...
(ver ejemplos y utilidades en el repartido).
19
Asignación de variables tipo registro
●
Se puede asignar a otra del mismo tipo.
Estructuras complejas
●
Anidamiento en tipos estructurados:
Variables de tipo ordinal o escalares
●
●
Las variables de tipo ordinal son:
○
Integer.
○
Char.
○
Boolean.
○
Subrangos.
○
Enumerados.
pred () y succ () son funciones que se pueden aplicar para este tipo de
variables.
●
La variable Real no es ordinal.
Construcciones de pascal relacionadas con el tipo ordinal
●
For: El tipo de la variable que se cuenta debe ser de tipo ordinal.
●
Case: El tipo de expresión dentro de la instrucción debe ser ordinal.
●
Array: El tipo del índice del arreglo debe ser ordinal.
●
Set of: El tipo base de un conjunto (set) debe ser ordinal.
20
Enumerados
●
Son datos cuyos valores son enumerados.
●
Pueden ser ordenados o no ordenados.
●
Boolean es un enumerado predefinido.
●
Quedan definidos los operadores de comparación:
●
○
<
○
>
○
<>
○
<=
○
>=
Quedan definidas las funciones:
○
succ()
○
predd()
●
No se pueden realizar instrucciones de entrada (read/ln).
●
No se pueden realizar instrucciones de salida (write/ln).
(ver ejemplos en el repartido)
Declaración de tipos enumerados
type
identificador=(T1, … , Tn)
● Ti son identificadores cualesquiera.
Conversión entre enumerados y enteros
●
Enumerado a entero:
○
Se usa la función ord que le asigna un entero de acuerdo al orden de
enumeración.
○
Se usa el nombre del tipo como función.
Mes(0) --> enero
Conjuntos
●
Inspirados en el conjunto matemático.
●
No tienen orden.
●
No hay repetidos.
●
El tamaño es variable pero acotado.
●
Se usan para la representación de conjuntos simples.
●
Representa el conjunto potencia de un conjunto.
21
●
Se usan los operadores algebraicos adecuados.
○
Declaración del tipo conjunto
type
T= set of tipo_elempento
●
T es el identificador.
●
T es el nombre del tipo conjunto que se define.
●
tipo_elemento es un tipo ordinal. (Tipo base)
●
En FPC el cardinal del tipo base no puede superar los 256.
●
No admite elementos con cardinal negativo ej: (-10..10).
●
ej:
type
inset = set of Integer ;
● No funciona porque es demasiado grande.
Representación de conjuntos
●
Para:
type
conj = set of 0..9 ;
● Son correctos:
○
[2,4,6,8]
○
[]
○
[1,3]
○
[1..3, 4..9]
(ver ejemplos del repartido)
22
ARRAY CON TOPE Y REGISTROS VARIANTES
Array con tope
●
Estructura conceptual.
●
Se define en términos de tipo estructurado:
●
○
Registro.
○
Arreglos.
No hay significado para lo que está más allá del tope (para la lógica del
programa).
Declaración del array con tope
Type
ArrTope = record
elems : array [1..N] of T;
tope : 0..N
end ;
●
El campo tope, controla la cantidad de elementos en el arreglo (toma valores
entre 0 y N).
●
Los elementos válidos se almacenan al principio del arreglo.
●
Toman la posición de 1 al tope.
●
Si tope = 0 no hay elementos.
Conjuntos mediante arreglos con tope
Type
Conj = record
elems : array [1..N] of T;
tope : 0..N
end;
●
El arreglo almacena los valores del conjunto.
●
Los elementos están distribuidos en las celdas de 1 a N.
●
Tope apunta a la última posición ocupada del arreglo.
●
Se pueden representar conjuntos que van de 0 a N.
Operaciones con conjuntos cuando no son de tipo sets
●
Crear conjunto vacío:
procedure CrearConjuntoVacio(var S: Conj);
begin
S.tope := 0
end
23
●
Insertar un elemento:
●
procedure InsElem(e: T; var S: Conj);
begin
with S do
begin
tope := tope + 1
elems [tope] := e
end
end;
Eliminar un elemento:
procedure procedureName(e : T; var S: Conj);
var
i: Integer
begin
i:=1
while (i <= S.tope) and (S.elems[i] <> e) do
i := i+1;
if i <= S.tope then
begin
S.elems[i] := S.elems[S.tope];
S.tope := S.tope - 1
end
end;
Registros variantes
●
Sirven para:
○
Representar entidades que pertenecen a distintas categorías a la vez.
○
Según su categoría tienen distintos datos.
○
Hay un conjunto de datos que cumple con tener todos los elementos en
común con todas las categorías.
●
Teniendo las siguientes categorías:
○
○
○
○
Estudiante:
■
Año de ingreso.
■
Cantidad de materias.
Docente:
■
Carga horaria.
■
Grado.
Egresado:
■
Año de egreso.
■
Título.
Datos comunes a las categorías:
■
C.I.
■
Credencial.
24
Ejemplo:
type
TOrden = (docente,estudiante,egresado);
TUniversitario = record
cedula : TCedula;
credencial : TCredencial;
case orden : TOrden of
docente : (grado: 1..5;
carga: 0..40);
estudiante : (semestre: 1..15;
materias: integer);
egresado : (egreso: 1900..3000;
titulo: TTitulo);
end;
IMPORTANTE: Ver ejemplos en el repartido
ESTRUCTURAS DE DATOS DINÁMICAS Y PUNTEROS.
Estructura de datos dinámica
●
Cambia el tamaño en tiempo de ejecución.
●
Ninguno de los tipos vistos anteriormente permite construir estructuras de datos
dinámicas.
●
Se reserva el espacio de memoria cuando empieza la ejecución.
●
Se vuelve inmutable.
●
Array con tope, set, record (case) no son dinámicos.
Variable tipo puntero
●
Apunta o hace referencia a posiciones con datos en la memoria.
●
Este contiene o toma el valor de la posición/ubicación.
●
Este crea la ubicación de memoria (new), accede a datos de la ubicación
(ˆ desreferenciación) y también puede eliminar/destruir la ubicación de memoria.
●
El valor de la variable es dependiente del computador.
●
No se pueden aplicar Read/ln o Write/ln a variables punteros.
25
Declaración del tipo puntero
type
identificador = ˆIdentificador_tipo
●
Identificador_tipo
puede corresponder a cualquier tipo predefinido por el
programador o por Pascal.
●
El tipo al que pertenece Identificador_tipo puede ser de cualquier tipo de los
de Pascal.
Operaciones con puntero
●
Solo se permite la igualdad ( “ = ” ) entre variables puntero.
Declaración del procedimiento new
new (ptr)
●
ptr es una variable de tipo ˆT.
Ejecución del new:
●
Se crea espacio en memoria.
●
Este corresponde a la variable de tipo T.
●
El espacio que ocupa es dependiendo del tipo.
●
La dirección del espacio se guarda en la variable ptr.
●
Este proceso se llama asignación dinámica de memoria.
●
Estas acciones ocurren en tiempo de ejecución.
●
La variable de tipo T (creada) queda con un valor indefinido.
●
La misma no tiene nombre identificante.
●
Las variables de tipo puntero son inicializadas por la instrucción new.
●
También las variables pueden ser inicializadas por asignaciones a punteros ya
previamente inicializados.
●
SI NO SE INICIALIZAN LAS VARIABLES DA ERROR EN TIEMPO DE
EJECUCIÓN.
●
Para hacer uso de las variables usamos el operador “ ˆ ”.
●
Ej:
...
new (ptr_1)
new (ptr_2)
...
new (ptr_N)
● ptr_1ˆ es apuntada por ptr_1.
●
ptr_iˆ es apuntada por ptr_i.
26
Alias de variables
●
Son punteros que apuntan a la misma dirección.
(Ver ejemplos del repartido)
Punteros como parámetros por valor
type
pint = ^integer;
var p: pint;
procedure PP(q1,q2: pint);
begin
q1^:= q2^ * 2;
q2^:= q1^ + 2;
end;
begin
new(p);
p^:= 4;
PP(p,p);
writeln(p^);
end.
Variables tipo lista
●
Secuencia o sucesión finita de elementos.
●
Son representadas con:
○
Arrays. (No permite agregar y sacar valores)
○
Arrays con tope. (permite agregar y sacar valores)
○
Listas encadenadas (se hace mediante punteros, permite agregar y sacar
valores).
Listas encadenadas
●
Cada elemento de la lista es almacenado en una celda.
●
Cada celda contiene información del elemento.
●
También contiene un puntero que apunta hacia la siguiente celda.
●
Se accede a la lista conociendo el puntero del primer elemento.
Puntero nulo
●
Se representa con la constante nil.
●
Pertenece a todos los tipos ˆT.
●
No representa ninguna dirección de memoria.
●
Se puede asignar directamente a una variable puntero:
○
p:= nil
●
Se usa para representar la lista vacía.
●
Diferenciar el último elemento de una lista encadenada.
27
Declaración de la lista encadenada
type
lista = ^celda;
celda = record
elemento : T;
siguiente: lista
end;
(Pascal admite poner ^celda antes de haber puesto celda)
Instrucción dispose
●
Sirve para indicar al sistema que una celda de memoria no será más utilizada.
●
Ese espacio se puede recuperar y reutilizar.
●
Utilizado comúnmente para borrar elementos de estructuras de datos dinámicas.
Declaración de la instrucción dispose
dispose (ptr)
●
ptr es el puntero de la celda en cuestión.
Borrar lista
●
Para liberar el espacio ocupado por listas se debe liberar celda por celda.
●
dispose (l) borra solo el primer elemento de la lista.
(Ver ejemplos en el repartido)
Download