Logo Studenta

programacion c ejercicios resueltos-41

¡Estudia con miles de materiales!

Vista previa del material en texto

En esta sentencia, el maestro (main) causa que el sirviente (Cube) calcule el cubo de 27 y dé el resul-
tado de nuevo a main. La secuencia de símbolos
 Cube(27)
es una llamada de función o invocación de función. La computado-
ra desactiva temporalmente la función main y comienza 
la ejecución de la función Cube. Cuando Cube ha termi-
nado de hacer su trabajo, la computadora regresa a main
y reinicia donde la dejó.
En la llamada de función anterior, el número 27 se conoce como argumento (o parámetro real). 
Los argumentos hacen posible que la misma función trabaje en muchos valores distintos. Por ejem-
plo, es posible escribir sentencias como éstas:
 cout << Cube(4);
cout << Cube(16);
Enseguida se muestra la plantilla de sintaxis para una llamada de función:
FunctionCall
FunctionName ( ArgumentList )
La lista de argumentos es una vía para que las funciones se 
comuniquen entre sí. Algunas funciones, como Square y 
Cube, tienen un solo argumento en la lista. Otras, como 
main, no tienen argumentos en la lista. Algunas funcio-
nes tienen dos, tres o más argumentos en la lista, separa-
dos por comas.
Las funciones de devolución de valor se emplean en expresiones de forma muy parecida a como 
se usan las variables y constantes. El valor calculado mediante una función simplemente toma su 
lugar en la expresión. Por ejemplo, la sentencia
 someInt = Cube(2) * 10;
guarda el valor 80 en someInt. Primero se ejecuta la función Cube para calcular el cubo de 2, que 
es 8. Ahora el valor 8 está disponible para usarlo en el resto de la expresión; es multiplicado por 10. 
Observe que una llamada de función tiene mayor precedencia que la multiplicación, lo cual tiene 
sentido si considera que el resultado de la función debe estar disponible antes de que tenga lugar la 
multiplicación.
Aquí se presentan varios hechos acerca de la función de devolución de valor:
• La llamada de función se emplea dentro de una expresión; no aparece como una sentencia 
separada.
• La función calcula un valor (resultado) que después está disponible para uso en la expresión.
• La función devuelve exactamente un resultado.
La función Cube espera que se le dé (o pase) un argumento de tipo int. ¿Qué sucede si el invocador 
pasa un argumento fl oat? La respuesta es que el compilador aplica coerción implícita de tipos. La lla-
mada de función Cube (6.9) calcula el cubo de 6, no de 6.9.
Aunque se continúan usando constantes literales como argumentos para Cube, el argumento 
podría ser fácilmente una variable o constante nombrada. De hecho, el argumento para una función 
de devolución de valor puede ser cualquier expresión del tipo apropiado. En la sentencia
 alpha = Cube(int1 * int1 + int2 * int2);
 3.6 Llamadas de función y funciones de biblioteca | 93
Llamada de función (invocación de función) Mecanismo 
que transfi ere el control a una función.
Lista de argumentos Mecanismo por medio del cual las 
funciones se comunican entre sí.
DALE003.indd 93DALE003.indd 93 4/12/06 18:56:324/12/06 18:56:32
 www.FreeLibros.me
94 | Capítulo 3: Tipos numéricos, expresiones y salida
se evalúa primero la expresión en la lista de argumentos, y sólo su resultado se pasa a la función. Por 
ejemplo, si int1 contiene a 3 e int2 contiene a 5, la llamada de función pasa a 34 como el argu-
mento a Cube.
Una expresión en una lista de argumentos de función puede incluir hasta llamadas para funcio-
nes. Por ejemplo, se podría usar la función Square para reescribir la sentencia de asignación anterior 
como sigue:
 alpha = Cube(Square(int1) + Square(int2))
Funciones de biblioteca
Algunos cálculos, como sacar raíz cuadrada o hallar el valor absoluto de un número, son muy comu-
nes en los programas. Sería una enorme pérdida de tiempo si todo programador tuviera que empezar 
de cero y crear funciones que efectúen estas tareas. Para hacer más fácil la vida del programador, 
todo sistema de C++ incluye una biblioteca estándar, una gran colección de funciones preescritas, 
tipos de datos y otros elementos que cualquier programador de C++ pudiera usar. A continuación se 
ofrece una muestra muy pequeña de algunas funciones de biblioteca estándar:
 Archivo de Función Tipo(s) de Tipos de Resultado
encabezado† argumento(s) resultado (valor devuelto)
<cstdlib> abs(i) int int Valor absoluto de i
<cmath> cos(x) fl oat fl oat Coseno de x (x está en radianes)
<cmath> fabs(x) fl oat fl oat Valor absoluto de x
<cstdlib> labs(j) long long Valor absoluto de j
<cmath> pow(x, y) fl oat fl oat x elevada a la potencia y (si x = 0.0,
 y debe ser positiva; si x � 0.0, y 
 debe ser un número entero)
<cmath> sin(x) fl oat fl oat Seno de x (x está en radianes)
<cmath> sqrt(x) fl oat fl oat Raíz cuadrada de x (x � 0.0)
† Los nombres de estos archivos de encabezado no son los mismos que en C++ pre-estándar. Si está trabajando con C++ pre-estándar, 
véase la sección D.2 del apéndice D.
Técnicamente, los elementos de la tabla marcados con fl oat deben decir double. Estas funciones de 
biblioteca realizan su trabajo con valores de punto fl otante de precisión doble. Pero como resultado 
de la coerción de tipos, las funciones trabajan como a usted le gustaría cuando les pasa valores 
fl oat.
Usar una función de biblioteca es fácil. Primero, se coloca una directiva #include cerca de la 
parte superior de su programa, la cual especifi ca el archivo de encabezado apropiado. Esta directiva 
asegura que el preprocesador C++ inserte sentencias en el programa que dan al compilador cierta 
información acerca de la función. Entonces, si desea usar la función, sólo haga una llamada de fun-
ción.* Aquí se presenta un ejemplo:
 #include <iostream>
#include <cmath> // For sqrt() and fabs()
 
using namespace std;
 :
fl oat alpha;
fl oat beta;
 :
alpha = sqrt(7.3 + fabs(beta));
* Algunos sistemas requieren que se especifi que una opción de compilador particular si usa funciones matemáticas. Por ejem-
plo, con algunas versiones de UNIX, se debe añadir la opción -lm al compilar su programa.
DALE003.indd 94DALE003.indd 94 4/12/06 18:56:344/12/06 18:56:34
 www.FreeLibros.me
Recuerde del capítulo 2 que los identifi cadores de la biblioteca estándar están en el espacio de 
nombre std. Si se omite la directiva using del código anterior, se deben usar nombres califi cados 
para las funciones de biblioteca (std::sqrt, std::fabs, etcétera).
La biblioteca estándar C++ proporciona docenas de funciones para que usted las use. En el apén-
dice C se enlista una selección mucho más grande que la presentada aquí. En este momento debe 
echar un vistazo breve sin olvidar que mucha de la terminología y notación del lenguaje C++ tendrá 
sentido sólo después de avanzar más en la lectura del libro.
Funciones void (vacías)
En este capítulo, la única clase de función que se ha examinado es la función de devolución de valor. 
C++ proporciona también otra clase de función. Por ejemplo, la siguiente defi nición para la función 
CalcPay comienza con la palabra void en lugar del tipo de datos como int o fl oat:
 void CalcPay( . . . )
{
 :
}
CalcPay es un ejemplo de una función que no devuelve un valor de función a su invocador. En 
cambio, efectúa alguna acción y luego termina. A una función como ésta se le denomina función sin 
devolución de valor, una función de devolución void, o, de manera más breve, una función void. En al-
gunos lenguajes de programación, una función void se 
conoce como procedimiento.
Las funciones void se invocan de modo distinto que 
las funciones de devolución de valor. Con una función de devo-
lución de valor, la llamada de función aparece en una 
expresión. Con una función void, la llamada de función 
es una sentencia separada, independiente. En el programa 
del año bisiesto, main llama a la función IsLeapYear en 
una expresión como ésta:
 if (IsLeapYear(year))
Por otro lado, una llamada para una función void tiene el sabor de un comando o instrucción inte-
grada:
 DoThis(x, y, z);
DoThat();
En los siguientes capítulosno escribiremos nuestras propias funciones (excepto main). En cam-
bio, se pondrá atención en cómo usar las funciones existentes, incluso funciones para llevar a cabo 
entrada y salida de fl ujo. Algunas de estas funciones son de las que devuelven un valor; otras son 
funciones void. De nuevo, se destaca la diferencia en cómo invocar estas dos clases de funciones: en 
una expresión ocurre una llamada para una función de devolución de valor, mientras que una llama-
da para una función void ocurre como una sentencia separada.
3.7 Formateo del resultado
Formatear la salida o resultado de un programa signifi ca controlar cómo aparece visualmente en la 
pantalla o en una impresora. En el capítulo 2 se consideraron dos modos de formatear la salida: crear 
líneas en blanco extra por medio del manipulador endl e insertar espacios en blanco dentro de una 
línea escribiendo espacios en blanco extra en cadenas literales. En esta sección se examina cómo 
formatear los valores de salida.
 3.7 Formateo del resultado | 95
Función void (procedimiento) Función que no devuelve 
un valor de función a su invocador y es invocada como una 
sentencia separada.
Función de devolución de valor Función que devuelve 
un solo valor a su invocador y es invocada desde dentro de 
una expresión.
DALE003.indd 95DALE003.indd 95 4/12/06 18:56:354/12/06 18:56:35
 www.FreeLibros.me

Continuar navegando