Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO Pensar en C++ (Volumen 1) - Grupo ARCO
✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 138 — #176 ✐ Capítulo 3. C en C++ 22. Cree dos nuevos programas a partir de ArgsToInts.cpp que usen atol() y atof() respectivamente. 23. Modifique PointerIncrement2.cpp de modo que use una union en lugar de una struct. 24. Modifique PointerArithmetic.cpp para que funcione con long y long double. 25. Defina una variable float. Tome su dirección, moldee esa dirección a un unsigned char, y asígnela a un puntero unsigned char. Usando este puntero y [], indexe la variable float y use la función printBinary() definida en este capítulo para mostrar un mapa de cada float (vaya desde 0 hasta sizeof(float)). Cambie el valor del float y compruebe si puede averiguar que hay en el float (el float contiene datos codificados). 26. Defina un array de int. Tome la dirección de comienzo de ese array y utilice static_cast para convertirlo a un void*. Escriba una función que tome un void*, un número (que indica el número de bytes), y un valor (indicando el valor que debería ser asignado a cada byte) como argumentos. La función debería asignar a cada byte en el rango especificado el valor dado como argumento. Pruebe la función con su array de int. 27. Cree un array const de double y un array volatile de double. Indexe cada array y utilice const_cast para moldear cada elemento de no-const y novolatile, respectivamente, y asigne un valor a cada elemento. 28. Cree una función que tome un puntero a un array de double y un valor indicando el tamaño de ese array. La función debería mostrar cada valor del array. Ahora cree un array de double y inicialice cada elemento a cero, después utilice su función para mostrar el array. Después use reinterpret_cast para moldear la dirección de comienzo de su array a un unsigned char*, y ponga a 1 cada byte del array (aviso: necesitará usar sizeof para calcular el número de bytes que tiene un double). Ahora use su función de impresión de arrays para mostrar los resultados. ¿Por qué cree los elementos no tienen el valor 1.0 29. (Reto) Modifique FloatingAsBinary.cpp para que muestra cada parte del double como un grupo separado de bits. Tendrá que reemplazar las llamadas a printBinary() con su propio código específico (que puede derivar de p- rintBinary()) para hacerlo, y también tendrá que buscar y comprender el formato de punto flotante incluyendo el ordenamiento de bytes para su compilador (esta parte es el reto). 30. Cree un makefile que no sólo compile YourPets1.cpp y YourPets2.cpp (para cada compilador particular) sino que también ejecute ambos programas como parte del comportamiento del objetivo predeterminado. Asegúrese de usar las reglas de sufijo. 31. Modifique StringizingExpressions.cpp para que P(A) sea condicionalmente definida con #ifdef para permitir que el código de depuración sea eliminado automáticamente por medio de una bandera en línea de comandos. Necesitará consultar la documentación de su compilador para ver cómo definir y eliminar valores del preprocesador en el compilador de línea de comandos. 32. Defina una función que tome un argumento double y retorne un int. Cree e inicialice un puntero a esta función, e invoque la función por medio del puntero. 138 ✐ ✐ ✐ ✐
✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 139 — #177 ✐ 3.13. Ejercicios 33. Declare un puntero a un función que toma un argumento int y retorna un puntero a una función que toma un argumento char y retorna un float. 34. Modifique FunctionTable.cpp para que cada función retorne un string (en lugar de mostrar un mensaje) de modo que este valor se imprima en main(). 35. Cree un makefile para uno de los ejercicios previos (a su elección) que le permita escribir make para construir una versión en producción del programa y make debug para construir una versión del programa que incluye información de depuración. 139 ✐ ✐ ✐ ✐
- Page 125 and 126: ✐ ✐ ✐ “Volumen1” — 2012
- Page 127 and 128: ✐ ✐ ✐ “Volumen1” — 2012
- Page 129 and 130: ✐ ✐ ✐ “Volumen1” — 2012
- Page 131 and 132: ✐ ✐ ✐ “Volumen1” — 2012
- Page 133 and 134: ✐ ✐ ✐ “Volumen1” — 2012
- Page 135 and 136: ✐ ✐ ✐ “Volumen1” — 2012
- Page 137 and 138: ✐ ✐ ✐ “Volumen1” — 2012
- Page 139 and 140: ✐ ✐ ✐ “Volumen1” — 2012
- Page 141 and 142: ✐ ✐ ✐ “Volumen1” — 2012
- Page 143 and 144: ✐ ✐ ✐ “Volumen1” — 2012
- Page 145 and 146: ✐ ✐ ✐ “Volumen1” — 2012
- Page 147 and 148: ✐ ✐ ✐ “Volumen1” — 2012
- Page 149 and 150: ✐ ✐ ✐ “Volumen1” — 2012
- Page 151 and 152: ✐ ✐ ✐ “Volumen1” — 2012
- Page 153 and 154: ✐ ✐ ✐ “Volumen1” — 2012
- Page 155 and 156: ✐ ✐ ✐ “Volumen1” — 2012
- Page 157 and 158: ✐ ✐ ✐ “Volumen1” — 2012
- Page 159 and 160: ✐ ✐ ✐ “Volumen1” — 2012
- Page 161 and 162: ✐ ✐ ✐ “Volumen1” — 2012
- Page 163 and 164: ✐ ✐ ✐ “Volumen1” — 2012
- Page 165 and 166: ✐ ✐ ✐ “Volumen1” — 2012
- Page 167 and 168: ✐ ✐ ✐ “Volumen1” — 2012
- Page 169 and 170: ✐ ✐ ✐ “Volumen1” — 2012
- Page 171 and 172: ✐ ✐ ✐ “Volumen1” — 2012
- Page 173 and 174: ✐ ✐ ✐ “Volumen1” — 2012
- Page 175: ✐ ✐ ✐ “Volumen1” — 2012
- Page 179 and 180: ✐ ✐ ✐ “Volumen1” — 2012
- Page 181 and 182: ✐ ✐ ✐ “Volumen1” — 2012
- Page 183 and 184: ✐ ✐ ✐ “Volumen1” — 2012
- Page 185 and 186: ✐ ✐ ✐ “Volumen1” — 2012
- Page 187 and 188: ✐ ✐ ✐ “Volumen1” — 2012
- Page 189 and 190: ✐ ✐ ✐ “Volumen1” — 2012
- Page 191 and 192: ✐ ✐ ✐ “Volumen1” — 2012
- Page 193 and 194: ✐ ✐ ✐ “Volumen1” — 2012
- Page 195 and 196: ✐ ✐ ✐ “Volumen1” — 2012
- Page 197 and 198: ✐ ✐ ✐ “Volumen1” — 2012
- Page 199 and 200: ✐ ✐ ✐ “Volumen1” — 2012
- Page 201 and 202: ✐ ✐ ✐ “Volumen1” — 2012
- Page 203 and 204: ✐ ✐ ✐ “Volumen1” — 2012
- Page 205 and 206: ✐ ✐ ✐ “Volumen1” — 2012
- Page 207 and 208: ✐ ✐ ✐ “Volumen1” — 2012
- Page 209 and 210: ✐ ✐ ✐ “Volumen1” — 2012
- Page 211 and 212: ✐ ✐ ✐ “Volumen1” — 2012
- Page 213 and 214: ✐ ✐ ✐ “Volumen1” — 2012
- Page 215 and 216: ✐ ✐ ✐ “Volumen1” — 2012
- Page 217 and 218: ✐ ✐ ✐ “Volumen1” — 2012
- Page 219 and 220: ✐ ✐ ✐ “Volumen1” — 2012
- Page 221 and 222: ✐ ✐ ✐ “Volumen1” — 2012
- Page 223 and 224: ✐ ✐ ✐ “Volumen1” — 2012
- Page 225 and 226: ✐ ✐ ✐ “Volumen1” — 2012
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 139 — #177<br />
✐<br />
3.13. Ejercicios<br />
33. Declare un puntero a un función que toma un argum<strong>en</strong>to int y retorna un puntero<br />
a una función que toma un argum<strong>en</strong>to char y retorna un float.<br />
34. Modifique FunctionTable.cpp para que cada función retorne un string (<strong>en</strong><br />
lugar de mostrar un m<strong>en</strong>saje) de modo que este valor se imprima <strong>en</strong> main().<br />
35. Cree un makefile para uno de los ejercicios previos (a su elección) que le permita<br />
escribir make para construir una versión <strong>en</strong> producción del programa y<br />
make debug para construir una versión del programa que incluye información<br />
de depuración.<br />
139<br />
✐<br />
✐<br />
✐<br />
✐