Sie sind auf Seite 1von 3

266

Captulo 6 Funciones y una introduccin a la recursividad

6.10 Escriba un programa completo que pida al usuario el radio de una esfera, calcule e imprima el volumen de esa esfera.
Use una funcin inline llamada volumenEsfera que devuelva el resultado de la siguiente expresin: (4.0 / 3.0) * 3.14159
* pow ( radio, 3 ).

Respuestas a los ejercicios de autoevaluacin


6.1
a) funciones, clases. b) llamada a una funcin. c) variable local. d) return. e) void. f ) alcance. g) return; return
expresin; o encontrar la llave derecha de cierre de una funcin. h) prototipo de funcin. i) rand. j) srand. k) auto, register, extern, static. l) auto. m) register. n) global. o) static. p) alcance de funcin, alcance de archivo, alcance de
bloque, alcance de prototipo de funcin, alcance de clase, alcance de espacio de nombres. q) recursiva. r) base. s) sobrecarga t) operador de resolucin de mbito unario (::). u) const. v) plantilla.
6.2
a) alcance de bloque. b) alcance de bloque. c) alcance de archivo. d) alcance de archivo. e) alcance de archivo.
f ) alcance de prototipo de funcin.
6.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

Vea el siguiente programa:


// Ejercicio 6.3: ej06_03.cpp
// Prueba de las funciones matemticas de la biblioteca.
#include <iostream>
using std::cout;
using std::endl;
using std::fixed;
#include <iomanip>
using std::setprecision;
#include <cmath>
using namespace std;
int main()
{
cout << fixed << setprecision( 1 );
cout << "sqrt(" << 900.0 << ") = " << sqrt( 900.0 )
<< "\nsqrt(" << 9.0 << ") = " << sqrt( 9.0 );
cout << "\nexp(" << 1.0 << ") = " << setprecision( 6 )
<< exp( 1.0 ) << "\nexp(" << setprecision( 1 ) << 2.0
<< ") = " << setprecision( 6 ) << exp( 2.0 );
cout << "\nlog(" << 2.718282 << ") = " << setprecision( 1 )
<< log( 2.718282 )
<< "\nlog("" << setprecision( 6 ) << 7.389056 << ") = "
<< setprecision( 1 ) << log( 7.389056 );
cout << "\nlog10(" << 1.0 << ") = " << log10( 1.0 )
<< "\nlog10(" << 10.0 << ") = " << log10( 10.0 )
<< "\nlog10(" << 100.0 << ") = " << log10( 100.0 ) ;
cout << "\nfabs(" << 13.5 << ") = " << fabs( 13.5 )
<< "\nfabs(" << 0.0 << ") = " << fabs( 0.0 )
<< "\nfabs(" << -13.5 << ") = " << fabs( -13.5 );
cout << "\nceil(" << 9.2 << ") = " << ceil( 9.2 )
<< "\nceil(" << -9.8 << ") = " << ceil( -9.8 );
cout << "\nfloor(" << 9.2 << ") = " << floor( 9.2 )
<< "\nfloor(" << -9.8 << ") = " << floor( -9.8 );
cout << "\npow(" << 2.0 << ", " << 7.0 << ") = "
<< pow( 2.0, 7.0 ) << "\npow(" << 9.0 << ", "
<< 0.5 << ") = " << pow( 9.0, 0.5 );
cout << setprecision(3) << "\nfmod("
<< 13.675 << ", " << 2.333 << ") = "
<< fmod( 13.675, 2.333 ) << setprecision( 1 );
cout << "\nsin(" << 0.0 << ") = " << sin( 0.0 );
cout << "\ncos(" << 0.0 << ") = " << cos( 0.0 );
cout << "\ntan(" << 0.0 << ") = " << tan( 0.0 ) << endl;
return 0; // indica que termin correctamente
} // fin de main

C06_Deitel C++.indd 266

5/30/08 11:55:54 PM

Respuestas a los ejercicios de autoevaluacin

267

sqrt(900.0) = 30.0
sqrt(9.0) = 3.0
exp(1.0) = 2.718282
exp(2.0) = 7.389056
log(2.718282) = 1.0
log(7.389056) = 2.0
log10(1.0) = 0.0
log10(10.0) = 1.0
log10(100.0) = 2.0
fabs(13.5) = 13.5
fabs(0.0) = 0.0
fabs(-13.5) = 13.5
ceil(9.2) = 10.0
ceil(-9.8) = -9.0
floor(9.2) = 9.0
floor(-9.8) = -10.0
pow(2.0, 7.0) = 128.0
pow(9.0, 0.5) = 3.0
fmod(13.675, 2.333) = 2.010
sin(0.0) = 0.0
cos(0.0) = 1.0
tan(0.0) = 0.0

a)
b)
c)
d)

double hipotenusa( double lado1, double lado2 )

a)
b)
c)
d)

double hipotenusa( double, double );

6.6

a)
b)

register int cuenta = 0;

6.7

a) Error: la funcin h est denida en la funcin g.


Correccin: mueva la denicin de h fuera de la denicin de g.
b) Error: se supone que la funcin debe devolver un entero, pero no es as.
Correccin: elimine la variable resultado, y coloque la siguiente instruccin en la funcin:

6.4

6.5

int menor( int x, int y, int z )


void instrucciones()
double intADouble( int numero )
int menor( int, int, int );
void instrucciones();
double intADouble( int );
static double ultimoVal;

return x + y;

c) Error: el resultado de n + suma( n 1 ) no se devuelve; suma devuelve un resultado incorrecto.


Correccin: vuelva a escribir la instruccin en la clusula else de la siguiente manera:
return n + suma( n 1 );

d) Errores: el punto y coma que va despus del parntesis derecho de la lista de parmetros es incorrecto, y el parmetro
a no debe volver a denirse en la denicin de la funcin.
Correcciones: elimine el punto y coma que va despus del parntesis derecho de la lista de parmetros, y elimine la
declaracin float a;.
e) Error: la funcin devuelve un valor cuando no debe hacerlo.
Correccin: elimine la instruccin return.
6.8
Esto crea un parmetro de referencia de tipo referencia a double, el cual permite que la funcin modique la variable
original en la funcin que hace la llamada.
6.9
Falso. C++ permite el paso por referencia mediante el uso de parmetros por referencia (y apuntadores, como veremos
en el captulo 8).
6.10
1
2
3

Vea el siguiente programa:

// Ejercicio 6.10: ej06_10.cpp


// Funcin en lnea que calcula el volumen de una esfera.
#include <iostream>

C06_Deitel C++.indd 267

5/30/08 11:55:55 PM

268
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Captulo 6 Funciones y una introduccin a la recursividad

using std::cout;
using std::cin;
using std::endl;
#include <cmath>
using std::pow;
const double PI = 3.14159; // define la constante global PI
// calcula el volumen de una esfera
inline double volumenEsfera( const double radio )
{
return 4.0 / 3.0 * PI * pow( radio, 3 );
} // fin de la funcin en lnea volumenEsfera
int main()
{
double valorRadio;
// pide el radio al usuario
cout << "Escriba la longitud del radio de su esfera: ";
cin >> valorRadio; // recibe el radio
// usa valorRadio para calcular el volumen de la esfera y mostrar el resultado
cout << "El volumen de la esfera con radio " << valorRadio
<< " es " << volumenEsfera( valorRadio ) << endl;
return 0; // indica que termin correctamente
} // fin de main

Ejercicios
6.11

Muestre el valor de x despus de ejecutar cada una de las siguientes instrucciones:


a) x =fabs( 7.5 );
b) x = floor( 7.5 );
c) x = fabs( 0.0 );
d) x = ceil( 0.0 );
e) x = fabs( -6.4 );
f ) x = ceil( -6.4 );
g) x =ceil( -fabs( -8 + floor( -5.5 ) ) );

6.12 Un estacionamiento cobra una cuota mnima de $2.00 por estacionarse hasta tres horas. El estacionamiento cobra
$0.50 adicionales por cada hora o fraccin que se pase de tres horas. El cargo mximo para cualquier periodo dado de 24 horas
es de $10.00. Suponga que ningn auto se estaciona durante ms de 24 horas a la vez. Escriba un programa que calcule y muestre los cargos por estacionamiento para cada uno de tres clientes que estacionaron su auto ayer en este estacionamiento. Debe
introducir las horas de estacionamiento para cada cliente. El programa debe imprimir los resultados en un formato tabular
ordenado, debe calcular e imprimir el total de los recibos de ayer. El programa debe utilizar la funcin calcularCargos para
determinar el cargo para cada cliente. Sus resultados deben aparecer en el siguiente formato:
Auto

Horas

Cargo

1.5

2.00

4.0

2.50

24.0

10.00

TOTAL

29.50

14.50

6.13

Una aplicacin de la funcin floor es redondear un valor al siguiente entero. La instruccin


y = floor( x + .5 );

redondea el nmero x al entero ms cercano y asigna el resultado a y. Escriba un programa que lea varios nmeros y que utilice
la instruccin anterior para redondear cada uno de los nmeros a su entero ms cercano. Para cada nmero procesado, muestre
tanto el nmero original como el redondeado.

C06_Deitel C++.indd 268

5/30/08 11:55:55 PM