1 tipos de datos ejercicios

18
TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec

Upload: hannitah

Post on 29-Jun-2015

6.465 views

Category:

Business


1 download

TRANSCRIPT

Page 1: 1 Tipos De Datos Ejercicios

TIPOS DE DATOS: EJERCICIOS

ESTRUCTURAS DE DATOSwww.espol.edu.ec

www.fiec.espol.edu.ec

Page 2: 1 Tipos De Datos Ejercicios

RECUERDE * Y & Si tengo una variable y

Deseo obtener su dirección de memoria antepongo & Si tengo un puntero y

Deseo conocer que almacena, antepongo * Son operadores que permiten conversión de datos

int *pta, a=5, b;pta = &a; //a es de tipo int, y con el & se

obtiene un valor int *b = *pta; // pta es de tipo int *, y con el *

se obtiene un valor int

Page 3: 1 Tipos De Datos Ejercicios

ERRORES Encuentre los errores en cada línea:

pta = *a;

ptb = &pta;

pta = 8;

ptb = ptb + 3;

ptb = &NULL;

b = 8;

*ptb = b;

ptb = a + 10;

printf(“%d”, pta + ptb);

int *pta, *ptb, a, b;

Que pta apunte a a

Que ptb apunte al mismo sitio que pta

Que pta cambie de contenido a 8

Que ptb cambie de contenido aumentando 3 unidades

Que ptb apunte a NULL

Que b almacene 8

Que ptb apunte a b

Que ptb cambie de contenido a a + 10

Imprima la suma de los contenidos de pta y ptb

Page 4: 1 Tipos De Datos Ejercicios

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. Ejemploint *a, b = 10;

a = malloc (sizeof (int));

*a = b; //a almacena en su propio cajón

de memoria el mismo valor que b

Page 5: 1 Tipos De Datos Ejercicios

RESULTADOS Y ERRORES Descubra los errores

char *pta, car1;*pta = car1;

Determine el resultado que almacenan las variables al final

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

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

Page 6: 1 Tipos De Datos Ejercicios

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

Page 7: 1 Tipos De Datos Ejercicios

ARITMETICA DE PUNTEROS: CAMBIAR PROGRAMA Cambie el código anterior para usar matemática 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;}

Page 8: 1 Tipos De Datos Ejercicios

ARITMETICA DE PUNTEROS: RESUELVA Declare un puntero a char llamado B y otro llamado C Asígnele memoria a B para 30 caracteres Copie en B una palabra cualquiera Usando aritmética de punteros, modifique todos los

caracteres de la cadena para que pase de minus. a mayus. Usando aritmética de punteros C debe apuntar al carácter

de la mitad de la cadena B Imprima C, que sale en pantalla?

Page 9: 1 Tipos De Datos Ejercicios

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

Page 10: 1 Tipos De Datos Ejercicios

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;

Page 11: 1 Tipos De Datos Ejercicios

ARREGLOS DINAMICOS DE PUNTEROS Al declarar por ejemplo:

int **A; Es un puntero a puntero a entero. Como podríamos usar esta variable? Que formas habría para manipularla y utilizarla?

Page 12: 1 Tipos De Datos Ejercicios

EJEMPLO

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;

}

}

int **A;A = malloc(sizeof(int *) * 10);for(i = 0; i <10; i++){

A[i] = malloc(sizeof(int));*A[i] = 0;

}

Page 13: 1 Tipos De Datos Ejercicios

EJERCICIOS DE REPASO Escriba una función que dado un numero, lo

modifique invirtiendo sus dígitos Escriba una función 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 función que dado un arreglo, retorne otro nuevo solo con los elementos pares

Page 14: 1 Tipos De Datos Ejercicios

EJERCICIOS DE REPASO Escriba una función recursiva que dada dos

cadenas, permita conocer si ambas son iguales. Escriba una función recursiva que busque un

elemento en un arreglo Escriba una función recursiva que determine si

una palabra es o no un palíndromo, sin usar string y usando aritmética de punteros

Page 15: 1 Tipos De Datos Ejercicios

EJERCICIOS DE REPASO Defina una estructura para representar un termino en un

polinomio. Ejemplo: 3x5. Cree una función MultiplicarEscalar que dado un término lo

modifica multiplicándolo por un valor entero. Defina una estructura para representar a un polinomio

Conjunto de n términos Escriba una función Evaluar para que dado un polinomio

de n términos y un valor entero, retorne el valor entero resultante de la evaluación del polinomio.

Page 16: 1 Tipos De Datos Ejercicios

VOID * Void significa el vacío, la nada En lenguaje C puede tener dos usos

Indica que una función no retorna NADA, cuando void es utilizado como tipo de dato de retorno void ImprimirEstudiante(Estudiante e);

Como un puntero genérico, cuando es utilizado como puntero (void *) Un puntero genérico es aquel que puede apuntar a cualquier

tipo de dato, sin ningún problema

Page 17: 1 Tipos De Datos Ejercicios

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;

Page 18: 1 Tipos De Datos Ejercicios

PARA PENSAR Se podría declarar un arreglo de void *? Que utilidad tendría?