Elementos Básicos de un Programa del C / Soluciones del Capítulo 3
Subtitles of the Movie
Estas son las soluciones a los problemas del capitulo 3. Comenzamos con el programa del nombre. Esta es el archivo "fullname.c" ubicado en la carpeta "Chapter3>Solutions" del CD. Demos un vistazo al codigo. En la funcion "main" he declarado tres variables para almacenar el nombre, el apellido y el resultado. He decidido que los nombres tienen una longitud de 30 caracteres y esa sera la limitacion inherente del programa. Necesitamos 31 caracteres tanto para el nombre como para el apellido para poder almacenar el caracter "null". El resultado constara de 62 caracteres. Tal vez se pregunte por que 62 y no 61 siendo que tenemos 30 mas 30 mas 1 "null". Este sera 30 mas 30 mas 1 espacio mas 1 "null", asi que el total es 62. Tal vez usted lo haya hecho asi: es posible simplemente concatenar el apellido al final del nombreÉ y no utilizar ninguna variable para el resultado. No hay problema con esto, pero debemos asegurarnos de que la variable del nombre tenga una longitud de 62 caracteres en ese punto. Al hacerlo asi, no hay ningun problema. Veamos el proceso de lectura de datos. Este es muy sencillo, pero recuerde que en el modulo de la funcion "scanf" utilizamos esta tecnica para leer una cadena en vez del codigo "%s"É porque podrian haber espacios en el nombre o el usuario podria tener dos nombres. Ciertamente, dentro de los 30 caracteres podriamos tener un espacio y leer todos los caracteres que no indican una nueva lineaÉ y luego utilizar la funcion "fflush" para eliminar la nueva linea. No olvide hacerlo. Por lo demas este proceso es muy sencillo: leemos los datos y los concatenamos entre si. Primero copiamos el nombre dentro del resultado, concatenamos un espacio al mismo y luego concatenamos el apellido al final. Primero tenemos una funcion "strcpy" y luego dos funciones "strcat". Tal vez usted intento utilizar primero la funcion "strcat"É para concatenar el resultado; esto no funciona por una sencilla razon: el resultadoÉ no tiene ningun valor. Si concatenamos el nombre al final del resultado, todo funcionara si este esta vacio; pero observe que este no esta necesariamente vacio, pues lo hemos declarado pero no lo hemos inicializado. Si este no esta inicializado, Àesta vacio? No necesariamente, pues puede contener caracteres aleatoriosÉ determinados por la memoria en ese momento en particular. Si no lo inicializamos, la funcion "strcat" requiere que la primera cadena tenga alguna descripcionÉ y el resultado no cumple esa condicion. Por esto no podemos utilizar primero la funcion "strcat". Luego desplegamos el resultado con la frase "Your full name is" y el codigo "%s, " que es muy sencilloÉ seguido por el codigo "%d" que tambien es muy sencillo. Esto es interesante y aun no lo hemos visto. No hemos visto el resultado de una funcion dentro de otra funcion. Tal vez usted utilizo una variable llamada "length" para almacenar la longitud y luego una referencia a dicha variable aqui. Eso esta bien, pero podemos hacerlo sin tener que utilizar una variable para la longitudÉ y sin tener que incluir una sentencia para asignarle dicha longitud. Podemos hacerlo en una sola linea dentro de la sentencia de la funcion "printf" si es posible. La pregunta es si esto es lo mas correcto. Esta es una cuestion de estilo y algunas personas lo prefieren porque es mas eficiente. Este no solo es un programa pequeno sino tambien rapido, asi que eso es cierto. Otras personas no lo prefieren porque podrian mezclarse los calculos. Esta es la parte del programa que realiza los calculos y esta es la que despliega los resultados; hay quienes dicen que este codigo pertenece a la fase de calculo del programa, lo cual tambien esta bien. En cuanto al estilo, creo que este no es el lugar adecuado aunque es eficiente en cualquier caso. Usted puede decidir donde utilizarlo. Veamos si funciona. Compilamos, ejecutamos e ingresamos el nombreÉ "Mark" y el apellido "Virtue"; aparece la frase "Your full name is Mark Virtue". Eso es correcto. Esta tiene 11 caracteres, asi que funciona bien. Ahora veamos el programa de la temperatura. Aqui lo tenemos. Primero tenemos la variable de los grados Fahrenheit para almacenar la respuesta. Este sera un numero de punto flotante porque debemos desplegarlo con dos posiciones decimales. Podriamos utilizar un valor "float", pero tenemos un "double". Recuerde que lo rete a que el valor de los grados Celsius fuera de tipo "int". ÀPudo lograrlo? Creo que no, a menos que haya visto este proceso con anterioridad. Si hizo que los grados "Celsius" fueran de tipo "double", no debio tener problemas. Veamos como lo he hecho: primero obtenemos los grados Celsius desde el teclado. Esto es muy sencillo. Tenemos el codigo "%d" y la funcion "scanf" sin olvidar el ampersand antes de la variable "celsius". Realizamos la conversion "fahr = 32 + celsius" por 9 sobre 5. La formula es muy sencilla y podemos escribirla exactamente asi. Tal vez se pregunte si este es un tipo de datos "double" entre parentesis antes de la variable "celsius". Este se refiere a una conversion, no del tipo de Celsius a Fahrenheit, sino una conversion de tipo de datos, de "int" a "double". Veamos. Voy a eliminar esto por un momento. Tal vez usted escribio algo asi: si la variable "celsius" es un entero, esto no funcionara. Esto puede funcionar para numeros completos, como si tuvieramos 100 grados Celsius y por lo tanto 212 grados Fahrenheit, pero si tenemos 99 grados Celsius, tendriamos 210.2 grados Fahrenheit. ÀQue pasaria aqui? Primero digamos que tenemos 99 grados aquiÉ y los multiplicamos por 9. Observe que la multiplicacion va a ocurrir antes que la adicion. Las multiplicaciones y las divisiones siempre ocurren antes que la adiciones, asi la adicion de esta linea ocurrira al final. Primero multiplicamos por 9 y obtenemos 891. Luego dividimos por 5 y obtenemos 178. Ahora realicemos el calculo. 891 dividido por 5 es 178.2, pero recuerde que al dividir numeros, si ambos son enteros, obtenemos un resultado enteroÉ que siempre es aproximado. Tenemos los enteros 891 y 5, asi que el resultado de la division sera un entero. No sera 178.2 sino 178. Sumamos 32 y obtenemos 210, el cual es almacenado en la variable de los grados Fahrenheit. Aunque la respuesta correcta es 210.2, solo obtenemos 210. No importa si lo hacemos asi o si los grados Fahrenheit son un valor de tipo "double"É porque solo almacenamos un numero completo, asi que la funcion "printf" desplegara el valor 210.00 al final. Por eso utilizamos esta palabra "double", pues su funcion es convertir temporalmente la variable "celsius" de tipo "int"É al tipo "double" para realizar el calculo en esta linea. Ahora la variable "celsius" es de tipo "double". Aqui abajo aun es de tipo "int", pero en esta linea es de tipo "double". Multiplicamos por 9, dividimos por 5 y aun obtenemos un valor de tipo "double"É porque comenzamos con otro valor "double". El calculo es 178.2 + 32 y el resultado aun es de tipo "double", es decir, el 210.2 que aparece aqui. Esto se denomina conversion y la veremos con detalle mas adelante. Continuamos y desplegamos el resultado con 2 posiciones decimales mediante el codigo "%.2f". Esto es todo. Veamos si funciona. EjecutamosÉ y aparece "Please enter temperature in degrees celsius". Ingresamos 100 y obtenemos 212.00 grados Fahrenheit. Es correcto. Ahora ingresamos 99 grados Celsius y obtenemos 210.2 grados Fahrenheit. Excelente. Funciona de ambas maneras. Ensaye la conversion y piense en otras instancias en las cuales esta puede ser de utilidad. La veremos en un proximo capitulo. Esos son los ejercicios resueltos del capitulo 3. Observe que contiene comentariosÉ para explicar todos los aspectos necesarios. De hecho, pude haber exagerado con los comentarios, pues por ejemplo aqui no es necesario ser tan explicito al indicar que desplegamos el resultado. Este es el final del capitulo 3.
Tutorial Information
| Course: | C Programming (Español) |
| Author: | Mark Virtue |
| SKU: | 33759 |
| ISBN: | 1-933736-81-X |
| Release Date: | 2007-04-16 |
| Duration: | 21.5 hrs / 139 lessons |
| Captions: | Available on CD and Online University |
| Compatibility: |
Vista/XP/2000, OS X, Linux QuickTime 7, Flash 8 |
VTC Sign up & Benefits
- Unlimited Access
- 81,350 Video Tutorials (20,800 free)
- Video Available as Flash or QuickTime
- Over 782 Courses
- $30 for One Month Access
- Multi-User Discounts Available
United States 