- Ajuste el Ejemplo 7.1 para que:
- Imprima el contenido del apuntador bPtr, es decir, la dirección en memoria de a que almacena bPtr.
- Modifique el valor de la variable a a través de aPtr.
- Declare una nueva variable de tipo entero b, asígnele un valor, haga que bPtr apunte a ella, y cambie el valor de b a través de bPtr.
- Trate de asignar directamente un valor distinto de cero (no use el operador de dirección) a cualquiera de los apuntadores ¿Qué sucede y por qué?
- Reescriba desde cero el Ejemplo 7.2. El objetivo de este ejercicio es replicar dicho ejemplo desde su perspectiva y compresión de los conceptos explicados en el blog.
- Modifique el Ejemplo 7.3 para que lea una cadena de la entrada estándar, y la envíe a las funciones imprimeAlReves e imprimeSinEspacios.
- Determine lo que realiza la siguiente función sin ejecutarla. Posteriormente, corrobore su respuesta con un programa que pruebe la función.
- Escriba un programa que pruebe cada una de las funciones de la biblioteca ctype. Su programa deberá probar al menos las funciones descritas en la entrada Aritmética de apuntadores, pero recuerde que dicha biblioteca contiene más funciones.
- Con base en el programa del Ejemplo 7.4, escriba una función análoga a la función convierteAMayusculas que convierta la cadena referida por cPtr a minúsculas; utilice las funciones de la biblioteca ctype descritas en la entrada Aritmética de apuntadores.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void rellenaArreglo(int *a, int n, int rango). La función deberá inicializar los n elementos referidos por a con números aleatorios definidos entre 0 y rango - 1.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void inicializaArreglo(int *a, int n, int valor). La función deberá inicializar los n elementos referidos por a, con el valor valor.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void imprimeArreglo(const int *a, int n, int c). La función deberá imprimir en la salida estándar, los n elementos referidos por a, con c elementos por renglón.
- Siguiendo la propuesta planteada en el Ejemplo 7.5, escriba una función con el siguiente prototipo: void aMorse(const char *c). La función deberá imprimir en la salida estándar la representación en código Morse de la cadena referida por c. Dicha representación deberá estar separada por tabuladores '\t' por cada carácter de c. Cualquier otra cosa que NO sea una letra, imprimala tal cuál en la salida estándar.
- Con base en el Ejemplo 7.6 y a la notación de aritmética de apuntadores, substituya la línea 24 por el comentario correspondiente de la misma línea, y compruebe la equivalencia de la notación. Realice lo mismo intercambiando las líneas 26 y 27, y las líneas 28 y 29 respectivamente.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: int *copiaArreglo(const int *original, int n). La función deberá copiar los n elementos referidos por original en un arreglo que haya sido creado utilizando memoria dinámica dentro de la función, mismo que será utilizado como valor de retorno para la función.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: char *copiaCadena(const char *original). La función deberá copiar los elementos referidos por original, en un arreglo de caracteres que haya sido creado utilizando memoria dinámica dentro de la función, mismo que será utilizado como su valor de retorno.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: int compara(const char *c1, const char *c2 ). La función deberá determinar si los elementos referidos por c1 son iguales (regresa 1) o no (regresa 0) a los elementos referidos por c2.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void imprimeAlReves(const char *original). La función deberá imprimir invertidos los elementos referidos por original. La función deberá usar recursividad para imprimir al revés los elementos referidos por original.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: char *invierteCadena(const char *original). La función deberá copiar invertidos los elementos referidos por original, en un arreglo de caracteres que haya sido creado utilizando memoria dinámica dentro de la función, mismo que será utilizado como su valor de retorno.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void quitaEspacios(char *c). La función deberá eliminar (si los hubiera) cualquiera de los tipos de espacios de la cadena referida por c. Note que la función modifica la cadena original, por lo que deberá asegurarse de terminar adecuadamente la cadena con el fin de cadena '\0'.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: int esPalindromo(const char *c). La función deberá determinar si los elementos referidos por c constituyen (regresa 1) o no (regresa 0) un palíndromo. Tome en cuenta que la función deberá ignorar espacios, signos de puntuación, signos de admiración e interrogación, comillas, etcétera, y que no hará distinción entre mayúsculas y minúsculas; se puede auxiliar de las funciones desarrolladas hasta el momento en los ejercicios y en los ejemplos del blog.
- Escriba un programa que defina y pruebe una función con el siguiente prototipo: void podar(char *c). La función deberá eliminar de la cadena c los espacios, si los hubiera, que se encuentren al principio y al final de c.
- Sugerencia: utilice la función isspace (ctype.h) para determinar cualquier tipo de espacio.
- Utilice notación y aritmética de apuntadores para desarrollar sus habilidades en el manejo de los apuntadores.
Se presentan más de 90 ejemplos resultado de un proceso evolutivo y ecléctico de fuentes, y simbiótico con relación a la experiencia docente y de trabajo con estudiantes con fundamento y adecuaciones del método constructivista (Piaget) teniendo como premisa fundamental: aprender haciendo.
14 de diciembre de 2016
Ejercicios selectos (apuntadores).
Etiquetas:
Apuntadores,
Arreglos,
cadenas,
char,
fin de cadena,
números aleatorios,
operador de desreferencia,
operador de dirección,
Parámetros por referencia,
Recursividad,
referencia