E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacn Horas de Tutora: 10am-11am Martes y Jueves
* Slides aumentados con informacin de Dr. Roger Ros, y Dr. Fernando Lpez
Temario:
1. Fundamentos de Programacin en C 2. Apuntadores y Funciones 3. Arreglos y Estructuras 4. Manejo de Memoria 5. Recursividad 6. Entrada y Salida de Archivos 7. Desarrollo y Depuracin de Proyecto de Programacin
Total a calificar: 110 puntos! 40% Proyecto 30% Examen Parcial 30% Examen Final 10% Participacin 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 Edicin. 1995. 5. L. Joyanes, I. Zahonero. Programacin en C - Metodologa, Algoritmos y Estructura de Datos. McGraw 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: 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 declaracin por s sola no asigna una referencia al puntero. int * y; // Puntero a entero *y //Producir un error si se trata de acceder a //su valor
El operador de referencia &. Una variable x precedida del operando & devuelve la direccin de memoria de la variable en lugar de su contenido. Es decir, una referencia a x para ser usada por un apuntador.
Apuntadores int x = 6;
x []
int * y = &x;
y []
6 XXXX Apuntadores El operador de dereferencia *: Ya que los apuntadores son referencias a otros valores, para acceder al contenido de la direccin referenciada (al valor) se utiliza el operador *. Esta operacin se conoce como dereferencia, y la nica restriccin es que el apuntador tiene que tener una referencia vlida.
x [1234]
y
Cul es el valor actual de *y?
Y despus de la modificacin:
*y = 8;
y = ? x = ? 6 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 smbolo NULL, que es equivalente a la constante entera 0.
Asignacin de Punteros: La asignacin entre dos punteros hace que ambos tengan la misma referencia.
int x = 6; int *y = &x;
x
y
int *z = y;
z
6 Ambos punteros comparten la misma direccin de memoria. Apuntadores Ventajas: Permiten compartir informacin de una manera ms eficiente Permiten el diseo y desarrollo de estructuras de datos complejas como rboles y listas vinculadas
Compartiendo informacin: Copia superficial: Una funcin le pasa un puntero a un valor especfico a otra, pero el valor no se duplica. Ambas funciones pueden acceder a la referencia la cual es compartida evitando duplicar grandes cantidades de informacin.
Copia a profundidad: Una copia completa de los datos se duplica y es utilizada independientemente por cada funcin o referencia.
X()
Y() DATOS X()
Y() DATOS DATOS Apuntadores Ejercicio:
0: #include 1: int main(){ 2: int x=5, y=10, temp; 3: int *pi; 4: cout<<T1: El valor de x es <<x<<endl; 5: cout<<T2: El valor de y es <<y<<endl; 6: pi = &x; 7: temp = *pi; 8: *pi = y; 9: y = temp; 10: cout<<T3: El valor de x es <<x<<endl; 11: cout<<T4: El valor de y es <<y<<endl; 12: cout<<T5: La direccin de pi es pi<<endl; 13: cout<<T6: El contenido de pi es *pi<<endl; 14: return 0; 5 10 x y temp pi [1234] [4567] [8901] [5432] 1234 5 10 5 Operaciones con apuntadores Operaciones con apuntadores: Incremento y decremento:
[96]
y = y - 1;
[100]
y = y + 1;
[104]
Cmo obtenemos el contenido de la direccin en y + 1?
Ejercicio: Escribe la funcin que te regrese la potencia de un nmero x n Las variables locales existen mientras las funciones se encuentren en ejecucin Valores de retorno Funciones: Paso de Parmetros Por valor: Los valores que se pasan se copian a los parmetros de la funcin cuando se invoca. Si el valor de un parmetro se altera dentro de la funcin, el valor en el programa que lo llama no se modifica.
Ejercicio:
int x = 0; cout<<x = <<x<<endl; incrementa(x); Cout<<x= <<x<<endl;
Int incrementa(int param){ return ++param; } Variables locales! int * direccion(){ int temp; return (&temp); } void obtenDireccion(){ int * direcPtr; direcPtr = direccion(); *direcPtr = 1234; } Es correcto esto? Funciones: Paso de Parmetros Por Referencia: Permite modificar el valor de la variable que se pasa a la funcin, si se pasa la direccin de la misma.
int x = 0; incrementa(&x); Cout<<x= <<x<<endl;
void incrementa(int *param){ ++(*param); } void es una palabra reservada que se puede usar en una funcin que no retorna nada Evita copias y permite la comunicacin entre la funcion referida y quien lo llam. Funciones: Paso de parmetros Por Referencia: Siempre se necesita colocar el operador &?