• Like
1 Tipos De Datos Ejercicios
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

1 Tipos De Datos Ejercicios

  • 6,333 views
Published

 

Published in Business , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
6,333
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
101
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. TIPOS DE DATOS: EJERCICIOS ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
  • 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
    • 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
  • 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
    • 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;
  • 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)*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;
    • }
  • 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: 3x 5 .
      • 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?