You are on page 1of 18

TIPOS DE DATOS:

EJERCICIOS

ESTRUCTURAS DE DATOS

RECUERDE * Y &

Si tengo una variable y

Si tengo un puntero y

Deseo obtener su direccin de memoria antepongo &


Deseo conocer que almacena, antepongo *

Son operadores que permiten conversin de datos


int *pta, a=5, b;
pta = &a; //a es de
obtiene un
b = *pta; // pta es
se obtiene

tipo int, y con el & se


valor int *
de tipo int *, y con el *
un valor int

ERRORES

int *pta, *ptb, a, b;

Encuentre los errores en cada lnea:

Que pta apunte a a

pta = *a;

Que ptb apunte al mismo sitio que pta

ptb = &pta;

Que pta cambie de contenido a 8

pta = 8;

Que ptb cambie de contenido aumentando 3 unidades

ptb = ptb + 3;

Que ptb apunte a NULL

ptb = &NULL;

Que b almacene 8

b = 8;

Que ptb apunte a b

*ptb = b;

Que ptb cambie de contenido a a + 10

ptb = a + 10;

Imprima la suma de los contenidos de pta y ptb

printf(%d, pta +
ptb);

EL DESTINO DE UN
PUNTERO

Un puntero puede tener dos posibles caminos durante su


existencia
Puede apuntar a un espacio de memoria de otra variable.
int *a, b = 10;
a = &b; //a no tiene memoria propia, es un ESPEJO de b

Puede apuntar a un espacio de memoria propio. Ejemplo


int *a, b = 10;
a = malloc (sizeof (int));
a = b; //a almacena en su propio cajn
de memoria el mismo valor que b

RESULTADOS Y ERRORES

Descubra los errores


char *pta,
car1;
*pta = car1;

int *ptc, b;
b = malloc ( sizeof ( int ) );
*b = 8;
ptc = malloc(sizeof(int));
ptc = b+5;
free(*ptc);
b = *ptc + 10;

Determine el resultado que almacenan las variables


al final
int *ptc, *ptn, b=20;
ptc = &b;
ptn = malloc ( sizeof (int));
*ptn = b + 15;
*ptc = *ptc -1;
ptc = ptn;
*ptc = 2;

ARREGLOS Y PUNTEROS:
RESULTADOS
int AE[4] = {4,1,5,2}, *p;
int i;
p = AE;
for(i = 0; i < 4; i++){
p[i] = p[i] + 3;
}
p = malloc(sizeof(int)*9);
for(i = 0; i < 9; i++){
p[i] = 5;
}

ARITMETICA DE PUNTEROS:
CAMBIAR PROGRAMA

Cambie el cdigo anterior para usar matemtica de


punteros
int AE[4] = {4,1,5,2}, *p;
int i;
p = AE;
for(i = 0; i < 4; i++){
p[i] = p[i] + 3;
}
p = malloc(sizeof(int)*9);
for(i = 0; i < 9; i++){
p[i] = 5;
}

ARITMETICA DE PUNTEROS:
RESUELVA

Declare un puntero a char llamado B y otro llamado C

Asgnele memoria a B para 30 caracteres

Copie en B una palabra cualquiera

Usando aritmtica de punteros, modifique todos los


caracteres de la cadena para que pase de minus. a mayus.

Usando aritmtica de punteros C debe apuntar al carcter


de la mitad de la cadena B

Imprima C, que sale en pantalla?

ARITMETICA DE PUNTEROS:
RESULTADOS
int B[] = {3,4,1,2,7,12,-4};
float f = 4.234, *ptf;
*(B+3) = *B + 15;
ptf = &f;
*B = (int)(*ptf);
f = *ptf + 20;
*(B + 5) = (int)(*ptf);

ARREGLOS DE PUNTEROS

Un arreglo puede ser de entero, de real, o de puntero a


enteros, o puntero a real, etc.
Ejemplo:

int *A[4];
A es un conjunto de punteros, cada uno puede apuntar a donde
desee,

A otras variables o,
Comprar uno o varios cajoncitos propios

for(i = 0; i < 3; i++){


A[i] = malloc (sizeof (int) * 3);
}
A[i] = NULL;

ARREGLOS DINAMICOS DE
PUNTEROS

Al declarar por ejemplo:

int **A;

Es un puntero a puntero a entero.


Como podramos usar esta variable?
Que formas habra para manipularla y utilizarla?

EJEMPLO
int **A;
A = malloc(sizeof(int *) * 10);
for(i = 0; i <10; i++){
A[i] = malloc(sizeof(int));
*A[i] = 0;
}
int **A;
A = malloc(sizeof(int *) * 10);
for(i = 0; i <10; i++){
A[i] = malloc(sizeof(int)*5);
for(j = 0; j<5; j++){
A[i][j] = 6;
}
}

EJERCICIOS DE REPASO

Escriba una funcin que dado un numero, lo


modifique invirtiendo sus dgitos
Escriba una funcin que dada una matriz de NxN,
permita conocer si la diagonal esta llena de
valores diferentes de 0 y si ese es el caso,
calcule la suma de los mismos.
Escriba una funcin que dado un arreglo, retorne
otro nuevo solo con los elementos pares

EJERCICIOS DE REPASO

Escriba una funcin recursiva que dada dos


cadenas, permita conocer si ambas son iguales.
Escriba una funcin recursiva que busque un
elemento en un arreglo
Escriba una funcin recursiva que determine si
una palabra es o no un palndromo, sin usar
string y usando aritmtica de punteros

EJERCICIOS DE REPASO

Defina una estructura para representar un termino en un


polinomio. Ejemplo: 3x5.

Defina una estructura para representar a un polinomio

Cree una funcin MultiplicarEscalar que dado un trmino lo


modifica multiplicndolo por un valor entero.
Conjunto de n trminos

Escriba una funcin Evaluar para que dado un polinomio de


n trminos y un valor entero, retorne el valor entero
resultante de la evaluacin del polinomio.

VOID *
Void significa el vaco, la nada
En lenguaje C puede tener dos usos

Indica que una funcin no retorna NADA, cuando void


es utilizado como tipo de dato de retorno

void ImprimirEstudiante(Estudiante e);

Como un puntero genrico, cuando es utilizado como


puntero (void *)

Un puntero genrico es aquel que puede apuntar a cualquier


tipo de dato, sin ningn problema

EJEMPLOS DE VOID *
char car1=B, car2;
void *ptg;
ptg = &car1;
car2 = *((char *)ptg) + 3;

char cad[20], car3;


void *ptg;
ptg = cad;
strcpy(cad, Ejemplo);
car3 = *((char *)(ptg) + 3) + 5;

PARA PENSAR
Se podra declarar un arreglo de void *?
Que utilidad tendra?

You might also like