TIPOS DE DATOS EJERCICIOS ESTRUCTURAS DE DATOS RECUERDE

  • Slides: 18
Download presentation
TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS

TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS

RECUERDE * Y & � Si tengo una variable y �Deseo obtener su dirección

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 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 � Encuentre int *pta, *ptb, a, b; los errores en cada línea: Que

ERRORES � Encuentre int *pta, *ptb, a, b; los errores en cada línea: 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

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 cajón

RESULTADOS Y ERRORES � Descubra int *ptc, b; b = malloc ( sizeof (

RESULTADOS Y ERRORES � Descubra int *ptc, b; b = malloc ( sizeof ( int ) ); *b = 8; ptc = malloc(sizeof(int)); ptc = b+5; free(*ptc); b = *ptc + 10; los errores char *pta, car 1; *pta = car 1; � Determine el resultado que almacenan las variables alintfinal *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;

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 código anterior para usar matemática de

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

ARITMETICA DE PUNTEROS: RESUELVA � Declare un puntero a char llamado B y otro

ARITMETICA DE PUNTEROS: RESUELVA � Declare un puntero a char llamado B y otro llamado C � Asígnele � Copie memoria a B para 30 caracteres 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

ARITMETICA DE PUNTEROS: RESULTADOS int B[] = {3, 4, 1, 2, 7, 12, -4};

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

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 � Es **A; un

ARREGLOS DINAMICOS DE PUNTEROS � Al declarar por ejemplo: �int � Es **A; un puntero a entero. � Como podríamos usar esta variable? � Que formas habría para manipularla y utilizarla?

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

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 función que dado un numero, lo modifique invirtiendo sus

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 Nx. N, 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 �

EJERCICIOS DE REPASO Escriba una función recursiva que dada dos cadenas, permita conocer si

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 �

EJERCICIOS DE REPASO � Defina una estructura para representar un termino en un polinomio.

EJERCICIOS DE REPASO � Defina una estructura para representar un termino en un polinomio. Ejemplo: 3 x 5. � Cree una función Multiplicar. Escalar que dado un término lo modifica multiplicándolo por un valor entero. � Defina una estructura para representar a un polinomio � Conjunto � Escriba de n términos 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.

VOID * � Void significa el vacío, la nada � En lenguaje C puede

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 Imprimir. Estudiante(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

EJEMPLOS DE VOID * char car 1=‘B’, car 2; void *ptg; ptg = &car

EJEMPLOS DE VOID * char car 1=‘B’, car 2; void *ptg; ptg = &car 1; car 2 = *((char *)ptg) + 3; char cad[20], car 3; void *ptg; ptg = cad; strcpy(cad, “Ejemplo”); car 3 = *((char *)(ptg) + 3) + 5;

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

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