#include "iostream.h"
#include "conio.h"
#define lp clrscr()
// Comparación de llamada a una función por valor y
// llamada por referencia.
int CuadradoPorValor(int);
// Prototipos de función
void CuadradoPorRefer(int &);
int main(){
int x=3, y=4; lp;
cout << "x= "<<x<<" antes de llamar la funcion
CuadradoPorValor()"<<endl;
// Paso de parámetro por valor. Entrega el valor de x
cout << "Valor devuelto por la funcion -> "<<
CuadradoPorValor(x)<<endl;
cout << "x= "<<x<<" despues de llamar la funcion
CuadradoPorValor()"<<endl<<endl;
cout << "y= "<<y<<" antes de llamar la funcion
CuadradoPorRefer()"<<endl;
// Paso de parámetro por referencia. Entrega la
dirección de y
CuadradoPorRefer(y);
cout << "y= "<<y<<" despues de llamar la funcion "<<endl;
getch();
return 0;
}
int CuadradoPorValor(int x) // La función recibe una copia del valor
{ x *=
x;
// equivale a x = x * x;
return(x);
// El parámetro del llamador no es modificado
}
void CuadradoPorRefer(int &y) // La función recibe una
dirección
{
y *= y;
// El parámetro del llamador se modifica
}
-
Escriba un programa modular con un ciclo indeterminado
para leer el sueldo de los empleados de la empresa "CompuTAR
S.A." y determinar e imprimir: a) Número de empleados de la
empresa, b) Total de nómina, c) cantidad de mujeres y de
hombres, d) sueldo promedio de mujeres y de hombres, e) sueldo
promedio de los ingenieros de sistemas.
#include "iostream.h"
#include "conio.h"
#include "ctype.h"
#define lp clrscr()
// Programa ejemplo de un bucle (ciclo) indeterminado y
// llamado de funciones con paso de parámetros por valor
float promedio(float, int); // Prototipos de función
void imprimir(float,float,float,float,int,int,int,int);
void titular();
void main(){
float sueldo; char sexo,sis;
int conte,contm,conth,contis; // contadores
float acuse,acusm,acush,acusis; // acumuladores
conte=contm=conth=contis=acuse=acusm=acush=acusis=0;
titular();
cin >> sueldo;
while(sueldo > 0){
cout << "Sexo(F/M) -> ";
cin >> sexo;
sexo=toupper(sexo); // conversion de minuscula a mayuscula
cout << "Es Ingeniero(a) de Sistemas?(S/N) -> ";
cin >> sis;
conte = conte + 1;
acuse = acuse + sueldo;
if (sexo == 'F'){
acusm=acusm + sueldo;
contm++;}
else{
acush=acush + sueldo;
conth++;}
if (sis == 'S' || sis == 's'){
acusis=acusis + sueldo;
contis++;}
titular();
cin >> sueldo;
}
if (contis > 0)
imprimir(acuse,acusm,acush,acusis,conte,contm,conth,contis);
else
cout << "No se procesaron sueldos!";
getch();
}
void imprimir(float acuse,float acusm,float acush,float acusis,int conte,int contm,int conth,int contis)
{
lp;
cout << "Número de empleados en CompuTAR S.A. :"<< conte <<endl;
cout << "Total nomina de la empresa $"<< acuse <<endl;
cout << "Mujeres :"<< contm <<endl;
cout << "Sueldo promedio de mujeres $"<<
promedio(acusm,contm)<<endl;
cout << "Hombres :"<< conth <<endl;
cout << "Sueldo promedio de hombres $"<< promedio(acush,conth)<<endl;
cout << "Ingenieros de Sistemas :"<< contis <<endl;
cout << "Sueldo promedio Ing. de Sistemas $"<<
promedio(acusis,contis)<<endl;
}
float promedio(float acum, int cont) // La funcion recibe copia de valores
{
return(acum/cont); // devuelve el promedio
}
void titular()
{
lp;
cout << "CompuTAR S.A."<<endl;
cout << "Sueldos de empleados..." << endl<< endl;
cout << "Digite un $ueldo. Para salir, teclee 0 -> ";
}
--------------------------------------------------------------------
La implementación de un programa como conjunto de
funciones es buena desde el punto de vista de la ingeniería de software,
pero las llamadas de función generan más carga en tiempo de ejecución.
C++ ofrece una mejora con las funciones inline, especialmente en el
caso de funciones pequeñas. El siguiente es un ejemplo de una Función en
Línea:
#include "iostream.h"
#include "conio.h"
#define lp clrscr()
// Cálculo del volumen de una esfera
const float PI = 3.14159;
inline float VolEsfera(const float r){
// Funcion en linea
return(4.0 / 3.0 * PI * r * r * r);}
int main(){
float radio; lp;
cout << "Digite la longitud del radio de la
esfera: ";
cin >> radio;
cout << "El volumen de la esfera con radio
"<<radio<<" es "<<
VolEsfera(radio); // llamado de la función en línea
getch();
return 0;
}
program NUMAYOR;
uses crt;
var
x,y,grande : real;
procedure
Mayor(a,b : real; var max : real);
begin
if a > b then
max := a
else
max := b
end;
BEGIN
clrscr;
repeat
Write('Por favor, digite dos números
-> ');
ReadLn(x,y);
Mayor(x,y,grande); {
llamada al procedimiento}
WriteLn('El mayor es ', grande
:4:2);
until x = 0;
ReadLn; { detiene la ejecucion del programa }
END.
{ El mismo ejemplo anterior, pero ahora utilizando una función
}
program NUMAYOR;
uses crt;
var
x,y,grande : real;
function
Mayor(a,b : real) : real;
var
max : real;
begin
if a > b then
max := a
else
max := b
end;
BEGIN
clrscr;
repeat
WriteLn('Por favor, digite dos
números: ');
ReadLn(x,y);
grande := Mayor(x,y); {
llamada a la función }
WriteLn('El mayor es ', grande
:4:2);
until x = 0;
ReadLn; { detiene la ejecucion del programa }
END.
______________________________________________
Métodos con paso de parámetros
en lenguaje Java:
-------------------------------------------------------------------------
/**
* Pinguino.java
*
*
* @author vGus
* @version 1.00 2008/10/18
*/
import javax.swing.JOptionPane;
class Penguin {
private float peso;
public Penguin() {
peso=0;
}
public float getpeso() {
return peso;
}
public void setpeso(float peso) {
this.peso=peso;
}
}
public class Pinguino{
public static void main(String arg[]){
Penguin P = new Penguin();
String cadpeso;
float peso;
cadpeso = JOptionPane.showInputDialog("Peso del pingüino?");
peso = Float.parseFloat(cadpeso);
P.setpeso(peso);
JOptionPane.showMessageDialog(null,"Peso del pingüino => "+P.getpeso());
}
}
Ejercicios "amistosos"
-
El parqueadero público "PingüiMóvil" cobra una
tarifa mínima de $1200 por estacionarse hasta tres horas; luego cobra
$500 adicionales por cada hora o fracción a partir de las tres horas.
La tarifa máxima por período de 24 horas es de $10000. Suponga que
ningún carro se estaciona por más de 24 horas a la vez. Escriba un
programa que calcule e imprima las cuentas por parqueo de tres
clientes que dejaron allí sus autos ayer. Digite las horas de parqueo
de cada cliente e imprima los resultados en forma tabular (Carro,
Horas, Costo) y el total de los recibos de ayer. El programa deberá
llamar la función CalcularCosto para determinar el valor a
pagar por cliente.
-
Escriba una función Potencia(base, exponente)
que devuelva el valor de base^exponente. Por ejemplo, Potencia(3, 4) =
3 * 3 * 3 * 3. Suponga que exponente es un entero positivo diferente
de cero y que base es un entero. La función Potencia debería
utilizar for o while para controlar el cálculo. No utilice funciones
de la biblioteca matemática.
-
Escriba un programa que acepte como entrada una serie
de enteros y los pase, uno a la vez, a la función ParNon para
determinar si un entero es par. La función deberá devolver 1
si el número es par y 0 si no lo es.
-
Escriba un programa que utilice una función inline
para calcular el área de un círculo.
-
Escriba una función que presente en el margen
izquierdo de la pantalla un cuadrado de asteriscos cuyo lado esté
especificado en el parámetro entero L. Por ejemplo, si L es 4, la
función visualizará
* * * *
* * * *
* * * *
* * * *
6. Escriba una función que tome el
tiempo como tres argumentos enteros (horas, minutos y segundos) y devuelva
el número de segundos transcurridos desde que el reloj "dió las
12". Calcule el tiempo en segundos entre dos horas, ambas
comprendidas dentro de un ciclo de 12 horas del reloj.
7. Escriba segmentos de programa que realicen lo
siguiente: a) Calcule la parte entera del cociente cuando el entero
x se divida entre el entero y. b) Calcule el residuo cuando
el entero x se divida entre el entero y. c) Utilice las partes de
programa desarrolladas en a) y b) para escribir una función que acepte un
entero entre 1 y 32767 y lo imprima como una serie de dígitos, separando
cada uno con dos espacios. Por ejemplo, el entero 4562 deberá
imprimirse como 4 5 6 2
8. Escriba una función que devuelva el menor de
tres números reales.
9. Implemente las siguientes funciones: a) La
función Celsius devuelve el equivalente en grados centígrados de una
temperatura Fahrenheit. b) La función Fahrenheit devuelve el
equivalente en grados fahrenheit de una temperatura en grados
centígrados.
10.) Escriba una función que tome un valor entero y
devuelva el número con sus dígitos en reversa. Por ejemplo, dado el
número 2718, la función deberá devolver 8172.
11). El máximo común divisor de dos enteros es el mayor
entero que divide ambos números. Escriba una función que devuelva el
máximo común divisor de dos enteros.
12). Un número entero es primo si sólo se puede dividir
entre 1 y entre sí mismo. Por ej. 2, 3, 5, 7... Escriba la función
para determinar si un número es primo.
12+1). Los computadores juegan cada vez más un papel importante en la
educación. Escriba un programa que ayude a un estudiante de primaria a
aprender a multiplicar. Mediante la función rand genere dos
enteros de un dígito. Después deberá desplegar una pregunta como
¿Cuánto es 3 veces 7?
El estudiante tecleará la respuesta. Su programa deberá
llamar la función Respue para revisar la respuesta. Si es
correcta, imprimir "Muy bien!!!" y presentar otro problema. Si
está equivocada, visualizar "No. Por favor, intente de nuevo!"
y permitir que el estudiante responda la misma pregunta hasta que esté
correcta.
