Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 138 — #176<br />
✐<br />
Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />
22. Cree dos nuevos programas a partir de ArgsToInts.cpp que us<strong>en</strong> atol()<br />
y atof() respectivam<strong>en</strong>te.<br />
23. Modifique PointerIncrem<strong>en</strong>t2.cpp de modo que use una union <strong>en</strong> lugar<br />
de una struct.<br />
24. Modifique PointerArithmetic.cpp para que funcione con long y long double.<br />
25. Defina una variable float. Tome su dirección, moldee esa dirección a un unsigned<br />
char, y asígnela a un puntero unsigned char. Usando este puntero y<br />
[], indexe la variable float y use la función printBinary() definida <strong>en</strong> este<br />
capítulo para mostrar un mapa de cada float (vaya desde 0 hasta sizeof(float)).<br />
Cambie el valor del float y compruebe si puede averiguar que hay <strong>en</strong><br />
el float (el float conti<strong>en</strong>e datos codificados).<br />
26. Defina un array de int. Tome la dirección de comi<strong>en</strong>zo de ese array y utilice<br />
static_cast para convertirlo a un void*. Escriba una función que tome un<br />
void*, un número (que indica el número de bytes), y un valor (indicando el valor<br />
que debería ser asignado a cada byte) como argum<strong>en</strong>tos. La función debería<br />
asignar a cada byte <strong>en</strong> el rango especificado el valor dado como argum<strong>en</strong>to.<br />
Pruebe la función con su array de int.<br />
27. Cree un array const de double y un array volatile de double. Indexe cada<br />
array y utilice const_cast para moldear cada elem<strong>en</strong>to de no-const y novolatile,<br />
respectivam<strong>en</strong>te, y asigne un valor a cada elem<strong>en</strong>to.<br />
28. Cree una función que tome un puntero a un array de double y un valor indicando<br />
el tamaño de ese array. La función debería mostrar cada valor del array.<br />
Ahora cree un array de double y inicialice cada elem<strong>en</strong>to a cero, después utilice<br />
su función para mostrar el array. Después use reinterpret_cast para<br />
moldear la dirección de comi<strong>en</strong>zo de su array a un unsigned char*, y ponga a 1<br />
cada byte del array (aviso: necesitará usar sizeof para calcular el número de<br />
bytes que ti<strong>en</strong>e un double). Ahora use su función de impresión de arrays para<br />
mostrar los resultados. ¿Por qué cree los elem<strong>en</strong>tos no ti<strong>en</strong><strong>en</strong> el valor 1.0<br />
29. (Reto) Modifique FloatingAsBinary.cpp para que muestra cada parte del<br />
double como un grupo separado de bits. T<strong>en</strong>drá que reemplazar las llamadas<br />
a printBinary() con su propio código específico (que puede derivar de p-<br />
rintBinary()) para hacerlo, y también t<strong>en</strong>drá que buscar y compr<strong>en</strong>der el<br />
formato de punto flotante incluy<strong>en</strong>do el ord<strong>en</strong>ami<strong>en</strong>to de bytes para su compilador<br />
(esta parte es el reto).<br />
30. Cree un makefile que no sólo compile YourPets1.cpp y YourPets2.cpp<br />
(para cada compilador particular) sino que también ejecute ambos programas<br />
como parte del comportami<strong>en</strong>to del objetivo predeterminado. Asegúrese de<br />
usar las reglas de sufijo.<br />
31. Modifique StringizingExpressions.cpp para que P(A) sea condicionalm<strong>en</strong>te<br />
definida con #ifdef para permitir que el código de depuración sea<br />
eliminado automáticam<strong>en</strong>te por medio de una bandera <strong>en</strong> línea de comandos.<br />
Necesitará consultar la docum<strong>en</strong>tación de su compilador para ver cómo definir<br />
y eliminar valores del preprocesador <strong>en</strong> el compilador de línea de comandos.<br />
32. Defina una función que tome un argum<strong>en</strong>to double y retorne un int. Cree e inicialice<br />
un puntero a esta función, e invoque la función por medio del puntero.<br />
138<br />
✐<br />
✐<br />
✐<br />
✐