Estructuras de Datos Punteros y algo más.

Slides:



Advertisements
Presentaciones similares
Prof. Carlos Rodríguez Sánchez
Advertisements

Ejemplo de Programa C++
¿ Que es un sistema de ecuaciones?
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Clase 3: Punteros y Referencias
Programación I Teoría III
Programación I Teoría IV
Direcciones, Arreglos y Argumentos de Funciones
Tipos de Datos Básicos y Estructurados
Una variable en un programa es algo con un nombre, cuyo valor puede variar. La manera en que el compilador y enlazador maneja esto es asignando un bloque.
Punteros Universidad Nacional Mayor de San Marcos

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Introducción al lenguaje C++
VECTORES.
Implementación de Listas
ARREGLOS Estructuras de datos.
SOBRECARGA DE FUNCIONES
Estructuras de Datos Memoria y Variables. Conceptos Computador: CPU + Memoria + Dispositivos E/S La memoria se encarga de almacenar los datos y los programas.
Unidad 3 Punteros.
Herramientas para el acceso directo a memoria en C++
Vectores en java.
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Sincronización de Procesos Introducción a Semáforos
Estructuras de repetición
PUNTEROS Ó (apuntadores) EN LENGUAJE C
Diseño de algoritmos “Punteros”
1 Chapter 15 Pointers, Dynamic Data, and Reference Types Dale/Weems/Headington.
Programación III Clase 07 Funciones.
Introducción a los punteros
Arreglos.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
Capítulo 5. Punteros y Cadenas de Caracteres
Índice. Revisando conceptos acerca de la memoria.
Programación III Clase 08 Arreglos.
Estructuras.
 2003 Prentice Hall, Inc. All rights reserved. 1 Capítulo 4 - Arrays Índice del Capítulo 4.1Introducción 4.2Arrays 4.3Declaración de Arrays 4.4Ejemplos.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Cátedra de COMPUTACIÓN FACULTAD DE INGENIERÍA - UNA La mejor manera de aprender Programación es PROGRAMANDO !!!!!! CLASE Nro. 2.
Unidad VI Registros (estructuras, uniones y enumeraciones)
COMPUTACIÓN I TEMA 6. Pasaje de parámetros por Referencia. Uso de apuntadores Prof. Mireya Morales.
PUNTEROS Ing Anghello Quintero.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
FIEE VARIABLES Ing. José Antonio Poma G.. FIEE Variables Una variable es un identificador (nombre de la variable) que hace referencia a.
Estructuras con punteros: Nodos y Listas. Fichas ordenas en orden alfabético y por otro criterio, usando hilos : hilo de inicio : hilo de ficha : hilo.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Memoria estática versus dinámica con Estructuras
Programación en C para electrónicos
Punteros.
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
APUNTADORES.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Memoria dinámica con Estructuras. Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente.
Los punteros Programación modular.
Punteros Recomendado: 1. Nivelación Funciones
Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,
INTRODUCCIÓN AL LENGUAJE C++
LENGUAJE “C” Programación.
Estructuras con punteros: Nodos y Listas. Un programa C.
PUNTEROS EN EL LENGUAJE C
Laboratorio de programación
ARREGLOS O ARRAYS.
MEMORIA DINÁMICA.
Gabriela Araya Baez Estudiante Ingenieria Civil Industrial.
1 Definición y Conversión de datos Agustín J. González ELO-329.
DISPOSITIVOS PERIFERICOS
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
DIRECCION DE PROYECTOS.
Punteros De manera simple, un puntero es una variable almacenada en alguna parte del espacio del programa.
Puntero #include int main(int argc, char *argv[]) { int myVar = 378; printf("El valor de la variable es: %d\n", myVar); printf("Dirección de memoria de.
Transcripción de la presentación:

Estructuras de Datos Punteros y algo más

Un puntero es una variable que almacena la dirección de memoria de otra variable Para obtener la dirección de una variable se utiliza el operador de referencia: &nombre_variable Veamos un ejemplo:

int A; A=50; cout<<"La dirección de A es: "<< &A; cout<<" El valor de A es: "<<A; Esto imprimirá algo como: La dirección de A es: 0x0012FF7C El valor de A es: 50

Para declarar un puntero a una variable de un tipo dado se usa la siguiente sintaxis: tipo_var *nombre_puntero; Ejemplo: int A=50; int *P; P=&A; Se declara un puntero (a entero) P, se le asigna la dirección del entero A, por tanto P queda apuntando a A

El operador de indirección El operador de indirección * permite acceder a la variable cuya dirección se encuentra guardada en un puntero (ya sea para acceder al valor almacenado en la variable o para modificarlo) El operador de indirección usa la siguiente sintaxis: *nombre_puntero Veamos un ejemplo:

int A=50; int *P; P=&A; cout<< *P; // Imprime 50 *P=100; cout<< *P; // Imprime 100 cout<< A; // Imprime 100

Paso de argumentos por referencia Con este método la función recibe las direcciones de las variables sobre las cuales se va a operar Por lo tanto la función puede cambiar los valores de dichas variables usando el operador * Veamos un ejemplo:

Sea la función sumap: int sumap(int *a, int *b, int c) { c = *a + *b; /*Dentro de la función, a y b son dos variables locales de tipo puntero a int*/ *a = c; *b = c; return c; }

void main() { int a=3; int b=2; int c=0; int r=0; r=sumap( &a, &b, c ); cout<<”Valores finales: \n“; cout<<”a=”<<a; // Imprime 5 cout<<”b=”<<b; // Imprime 5 cout<<”c=”<<c; // Imprime 0 cout<<”r=”<<r; // Imprime 5 }

Aritmética de punteros Sobre los punteros es posible sumar y restar números enteros, estas operaciones se usan para cambiar el lugar de la memoria al que apunta el puntero La aritmética de punteros tiene en cuenta el tamaño de la variable apuntada. Las operaciones sobre punteros deben usarse con precaución, ya que al cambiar indiscriminadamente los lugares de la memoria a los que se apunta se pueden sobrescribir accidentalmente otros datos

void main() { int a=654; int *p; p=&a; p++; cout<< *p << "y" << *(p-1); // Imprimió: 1245120 y 654 }

Arreglos El identificador (o nombre) de un arreglo siempre se refiere a la dirección del primer elemento Para crear un puntero a un arreglo, simplemente se declara una variable puntero al tipo de los elementos del arreglo Este puntero puede ser acompañado de +i para acceder al elemento i del arreglo

Las siguientes expresiones son equivalentes: (p1 +3) , (A + 3) y (&p1[3]) A p1 p2 p3

Recorrido de un vector usando punteros: void main() { int A[]={2, 5, 87, 21, 34}; int *p; p=A; for(int i=0; i<5; i++) cout<<"Elemento "<<i<<"="<<*p<<"\n"; p++; }

Memoria dinámica La memoria dinámica (heap) permite a los programas pedir y liberar espacio de memoria durante su ejecución a medida que lo necesiten Las variables asignadas dinámicamente, residen en el heap, no están sujetas a las reglas de duración vistas en el módulo anterior Útil para declarar el tamaño de arreglos en tiempo de ejecución

La función malloc() reserva un espacio de memoria de tamaño dado en el heap y retorna un puntero a dicho espacio (si no había memoria suficiente, retorna NULL) malloc() utiliza la siguiente sintaxis: puntero = ( tipo_de_variable * ) malloc ( numero_de_bytes ); Se requiere incluir stdlib.h Veamos un ejemplo:

int *crear_arreglo(int n) { int *p; p=(int *)malloc( n*sizeof(int) ); for(int i=0; i<n; i++){ p[i]=1; } return p; void main(void) { int *a; a=crear_arreglo(4); free(a); //Liberar espacio reservado

La función free() libera un espacio de memoria reservado mediante malloc(), no retorna nada y utiliza la siguiente sintaxis: free( direccion ); También se puede usar en vez de malloc() la función new() así: puntero= new tipo_de_dato [n];

El mismo programa anterior hecho con new(): int *crear_arreglo_new(int n) { int *p; p= new int[n]; for(int i=0; i<n; i++) p[i]=1; return p; }

Recursión Un algoritmo es recursivo si se encuentra definido en términos de sí mismo Es posible que una función se llame a sí misma, para ello basta con invocarse dentro de la función a ella misma y pasarle los argumentos correspondientes. A este tipo de función la denominamos “recursiva”

Ejemplo: El factorial de un número N se define como: Si N  0 entonces: N! =N*(N-1)! Si N=0 entonces: N! =1 Veamos como programar esta función en C++ recursivamente  Es natural hacerlo de manera debido a que la función se define en términos de si misma

int factorial(int n) { if(n==0) return 1; else return (n*factorial(n-1)); } void main() { int a; a=factorial(3); Vamos a realizarle un seguimiento manualmente para ver como evoluciona esta función en el Stack…