1 / 18

TIPOS DE DATOS: EJERCICIOS

TIPOS DE DATOS: EJERCICIOS. ESTRUCTURAS DE DATOS. 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;

jack
Download Presentation

TIPOS DE DATOS: EJERCICIOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS

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

  3. ERRORES int *pta, *ptb, a, b; • Encuentre los errores en cada línea: 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 pta = *a; ptb = &pta; pta = 8; ptb = ptb + 3; ptb = &NULL; b = 8; *ptb = b; ptb = a + 10; printf(“%d”, pta + ptb);

  4. 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 de memoria el mismo valor que b

  5. RESULTADOS Y ERRORES int *ptc, b; b = malloc ( sizeof ( int ) ); *b = 8; ptc = malloc(sizeof(int)); ptc = b+5; free(*ptc); b = *ptc + 10; • Descubra los errores • char *pta, car1; • *pta = car1; • 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;

  6. 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; • }

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

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

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

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

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

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

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

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

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

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

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

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

More Related