• No results found

Al llegar a éste tema se asume que Ud. ya ha logrado un entrenamiento lógico adecuado, reconociendo y aplicando correctamente cada estructura de programación de tal forma que planteado un problema no tenga dudas en utilizarlas convenientemente, construyendo el algoritmo que dé solución al problema.

Ahora de lo que se trata es de darle un entorno, una forma, un ambiente, un lugar a cualquier algoritmo construido; al cual le llamaremos PROCESO o FUNCIÓN.

Una función es un proceso que realiza una determinada tarea, tiene un nombre y es capaz de recibir datos y devolver resultados a través de variables especiales que toman el nombre de parámetros e inclusive a través de su propio nombre. Las funciones se declaran como prototipos antes de la función principal (void main()) y se desarrollan después de la función principal.

C++

Prototipo:

Tipo de dato de la función nombre_de_funcion(lista de parámetros);

Desarrollo

Tipo de dato de la función nombre_de_funcion(lista de parámetros)

{

declaración LOCALES;

sentencias de la función;

}

Observaciones

El tipo de dato de la función identifica el valor que la función retornará como resultado a través de su nombre.

El nombre_de_funcion es justamente el nombre que identifica a la función y debe empezar con una letra y luego puede combinarse con letras y/o números y/o el subrayado. Si bien es cierto que el identificador puede estar compuesto de letras y/o dígitos, se recomienda que éstos sean expresivos y <<digan algo>> respecto al proceso que identifican.

La lista de parámetros son variables con su respectico tipo de dato separados por comas (,). Cada parámetro debe tener si propio tipo de dato así sean del mismo tipo dos o más parámetros.

Las declaraciones locales SOLAMENTE serán de utilidad para la función y nada más que para ella. Fuera de la función dichos elementos NO SON CONOCIDOS.

57

E. EMMANUEL COAQUIRA M.

Ejemplos de Funciones cuyo tipo de dato es void Problema CPP08-01

Mediante el uso de funciones, muestre los primeros m múltiplos de n.

i: sucesivos factores n: # cuyo múltiplos deseamos m: Cantidad de múltiplos En el bloque principal leemos n y m e invocamos a la función tablamult(), pasándoles estos valores como parámetros. Al terminar la ejecución de tablamult(), el control regresa al bloque principal, para que éste termine el programa.

Problema CPP08-02

Usando funciones encuentre los divisores comunes de dos números.

a: Primer # a inspeccionar b: Segundo # a inspeccionar i: Posibles divisores CODIFICACIÓN C++ /*... PROGRAMA CPP08.01.CPP FUNCIONES PROPIAS ...*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void tablamult(int,int); //Funcion principal void main () { //Declaracion de variables clrscr(); int n,m;

cout<<"\nCual tabla desea?= ";cin>>n; cout<<"Cuantos multiplos desea?= ";cin>>m; tablamult(n,m);

getch(); }

//DESARROLLO DEL PROTOTIPO void tablamult(int n,int m) {

int i;

cout<<"\n*TABLA DE MULTIPLICAR DEL "<<n<<"*\n\n"; for(i=1;i<=m;i++)

cout<<"\t"<<n<<" x "<<i<<" = "<<i*n<<endl; } CODIFICACIÓN C++ /*... PROGRAMA CPP08.02.CPP FUNCIONES PROPIAS ...*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void comunes(int,int); //Funcion principal void main () { //Declaracion de variables clrscr(); int a,b;

cout<<"\tDIVISORES COMUNES DE DOS NUMEROS\n"; cout<<"\nIngrese primer numero= ";cin>>a; cout<<"Ingrese segundo numero= ";cin>>b;

comunes(a,b); getch(); }

//DESARROLLO DEL PROTOTIPO void comunes(int a,int b) { int i; i=1; while(i<=a&&i<=b) { if(a%i==0&&b%i==0) cout<<i<<endl; i++; } }

58

E. EMMANUEL COAQUIRA M.

Problema CPP08-03

Usando funciones, ordene un conjunto de datos de menor a mayor por el método de la burbuja.

n: # de elementos del array

X[]: Array unidimensional aux: Utilizada para el intercambio

Comenzamos leyendo n e invocando a LeerArray(). Observe otra de las ventajas de definir funciones: las escribimos para una aplicación, pero podemos usarlas en otras. Esto es una propiedad importante conocida como “Reusabilidad del código”. Una vez leídos los elementos del array X[], invocamos a la función

Burbuja(), en donde se

procede al ordenamiento. Después de ordenar X[] y de regreso al bloque principal, solo nos queda imprimir los elementos ordenados, labor que delegamos a la función MuestraArray(). //Funcion principal void main () { //Declaracion de variables clrscr(); int n; float X[50];

cout<<"\nNro de datos a leer: ";cin>>n;

LeerArray(n,X); //Hace ingreso datos en array

Burbuja(n,X); //Ordena por burbuja

cout<<"\n\tELEMENTOS ORDENADOS:\n"<<endl; MuestraArray(n,X); //Muestra array ordenado getch();

}

//DESARROLLO DEL PROTOTIPO void LeerArray(int n,float X[]) { int i; for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } }

void Burbuja(int n, float X[]) { int i,j; float aux; for(i=1;i<n;i++) for(j=n-1;j>=i;j--) if(X[j-1]>X[j]) { aux=X[j-1]; X[j-1]=X[j]; X[j]=aux; } }

void MuestraArray(int n, float X[]) { int i; cout<<"X["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"\t]"; } CODIFICACIÓN C++ /*... PROGRAMA CPP08.03.CPP FUNCIONES PROPIAS ...*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void LeerArray(int,float []); void Burbuja(int, float []); void MuestraArray(int, float []);

59

E. EMMANUEL COAQUIRA M.

Ejemplos de Funciones cuyo tipo de dato NO ES void Problema CPP08-04

El teorema del coseno es muy utilizado en geometría para calcular la longitud del tercer lado de un triángulo, cuando se conocen los otros 2 lados y el ángulo que forman. Siendo a el lado desconocido, b y c los lados conocidos, 𝛼 el ángulo formado por b y c; el teorema del coseno se enuncia como:

𝑎 = √𝑏2+ 𝑐2− 2𝑏𝑐(𝑐𝑜𝑠𝛼)

Calcule el tercer lado de un triángulo aplicando este teorema. Use funciones.

a: Lado desconocido b, c: Lados conocidos

alfa: Ángulo formado (b y c) Primero hay que leer los lados b y c y el ángulo alfa en radianes, esto debido a que la función cos(),

provista por C++, solo calcula las funciones trigonométricas de ángulos en radianes.

A diferencia de los ejercicios anteriores está función retorna un valor (a), el cual se envía al bloque principal para su impresión.

Problema CPP08-05

Usando funciones. Escriba un algoritmo que diga si un número es primo o no. n: Número a evaluar i: posible divisor CODIFICACIÓN C++ /*... PROGRAMA CPP08.04.CPP FUNCIONES PROPIAS ...*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> #include<math.h> //PROTOTIPO float LadosAngulo(float,float,float); //Funcion principal void main () { //Declaracion de variables clrscr(); float a,b,c,alfa; cout<<"\n\tSOLUCIONA UN TRIANGULO\n"; cout<<"\tCASO LADO-ANGULO-LADO\n"; cout<<"\nIngrese lado b= ";cin>>b; cout<<"Ingrese lado c= ";cin>>c;

cout<<"Angulo Formado (n rad)= ";cin>>alfa; a=LadosAngulo(b,c,alfa);

cout<<"El tercer lado mide "<<a; getch();

}

//DESARROLLO DEL PROTOTIPO

float LadosAngulo(float b,float c, float alfa) {

float a;

a=sqrt(b*b+c*c-2*b*c*cos(alfa)); return a; //Retorna el valor de a }

60

E. EMMANUEL COAQUIRA M.

OBS:

Nótese que todas las ejecuciones se han hecho desde la función principal; sin embargo recuerde que también se pueden hacer desde el desarrollo de cualquier función.

Ahora que ya sabe ejecutar una función, debe saber que las funciones propias que utiliza un programa puede estar en el mismo programa (como en los ejemplos anteriores) pero también puede estar fuera del programa conformado lo que se llama una LIBRERÍA.

Entonces la pregunta es ¿Qué funciones deben estar en el mismo programa y que funciones deben estar en una librería? La respuesta es que si las funciones van a poder ser utilizadas en otros programas lo más lógico y recomendable es que estén en una librería, pero si las funciones son específicas y sólo sirven a un programa pueden estar junto al programa.

¿Cómo se construyen librerías propias?, lo veremos en el siguiente tema. CODIFICACIÓN C++ /*... PROGRAMA CPP08.05.CPP FUNCIONES PROPIAS ...*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO int EsPrimo(int); //Funcion principal void main () { //Declaracion de variables clrscr(); float n;

cout<<"Ingrese numero= ";cin>>n; if(EsPrimo(n))

cout<<"El numero es primo"; else

cout<<"El numero no es primo"; getch();

}

//DESARROLLO DEL PROTOTIPO int EsPrimo(int n) { int i; i=n/2; while(i>1) { if(n%i==0)

return 0; //No es primo i--;

}

return 1; //Es primo }

61

E. EMMANUEL COAQUIRA M.

PROBLEMAS PROPUESTOS

1. Escriba una función que calcule la raíz cuadrada de un número por el método de Newton.

2. Mediante funciones cree una calculadora que lea 2 números y un operador. La calculadora será capaz de realizar las operaciones (suma, resta, multiplicación, división, potencia).

3. Mediante una función diga si un número es divisible por otro. 4. Usando funciones, calcule el área sombreada formada por una

circunferencia inscrita en un cuadrado de lado a.

5. Escriba una función que retorne el mayor elemento de un array. 6. Escriba una función que ordene un array por el método de

selección.

7. Escriba una función que ordene un array por el método de inserción.

8. Escriba una función para calcular la media aritmética, la geométrica armónica, la cuadrática (𝑚𝑐 = √𝑥2/𝑛 , la ponderada,

la varianza y la desviación estándar de los datos.

9. Dada una temperatura t, convertirla a su equivalente en una diferente escala (°C, °F y K). Hacer uso de funciones.

10. Construir una función que reciba una cadena de caracteres y los devuelva todas sus letras convertidas en minúsculas.

63

E. EMMANUEL COAQUIRA M.

Related documents