1 Tipos De Datos Ejercicios

7,050 views
6,807 views

Published on

Published in: Business, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,050
On SlideShare
0
From Embeds
0
Number of Embeds
62
Actions
Shares
0
Downloads
104
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

1 Tipos De Datos Ejercicios

  1. 1. TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
  2. 2. RECUERDE * Y & <ul><li>Si tengo una variable y </li></ul><ul><ul><li>Deseo obtener su dirección de memoria antepongo & </li></ul></ul><ul><li>Si tengo un puntero y </li></ul><ul><ul><li>Deseo conocer que almacena, antepongo * </li></ul></ul><ul><li>Son operadores que permiten conversión de datos </li></ul><ul><ul><li>int *pta, a=5, b; </li></ul></ul><ul><ul><li>pta = &a; //a es de tipo int, y con el & se obtiene un valor int * </li></ul></ul><ul><ul><li>b = *pta; // pta es de tipo int *, y con el * </li></ul></ul><ul><ul><li>se obtiene un valor int </li></ul></ul>
  3. 3. ERRORES <ul><li>Encuentre los errores en cada línea: </li></ul>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
  4. 4. EL DESTINO DE UN PUNTERO <ul><li>Un puntero puede tener dos posibles caminos durante su existencia </li></ul><ul><li>Puede “apuntar” a un espacio de memoria de otra variable. </li></ul><ul><ul><li>int *a, b = 10; </li></ul></ul><ul><ul><li>a = &b; //a no tiene memoria propia, es un “ESPEJO” de b </li></ul></ul><ul><li>Puede “apuntar” a un espacio de memoria propio. Ejemplo </li></ul><ul><ul><li>int *a, b = 10; </li></ul></ul><ul><ul><li>a = malloc (sizeof (int)); </li></ul></ul><ul><ul><li>*a = b; //a almacena en su propio cajón </li></ul></ul><ul><ul><li>de memoria el mismo valor que b </li></ul></ul>
  5. 5. RESULTADOS Y ERRORES <ul><li>Descubra los errores </li></ul><ul><ul><li>char *pta, car1; </li></ul></ul><ul><ul><li>*pta = car1; </li></ul></ul><ul><li>Determine el resultado que almacenan las variables al final </li></ul>int *ptc, b; b = malloc ( sizeof ( int ) ); *b = 8; ptc = malloc(sizeof(int)); ptc = b+5; free(*ptc); b = *ptc + 10; <ul><ul><li>int *ptc, *ptn, b=20; </li></ul></ul><ul><ul><li>ptc = &b; </li></ul></ul><ul><ul><li>ptn = malloc ( sizeof (int)); </li></ul></ul><ul><ul><li>*ptn = b + 15; </li></ul></ul><ul><ul><li>*ptc = *ptc -1; </li></ul></ul><ul><ul><li>ptc = ptn; </li></ul></ul><ul><ul><li>*ptc = 2; </li></ul></ul>
  6. 6. ARREGLOS Y PUNTEROS: RESULTADOS <ul><li>int AE[4] = {4,1,5,2}, *p; </li></ul><ul><li>int i; </li></ul><ul><li>p = AE; </li></ul><ul><li>for(i = 0; i < 4; i++){ </li></ul><ul><ul><ul><ul><ul><li>p[i] = p[i] + 3; </li></ul></ul></ul></ul></ul><ul><li>} </li></ul><ul><li>p = malloc(sizeof(int)*9); </li></ul><ul><li>for(i = 0; i < 9; i++){ </li></ul><ul><ul><li>p[i] = 5; </li></ul></ul><ul><li>} </li></ul>
  7. 7. ARITMETICA DE PUNTEROS: CAMBIAR PROGRAMA <ul><li>Cambie el código anterior para usar matemática de punteros </li></ul><ul><li>int AE[4] = {4,1,5,2}, *p; </li></ul><ul><li>int i; </li></ul><ul><li>p = AE; </li></ul><ul><li>for(i = 0; i < 4; i++){ </li></ul><ul><ul><li>p[i] = p[i] + 3; </li></ul></ul><ul><li>} </li></ul><ul><li>p = malloc(sizeof(int)*9); </li></ul><ul><li>for(i = 0; i < 9; i++){ </li></ul><ul><ul><li>p[i] = 5; </li></ul></ul><ul><li>} </li></ul>
  8. 8. ARITMETICA DE PUNTEROS: RESUELVA <ul><li>Declare un puntero a char llamado B y otro llamado C </li></ul><ul><li>Asígnele memoria a B para 30 caracteres </li></ul><ul><li>Copie en B una palabra cualquiera </li></ul><ul><li>Usando aritmética de punteros, modifique todos los caracteres de la cadena para que pase de minus. a mayus. </li></ul><ul><li>Usando aritmética de punteros C debe apuntar al carácter de la mitad de la cadena B </li></ul><ul><li>Imprima C, que sale en pantalla? </li></ul>
  9. 9. ARITMETICA DE PUNTEROS: RESULTADOS <ul><li>int B[] = {3,4,1,2,7,12,-4}; </li></ul><ul><li>float f = 4.234, *ptf; </li></ul><ul><li>*(B+3) = *B + 15; </li></ul><ul><li>ptf = &f; </li></ul><ul><li>*B = (int)(*ptf); </li></ul><ul><li>f = *ptf + 20; </li></ul><ul><li>*(B + 5) = (int)(*ptf); </li></ul>
  10. 10. ARREGLOS DE PUNTEROS <ul><li>Un arreglo puede ser de entero, de real, o de puntero a enteros, o puntero a real, etc. </li></ul><ul><li>Ejemplo: </li></ul><ul><ul><li>int *A[4]; </li></ul></ul><ul><ul><li>A es un conjunto de punteros, cada uno puede apuntar a donde desee, </li></ul></ul><ul><ul><ul><li>A otras variables o, </li></ul></ul></ul><ul><ul><ul><li>Comprar uno o varios cajoncitos propios </li></ul></ul></ul>for(i = 0; i < 3; i++){ A[i] = malloc (sizeof (int) * 3); } A[i] = NULL;
  11. 11. ARREGLOS DINAMICOS DE PUNTEROS <ul><li>Al declarar por ejemplo: </li></ul><ul><ul><li>int **A; </li></ul></ul><ul><li>Es un puntero a puntero a entero. </li></ul><ul><li>Como podríamos usar esta variable? </li></ul><ul><li>Que formas habría para manipularla y utilizarla? </li></ul>
  12. 12. EJEMPLO <ul><li>int **A; </li></ul><ul><li>A = malloc(sizeof(int *) * 10); </li></ul><ul><li>for(i = 0; i <10; i++){ </li></ul><ul><ul><li>A[i] = malloc(sizeof(int)*5); </li></ul></ul><ul><ul><li>for(j = 0; j<5; j++){ </li></ul></ul><ul><ul><li>A[i][j] = 6; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul><ul><li>int **A; </li></ul><ul><li>A = malloc(sizeof(int *) * 10); </li></ul><ul><li>for(i = 0; i <10; i++){ </li></ul><ul><ul><li>A[i] = malloc(sizeof(int)); </li></ul></ul><ul><ul><li>*A[i] = 0; </li></ul></ul><ul><li>} </li></ul>
  13. 13. EJERCICIOS DE REPASO <ul><li>Escriba una función que dado un numero, lo modifique invirtiendo sus dígitos </li></ul><ul><li>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. </li></ul><ul><li>Escriba una función que dado un arreglo, retorne otro nuevo solo con los elementos pares </li></ul>
  14. 14. EJERCICIOS DE REPASO <ul><li>Escriba una función recursiva que dada dos cadenas, permita conocer si ambas son iguales. </li></ul><ul><li>Escriba una función recursiva que busque un elemento en un arreglo </li></ul><ul><li>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 </li></ul>
  15. 15. EJERCICIOS DE REPASO <ul><li>Defina una estructura para representar un termino en un polinomio. Ejemplo: 3x 5 . </li></ul><ul><ul><li>Cree una función MultiplicarEscalar que dado un término lo modifica multiplicándolo por un valor entero. </li></ul></ul><ul><li>Defina una estructura para representar a un polinomio </li></ul><ul><ul><li>Conjunto de n términos </li></ul></ul><ul><li>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. </li></ul>
  16. 16. VOID * <ul><li>Void significa el vacío, la nada </li></ul><ul><li>En lenguaje C puede tener dos usos </li></ul><ul><ul><li>Indica que una función no retorna NADA, cuando void es utilizado como tipo de dato de retorno </li></ul></ul><ul><ul><ul><li>void ImprimirEstudiante(Estudiante e); </li></ul></ul></ul><ul><ul><li>Como un puntero genérico, cuando es utilizado como puntero (void *) </li></ul></ul><ul><ul><ul><li>Un puntero genérico es aquel que puede apuntar a cualquier tipo de dato, sin ningún problema </li></ul></ul></ul>
  17. 17. EJEMPLOS DE VOID * <ul><li>char car1=‘B’, car2; </li></ul><ul><li>void *ptg; </li></ul><ul><li>ptg = &car1; </li></ul><ul><li>car2 = *((char *)ptg) + 3; </li></ul>char cad[20], car3; void *ptg; ptg = cad; strcpy(cad, “Ejemplo”); car3 = *((char *)(ptg) + 3) + 5;
  18. 18. PARA PENSAR <ul><li>Se podría declarar un arreglo de void *? </li></ul><ul><li>Que utilidad tendría? </li></ul>

×