Programación Científica
Dr. Romeo Sánchez Nigenda.
E-mail: [email protected]
http://yalma.fime.uanl.mx/~romeo/
Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón
Horas de Tutoría: 10am-11am 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% 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, 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. 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

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;
*y

// Puntero a entero
XXXX
//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.
int x = 6;
x
6
[…]
int * y = &x;
y
[…]
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=?
x=?
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 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, 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;
105
y
[4567]
510
temp
[8901]
5
pi
[5432]
1234
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
returnType functionName(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 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 obtenDireccion(){
int * direcPtr;
direcPtr = direccion();
*direcPtr = 1234;
}
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 &?
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

Apuntadores y Funciones