Programacin Cientfica Dr Romeo Snchez Nigenda Email romeo

  • Slides: 13
Download presentation
Programación Científica Dr. Romeo Sánchez Nigenda. E-mail: romeo. sanchez@gmail. com http: //yalma. fime. uanl.

Programación Científica Dr. Romeo Sánchez Nigenda. E-mail: romeo. sanchez@gmail. com http: //yalma. fime. uanl. mx/~romeo/ Oficina: 1 er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10 am-11 am Martes y Jueves Website: http: //yalma. fime. uanl. mx/~romeo/Prog/2011/ Sesiones: 48 * Slides aumentados con información de Dr. Roger Ríos, y Dr. Fernando López

Temario: 1. 2. 3. 4. 5. 6. 7. 40% Proyecto 30% Examen Parcial 30%

Temario: 1. 2. 3. 4. 5. 6. 7. 40% Proyecto 30% Examen Parcial 30% Examen Final 10% Participación Fundamentos de Programación en C Apuntadores y Funciones Arreglos y Estructuras Manejo de Memoria Recursividad Entrada y Salida de Archivos Desarrollo y Depuración de Proyecto de Programación Total a calificar: 110 puntos!

Material de apoyo: A. KELLY, I. POHL. A Book on C. Addison-Wesley, Reading, EUA,

Material de apoyo: A. KELLY, I. POHL. A Book on C. Addison-Wesley, Reading, EUA, 1998. 2. B. KERNIGHAN, D. RITCHIE. The C Programming Language. Prentice Hall, Second Edition, 1988. 3. D. KNUTH. The Art of Computer Programming. Addison Wesley, 1998. 4. H. DEITEL, P. DEITEL. Como Programar en C/C++. Prentice Hall, Segunda Edición. 1995. 5. L. Joyanes, I. Zahonero. Programación en C - Metodología, Algoritmos y Estructura de Datos. Mc. Graw Hill-Interamericana, 2006. 6. B. Stroustrup. The C++ Programming Language. Addison Wesley. Third Edition. 1997. Software: Compiladores GCC (GNU Compiler Collection) IDEs (Integrated Development Environment): http: //www. eclipse. org/downloads/ http: //kdevelop. org/ http: //www. bloodshed. net/devcpp. html

Apuntadores � Apuntadores: Son variables que contienen direcciones de memoria. ◦ Se declaran como

Apuntadores � Apuntadores: Son variables que contienen direcciones de memoria. ◦ Se declaran como cualquier otra variable, declarando el tipo y nombre de la nueva variable seguido de un *. La declaración por sí sola no asigna una referencia al puntero. int * y; // Puntero a entero XXXX *y //Producirá un error si se trata de acceder a //su valor � El operador de referencia &. ◦ Una variable x precedidaint delxoperando & devuelve la dirección de = 6; memoria de la variable en lugar de su contenido. Es decir, una referencia a x para ser usada por un apuntador. x 6 […] int * y = &x; y […]

Apuntadores � El operador de dereferencia *: ◦ Ya que los apuntadores son referencias

Apuntadores � El operador de dereferencia *: ◦ Ya que los apuntadores son referencias a otros valores, para acceder al contenido de la dirección referenciada (al valor) se utiliza el operador *. Esta operación se conoce como dereferencia, y la única restricción es que el apuntador tiene que tener una referencia válida. x [1234] 6 y Cuál es el valor actual de *y? Y después de la modificación: *y = 8; y=?

Apuntadores � El puntero NULO o NULL Pointer: Se utiliza para representar a un

Apuntadores � El puntero NULO o NULL Pointer: Se utiliza para representar a un puntero sin valor, es decir, un puntero sin ninguna referencia. C utiliza el símbolo NULL, que es equivalente a la constante entera 0. � Asignación de Punteros: La asignación entre dos punteros hace que ambos tengan la misma referencia. int x = 6; int *y = &x; x 6 y int *z = y; z Ambos punteros comparten la misma dirección de memoria.

Apuntadores � Ventajas: ◦ Permiten compartir información de una manera más eficiente ◦ Permiten

Apuntadores � Ventajas: ◦ Permiten compartir información de una manera más eficiente ◦ Permiten el diseño y desarrollo de estructuras de datos complejas como árboles y listas vinculadas � Compartiendo información: ◦ Copia superficial: Una función le pasa un puntero a un valor específico a otra, pero el valor no se duplica. Ambas funciones pueden acceder a la referencia la cual es compartida evitando duplicar grandes cantidades de información. X() DATOS Y() ◦ Copia a profundidad: Una copia completa de los datos se duplica y es utilizada independientemente por cada función o referencia. X() DATOS Y() DATOS

Apuntadores � Ejercicio: x [1234] 0: #include 1: int main(){ 2: int x=5, y=10,

Apuntadores � Ejercicio: x [1234] 0: #include 1: int main(){ 2: int x=5, y=10, temp; 3: int *pi; 4: cout<<“T 1: El valor de x es “<<x<<endl; 5: cout<<“T 2: El valor de y es “<<y<<endl; 6: pi = &x; 7: temp = *pi; 8: *pi = y; 9: y = temp; 10: cout<<“T 3: El valor de x es “<<x<<endl; 11: cout<<“T 4: El valor de y es “<<y<<endl; 12: cout<<“T 5: La dirección de pi es ”pi<<endl; 13: cout<<“T 6: El contenido de pi es ”*pi<<endl; 14: return 0; 10 5 y [4567] 5 10 temp [8901] 5 pi [5432] 1234

Operaciones con apuntadores � Operaciones con apuntadores: ◦ Incremento y decremento: ? [96] y

Operaciones con apuntadores � Operaciones con apuntadores: ◦ Incremento y decremento: ? [96] y = y - 1; 6 [100] y = y + 1; ? [104] Cómo obtenemos el contenido de la dirección en y + 1?

Funciones return. Type function. Name(parameters){ body} Ejemplos: int cuadrado(int n){ return n*n; } Valores

Funciones return. Type function. Name(parameters){ body} Ejemplos: int cuadrado(int n){ return n*n; } Valores de retorno Las variables locales existen mientras las funciones se encuentren en ejecución int cubo(int n){ return cuadrado(n)*n; } Ejercicio: Escribe la función que te regrese la potencia de un número xn

Funciones: Paso de Parámetros Por valor: Los valores que se pasan se copian a

Funciones: Paso de Parámetros Por valor: Los valores que se pasan se copian a los � parámetros de la función cuando se invoca. Si el valor de un parámetro se altera dentro de la función, el valor en el programa que lo llama no se modifica. int x = 0; cout<<“x = “<<x<<endl; incrementa(x); Cout<<“x= “<<x<<endl; Variables locales! Int incrementa(int param){ return ++param; } ◦ Ejercicio: int * direccion(){ int temp; return (&temp); } Es correcto esto? void obten. Direccion(){ int * direc. Ptr; direc. Ptr = direccion(); *direc. Ptr = 1234; }

Funciones: Paso de Parámetros � Por Referencia: Permite modificar el valor de la variable

Funciones: Paso de Parámetros � Por Referencia: Permite modificar el valor de la variable que se pasa a la función, si se pasa la dirección de la misma. void es una palabra reservada que se puede usar en una función que no retorna nada int x = 0; incrementa(&x); Cout<<“x= “<<x<<endl; void incrementa(int *param){ ++(*param); } Evita copias y permite la comunicación entre la funcion referida y quien lo llamó.

Funciones: Paso de parámetros � Por Referencia: Siempre se necesita colocar el operador &?

Funciones: Paso de parámetros � Por Referencia: Siempre se necesita colocar el operador &? int x = 0; incrementa(&x); Cout<<“x= “<<x<<endl; void incrementa 2(int * param){ *param = *param + 2; } void incrementa(int *param){ ++(*param); incrementa 2(param); } Es correcto esto?