ED 01 tipos_datos_ejercicios
-
Upload
angel-lopez -
Category
Education
-
view
87 -
download
1
Transcript of ED 01 tipos_datos_ejercicios
![Page 1: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/1.jpg)
TIPOS DE DATOS: EJERCICIOS
ESTRUCTURAS DE DATOS
![Page 2: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/2.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/3.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/4.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/5.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/6.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/7.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/8.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/9.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/10.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/11.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/12.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/13.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/14.jpg)
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: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/15.jpg)
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 16: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/16.jpg)
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 17: ED 01 tipos_datos_ejercicios](https://reader036.fdocument.pub/reader036/viewer/2022083003/55912d7b1a28ab26028b4617/html5/thumbnails/17.jpg)
PARA PENSAR Se podría declarar un arreglo de void *? Que utilidad tendría?