Sie sind auf Seite 1von 7

Página 1 de 7

UNMSM FACULTAD DE INGENIERÍA INDUSTRIAL


ALGORITMOS Y ESTRUCTURAS DE DATOS
PROFESOR: EDGAR RUIZ LIZAMA
SEMANA 1
TEMA: SOBRECARGA DE FUNCIONES

EJEMPLO 1
Página 2 de 7

EJEMPLO 2
Página 3 de 7

EJEMPLO 3
Página 4 de 7

EJERCICIOS:

1. Defina la función Areas, tal que esté sobrecargada y permita evaluar el área de las
siguientes figuras geométricas.
a) Cuadrado
b) Rectángulo
c) Circulo
d) Rombo
e) Trapecio
f) Pentágono

2. (2010-1) Sobrecargar la función llamada hayRepetidos de acuerdo a los siguientes


prototipos:
a) bool hayRepetidos ( int a[N], int na );
Donde na es la cantidad de elementos del arreglo a. La función devuelve true si
existen elementos repetidos en el arreglo. En caso contrario devuelve false.

b) bool hayRepetidos ( int x );


La función devuelve true si existen dígitos repetidos en el número x. En caso
contrario devuelve false.

3. (2010-2) El chino Sun Tsu en


el año 400 a.C. halló un
número entero que al dividirlo
por 3, el resto sea 2; al
dividirlo por 5, el residuo sea
3, y al dividirlo por 7, el
residuo sea igual a 2. Se pide
implementar la sobrecarga de
funciones proceso de
acuerdo al detalle que
aparece en la función
principal y que al ejecutar el
programa nos permita mostrar la salida indicada.

#include <iostream>
using namespace std;
//Acá van las funciones sobrecargadas

//Función principal
int main()
{
char p='A';
int m, n, t;
bool q;
float o;
proceso(m, n); /* Esta función lee 2 números enteros asegurando que m
es menor que n. 1 pto. */
q = proceso(m, n, o); /* Es función muestra todos los números en base a
la condición indicada por el chino SunTsu. 2 pts*/
if( q == true)
Página 5 de 7

proceso(o); /*Esta función reporta la cantidad de números encontrados


según Sun Tsu. 1 pto*/
else
cout<<"No existen ningun numero"<<endl;
cout<<endl;

cout<<"Ingrese la constante en el rango 1-26:";


cin>>t;
proceso(p, t); /*Esta función muestra los 26 caracteres del alfabeto,
además la otra salida según t. 2 pts*/

int a[] = {2,5,9,7,1,4,5,1,6,2,4,10,5,2,1};


int tam = sizeof(a)/sizeof(int);
int b = 1, r = 17;
proceso(a, tam, b, r);/*Esta función busca los b en a y los reemplaza con
r, luego reporta la cantidad de reemplazos. 2pts*/
return 0;
}

4. (2007-0) Sobrecargar la función denominada playa de la siguiente manera:

a) Si el parámetro que recibe es un numero entero x; devuelve true si sus dígitos están
en orden ascendente, false en caso contrario.

b) Si los parámetros son dos arreglos unidimensionales a y b de n números reales,


devuelve true si los elementos de a están almacenados en orden contrario a los de
b. En otro caso devuelve false.

c) Si el parámetro m es una matriz cuadrada de caracteres de orden n; devuelve true si


no hay elementos repetidos en su diagonal principal, false en caso contrario.

5. (2007-1) En el siguiente programa, escriba el código de las funciones que faltan para su
correcto funcionamiento. Tener en cuenta que no está permitido el uso de las sentencias if ni
if - else, por lo que debe usar el operador ternario.

#include <iostream>
using namespace std;

const int N = 10;

bool esprimo( int x ); // devuelve true si x es primo, sino devuelve false


int quitaprimos( int n );
int quitaprimos( int a[N], int na , int b[N] );

void print( int a[N], int na )


{
int i;
for( i = 0; i < na; i++ )
cout<<a[i]<<"\t";
cout<<endl<<endl;;
}

int main()
{
int x,y,nz;
int w[N] = { 12 , 23, 31, 40, 47, 50, 53, 62, 71, 80 } , z[N];
cout<<endl<<"Ingrese un entero positivo: ";
cin>>x;
y = quitaprimos( x );
Página 6 de 7

cout<<endl<<"Quitandole a "<<x<<" sus digitos primos se obtiene


"<<y<<endl;
nz = quitaprimos( w, 10, z );
cout<<endl<<endl<<"Arreglo W"<<endl<<endl;
print( w, 10 );
cout<<"Arreglo obtenido al quitar los valores primos del Arreglo W"<<
endl<<endl;
print( z, nz );
return 0;
}

Un ejemplo de corrida del programa se muestra a continuación:

6. (2007-2) (Propuesta por Edgar Ruiz L.) Dado el siguiente programa escriba el código
de las funciones que faltan

#include <iostream>
using namespace std;
void print(float x[], int n) // imprime en pantalla el array x
// devuelve true si los elementos del array son todos iguales si no, false
bool proceso(float x[], int n);
/* devuelve true si los elementos de a son equidivisores de los de b sino
false */
bool proceso(float a[], float b[], int n);
/* guarda true en bandera si los elementos de a son equimultiplos de los de
b sino false */
void proceso(float a[], float b[], int n, bool &bandera);

int main() // p1_072pc1.cpp


{
float x[] = {5,6,7,9}, y[] = {20,24,28,36};
int n = sizeof( x )/sizeof( float );
int m = sizeof( y )/sizeof( float );
if ( n == m )
{ cout<<"Array X = "; print(x,n);
cout<<"Array Y = "; print(y,n);
if (proceso(x,y,n) == true)
cout<<"\nLos de x son equidivisores de y !..."<<endl;
else
cout<<"\nLos de x NO son equidivisores y !...."<<endl;
}
Página 7 de 7

float w[] = {14,38,24,40,66,10}, z[] = {7,19,12,20,33,5};


int p = sizeof( w )/sizeof( float );
int q = sizeof( z )/sizeof( float );
if ( p == q )
{ cout<<"\nArray W = "; print(w,p);
cout<<"Array Z = "; print(z,p);
bool band;
proceso(w,z,p,band);
if ( band == true)
cout<<"\nLos de w son equimultiplos de z !..."<<endl;
else
cout<<"\nLos de w NO son equimultiplos de z !..."<<endl;
}
cout<<endl;
return 0;
}

EQUIDIVISORES.- Dos o más números son equidivisores de otros cuando están


contenidos en estos el mismo número de veces. Ejemplo: 5,6 y 7 son equidivisores de 20,
24 y 28 porque el 5 esta contenido en 20 cuatro veces, el 6 en el 24 cuatro veces, y el 7 en
el 28 cuatro veces.

EQUIMULTIPLOS.- Son dos o mas números que contienen a otros un mismo número de
veces. Ejemplo: 14, 24 y 36, son equimultiplos de 7, 12 y 18, porque el 14 contiene al 7
dos veces, el 24 contiene al 12 dos veces, y el 36 contiene al 18 dos veces.

Una corrida del programa se presenta a continuación.

 Profesor Edgar Ruiz Lizama – 2014-2