Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I. Asignación de Dinámica de Memoria
|
|
- Vicenta Carrizo Cáceres
- hace 6 años
- Vistas:
Transcripción
1 Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 14 Memoria dinámica y listas enlazadas Estática (o en tiempo de compilación) El compilador asigna la memoria necesaria para almacenar los valores asociados a cada variable del programa. El espacio de memoria requerido para almacenar los valores del tipo se conoce en tiempo de compilación. Dinámica (o en tiempo de ejecución) La memoria se asigna durante la ejecución del programa. El espacio de memoria asignado a un proceso varia durante la ejecución. Los valores se alojan en una parte de la RAM reservada al proceso denominada memoria dinámica (o heap). 1 2 Asignación de Dinámica de Memoria Para asignar dinámicamente espacio de memoria utilizamos el operador new, seguido por el tipo de valores a almacenar new int //asigna dinamicamente memoria para almacenar un int new float // asigna dinamicamente memoria para almacenar un double el operador new retorna la dirección de memoria donde comienza el espacio asignado. El tipo puntero a (*). Por ejemplo: int* p; //declara a la variable p como un puntero a un entero Los valores de p son direcciones de memoria que almacenan enteros. int* p; //declara a la variable p como un puntero a un entero p = new int //asigna memoria para almacenar un int //y guarda su direccion en p. Accesos a la memoria dinámica (desrefenciación) Para acceder al valor contenido en la memoria apuntada por un puntero, debemos desreferenciar: acceder a la posición de memoria apuntada por el puntero El operador de desreferenciación es * int* p = new int; //declara y asigna dinamicamente memoria para el puntero p *p = 5; //asigna a la memoria apuntada por p el valor 5 cout << *p; //muestra el valor 5 Notar diferencia con cout<<p que muestra una dirección de memoria. Las asignaciones son incorrectas int a; int* p;. p = 10; //MAL: p es de tipo puntero a entero, no un entero p = a; //MAL: p es de tipo puntero a entero, no un entero a = p //MAL: a es de tipo entero, no un puntero a entero 3 4
2 Asignación de punteros (Aliasing) Consideremos este código: *a = 10; int* b; b = a; // a y b apuntan a la misma direccion de memoria cout<<*b; // Muestra 10 *b = 5; cout<<*a //Muestra 5; Esto se debe a que las dos variables apuntan a la misma posición de memoria. El mismo fenómeno que ocurre cuando utilizamos referencias. Puntero a NULL Es un valor especial que indica que el puntero no está apuntando a ninguna posición de memoria. Se indica por la constante 0 (o una expresión que evalué 0). Puede usarse la macro NULL que está definida como el valor 0. a = 0; // a no apunta a ninguna posicion de memoria Si se desreferencia el puntero nulo se produce un error en tiempo de ejecución (Segmentation fault). a = NULL; // a no apunta a ninguna posicion de memoria cout<<*a; //Error: Se desreferencia al puntero a NULL 5 6 Alcance de las variables Alcance: Es la porción de código en dónde vale la asociación entre el nombre de la variable y la posición de memoria que designa la variable (es decir, donde es correcto usar el nombre de la variable para referirse a la posición de memoria). El alcance de las variables locales en C++ está designado por un par de llaves. int f() int n = 5; return n; Alcance de n Tiempo de vida de un objeto Tiempo de vida de un objeto es el lapso de ejecución del programa en el que una porción de memoria está reservada para almacenar a dicho objeto. Para las variables locales, el tiempo de vida coincide con la ejecución de su alcance. Para los objetos creados dinámicamente, el tiempo de vida no está determinado estáticamente. Alcance de n int* f () int* n = new int; return n; La memoria reservada con la operación new int no se libera al finalizar la ejecución del alcance en la que fue asignada. 7 8
3 Pérdida de memoria (Memory Leaks) Uso incorrecto de memoria Se asignó dinámicamente memoria que no puede accederse más, porque se pierden las referencias. a = 0; // se pierde la direccion de memoria asignada // La memoria asignada con new permanece inutilizable y debe ser liberada Para ello usamos el operador delete. delete a; // la memoria apuntada por a es liberada Para no perder memoria, cada porción de memoria que se asigna con new, debe liberarse con delete. 9 Referencias colgantes (Dangling references) Luego de ejecutar delete a la memoria apuntada por a no debería ser utilizada, sin embargo C++ no lo prohibe y es responsabilidad del programador. El código no produce error, pero accede mal a la memoria. *a = 5; delete a; cout<<*a; //Mal uso de memoria: acceso a memoria que ha sido liberada Algunos programadores utilizan la convención. Asignar el puntero a NULL luego de liberar *a = 5; delete a; a = 0; cout<<*a; //Error en tiempo de ejecucion Se resuelve el problema? No, en presencia de aliasing. 10 Referencias colgantes (Dangling references) Se resuelve el problema? No, en presencia de aliasing pueden quedar referencias colgantes int* a, *b; b = a; delete a; a = 0; cout<<*b; //Acceso incorrecto a memoria liberada Es responsabilidad del programador administrar el uso de la memoria. Dado que esto se considera una actividad de bajo nivel de abstracción, muchos lenguajes modernos liberan al programador de esta actividad Incorporando un recolector de basura (garbage collector). 11 Referencias a instancias de clases Considerar class Complex public: Complex(float r, float i); Complex suma(complex1 c); Complex resta(complex1 c); void show(); private: float real, imag; ; int main() Complex a = Complex(1,2); Complex* b = new Complex(10,4); a.show() (*b).show(); b -> show(); El operador -> es equivalente a dereferenciar y seleccionar una operación o un atributo. this es un puntero. 12
4 Arreglos Podemos pedir un arreglo de forma dinámica? Sí. Usando new[exp]. Pero la longitud queda fija para siempre. Tenemos que ocuparnos de liberar la memoria usando delete[] int n = 5; int[] a = new a[n]; delete a[]; Queremos una estructura para guardar datos, de largo variable. tipo Lista<T> observador elems(l:lista<t>): [T]; problema agregaradelante(l:lista<t>, e: T) modifica l; asegura elems(l)==e:elems(pre(l)); problema agregaratras(l:lista<t>, e: T) modifica l; asegura elems(l)==elems(pre(l))++[e]; problema quitarprimero(l:lista<t>) requiere elems(l) > 0; modifica l; asegura elems(l)==elems(pre(l))[1.. elems(pre(l) )]; Queremos una estructura para guardar datos, de largo variable. Idea: Pedir memoria para un por vez y guardar una referencia a este. Dónde? En un anterior! Creamos una estructura de datos Nodo que guarda el que queremos almacenar y un puntero a otro Nodo: Por ejemplo, creamos tres nodos de la forma (asumiendo es int): Nodo* nodo1 = new Nodo; nodo1 -> = 1; Nodo* nodo2 = new Nodo; nodo2 -> = 2; Nodo* nodo3 = new Nodo; nodo3 -> = 3; struct Nodo T ; Nodo* ; Graficamente: nodo1 nodo2 nodo3 La clausula struct permite definir estructuras agrupando diferentes componentes básicos. Es similar a class pero, al contrario que class, brinda por defecto accesibilidad pública a sus s. A veces se usa para definir estructuras de datos dentro de clases rerpesentando TADs
5 Luego, hacemos que el nodo1 referencie al nodo2 y el nodo2 al nodo3. El nodo3 referencia a null para indicar que es el final de la lista: nodo1 -> = nodo2; nodo2 -> = nodo3; nodo3 -> = NULL; Gráficamente: nodo1 nodo2 nodo3 Notemos entonces que con sólo mantener una referencia al primer nodo de la lista, podemos acceder a todos los s: prim Aprovechando esto, queremos construir una Lista que responda a las s operaciones: Lista<int> l; l.imprimir(); //imprime [] l.agregaradelante(2); l.imprimir(); //imprime [2] l.agregaradelante(4); l.imprimir(); //imprime [4 2] l.agregaradelante(2); l.imprimir(); //imprime [2 4 2] l.agregaradelante(8); l.imprimir(); //imprime [ ] Sólo mantenemos una referencia al primer nodo, con lo cual una Lista va a estar representada sólo por esta variable: template <class T> class Lista struct Nodo T ; Nodo* ; ; Nodo* primero; ; La lista vacía es aquella que no tiene un primer nodo, o dicho de otra manera, que el nodo primero vale NULL. Todo nodo referencia al nodo en la lista. Si es el último no referencia a ninguno, es decir, su variable vale NULL
6 Constructores y Destructores Constructor: Permite definir el valor inicial de una lista recien creada (estática o dinámicamente). Garantiza que se cumpla el invariante de representación! class Lista<T> Lista() primero = NULL; private: Nodo* primero; Destructor: Garantiza que cuando una instancia es destruida, se limpie también la memoria correspondiente a las instancias creadas o que dependen de ella. class Lista<T> ~Lista() // Luego volvemos a esto Método imprimir Para imprimir una lista, nos paramos en el primer y vamos recorriendo la lista utilizando la referencia al : class Lista<T> public: void imprimir() cout<<"["; Nodo* n = this -> primero; while (n!= NULL) cout<<n -> <<" "; n = n -> ; cout<<"]"<<endl; Método agregaradelante Cómo agregamos un al principio de la lista? Necesitamos crear un nuevo Nodo y que éste pase a formar parte de la lista. Para agregarlo adelante, debe pasar a ser el primer nodo de la lista, y debemos tener cuidado de que su variable apunte al nodo apropiado. void agregaradelante(t x) Nodo* nuevo = new Nodo; nuevo -> = x; nuevo -> = this -> primero; this -> primero = nuevo; Esquemas de iteración: arreglo Un esquema de iteración es la estructura algorítmica para recorrer los s de una estructura de datos. En un arreglo, recorremos los s con un ciclo con un índice: int i=0; while( i < n ) // hacer algo con arr[i] ++i; 23 24
7 Esquemas de iteración: lista En la lista, tenemos que crear una referencia a nodo, que se inicializa con el primer nodo de la lista y en cada paso se actualiza con el nodo: Nodo* n = this -> primero; while (n!= NULL) // hacer algo con n. n = n -> Este algoritmo puede alterarse para frenar en el último o en un buscado. Método largo Ejercicio: escribir un método int largo() que devuelve el largo de la lista. int largo() int l=0; Nodo* n = this->primero; while (n!= NULL) l++; n = n -> ; return l; Método agregaratras Siguiendo con la lista del primer ejemplo, incluyamos el método: l.imprimir(); //imprime [ ] l.agregaratras(16); l.imprimir(); //imprime [ ] l.agregaratras(32); l.imprimir(); //imprime [ ] Método agregaratras Ejercicio: codificar la función agregaratras Solución: void agregaratras(t x) Nodo* nuevo = new Nodo; nuevo -> = x; if(this -> primero==null) // Esta vacia? this -> primero = nuevo; else // Avanzar hasta el ultimo Nodo* n = this -> primero; while(n ->!=NULL) n = n -> ; n -> = nuevo; 27 28
8 Método quitarprimero Eliminar el primer de la lista l.imprimir(); //imprime [ ] l.quitarprimero(); l.imprimir(); //imprime [ ] Tenemos que asegurarnos de liberar le memoria del eliminado void quitarprimero() Nodo * n = this -> primero; // El nuevo primero es el this -> primero = this -> primero -> ; // Libero la memoria delete n; Destructor El destructor se ocupa de limpiar lo hecho por la instrancia destruida. En particular debe liberar la memoria ocupada por las instancias que pudo haber creado. en el caso de la Lista enlazada se debe ocupar la memoria ocupada por cada nodo. class Lista<T> ~Lista() Nodo* n = this -> primero; while(n!=null) Nodo* sig = n -> ; delete n; n=sig; Ampliando la clase (1) Qué orden de complejidad tiene la función largo()? Ampliamos la clase agregando una variable de instancia con la cantidad de nodos de la lista: template <class T> class Lista<T> Nodo* primero; int nodos; - Ampliando la clase (1) Cambia el constructor Lista() primero = NULL; nodos = 0; Cuál sería el invariante de representación? y el abs? Tenemos que actualizar el código de los métodos que actualizan la lista! 31 32
9 - Ampliando la clase (1) Cambia el método agregaradelante void agregaradelante(int x) Nodo* nuevo = new Nodo; nuevo -> = x; nuevo -> = this -> primero; this -> primero = nuevo; ++nodos; y todos los métodos que alteren los nodos de la lista! - Ampliando la clase (1) Cuál es la ventaja de haber agregado esta variable? Ahora el método largo es más eficiente! int largo() return nodos; En la versión anterior, este método tenía complejidad O(n), y la versión actual tieme complejidad O(1). Mejoramos la eficiencia de uno de los métodos, sin empeorar el orden del resto (sólo agregamos una instrucción a cada uno) Ampliando la clase (2) Cómo es el algoritmo para agregar un al final de la lista? (lo llamamos agregaratras). La representación de listas con una referencia al primer genera una asimetría entre los métodos agregaradelante y agregaratras. Agregar al principio es O(1). Agregar al final es O(n), porque tenemos que recorrer toda la lista para localizar el último nodo. - Ampliando la clase (2) Una instancia de ListaInt tiene ahora dos referencias: Solución: Mantener una referencia al último nodo! class Lista<T> Nodo* primero; Nodo* ultimo; Ahora, el método agregaratras no necesita recorrer la lista para ubicar el último nodo, y entonces pasa a ser O(1). Tenemos que actualizar los métodos que modifican la lista
10 Listas doblemente enlazadas Cada nodo tiene una referencia al, y también una referencia al anterior. 37
Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.
Algoritmos Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEN - UBA Programación imperativa - clase 10 Memoria dinámica listas enlazadas Clases e instancias El paquete
Más detallesMemoria Dinámica en C++
Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:
Más detallesTema 6: Memoria dinámica
: Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0
Más detallesAPUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.
APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido
Más detallesMemoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++
Qué es una variable? Variables Memoria Matemática: una etiqueta que representa a un valor en una expresión: f (y) = y 2 + 2y Programación: Nombre simbólico dado a un valor residente en la memoria. Propiedades
Más detallesPrincipios de Computadoras II
Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación
Más detallesGESTIÓN DE MEMORIA DINÁMICA
UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación GESTIÓN DE MEMORIA DINÁMICA Tema 3 Programación II Programación II 0 Tema 3: GESTIÓN DE MEMORIA DINÁMICA Tema 3: GESTIÓN
Más detalles3 - Tipos Inductivos (Recursivos)
Programación 2 3 - Tipos Inductivos (Recursivos) Estructuras Dinámicas: Punteros y Listas 1 Tipos inductivos tienen, en general, cardinalidad infinita contienen valores de "tamaño arbitrario" Ejemplos:
Más detallesEste material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y
Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y distribución. Listas Enlazadas Estructuras de datos dinámicas
Más detallesTema 6. Gestión dinámica de memoria
Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la
Más detallesImplementación de las Clases Pila, Cola, Lista y Arbol
1/1 Implementación de las Clases Pila, Cola, Lista y Arbol Josefina Sierra Santibáñez 28 de noviembre de 2017 2/1 Implementación de Estructuras de Datos Implementaremos cada estructura de datos en dos
Más detallesTipos Recursivos de Datos
1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),
Más detallesObjetos y memoria dinámica
Objetos memoria dinámica 1. Punteros a objetos 2. Vectores dinámicos de objetos 3. Uso de objetos dinámicos 4. Atributos dinámicos 5. Creación de objetos con atributos dinámicos 6. Destrucción de objetos
Más detallesUNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.
Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.
Más detallesIMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA
IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA Implementación de conceptos P.O.O. en Java Temario 2. Conceptos de Programación Orientada a Objetos 1. Conceptos de P.O.O. 2. Implementación de conceptos P.O.O
Más detallesClases y Objetos en C++
Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar
Más detallesManejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329
Manejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329 Asignación Dinámica Asignación Dinámica es la creación de un objeto mientras el programa está en ejecución. Para ello
Más detallesTEMA 8: Gestión dinámica de memoria
TEMA 8: Gestión dinámica de memoria 8.1.-Tipo de datos puntero Hasta ahora, los tipos de datos que hemos visto (a excepción de strings y ficheros) eran estructuras de datos estáticas, es decir, estructuras
Más detallesTema 6: Clases. Índice
Tema 6: Clases Antonio J. Sierra Índice 1. Fundamentos. 2. Declaración de objetos. 3. Asignación de objetos a variables referencia. 4. Métodos. 5. Constructores. 6. this. 7. Recogida de basura. 8. Modelado
Más detallesClases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos
Más detallesUniversidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México
Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos
Más detallesPunteros y Memoria Dinámica II
Repaso Punteros y Memoria Dinámica II Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es! Memoria! Qué necesita el compilador para acceder a una variable?! Punteros! Operadores &
Más detallesEspecificación de programas. Algoritmos y Estructuras de Datos I. Correctitud de ciclos
Especificación de programas Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Simulacro Coloquio Final - clase 1 Sean dos programas, cada uno recibe
Más detallesESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo
ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución
Más detallesProgramación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++
Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones
Más detallesApuntadores en C y C++
Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta
Más detallesProgramación Orientada a Objetos en C++
Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase
Más detallesLISTAS ENLAZADAS FUNDAMENTOS TEORICOS
LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace»
Más detallesSegundo Parcial de Programación 2 7 de junio de 2017
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Segundo Parcial de Programación 2 7 de junio de 2017 Problema 1 (30 puntos) Considere un TAD T que permita almacenar a lo sumo
Más detallesUNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.
Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.
Más detallesEstructuras Dinámicas
Departamento de Lenguajes yciencias de la Computación 4 Estructuras Dinámicas Contenido 1. Gestión dinámica de memoria. 2. El tipo puntero. 3. Operaciones con punteros. 4. Operaciones básicas sobre listas
Más detallesTema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz
Tema 8. Listas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información Universitat
Más detallesManejo de memoria en C
Manejo de memoria en C Todas las variables, en el lenguaje C, se definen dentro de alguna función, fuera de esa función no es posible acceder a ellas. Al entrar a una función, a cada una de las variables
Más detalles2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Más detallesESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/
DECLARACION DE ESTRUCTURAS ESTRUCTURAS La estructura es una colección de variables, la cual puede poseer distintos tipos de datos (a diferencia de los arreglos que solamente pueden tener un solo tipo de
Más detallesLenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados
Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras
Más detallesEl operador contenido ( ) permite acceder al contenido de
3. Memoria Dinámica y Punteros Objetivos: Distinguir los conceptos de memoria estática y memoria dinámica Comprender el concepto de puntero como herramienta de programación Conocer cómo se definen y cómo
Más detallesUnidad Nº V Listas Enlazadas
Instituto Universitario Politécnico Santiago Mariño Unidad Nº V Listas Enlazadas Lista Enlazadas Es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta
Más detallesClases y Objetos. Informática II Ingeniería Electrónica
Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),
Más detallesPUNTEROS (APUNTADORES)
2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)
Más detallesProgramación imperativa. Algoritmos y Estructuras de Datos I. Ciclos
Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 6 Ciclos y arreglos Entidad fundamental:
Más detallesTema 13: Apuntadores en C
Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción
Más detallesCapitulo V Listas Enlazadas
Capitulo V Listas Enlazadas Muere lentamente, quien abandona un proyecto antes de iniciarlo, no preguntando de un asunto que desconoce o no respondiendo cuando le indagan sobre algo que sabe. Evitemos
Más detallesTADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013
TADs en C Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 1. Objetivos Definición de TADs en C Ocultación de la implementación del TAD Manejo básico de memoria dinámica 2. Usando
Más detallesGuía práctica de estudio 04: Clases y objetos
Guía práctica de estudio 04: Clases y objetos Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 04: Clases y
Más detallesTEMA 0 Gestión de Memoria Dinámica
TEMA 0 Gestión de Memoria Dinámica ESTRUCTURAS DE DATOS 1 Objetivos Tema preliminar para entender el uso de la herramienta básica en la gestión de memoria dinámica: punteros Objetivos: Conocer el concepto
Más detallesTema 18: Memoria dinámica y su uso en C
Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Más detallesFUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )
FUNCIONES Las funciones son el medio básico de que se vale C para construir programas. Un Programa es, básicamente, una colección de funciones entre las que se incluye una especial llamada main(), la función
Más detallesPUBLICACIÓN DEL ENUNCIADO: Semana del 10 de noviembre de ENTREGA: Clase de laboratorio de la semana del 8 de diciembre de 2003.
TELECOMUNICACIÓN Página 12 PRÁCTICAS 6ª, 7ª y 8ª: Operaciones con polinomios. OBJETIVOS: Repaso de listas dinámicas. Objetos como datos miembro de otros objetos (introducción a la herencia). Objetos con
Más detallesIntroducción al lenguaje C
Programación 2 Profesorado de Informática CeRP del Suroeste, Uruguay 29 de marzo de 2016 Estructuras de control IV Iteración Sentencia for: for (inicio; condicion; paso) cuerpo for (int i = 0; i < 10;
Más detallesTema: Tipos Abstractos de Datos (TAD s) en C++.
Programación II. Guía 12 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Tipos Abstractos de Datos (TAD s) en C++. Objetivos Específicos Explicar el concepto "Tipo Abstracto
Más detallesUnidad III: Estructuras lineales
Unidad III: Estructuras lineales Listas En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos.
Más detallesPUNTEROS O APUNTADORES C++
PUNTEROS O APUNTADORES C++ TRANSVERSAL DE PROGRAMACIÓN BÁSICA INGENIERÍA DE SISTEMAS En el presente documente se hace una breve explicación a la gestión dinámica de memoria en el lenguaje C++. Se incluyen
Más detallesClases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos
Más detallesImplementación de diccionarios sobre Trie en C++
Implementación de diccionarios sobre Trie en C++ Algoritmos y Estructuras de Datos II 2. do cuatrimestre de 2016 Introducción Vamos a implementar una interfaz de diccionario en C++ La representación interna
Más detallesProgramación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores
Programación Orientada a Objetos Resumen de Temas Unidad 3: Constructores y destructores 3.1 Conceptos de métodos constructor y destructor Java inicializa siempre con valores por defecto las variables
Más detallesALGORITMICA Y PROGRAMACION POR OBJETOS I
ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 1 Problemas, Soluciones y Programas Marcela Hernández Hoyos Solucionar un Problema = Construir un Programa Problema Programador Herramientas y Lenguajes Análisis
Más detallesTema: Punteros a Objetos. Puntero this.
Programación II. Guía 6 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Punteros a Objetos. Puntero this. Objetivos Manejar objetos por medio de punteros. Utilizar el puntero
Más detallesUn elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:
Tipos Abstractos de Datos: TAD Lista en educación Profesional 1.- Introducción Los tipos abstractos de datos son fundamentales para la informática puesto que de ellos se sirven todos los programas para
Más detallesManual de referencia de C++ Parte IV Variables Punteros. Preparado por Prof. Luis A. Ortiz Ortiz
Manual de referencia de C++ Parte IV Variables Punteros Preparado por Prof. Luis A. Ortiz Ortiz TABLA DE CONTENIDO Memoria de la computadora... 1 Representación de la memoria de la computadora... 1 Declaración
Más detallesAcademia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos
Academia de computación de IE, ICA e ISISA Unidad didáctica Programación Orientada a Objetos Elaboración y diseño de cien reactivos de opción múltiple para la unidad didáctica programación orientada a
Más detallesAlgoritmo, Estructuras y Programación II Ing. Marglorie Colina
Unidad III Punteros Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Ejemplo: Paso de Punteros a una Función Arreglos (Arrays) Unidimensionales Los Arreglos son una colección de variables
Más detallesArreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas
Arreglos Algoritmos y Estructuras de Datos I Primer cuatrimestre 2007 Teórica de imperativo 3 Algoritmos de búsqueda secuencias de una cantidad fija de variables del mismo tipo se declaran con un nombre,,
Más detallesTema: Plantillas en C++.
Programación II. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Plantillas en C++. Objetivos Específicos Conocer los tipos de plantillas Utilizar las plantillas de
Más detallesUnidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.
Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está
Más detallesPUNTEROS (Apuntadores)
PUNTEROS (Apuntadores) Unidad III INTRODUCCIÓN A PUNTEROS. CONCEPTOS BÁSICOS. DECLARACIÓN DE PUNTEROS. PUNTEROS Como una colección de posiciones de memoria consecutivas. En ella se almacenan los distintos
Más detallesParadigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa
Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado
Más detallesIMPLEMENTACIÓN DE PILAS CON LISTAS EN C++
IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++ Fichero nodo.h #ifndef NODO_H #define NODO_H const int cantidad_nodos = 10; class Nodo private: string dato; Nodo* siguiente; public: Nodo(); void setdato(string
Más detallesPROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA
PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA UNIDAD DE APRENDIZAJE ADMINISTRACION DE BASES DE DATOS Unidad de competencia III Manejar las estructuras dinámicas en memoria secundaria Arboles ELABORACION
Más detallesSolución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola
Objetivos Trabajar sobre el Tipo Abstracto de Datos Lista, reforzando el desacople entre especificación e implementación. Retomar las implementaciones vistas, como ser Listas Doblemente Encadenadas, Listas
Más detallesSobrecarga de Operadores II
D é c i m o q u i n t a S e s i ó n Metodologías y Técnicas de Programación II Programación Orientada a Objeto (POO) C++ Sobrecarga de Operadores II 1 Sobrecarga de operadores unitarios (o unarios) Son
Más detallesProgramación imperativa. Algoritmos y Estructuras de Datos I. Lenguaje C. Segundo cuatrimestre de 2014
Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 4 Modelo de cómputo: Un programa consta
Más detallesTema 2: Programación basada en Objetos
Tema 2: Programación basada en Objetos Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Índice Objetivos Introducción Vista Pública Clases Objetos
Más detallesProgramación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Más detallesINTRODUCCIÓN A LA POO EN C++
INTRODUCCIÓN A LA POO EN C++ ÍNDICE DEL TEMA 1.- Introducción 2.- Diferencias C/C++ 3.- Programación orientada a objetos 4.- Aspectos avanzados C++ 1 1. Introducción Lenguaje C Lenguaje de propósito general
Más detallesIntroducción: una simple colección
Introducción: una simple colección Implemente una clase denominada Lista. La clase deberá mantener una colección de números y proveer los siguientes i métodos: Listas dinámicas simplemente enlazadas Franco
Más detallesÁrboles. Alonso Ramírez Manzanares Computación y Algoritmos Friday, March 17, 17
Árboles 1 Grafos Un grafo es un conjunto de nodos atados por un conjunto de ejes que conectan pares de nodos distintos (con un eje conectando un par de nodos.) Árboles Un árbol es una colección no-vacía
Más detallesLenguaje C, tercer bloque: Funciones
Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007 Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección
Más detallesSOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0
OBJETIVOS! ""# $% % REQUERIMIENTOS SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0 DESCRIPCIÓN En este tutorial se va a revisar la forma de trabajar con los conceptos de OO en Visual Basic.NET.
Más detallesClase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño
Clase adicional 9 Temas Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño Listas enlazadas Previamente en este curso, ya habrá trabajado con dos de las estructuras de datos
Más detallesJava Inicial (20 horas)
Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción
Más detallesUnidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
Más detallesMemoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez
Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.
Más detallesIngeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.
Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos. Con relación a la Estructura LISTA Indicar objetos reales que se puedan modelar con dicha estructura. Listas de Ordenes de visitas
Más detallesUn puntero no es más que una variable estática cuyo contenido es una dirección de memoria.
Los punteros en C 1 Introducción Cómo se organiza la memoria asociada a un programa? Como una colección de posiciones de memoria consecutivas. En ellas se almacenan los distintos tipos de datos, que ocupan,
Más detallesEstructura de datos y Programación
Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de
Más detallesProgramación orientada a objetos (I)
Programación orientada a objetos (I) Introducción a la POO La programación orientada a objetos es la penúltima evolución respecto a las metodologías de programación. En esta entrada veremos algunos de
Más detallesAlgoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Contenidos: 1. Características generales de C++ 2. Entrada/salida estándar 3. Variables y tipos de datos
Más detallesRepaso 02: Apuntadores y manejo de memoria dinámica
Repaso 02: Apuntadores y manejo de memoria dinámica Solicitado: Ejercicios 02: Programación con memoria dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom
Más detallesESTRUCTURAS DINÁMICAS DE DATOS (LISTAS)
2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Docente: Ing. Karina Esquivel A. Asignatura: Practicas Profesionales. ESTRUCTURAS DINÁMICAS DE DATOS (LISTAS) TEMA 3: ESTRUCTURAS DINÁMICAS
Más detallesProgramación Tema 4: Métodos. Programación DIT-UPM
Programación Tema 4: Métodos 1 Contenidos! 1. El concepto de método! 2. Definición: cabecera! 3. Definición: cuerpo! 4. Uso de métodos! 5. Métodos útiles 2 Métodos! Un método es un bloque de código con
Más detallesTECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE
MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE Los modificadores de acceso, como su nombre indica, determinan desde qué clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos:
Más detallesTemas. Taller III 2007 Gentile,Vazquez
Temas Arreglos de Objetos Punteros de Objetos Arreglos de Punteros de Objetos Constructor de Copia Herencia Constructores y Destructores en Herencia Accesibilidad en Herencia 1 Arreglo de objetos Televisor
Más detallesHerencia y polimorfismo
Herencia y polimorfismo Programación Orientada a Objeto Ing. Civil en Telecomunicaciones Herencia Hemos visto cómo crear nuestras propias clases Clase InfoAlumno para calcular las notas Supongamos ahora
Más detallesSegundo Certamen Tiempo: 100 minutos
Segundo Certamen Tiempo: 100 minutos 1. Se tiene la siguiente aplicación Java. 30 a) Genere la versión Applet equivalente. b) Muestre un archivo html que incluya esta Applet. c) Con qué comando usted prueba
Más detallesCentro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia
Más detallesImplementaciones de pilas, colas y afines. Memoria dinámica.
Implementaciones de pilas, colas y afines. Memoria dinámica. 1 1 Departamento de Computación, FCEyN, Universidad de Buenos Aires, Buenos Aires, Argentina Algoritmos y Estructuras de Datos II, segundo cuatrimestre
Más detallesProgramación Orientada o Objetos
Programación Orientada o Objetos Programación digital II Escuela de Sistemas Facultad de Ingeniería Profesor: Gilberto Diaz Programación Orientada a Objetos En 1970 Dennis Ritchie y Brian Kernigan crearon
Más detallesComplejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande
Complejidad computacional Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 10 Introducción a la complejidad computacional y
Más detallesTema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1)
Tema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1) Programación en Entornos Interactivos. 14 de marzo de 2011 Dpto. Lenguajes y Sistemas Informáticos Universidad de Alicante 1 / 28
Más detalles