La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Científica

Presentaciones similares


Presentación del tema: "Programación Científica"— Transcripción de la presentación:

1 Programación Científica
Dr. Romeo Sánchez Nigenda. Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves Website: Sesiones: 48 * Slides aumentados con información de Dr. Roger Ríos, y Dr. Fernando López

2 Fundamentos de Programación en C Apuntadores y Funciones
40% Proyecto 30% Examen Parcial 30% Examen Final 10% Participación Temario: 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!

3 Material de apoyo: Software:
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 5. L. Joyanes, I. Zahonero. Programación en C - Metodología, Algoritmos y Estructura de Datos. McGraw Hill-Interamericana, 2006. 6. B. Stroustrup. The C++ Programming Language. Addison Wesley. Third Edition Software: Compiladores GCC (GNU Compiler Collection) IDEs (Integrated Development Environment):

4 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 *y //Producirá un error si se trata de acceder a //su valor El operador de referencia &. Una variable x precedida del operando & devuelve la dirección de memoria de la variable en lugar de su contenido. Es decir, una referencia a x para ser usada por un apuntador. XXXX int x = 6; x […] int * y = &x; y […] 6

5 Apuntadores El operador de dereferencia *: x [1234] y 6
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] y Cuál es el valor actual de *y? Y después de la modificación: *y = 8; y = ? x = ? 6

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 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 y int *z = y; z 6 Ambos punteros comparten la misma dirección de memoria.

7 Apuntadores Ventajas: Compartiendo información: X() DATOS Y() DATOS
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. Copia a profundidad: Una copia completa de los datos se duplica y es utilizada independientemente por cada función o referencia. X() Y() DATOS N1 X() Y() DATOS

8 Apuntadores Ejercicio: x 5 [1234] 10 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 dirección de pi es ”pi<<endl; 13: cout<<“T6: El contenido de pi es ”*pi<<endl; 14: return 0; y 10 [4567] 5 temp [8901] 5 pi [5432] 1234

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

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

11 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. 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?

12 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ó.

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


Descargar ppt "Programación Científica"

Presentaciones similares


Anuncios Google