Clase 8
Menu Principal | VIM | Clase 1 | Clase 2 | Clase 3 | Clase 4 | Clase 5 | Clase 6 | Clase 7
Segunda Prueba Lunes 20 de Octubre 2014.
Memoria dinámica
En esta sesión trabajaremos con tres problemas que usted deberá intentar por sí mismo. Cualquier duda de implementación (es decir, cómo se programa determinada cosa) la veremos caso a caso, pero es fundamental que ustedes mismos piensen los algoritmos, es decir, paso a paso lo que el programa debe hacer y cómo, para los tres problemas.
Representación de un número de doble precisión
Usted deberá escribir un programa que:
- Averigue el tamaño de un
double
y lo muestre en pantalla. - Pida un número de doble precisión al usuario y muestre cómo se representa ese
double
en términos de sus bytes (que a su vez son enteros entre 0 y 255).
Hints:
- Para determinar el tamaño de un
double
, usesizeof(double)
. - Debe pasar de puntero a double a puntero a
unsigned char
para explorar los bytes.
#include <stdio.h> int main() { double *nd; double a; printf("Ingrese un numero double \n"); scanf("%lf",&a); nd=&a; printf("El numero ingresado es %lf \n", *nd); int s = sizeof(*nd); printf("El tamano de su double es %d \n", s); for (int i = 0 ; i< s ; ++i) { unsigned char byte = *((unsigned char *)&a + i); printf("byte %d = %u \n", i, (unsigned)byte); } return 0; }
Compile con:
$ gcc double.c -o double -std=c99
Inversión de texto
Ahora, usted deberá escribir un programa que reciba una línea de texto ingresada por el usuario y la muestre invertida en pantalla. Por ejemplo, ingresar hola mundo
debe producir odnum aloh
.
Hints:
- Para leer una línea de texto no use
scanf
sinofgets
. Un ejemplo de cómo se usafgets
:
#include <stdio.h> int main() { char str[50]; printf("Enter a string : "); fgets(str,50,stdin); printf("You entered: %s \n", str); return(0); }
- Para invertir, trabaje con un arreglo de
char
, manipulando las letras individualmente.
Concatenación de líneas
Ahora, usted deberá escribir un programa que reciba varias líneas de texto ingresadas por el usuario y, al final, las muestre todas una tras otra. El programa debe dejar de pedir líneas al usuario cuando reciba una conteniendo únicamente la palabra END
.
Hints:
- Use
realloc
para extender un arreglo dechar
a medida que vaya recibiendo más líneas. - Para poner un salto de línea, utilice el carácter especial
\n
. - Puede usar la función
strcmp
para detectar la palabraEND
(incluyastring.h
para usarla) o simplemente comparar las tres primeras letras conE
,N
yD
por separado. Si lo hace de la segunda forma, debe asegurarse que el largo de la línea sea 3.