Está en la página 1de 13

Programacin Cientfica

Dr. Romeo Snchez Nigenda.


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
Website: http://yalma.fime.uanl.mx/~romeo/Prog/2011/
Sesiones: 48
* Slides aumentados con informacin de Dr. Roger Ros,
y Dr. Fernando Lpez

Temario:
1.
2.
3.
4.
5.
6.
7.

40% Proyecto
30% Examen
Parcial
30% Examen
Final
10% Participacin

Fundamentos de Programacin en C
Apuntadores y Funciones
Arreglos y Estructuras
Manejo de Memoria
Recursividad
Entrada y Salida de Archivos
Desarrollo y Depuracin de Proyecto de
Programacin

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 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

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;
*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 direccin
de memoria de la variable
int xen
= lugar
6; de su contenido. Es decir,
una referencia a x para ser usada por un apuntador.

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 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]

6
y

Cul es el valor actual


de *y?
Y despus de la
modificacin:
*y = 8;
y=?

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

X()
DATOS

Y()

Copia a profundidad: Una copia completa de los datos se duplica y es


utilizada independientemente por cada funcin o referencia.

X()

DATOS
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 direccin de pi es
pi<<endl;

5
10
y

[4567]

5
10
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]

Cmo obtenemos el
contenido de la direccin en
y + 1?

Funciones

Valores de
retorno

returnType functionName(parameters){ body}


Ejemplos:
int cuadrado(int n){
return n*n;
Las variables locales existen mientras
}

las funciones se encuentren en ejecucin

int cubo(int n){


return cuadrado(n)*n;
}
Ejercicio: Escribe la funcin que te regrese la potencia
de un nmero xn

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.

Variables locales!
Ejercicio:

int * direccion(){
int temp;
return
(&temp);
}

Es correcto esto?

int x = 0;
cout<<x =
<<x<<endl;
incrementa(x);
Cout<<x=
<<x<<endl;
Int incrementa(int
param){
return ++param;
}

void obtenDireccion(){
int * direcPtr;
direcPtr = direccion();
*direcPtr = 1234;
}

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.

void es una palabra


reservada que se puede
usar en una funcin que
no retorna nada

int x = 0;
incrementa(&x);
Cout<<x= <<x<<endl;
void incrementa(int *param){
++(*param);
}

Evita copias y permite la comunicacin entre la funci


referida y quien lo llam.

Funciones: Paso de parmetros

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?

También podría gustarte