SlideShare una empresa de Scribd logo
Computación II - 324
Computación II - 324

C                Lenguaje máquina
a                
t                
e
                 Lenguaje Ensamblador
g   Bajo Nivel
                 
o                
r                
i
a
s
Computación II - 324

                 
C
a                
t                
e   Alto Nivel   
g
o
r
i
a
s                Cuarta Generación y Quinta Generación
Computación II - 324
Programación Estructurada
  Para resolver problemas de cierta envergadura se
 utiliza normalmente la técnica de diseño que se conoce
 con el nombre de diseño modular.

  El problema se divide en subproblemas que se puedan
 resolver con un conjunto de subprogramas que tengan
 una cierta cohesión.

 Al conjunto de subprogramas que            resuelve   un
 subproblema se le llama módulo funcional.

 Un módulo puede hacer uso de un subprograma de otro
 módulo si éste aparece en su interfaz
Computación II - 324
Programación Estructurada
  Un interfaz es un conjunto de cabeceras de
 subprogramas que pueden ser utilizados por otros
 módulos.

 Los interfaces aparecieron para minimizar el
 acoplamiento entre los módulos. Se dice que es
 conveniente un diseño con acoplamiento débil entre
 módulos.

 La interfaz sólo tienen que aparecer los subprogramas
 principales del módulo y no los subprogramas que son
 utilizados para implementar los subprogramas principales
Computación II - 324
Programación Estructurada
  Esta descomposición se conoce con el nombre de
 descomposición funcional.




Posteriormente   aparece    un  nuevo   tipo  de
descomposición o abstracción que se conoce con el
nombre de abstracción de datos
Computación II - 324
Abstracción



 La técnica de la abstracción no permite acceder
directamente a la representación de la estructura.
Computación II - 324
Abstracción

  La abstracción: Separa la especificación (qué hace) de
 la implementación (cómo lo hace). Los usuarios de un
 TAD no necesitan           conocer sus detalles de
 implementación (Cómo lo hacen). Como consecuencia,
 aporta las ventajas de:
      Extensibilidad del código: Es posible modificar y
     mejorar la implementación del TAD sin afectar a los
     demás módulos que lo utilizan.,
     b) Aumenta la facilidad de uso.
     c) Aumenta la legibilidad del código que usa el TAD.
Computación II - 324
Manejo de memoria


5 caracteres




  La asignación estática de memoria reserva la cantidad
  necesaria para almacenar los datos de cada estructura en
  tiempo de compilación
Computación II - 324
Tipo de datos en Pascal
   Tipo              Rango             Espacio en memoria
 Char       Carácter ASCII           1 byte

5Byte
  caracteres
       0 a 255                       1 byte
 Integer    -32768 a 32767           2 bytes
 Real       1 E -38 a 1 E+38         6 bytes
 Boolean    True – False             1 byte
 Shortint   -128 a 127               1 byte
 Word       0 a 65535                2 byte
 Longint    -2147483648 a            4 byte
            214748364
 String     Cadena de 255 caracteres Hasta 255 bytes
Computación II - 324
Manejo de memoria
  No se almacenan en memoria estática.
5• caracteres
   Los objetos correspondientes a procedimientos o funciones
  recursivas, ya que en tiempo de compilación no se sabe el
  número de variables que serán necesarias.

  • Las estructuras dinámicas de datos tales como listas,
  árboles, etc. ya que el número de elementos que la forman no
  es conocido hasta que el programa se ejecuta.
Computación II - 324
Uso de Procedimiento y funciones

Parámetros Valor
 No devuelve valores…no antecede la palabra VAR
 El compilador crea una copia del dato y lo almacena en
  la variable parámetro que lo recibe. Dentro de la
  función o procedimiento se trabaja con la copia
  obtenida, no importando las operaciones que se
  realicen con la copia, la variable introducida como
  parámetro, no será afectada en su valor inicial al
  terminar el proceso. Su sintaxis es la siguiente:

  PROCEDURE Identificador (Ide1, Ide2: Tipo; Ide3: Tipo);
Computación II - 324
Ejemplo
program Ejemplo;
uses crt;                                BEGIN
var nombre:string;                        clrscr; (* cargando variable *)
                                         nombre:='juan fernando';
Procedure pasar(nombre1:string);         pasar(nombre);
                                         (* desplegando *)
                                         writeln('nombre : ',nombre);
begin (* cambiando parametro *)           readln;
                                         END.
nombre1:='maria elena';

end;
          Valor de la variable nombre en el Procedimiento Pasar ?
          Valor de la variable nombre en el Programa Principal?
Computación II - 324
Parámetro Por Referencia

  Se reciben/envían con la palabra clave VAR.

   Se trabaja en la misma posición de memoria de la
variable original, es decir, se referencian.

   Cualquier cambio que se realice a la variable parámetro,
en el procedimiento o función también se le estará haciendo
a la variable original.

        PROCEDURE Identificador (VAR Ide1: Tipo);
Computación II - 324
Ejemplo
                                          BEGIN
program Ejemplo;                           clrscr; (* cargando variable *)
                                          nombre:='juan fernando';
uses crt;
                                          Edad:= 30;
var nombre:string; edad:integer;           (* mandando a procedimiento *)
procedure pasar(nombre1:string;           pasar(nombre,edad);
                                          (* desplegando *)
   var edad1:integer);
                                          writeln('nombre : ',nombre);
begin (* cambiando parametro *)           writeln(‘edad : ',edad);
nombre1:='maria elena';                    readln;
                                          END.
edad1:=50;
end;

                     Valor de la variables nombre y edad?

     http://www.pcg.ull.es/edapplets/DataControlJApplet/pasoparametros.html
Computación II - 324
Punteros en Pascal.

 Es una variable cuyo valor es una dirección de memoria donde se
  encuentra la variable dinámica apuntada
sComputación II - 324
Punteros en Pascal.

 En PASCAL los punteros se declaran con el símbolo ^.

 Declarar las variables tipo puntero que sean necesarias
 (Dentro de la sección VAR).
Computación II - 324
Se pueden definir tipos punteros o definir variables de tipo
puntero:
Type
 ptr = ^integer;
Var
 p: ptr;
 q: ^real;
Ejemplo
 p^:= 5 . Asigno el valor 5 a la variable apuntada por p.
 writeln(p^). Imprime el valor de la variable apuntada por p.
sComputación II - 324
Creación y destrucción de variables dinámicas

El Procedimiento NEW(), asigna memoria a la variable puntero, en
caso de que el PC no obtenga memoria para alocar el pedido, al
puntero se le asignara la dirección NIL, cuyo significado es "nada", es
decir el puntero no apunta a ningún sector de la memoria.

El Procedimiento DISPOSE(), Libera memoria reservada por a la
variable puntero mediante el procedimiento DISPOSE()
Computación II - 324
 Ejemplo.

New (puntero).

     Asigna memoria a la variable apuntada por puntero.

Gráficamente.
Computación II - 324
Ejemplo.




Representación Gráfica.
Computación II - 324
                       Tipo de dato   Tipo de dato
Diagrama sintáctico.   puntero.       de dato
                       Contiene una   predefinido
                       dirección de   en pascal
                       memoria
Computación II - 324
 Ejemplo.

Dispose (puntero).

      Libera la memoria asociada a la variable referida (la que contiene
      el dato).

      Deja indefinido el puntero.

Gráficamente.
Computación II - 324
Ejemplo.

Type
       Puntx=^Real;
Var
       P:Puntx; <apunta a direcciones de memoria que contienen
                        valores de tipo real.>

Estas declaraciones aún no crean nada en memoria hasta cuando el
programa se ejecute el procedimiento NEW.
NEW(P) , genera lo siguiente en memoria.

               P^
      P--
Computación II - 324
Puntero.

    NEW(P) , genera lo siguiente en memoria. Una celda vacía
       apuntada por P y contendrá valor real.

                  P^
     P--

    P^:= 355       <asigna el valor 355 en la celda de memoria
    apuntada por P^.

            355
    P--
Computación II - 324
TYPE
 TApcar=^char;
VAR
  Apcar:TApcar;

BEGIN
  New(Apcar);
  Readln(Apcar^);
  Apcar^:= Pred(Apcar^);

END.
Computación II - 324
Operaciones con Puntero.


Las operaciones permitidas para esta nueva variables son:
      Asignación
      Lectura
      Escritura
      Todas las operaciones legales que se puedan realizar con dicho
tipo declarado (entero, string, char, etc).
Computación II - 324
Operaciones con Punteros (^).
Ejemplos.
        Asignación:


 Los cambios que se efectúen con la variable Apnum1 o la
 Variable Apnum2 afectan a ambas, son indistintas.

 El espacio en memoria que se reservo con la variable Apnum1
 Sigue ocupado en memoria, lo conveniente es liberar este
 Espacio antes de realizar la asignación.
Computación II - 324
TYPE
 TApnum=^integer;
VAR
  Apnum1,Apnum2:TApnum;

BEGIN
  New(Apnum1);New(Apnum2); { inst. 1}
  Apnum1^:=2;Apnum2^:=4; {inst. 2}
  Apnum2^:=Apnum1^ + Apnum2^; {inst. 3}
  Apnum1^:=Apnum2^ DIV 2 ; {inst. 4}

END.
Computación II - 324
New(Apnum1);New(Apnum2); { inst. 1}




 Apnum1          Apnum2
 Apnum1^:=2;Apnum2^:=4; {inst. 2}



        2               4

  Apnum1          Apnum2
Computación II - 324
Apnum2^:=Apnum1^ + Apnum2^; {inst. 3}




              6

           Apnum2
Apnum1^:=Apnum2^ DIV 2 ; {inst. 4}



       3

 Apnum1
Computación II - 324
Operaciones con Punteros (^).
Ejemplos.
        Comparación:




 Apnum1= Apnum2

 La Comparación resulta con un valor TRUE, ya que Apnum1 y
 Apnum2 contienen direcciones de memoria diferentes.
Computación II - 324
Operaciones con Punteros (^).
Ejemplos.
        Asignación:




 Apnum1: = Apnum2
Computación II - 324
Operaciones con Punteros (^).

   • Comparación: Se comparan las direcciones, no los
   Contenidos de los datos apuntados o referenciados.

   Apnum1=Apunum2 { Apnum1,Apnum2 son datos tipo ^}.

   • Asignación: Se asignan las direcciones entre sí, no
    el contenido de los datos apuntados .

    Apnum1:= Apnum2 { Apnum1 y Apnum2 tienen la misma
                      dirección por lo tanto apuntan al mismo
                      dato.}.
Computación II - 324
Valor Nil .

Palabra reservada en el Lenguaje Pascal.

Es un valor que puede asignarse solo a las variables puntero
e indica que no están apuntando a ningún valor .

Nil puede ser utilizado por cualquier puntero, es decir,
independiente del tipo de dato referenciado (apuntado) por la
variable tipo puntero.

Ejemplo

Apnum1:= nil
Computación II - 324
Otras Estructuras de Datos…



 Lineales: Listas enlazadas, Listas Doblemente enlazada, Pilas,
 Colas.

 No lineales: árboles , grafos.
Computación II - 324
Nodos.
   Es una estructura creada por el programador, para poder
   crear   otras estructuras tales cómo Listas o Colas en
   memoria          dinámica.


   Un nodo posee un puntero que permite  almacenar
   una dirección de otro nodo; es decir  permite
   enlazar múltiples nodos entre sí y hacer nuestras
   estructuras más complejas y alocarlas en memoria
   dinámica.
Computación II - 324
   Nodo.
    Ejemplo. Definición de un nodo.

    TYPE
       TipoLista =^ TipoNodo;
       TipoNodo = Record
        Info:TipoInfo;
        Siguiente:TipoLista
       END;

    Se declara un tipo de puntero llamado TipoLista que apunta a un
    registro TipoNodo.

    Donde TipoNodo esta definido como un registro que almacenará
    información y un campo siguiente. Siguiente es un puntero a un
    tipo de dato TipoLista. Esta forma de definición recursiva nos
    permite construir los nodos.
Computación II - 324
Listas Enlazadas.
    Es un conjunto de elementos llamados nodos en los que cada
    uno de ellos contiene un dato y también la dirección del siguiente
    nodo. Cada nodo apunta al siguiente nodo, excepto el último
    nodo que apunta a NIL. Esto indica que cada nodo ocupa
    posiciones no contiguas en memoria.
    El orden de los mismos se establece mediante punteros.
Computación II - 324
Declaración de una estructura de nodos.




      Definición de estructura recursiva de nodos
Computación II - 324
Característica de las listas
 Una Lista enlazada requiere, como minímo de una
 refrencia al primer nodo
 Una lista vacía el primer nodo apunta a null
 Estructura recursiva de nodos
  Operaciones básicas con listas
  Crear Lista
  Recorrer lista
  Inserta un elemento (inicio-final-una posición dada)
  Borrar un elemento
  Búsqueda de un elemento
<<En estas operaciones es fundamental el movimientos de los punteros>>
Computación II - 324
Operaciones con Listas enlazadas

 Para acceder al primer nodo de una lista es necesario el
 uso de un puntero externo y posteriormente se continua
 con siguiendo la cadena de puntero.

                           (Puntero Externo)




Punteros enlazando al siguiente nodo    Puntero del último nodo
                                             apunta a nil
Computación II - 324
Operaciones Con listas enlazadas

 Cualquier operación con cualquier tipo de lista implica
 redireccionar los punteros de los nodos involucrados o
 afectados por la operación.


Para la operación de inserción se debe determinar el
lugar dentro de la lista.
Computación II - 324
Operación Inserción un elemento en una lista

Esta operación consiste en agregar un nuevo nodo
a la lista. Se considerar tres casos:

Insertar un nodo al inicio.
Insertar un nodo antes o después de cierto nodo.
Insertar un nodo al final
Computación II - 324
Operación Inserción un elemento en una lista




Para la inserción es la creación de nodo, determinar el lugar dentro de
la lista y realizar el movientos de punteros requerido.

En el ejemplo anterior, observamos un nuevo nodo denominado tmp (al
que se asigna un valor x en el campo icorrespondiente a datos), el cual va
ser insertado en la posición posterior dada (apuntada por el nodo actual).
Observamos que para incluirlo en la lista, el apuntador siguiente de tmp,
lo movemos al la misma dirección que apunta el nodo actual y la posición
siguiente del nodo actual se mueve al nodo tmp.
Computación II - 324
Operación eliminar elemento en una lista

La operación consiste en eliminar un nodo de la
lista, redefiniendo las punteros que correspondan.
Se pueden presentar cuatro casos:

Eliminar el primer nodo.
Eliminar el último nodo
Eliminar un nodo con cierta información.
Eliminar el nodo anterior o posterior al nodo
cierta con información.
Computación II - 324
Operación eliminar elemento en una lista




Esta operación consiste en un simple cambio de una
referencia.
En el dibujo para eliminar el nodo con contenido x,
hacemos que la referencia siguiente del nodo actual apunte
apunte al nodo b. Con eso queda alislado el nodo b.
Computación II - 324
Búsqueda de un elemento en una lista

Esta operación consiste en visitar cada uno de los
nodos, tomando al campo siguiente como puntero
al siguiente nodo a visitar.
Listas especiales con nodo cabecera

Una lista enlazada con cabecera es una lista enlazada que
contiene un nodo especial, llamado nodo cabecera, al
principio de la lista.
Computación II - 324
Listas especiales con nodo cabecera

La eliminación del primer nodo se convierte en un caso
especial al igual que la inserción en la primera posición de la
lista, en este caso las operaciones se restringen a aquellas
posiciones posteriores a alguna otra.

La eliminación e insersición al comienzo de la lista son
algoritmos especiales y en todo caso engorroso
Computación II - 324
Búsqueda de un elemento en una lista

Esta operación consiste en visitar cada uno de los
nodos, tomando al campo siguiente como puntero
al siguiente nodo a visitar.

          <<Análisis de ejercicio lista .pas>>
Computación II - 324
Listas Dobles


Es una colección de nodos, donde cada nodo tiene
dos punteros, uno de ellos apuntando a su
predecesor (li) y otro a su sucesor(ld).

Estructura de un nodo:

                PI   DATO PD
Computación II - 324
Tipos Listas Dobles
Listas dobles lineales.
En este tipo de lista doble, tanto el puntero
izquierdo del primer nodo como el derecho
del último nodo apuntan a NIL.




 Se puede recorrer una serie de nodos donde
 desde cualquier nodo excepto el último y el
 primero. Se puede viajar al nodo anterior o al
 siguiente utilizando dos punteros llamados
 P_prox y P_ant.
Computación II - 324
 Tipos Listas Dobles
Listas dobles circulares.
En este tipo el puntero izquierdo del primer nodo
apunta al último nodo de la lista, y el puntero
derecho del último nodo apunta al primer nodo de
la lista.
Computación II - 324
Pilas.

Tipo especial de lista lineal en la cual un elemento sólo puede ser
añadido o eliminado por un extremo llamado cima.

Esto significa que los elementos se sacan de la pila en orden
inverso       al     que     se     pusieron       en       ella.
LIFO (LAST IN- FIRST OUT). Primero que entra último que sale.
Computación II - 324
Pila: caso particular de una lista enlazada




La imagen muestra como quedaría una pila de enteros al agregarle un
valor 3, luego un 2 y luego un 1.


             <<Analizar ejercicio de pila>>
Computación II - 324
   Colas

Una cola es una lista en las que las supresiones se realizan
solamente solamente al principio de la lista y las inserciones al final
de la misma.

 Son conocidas como listas FIFO (First In, First Out:   El primero en
entrar es el primero en salir). Los elementos se        almacenan en
fila, pero sólo pueden añadirse por un extremo y        leerse por el
otro.




                 Analizar ejercicio de cola
Computación II - 324
Cola
Computación II - 324
Recursividad

Es una herramienta de programación utilizada para resolver
problemas que al subdividirlos en subproblemas presentan la
misma estructura.

 Casos Típicos definir objetos en sí mismo ejemplo árboles, colas,
listas, listas enlazadas.

Un programa que se llame a sí mismo se dice que es recursivo
Computación II - 324
Tipos de Recursividad

Directa e indirecta

Diseño de la Recursividad

Estado básico: Es el estado en el cual la solución no se presenta
de manera recursiva sino directamente.

Estado General: Se debe poder resolverse en función del caso
base y un caso general de menor tamaño (que progrese hacia una
solución más sencilla, hacia el caso base)
Computación II - 324
Desventajas de la Recursividad

 No es más rápida que la iteración (ya que implica guardar entornos).
 Consume muchos recursos (memoria)


Funcionamiento de la Recursividad

Es necesario guardar el estado de cada programa antes de cada
llamada (variables locales, parámetros y punto de ejecución) para que
sepa seguir después de la llamada.
Computación II - 324
Análisis del cálculo del factorial de un número
program factorial;                           program FactorialNum;
uses crt;                                    var
                                                num:integer;
var                                          function factorial(n:integer):integer;
n,i,mul:integer;                             begin
                                                  if (n > 1) then
begin                                                  factorial:= n * factorial(n-1)
mul:=1;                                           else factorial:=1;
i:=1;                                        end;
                                             begin
writeln (‘Numero a sacarle el factorial');        write(' Ingrese el valor de n: ');
readln (n);                                       readln(num);
                                                  writeln(' El resultado es:
repeat                                       ',factorial(num));
                                                  readln;
mul:=mul*i;                                  end.
i:=i+1;
until (i>n);

writeln ('el factorial es ',mul);
                                               Realice la corrida de cada uno
readln;
end.

Más contenido relacionado

La actualidad más candente

Examen de Turbo C
Examen de Turbo CExamen de Turbo C
Examen de Turbo Ctacubomx
 
Fundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADAFundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADA
Jose Luis Dorao
 
2 _expresiones_matematicas_254209
2  _expresiones_matematicas_2542092  _expresiones_matematicas_254209
2 _expresiones_matematicas_254209
Miguel Medina
 
Utp 2015-2_ia_lab3
 Utp 2015-2_ia_lab3 Utp 2015-2_ia_lab3
Utp 2015-2_ia_lab3
unijcbenitezp
 
Paralela2
Paralela2Paralela2
Paralela2
Abraham Zamudio
 
Algoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdfAlgoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdf
Benjamín Joaquín Martínez
 
Manejo De Memoria
Manejo De MemoriaManejo De Memoria
Manejo De Memoria
mosh88
 
Tema 1.1
Tema 1.1Tema 1.1
Tema 1.1
alexray100
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmosrehoscript
 
Practica 5 simulink-5156
Practica 5 simulink-5156Practica 5 simulink-5156
Practica 5 simulink-5156
RossiHeredia1
 
Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012ecuatareas
 
Deber 7-cap-2-matlab-nise
Deber 7-cap-2-matlab-niseDeber 7-cap-2-matlab-nise
Deber 7-cap-2-matlab-nise
ALEX PORRAS
 
Utp ia_2014-2_s10_redes de funciones de base radial
 Utp ia_2014-2_s10_redes de funciones de base radial Utp ia_2014-2_s10_redes de funciones de base radial
Utp ia_2014-2_s10_redes de funciones de base radialjcbp_peru
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
Omar Sanchez
 
Algoritmos y programas datos importantes
Algoritmos y programas datos importantesAlgoritmos y programas datos importantes
Algoritmos y programas datos importantesEsteban Bedoya
 

La actualidad más candente (20)

Examen de Turbo C
Examen de Turbo CExamen de Turbo C
Examen de Turbo C
 
Fundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADAFundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADA
 
2 _expresiones_matematicas_254209
2  _expresiones_matematicas_2542092  _expresiones_matematicas_254209
2 _expresiones_matematicas_254209
 
cap7.pdf
cap7.pdfcap7.pdf
cap7.pdf
 
Nivelacion fis
Nivelacion fisNivelacion fis
Nivelacion fis
 
Utp 2015-2_ia_lab3
 Utp 2015-2_ia_lab3 Utp 2015-2_ia_lab3
Utp 2015-2_ia_lab3
 
Paralela2
Paralela2Paralela2
Paralela2
 
Algoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdfAlgoritmos de búsqueda.pdf
Algoritmos de búsqueda.pdf
 
Manejo De Memoria
Manejo De MemoriaManejo De Memoria
Manejo De Memoria
 
Clase2_Python-CTIC
Clase2_Python-CTICClase2_Python-CTIC
Clase2_Python-CTIC
 
Tema 1.1
Tema 1.1Tema 1.1
Tema 1.1
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmos
 
Practica 5 simulink-5156
Practica 5 simulink-5156Practica 5 simulink-5156
Practica 5 simulink-5156
 
Algoritmos 01
Algoritmos 01Algoritmos 01
Algoritmos 01
 
Tata
TataTata
Tata
 
Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012
 
Deber 7-cap-2-matlab-nise
Deber 7-cap-2-matlab-niseDeber 7-cap-2-matlab-nise
Deber 7-cap-2-matlab-nise
 
Utp ia_2014-2_s10_redes de funciones de base radial
 Utp ia_2014-2_s10_redes de funciones de base radial Utp ia_2014-2_s10_redes de funciones de base radial
Utp ia_2014-2_s10_redes de funciones de base radial
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Algoritmos y programas datos importantes
Algoritmos y programas datos importantesAlgoritmos y programas datos importantes
Algoritmos y programas datos importantes
 

Destacado

Trabajo Practico - Simulación (337) - UNA
Trabajo Practico - Simulación (337) - UNATrabajo Practico - Simulación (337) - UNA
Trabajo Practico - Simulación (337) - UNA
Ronald Alexander Medina Pinto
 
mete
metemete
Trabajo Practico - Investigación de Operaciones II (348) - UNA
Trabajo Practico - Investigación de Operaciones II (348) - UNATrabajo Practico - Investigación de Operaciones II (348) - UNA
Trabajo Practico - Investigación de Operaciones II (348) - UNA
Ronald Alexander Medina Pinto
 
338 sistemas de información iii
338   sistemas de información iii338   sistemas de información iii
338 sistemas de información iii
rbrosabelen
 
46769481 guia-de-investigacion-de-operaciones-i[1]
46769481 guia-de-investigacion-de-operaciones-i[1]46769481 guia-de-investigacion-de-operaciones-i[1]
46769481 guia-de-investigacion-de-operaciones-i[1]Estudiantes Unamonagas
 
Charla de inicio Curso Introductorio 2016 2
Charla de inicio Curso Introductorio 2016 2Charla de inicio Curso Introductorio 2016 2
Charla de inicio Curso Introductorio 2016 2
mharos
 

Destacado (9)

Trabajo Practico - Simulación (337) - UNA
Trabajo Practico - Simulación (337) - UNATrabajo Practico - Simulación (337) - UNA
Trabajo Practico - Simulación (337) - UNA
 
mete
metemete
mete
 
LISTAS
LISTASLISTAS
LISTAS
 
Trabajo Practico - Investigación de Operaciones II (348) - UNA
Trabajo Practico - Investigación de Operaciones II (348) - UNATrabajo Practico - Investigación de Operaciones II (348) - UNA
Trabajo Practico - Investigación de Operaciones II (348) - UNA
 
COLAS
COLASCOLAS
COLAS
 
338 sistemas de información iii
338   sistemas de información iii338   sistemas de información iii
338 sistemas de información iii
 
PILAS
PILASPILAS
PILAS
 
46769481 guia-de-investigacion-de-operaciones-i[1]
46769481 guia-de-investigacion-de-operaciones-i[1]46769481 guia-de-investigacion-de-operaciones-i[1]
46769481 guia-de-investigacion-de-operaciones-i[1]
 
Charla de inicio Curso Introductorio 2016 2
Charla de inicio Curso Introductorio 2016 2Charla de inicio Curso Introductorio 2016 2
Charla de inicio Curso Introductorio 2016 2
 

Similar a Computación ii 324-1-estructuras dinamicas-con enlaces

Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacionYsaac Ruiz
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matricesJohanna Marin
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matricesJohanna Marin
 
Pascal
PascalPascal
IC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - EjerciciosIC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - Ejercicioscbertolotti
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++ Ronal Palomino
 
Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)
genesis peña
 
ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++
GabrielFVilla15
 
Guia final so
Guia final soGuia final so
Guia final so
puracastillo
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3karlalopezbello
 
IC estructuras de secuencia
IC estructuras de secuenciaIC estructuras de secuencia
IC estructuras de secuencia
cbertolotti
 
C
CC
Solución de problemas aplicando la computadora
Solución de problemas aplicando la computadoraSolución de problemas aplicando la computadora
Solución de problemas aplicando la computadora
restradal
 
Solución de problemas aplicando la computadora
Solución de problemas aplicando la computadoraSolución de problemas aplicando la computadora
Solución de problemas aplicando la computadorarestradal
 
PROGRAMACIÓN EN C
PROGRAMACIÓN EN CPROGRAMACIÓN EN C
PROGRAMACIÓN EN C
visionartificialitm
 
PROGRAMACION EN C
PROGRAMACION EN CPROGRAMACION EN C
PROGRAMACION EN C
visionartificialitm
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduino
jesusresta
 
Curso c++
Curso c++Curso c++
Tarea3 informatica
Tarea3 informaticaTarea3 informatica
Tarea3 informatica
Boris Seminario
 

Similar a Computación ii 324-1-estructuras dinamicas-con enlaces (20)

Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Pascal
PascalPascal
Pascal
 
IC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - EjerciciosIC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - Ejercicios
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)
 
Micro2 tema 1
Micro2 tema 1Micro2 tema 1
Micro2 tema 1
 
ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++
 
Guia final so
Guia final soGuia final so
Guia final so
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3
 
IC estructuras de secuencia
IC estructuras de secuenciaIC estructuras de secuencia
IC estructuras de secuencia
 
C
CC
C
 
Solución de problemas aplicando la computadora
Solución de problemas aplicando la computadoraSolución de problemas aplicando la computadora
Solución de problemas aplicando la computadora
 
Solución de problemas aplicando la computadora
Solución de problemas aplicando la computadoraSolución de problemas aplicando la computadora
Solución de problemas aplicando la computadora
 
PROGRAMACIÓN EN C
PROGRAMACIÓN EN CPROGRAMACIÓN EN C
PROGRAMACIÓN EN C
 
PROGRAMACION EN C
PROGRAMACION EN CPROGRAMACION EN C
PROGRAMACION EN C
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduino
 
Curso c++
Curso c++Curso c++
Curso c++
 
Tarea3 informatica
Tarea3 informaticaTarea3 informatica
Tarea3 informatica
 

Más de Isbelia Pelayo

Taller 440 2012-1
Taller 440 2012-1Taller 440 2012-1
Taller 440 2012-1
Isbelia Pelayo
 
Actividad 3 carabobo-isbelia medina
Actividad 3  carabobo-isbelia medinaActividad 3  carabobo-isbelia medina
Actividad 3 carabobo-isbelia medina
Isbelia Pelayo
 
Investigación de operaciones 2011-2
Investigación de operaciones 2011-2Investigación de operaciones 2011-2
Investigación de operaciones 2011-2
Isbelia Pelayo
 
Metodología pacie-dokeos
Metodología pacie-dokeosMetodología pacie-dokeos
Metodología pacie-dokeos
Isbelia Pelayo
 
Metodología pacie-dokeos
Metodología pacie-dokeosMetodología pacie-dokeos
Metodología pacie-dokeos
Isbelia Pelayo
 
Taller Semestre 2011-1
Taller Semestre 2011-1Taller Semestre 2011-1
Taller Semestre 2011-1
Isbelia Pelayo
 
Fases IO
Fases IOFases IO
Fases IO
Isbelia Pelayo
 
Programacion lineal
Programacion linealProgramacion lineal
Programacion lineal
Isbelia Pelayo
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del cursoIsbelia Pelayo
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del cursoIsbelia Pelayo
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del cursoIsbelia Pelayo
 
Presentación personal
Presentación personalPresentación personal
Presentación personalIsbelia Pelayo
 

Más de Isbelia Pelayo (14)

Notas 2013 1
Notas 2013 1Notas 2013 1
Notas 2013 1
 
Notas 2012 1
Notas 2012 1Notas 2012 1
Notas 2012 1
 
Taller 440 2012-1
Taller 440 2012-1Taller 440 2012-1
Taller 440 2012-1
 
Actividad 3 carabobo-isbelia medina
Actividad 3  carabobo-isbelia medinaActividad 3  carabobo-isbelia medina
Actividad 3 carabobo-isbelia medina
 
Investigación de operaciones 2011-2
Investigación de operaciones 2011-2Investigación de operaciones 2011-2
Investigación de operaciones 2011-2
 
Metodología pacie-dokeos
Metodología pacie-dokeosMetodología pacie-dokeos
Metodología pacie-dokeos
 
Metodología pacie-dokeos
Metodología pacie-dokeosMetodología pacie-dokeos
Metodología pacie-dokeos
 
Taller Semestre 2011-1
Taller Semestre 2011-1Taller Semestre 2011-1
Taller Semestre 2011-1
 
Fases IO
Fases IOFases IO
Fases IO
 
Programacion lineal
Programacion linealProgramacion lineal
Programacion lineal
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del curso
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del curso
 
Presentación del curso
Presentación del cursoPresentación del curso
Presentación del curso
 
Presentación personal
Presentación personalPresentación personal
Presentación personal
 

Computación ii 324-1-estructuras dinamicas-con enlaces

  • 2. Computación II - 324 C Lenguaje máquina a  t  e Lenguaje Ensamblador g Bajo Nivel  o  r  i a s
  • 3. Computación II - 324  C a  t  e Alto Nivel  g o r i a s Cuarta Generación y Quinta Generación
  • 4. Computación II - 324 Programación Estructurada  Para resolver problemas de cierta envergadura se utiliza normalmente la técnica de diseño que se conoce con el nombre de diseño modular.  El problema se divide en subproblemas que se puedan resolver con un conjunto de subprogramas que tengan una cierta cohesión. Al conjunto de subprogramas que resuelve un subproblema se le llama módulo funcional. Un módulo puede hacer uso de un subprograma de otro módulo si éste aparece en su interfaz
  • 5. Computación II - 324 Programación Estructurada  Un interfaz es un conjunto de cabeceras de subprogramas que pueden ser utilizados por otros módulos. Los interfaces aparecieron para minimizar el acoplamiento entre los módulos. Se dice que es conveniente un diseño con acoplamiento débil entre módulos. La interfaz sólo tienen que aparecer los subprogramas principales del módulo y no los subprogramas que son utilizados para implementar los subprogramas principales
  • 6. Computación II - 324 Programación Estructurada  Esta descomposición se conoce con el nombre de descomposición funcional. Posteriormente aparece un nuevo tipo de descomposición o abstracción que se conoce con el nombre de abstracción de datos
  • 7. Computación II - 324 Abstracción  La técnica de la abstracción no permite acceder directamente a la representación de la estructura.
  • 8. Computación II - 324 Abstracción  La abstracción: Separa la especificación (qué hace) de la implementación (cómo lo hace). Los usuarios de un TAD no necesitan conocer sus detalles de implementación (Cómo lo hacen). Como consecuencia, aporta las ventajas de:  Extensibilidad del código: Es posible modificar y mejorar la implementación del TAD sin afectar a los demás módulos que lo utilizan., b) Aumenta la facilidad de uso. c) Aumenta la legibilidad del código que usa el TAD.
  • 9. Computación II - 324 Manejo de memoria 5 caracteres La asignación estática de memoria reserva la cantidad necesaria para almacenar los datos de cada estructura en tiempo de compilación
  • 10. Computación II - 324 Tipo de datos en Pascal Tipo Rango Espacio en memoria Char Carácter ASCII 1 byte 5Byte caracteres 0 a 255 1 byte Integer -32768 a 32767 2 bytes Real 1 E -38 a 1 E+38 6 bytes Boolean True – False 1 byte Shortint -128 a 127 1 byte Word 0 a 65535 2 byte Longint -2147483648 a 4 byte 214748364 String Cadena de 255 caracteres Hasta 255 bytes
  • 11. Computación II - 324 Manejo de memoria No se almacenan en memoria estática. 5• caracteres Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilación no se sabe el número de variables que serán necesarias. • Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número de elementos que la forman no es conocido hasta que el programa se ejecuta.
  • 12. Computación II - 324 Uso de Procedimiento y funciones Parámetros Valor  No devuelve valores…no antecede la palabra VAR  El compilador crea una copia del dato y lo almacena en la variable parámetro que lo recibe. Dentro de la función o procedimiento se trabaja con la copia obtenida, no importando las operaciones que se realicen con la copia, la variable introducida como parámetro, no será afectada en su valor inicial al terminar el proceso. Su sintaxis es la siguiente: PROCEDURE Identificador (Ide1, Ide2: Tipo; Ide3: Tipo);
  • 13. Computación II - 324 Ejemplo program Ejemplo; uses crt; BEGIN var nombre:string; clrscr; (* cargando variable *) nombre:='juan fernando'; Procedure pasar(nombre1:string); pasar(nombre); (* desplegando *) writeln('nombre : ',nombre); begin (* cambiando parametro *) readln; END. nombre1:='maria elena'; end; Valor de la variable nombre en el Procedimiento Pasar ? Valor de la variable nombre en el Programa Principal?
  • 14. Computación II - 324 Parámetro Por Referencia Se reciben/envían con la palabra clave VAR. Se trabaja en la misma posición de memoria de la variable original, es decir, se referencian. Cualquier cambio que se realice a la variable parámetro, en el procedimiento o función también se le estará haciendo a la variable original. PROCEDURE Identificador (VAR Ide1: Tipo);
  • 15. Computación II - 324 Ejemplo BEGIN program Ejemplo; clrscr; (* cargando variable *) nombre:='juan fernando'; uses crt; Edad:= 30; var nombre:string; edad:integer; (* mandando a procedimiento *) procedure pasar(nombre1:string; pasar(nombre,edad); (* desplegando *) var edad1:integer); writeln('nombre : ',nombre); begin (* cambiando parametro *) writeln(‘edad : ',edad); nombre1:='maria elena'; readln; END. edad1:=50; end; Valor de la variables nombre y edad? http://www.pcg.ull.es/edapplets/DataControlJApplet/pasoparametros.html
  • 16. Computación II - 324 Punteros en Pascal.  Es una variable cuyo valor es una dirección de memoria donde se encuentra la variable dinámica apuntada
  • 17. sComputación II - 324 Punteros en Pascal. En PASCAL los punteros se declaran con el símbolo ^. Declarar las variables tipo puntero que sean necesarias (Dentro de la sección VAR).
  • 18. Computación II - 324 Se pueden definir tipos punteros o definir variables de tipo puntero: Type ptr = ^integer; Var p: ptr; q: ^real; Ejemplo p^:= 5 . Asigno el valor 5 a la variable apuntada por p. writeln(p^). Imprime el valor de la variable apuntada por p.
  • 19. sComputación II - 324 Creación y destrucción de variables dinámicas El Procedimiento NEW(), asigna memoria a la variable puntero, en caso de que el PC no obtenga memoria para alocar el pedido, al puntero se le asignara la dirección NIL, cuyo significado es "nada", es decir el puntero no apunta a ningún sector de la memoria. El Procedimiento DISPOSE(), Libera memoria reservada por a la variable puntero mediante el procedimiento DISPOSE()
  • 20. Computación II - 324 Ejemplo. New (puntero). Asigna memoria a la variable apuntada por puntero. Gráficamente.
  • 21. Computación II - 324 Ejemplo. Representación Gráfica.
  • 22. Computación II - 324 Tipo de dato Tipo de dato Diagrama sintáctico. puntero. de dato Contiene una predefinido dirección de en pascal memoria
  • 23. Computación II - 324 Ejemplo. Dispose (puntero). Libera la memoria asociada a la variable referida (la que contiene el dato). Deja indefinido el puntero. Gráficamente.
  • 24. Computación II - 324 Ejemplo. Type Puntx=^Real; Var P:Puntx; <apunta a direcciones de memoria que contienen valores de tipo real.> Estas declaraciones aún no crean nada en memoria hasta cuando el programa se ejecute el procedimiento NEW. NEW(P) , genera lo siguiente en memoria. P^ P--
  • 25. Computación II - 324 Puntero. NEW(P) , genera lo siguiente en memoria. Una celda vacía apuntada por P y contendrá valor real. P^ P-- P^:= 355 <asigna el valor 355 en la celda de memoria apuntada por P^. 355 P--
  • 26. Computación II - 324 TYPE TApcar=^char; VAR Apcar:TApcar; BEGIN New(Apcar); Readln(Apcar^); Apcar^:= Pred(Apcar^); END.
  • 27. Computación II - 324 Operaciones con Puntero. Las operaciones permitidas para esta nueva variables son: Asignación Lectura Escritura Todas las operaciones legales que se puedan realizar con dicho tipo declarado (entero, string, char, etc).
  • 28. Computación II - 324 Operaciones con Punteros (^). Ejemplos. Asignación: Los cambios que se efectúen con la variable Apnum1 o la Variable Apnum2 afectan a ambas, son indistintas. El espacio en memoria que se reservo con la variable Apnum1 Sigue ocupado en memoria, lo conveniente es liberar este Espacio antes de realizar la asignación.
  • 29. Computación II - 324 TYPE TApnum=^integer; VAR Apnum1,Apnum2:TApnum; BEGIN New(Apnum1);New(Apnum2); { inst. 1} Apnum1^:=2;Apnum2^:=4; {inst. 2} Apnum2^:=Apnum1^ + Apnum2^; {inst. 3} Apnum1^:=Apnum2^ DIV 2 ; {inst. 4} END.
  • 30. Computación II - 324 New(Apnum1);New(Apnum2); { inst. 1} Apnum1 Apnum2 Apnum1^:=2;Apnum2^:=4; {inst. 2} 2 4 Apnum1 Apnum2
  • 31. Computación II - 324 Apnum2^:=Apnum1^ + Apnum2^; {inst. 3} 6 Apnum2 Apnum1^:=Apnum2^ DIV 2 ; {inst. 4} 3 Apnum1
  • 32. Computación II - 324 Operaciones con Punteros (^). Ejemplos. Comparación: Apnum1= Apnum2 La Comparación resulta con un valor TRUE, ya que Apnum1 y Apnum2 contienen direcciones de memoria diferentes.
  • 33. Computación II - 324 Operaciones con Punteros (^). Ejemplos. Asignación: Apnum1: = Apnum2
  • 34. Computación II - 324 Operaciones con Punteros (^). • Comparación: Se comparan las direcciones, no los Contenidos de los datos apuntados o referenciados. Apnum1=Apunum2 { Apnum1,Apnum2 son datos tipo ^}. • Asignación: Se asignan las direcciones entre sí, no el contenido de los datos apuntados . Apnum1:= Apnum2 { Apnum1 y Apnum2 tienen la misma dirección por lo tanto apuntan al mismo dato.}.
  • 35. Computación II - 324 Valor Nil . Palabra reservada en el Lenguaje Pascal. Es un valor que puede asignarse solo a las variables puntero e indica que no están apuntando a ningún valor . Nil puede ser utilizado por cualquier puntero, es decir, independiente del tipo de dato referenciado (apuntado) por la variable tipo puntero. Ejemplo Apnum1:= nil
  • 36. Computación II - 324 Otras Estructuras de Datos… Lineales: Listas enlazadas, Listas Doblemente enlazada, Pilas, Colas. No lineales: árboles , grafos.
  • 37. Computación II - 324 Nodos. Es una estructura creada por el programador, para poder crear otras estructuras tales cómo Listas o Colas en memoria dinámica. Un nodo posee un puntero que permite almacenar una dirección de otro nodo; es decir permite enlazar múltiples nodos entre sí y hacer nuestras estructuras más complejas y alocarlas en memoria dinámica.
  • 38. Computación II - 324  Nodo. Ejemplo. Definición de un nodo. TYPE TipoLista =^ TipoNodo; TipoNodo = Record Info:TipoInfo; Siguiente:TipoLista END; Se declara un tipo de puntero llamado TipoLista que apunta a un registro TipoNodo. Donde TipoNodo esta definido como un registro que almacenará información y un campo siguiente. Siguiente es un puntero a un tipo de dato TipoLista. Esta forma de definición recursiva nos permite construir los nodos.
  • 39. Computación II - 324 Listas Enlazadas. Es un conjunto de elementos llamados nodos en los que cada uno de ellos contiene un dato y también la dirección del siguiente nodo. Cada nodo apunta al siguiente nodo, excepto el último nodo que apunta a NIL. Esto indica que cada nodo ocupa posiciones no contiguas en memoria. El orden de los mismos se establece mediante punteros.
  • 40. Computación II - 324 Declaración de una estructura de nodos. Definición de estructura recursiva de nodos
  • 41. Computación II - 324 Característica de las listas Una Lista enlazada requiere, como minímo de una refrencia al primer nodo  Una lista vacía el primer nodo apunta a null  Estructura recursiva de nodos Operaciones básicas con listas Crear Lista Recorrer lista Inserta un elemento (inicio-final-una posición dada) Borrar un elemento Búsqueda de un elemento <<En estas operaciones es fundamental el movimientos de los punteros>>
  • 42. Computación II - 324 Operaciones con Listas enlazadas Para acceder al primer nodo de una lista es necesario el uso de un puntero externo y posteriormente se continua con siguiendo la cadena de puntero. (Puntero Externo) Punteros enlazando al siguiente nodo Puntero del último nodo apunta a nil
  • 43. Computación II - 324 Operaciones Con listas enlazadas Cualquier operación con cualquier tipo de lista implica redireccionar los punteros de los nodos involucrados o afectados por la operación. Para la operación de inserción se debe determinar el lugar dentro de la lista.
  • 44. Computación II - 324 Operación Inserción un elemento en una lista Esta operación consiste en agregar un nuevo nodo a la lista. Se considerar tres casos: Insertar un nodo al inicio. Insertar un nodo antes o después de cierto nodo. Insertar un nodo al final
  • 45. Computación II - 324 Operación Inserción un elemento en una lista Para la inserción es la creación de nodo, determinar el lugar dentro de la lista y realizar el movientos de punteros requerido. En el ejemplo anterior, observamos un nuevo nodo denominado tmp (al que se asigna un valor x en el campo icorrespondiente a datos), el cual va ser insertado en la posición posterior dada (apuntada por el nodo actual). Observamos que para incluirlo en la lista, el apuntador siguiente de tmp, lo movemos al la misma dirección que apunta el nodo actual y la posición siguiente del nodo actual se mueve al nodo tmp.
  • 46. Computación II - 324 Operación eliminar elemento en una lista La operación consiste en eliminar un nodo de la lista, redefiniendo las punteros que correspondan. Se pueden presentar cuatro casos: Eliminar el primer nodo. Eliminar el último nodo Eliminar un nodo con cierta información. Eliminar el nodo anterior o posterior al nodo cierta con información.
  • 47. Computación II - 324 Operación eliminar elemento en una lista Esta operación consiste en un simple cambio de una referencia. En el dibujo para eliminar el nodo con contenido x, hacemos que la referencia siguiente del nodo actual apunte apunte al nodo b. Con eso queda alislado el nodo b.
  • 48. Computación II - 324 Búsqueda de un elemento en una lista Esta operación consiste en visitar cada uno de los nodos, tomando al campo siguiente como puntero al siguiente nodo a visitar. Listas especiales con nodo cabecera Una lista enlazada con cabecera es una lista enlazada que contiene un nodo especial, llamado nodo cabecera, al principio de la lista.
  • 49. Computación II - 324 Listas especiales con nodo cabecera La eliminación del primer nodo se convierte en un caso especial al igual que la inserción en la primera posición de la lista, en este caso las operaciones se restringen a aquellas posiciones posteriores a alguna otra. La eliminación e insersición al comienzo de la lista son algoritmos especiales y en todo caso engorroso
  • 50. Computación II - 324 Búsqueda de un elemento en una lista Esta operación consiste en visitar cada uno de los nodos, tomando al campo siguiente como puntero al siguiente nodo a visitar. <<Análisis de ejercicio lista .pas>>
  • 51. Computación II - 324 Listas Dobles Es una colección de nodos, donde cada nodo tiene dos punteros, uno de ellos apuntando a su predecesor (li) y otro a su sucesor(ld). Estructura de un nodo: PI DATO PD
  • 52. Computación II - 324 Tipos Listas Dobles Listas dobles lineales. En este tipo de lista doble, tanto el puntero izquierdo del primer nodo como el derecho del último nodo apuntan a NIL. Se puede recorrer una serie de nodos donde desde cualquier nodo excepto el último y el primero. Se puede viajar al nodo anterior o al siguiente utilizando dos punteros llamados P_prox y P_ant.
  • 53. Computación II - 324 Tipos Listas Dobles Listas dobles circulares. En este tipo el puntero izquierdo del primer nodo apunta al último nodo de la lista, y el puntero derecho del último nodo apunta al primer nodo de la lista.
  • 54. Computación II - 324 Pilas. Tipo especial de lista lineal en la cual un elemento sólo puede ser añadido o eliminado por un extremo llamado cima. Esto significa que los elementos se sacan de la pila en orden inverso al que se pusieron en ella. LIFO (LAST IN- FIRST OUT). Primero que entra último que sale.
  • 55. Computación II - 324 Pila: caso particular de una lista enlazada La imagen muestra como quedaría una pila de enteros al agregarle un valor 3, luego un 2 y luego un 1. <<Analizar ejercicio de pila>>
  • 56. Computación II - 324 Colas Una cola es una lista en las que las supresiones se realizan solamente solamente al principio de la lista y las inserciones al final de la misma. Son conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro. Analizar ejercicio de cola
  • 57. Computación II - 324 Cola
  • 58. Computación II - 324 Recursividad Es una herramienta de programación utilizada para resolver problemas que al subdividirlos en subproblemas presentan la misma estructura. Casos Típicos definir objetos en sí mismo ejemplo árboles, colas, listas, listas enlazadas. Un programa que se llame a sí mismo se dice que es recursivo
  • 59. Computación II - 324 Tipos de Recursividad Directa e indirecta Diseño de la Recursividad Estado básico: Es el estado en el cual la solución no se presenta de manera recursiva sino directamente. Estado General: Se debe poder resolverse en función del caso base y un caso general de menor tamaño (que progrese hacia una solución más sencilla, hacia el caso base)
  • 60. Computación II - 324 Desventajas de la Recursividad  No es más rápida que la iteración (ya que implica guardar entornos).  Consume muchos recursos (memoria) Funcionamiento de la Recursividad Es necesario guardar el estado de cada programa antes de cada llamada (variables locales, parámetros y punto de ejecución) para que sepa seguir después de la llamada.
  • 61. Computación II - 324 Análisis del cálculo del factorial de un número program factorial; program FactorialNum; uses crt; var num:integer; var function factorial(n:integer):integer; n,i,mul:integer; begin if (n > 1) then begin factorial:= n * factorial(n-1) mul:=1; else factorial:=1; i:=1; end; begin writeln (‘Numero a sacarle el factorial'); write(' Ingrese el valor de n: '); readln (n); readln(num); writeln(' El resultado es: repeat ',factorial(num)); readln; mul:=mul*i; end. i:=i+1; until (i>n); writeln ('el factorial es ',mul); Realice la corrida de cada uno readln; end.