13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!