Curso: Fundamentos de Algoritmos – Sesión 08FUNCIONES Los Funciones en c++ permiten modularizar sus programas. Todas las variables declaradas en las definiciones de Funciones son variables locales es decir solo se conocen en la función que se definen. Casi todos las Funciones tienen una lista de parámetros que permiten comunicar información entre Funciones. Los parámetros de una función también son variables locales. La sintaxis para declarar un función es la siguiente: tipo_de_valor_devuelto nombre_de_la_función ( lista_de_parámetros) { Declaraciones e instrucciones } Donde : tipo_de_valor_devuelto: Indica el tipo de valor que se devuelve a la función invocadora. Si una función no devuelve un valor, el tipo_de_valor_devuelto se declara como void. nombre_del_función : Es cualquier identificador válido lista_de_parámetros : Es una lista separada por comas que contiene las declaraciones de las variables que se pasarán a la función. Si una función no recibe parámetros las lista_de_parámetros se deja vacía. El cuerpo de la función es el conjunto de declaraciones e instrucciones que constituyen la función. Cuando un programa encuentra una llamada a una función, se transfiere el control desde el punto de invocación a la función invocada, se ejecuta la función y el control regresa a la función invocadora. Una función invocada puede devolver el control a la invocadora de tres maneras: Si la función no devuelve valor, el control se devuelve al llegar a la llave derecha que termina la función o ejecutando la sentencia return; Si la función devuelve un valor, la sentencia return expresión, devuelve el valor de expresión. Ejemplos: 1) Hacer un programa para calcular la suma de dos números enteros. Use Funciones. #include<iostream> using namespace std; int suma(int,int); int main() { int a,b; cout<<"Ingrese 2 numeros : "; cin>>a>>b; cout<<"La suma es : "<<suma(a,b)<<endl; system("pause"); return 0; } int suma(int x, int y) { return x+y; } En la funcion int suma(int x, int y), se ve que el tipo_de_valor_devuelto es int, y tiene dos parámetros enteros x e y. DOCENTE: Ing. Marcelino Torres Villanueva 1 return 0. cout<<"El factorial es : "<<factorial(n)<<endl. #include<iostream> using namespace std. for(i=1. system("pause"). void mensaje(). int main() { mensaje(). #include<iostream> using namespace std. int i. por eso el tipo_de_valor_devuelto es void. }while(n<=0). cin>>n. system("pause"). Ejercicios 1) Hacer un programa para calcular el factorial de un numero entero n. } DOCENTE: Ing. return 0. } En este caso la función no devuelve un valor.i++) f=f*i. Curso: Fundamentos de Algoritmos – Sesión 08 2) Hacer un programa para que se muestre el mensaje “C++ es fácil de aprender”. Lo que hace solamente la función es mostrar un mensaje. Marcelino Torres Villanueva 2 . } void mensaje() { cout<<"C++ es facil de Aprender"<<endl. return f.i<=n. float factorial(int). int main() { int n. do{ cout<<"Ingrese numero : ". } float factorial(int n) { float f=1. #include<iostream> using namespace std. cin>>x>>y. x=x/d. int y). } int mcd(int x. int main() { int x.y. return 0. }while(x<=0 || y<=0). return 0. cin>>num. }while(num<=0). while(d<=x && d<=y) { if(x % d == 0 && y % d ==0) { p=p*d. do{ cout<<"Ingrese numero : ". int y) { int d=2. } DOCENTE: Ing. cout<<"El M. system("cls").p=1. do{ cout<<"Ingrese 2 numeros : ". y=y/d. int main() { int num.D. es "<<mcd(x.C. int mcd(int x.y)<<endl. Marcelino Torres Villanueva 3 . Curso: Fundamentos de Algoritmos – Sesión 08 2) Calcular el MCD de dos números enteros. void reporteDivisores(int ). system("pause"). } return p. reporteDivisores(num). } else d++. } 3) Programa para reportar todos los divisores de un número entero N #include<iostream> using namespace std. n=n/d.i<=n. for(i=1. do{ cout<<"Ingrese numero : ". DOCENTE: Ing. cin>>num. system("pause"). factoresPrimos(num). Marcelino Torres Villanueva 4 . } cout<<endl.i++) { if(n % i ==0) cout<<i<<" ". int main() { int num. void factoresPrimos(int n). while(n>1) { if(n % d ==0) { cout<<d<<" ". } 3) Programa para reportar los factores primos de un número entero n #include<iostream> using namespace std. bool esPrimo(int ). int main() { int num. cout<<"Los divisores son : "<<endl. return 0. }while(num<=0). } else d++. Curso: Fundamentos de Algoritmos – Sesión 08 void reporteDivisores(int n) { int i. do{ cout<<"Ingrese numero : ". } } 4) Programa para ingresar un número y se reporte si es primo #include<iostream> using namespace std. }while(num<=0). cin>>num. } void factoresPrimos(int n) { int d=2. else return false.int). return 0. s=s+p/f. } 5) Calcular el valor de la siguiente sumatoria: s = 1+ x + x2/2! + x3/3! + x4/4! + . system("pause").p=1. } DOCENTE: Ing. else cout<<"El numero no es primo"<<endl.i<=n. p=p*x. cin>>x.cd=0. cout<<"Valor de x : ". }while(n<=0).f=1. for(i=1. int n) { float s=1. } return s.i<=n.. float suma(float . for(i=1. Marcelino Torres Villanueva 5 .i++) { f=f*i. cout<<"La suma es : "<<suma(x. Curso: Fundamentos de Algoritmos – Sesión 08 if(esPrimo(num)) cout<<"El numero es primo"<<endl.. system("pause"). + xn/n! #include<iostream> using namespace std. int i.i++) { if(n%i==0) cd++. cin>>n. int n.n)<<endl. int main() { float x. } if(cd==2) return true. } float suma(float x. do{ cout<<"Valor de n : ". } bool esPrimo(int n) { int i. } El resultado es : x=3 La variable x del programa principal al llamar a la función calculo hace una copia de su valor al parámetro de la función. calculo(x). luego la que se incrementa es la variable x de la función y no la variable x del programa principal. calculo(x). int main() { float x=3. 2) Parámetros por referencia: Son aquellos a través de los cuales se pasan referencias de las variables esto permite que las variables pasadas como argumento se puedan modificar. Curso: Fundamentos de Algoritmos – Sesión 08 Tipos de Parámetros de las Funciones 1) Parámetros por Valor : Son aquellos a través de los cuales se pasan valores a la función. cout<<" x = "<<x<<endl. Ejemplo: #include<iostream> using namespace std. system("pause"). void calculo(float &x). void calculo(float ). Marcelino Torres Villanueva 6 . int main() { float x=3. } void calculo(float x) { x=x+2. A estos parámetros se les conoce como parámetros de entrada. cout<<" x = "<<x<<endl. Ejemplo: #include<iostream> using namespace std. } El resultado es: x=5 La variable x del programa principal al llamar a la función calculo pasa la referencia de la variable esto hace que la variable x se pueda modificar. return 0. es decir se hace una copia de la variable pasada como argumento. system("pause"). DOCENTE: Ing. Para declarar un parámetro por referencia se utiliza el operador referencia &. } void calculo(float &x) { x=x+2. return 0. cout<<"Nuevo valor de a : "<<a<<endl. } void cambio(float &x.x. int main() { float r. Curso: Fundamentos de Algoritmos – Sesión 08 Ejercicios 1) Programa para intercambiar el valor de 2 variables numéricas #include<iostream> using namespace std.y). } DOCENTE: Ing.float &.t. return 0.y).float &).t). cambio(a. cout<<"Valor de a : ". x=y. return 0. cout<<"Valor de b : ".t. int main() { float a. cout<<"Nuevo valor de b : "<<b<<endl.y.x.b. calculo(r.b). float &). void calculo(float. void cambio(float &.float. t=x. void reporte(float. y=t. Marcelino Torres Villanueva 7 .float &). } 2) Programa para ingresar el valor de un Punto en coordenadas Polares y reporte su equivalente en coordenadas cartesianas. void ingreso(float &.float). float &y) { float t. system("pause"). reporte(x.h> using namespace std. cin>>b. system("pause"). #include<iostream> #include<math. ingreso(r. cin>>a. float &. float t. cin>>t. }while(r<=0).float &.b). cin>>r. y=r*sin(t). int main() { float x1.float. Marcelino Torres Villanueva 8 .float).x2. #include<iostream> #include<math. } 3) Ingrese 2 puntos del plano cartesiano y reporte la ecuación de la recta que los contiene. float &x2.y1. system("pause"). void reporte(float.x2. return 0.m.b. cout<<"y = "<<y<<endl.m.float. float y) { cout<<"x = "<<x<<endl. cout<<"Valor de y : ". Curso: Fundamentos de Algoritmos – Sesión 08 void ingreso(float &r. } void ingreso(float &x1. cout<<"Valor de x : ".y2). cout<<"Valor de x : ". x=r*cos(t). cin>>x1.float.float &). float &). float &y1. float &x. cin>>y2. void calculo(float. void ingreso(float &. } void calculo(float r. cout<<"Segundo Punto"<<endl.h> using namespace std.y1. ingreso(x1. cout<<"Valor de y : ". cout<<"Angulo en grados sexagesimales : ". cin>>y1.y2. cin>>x2.b).y1. } DOCENTE: Ing. float &y) { // convertimos el angulo de sexagesimales a radianes t=t*M_PI/180. } void reporte(float x. calculo(x1.x2. float &t) { do{ cout<<"Valor de r : ". reporte(m.float &. float &y2) { cout<<"Primer Punto"<<endl.y2. num=0. } DOCENTE: Ing. } void reporte(float m. if(esPrimo(num)) { cout<<num<<" ".i++) { if(n % i==0) cd++. return 0. float x2.n). reportePrimos(n). Curso: Fundamentos de Algoritmos – Sesión 08 void calculo(float x1.int &n). float y2. } if(cd==2) return true. } void reportePrimos(int n) { int c=0. Marcelino Torres Villanueva 9 . bool esPrimo(int n). leeNro("Valor de n : ".float &m. float y1. } } cout<<endl. void leeNro(char mensaje[]. float b) { cout<<"y = "<<m<<"x". system("pause").float &b) { m=(y2-y1)/(x2-x1). int main() { int n. void reportePrimos(int n).cd=0. b=y1-m*x1. else cout<<b<<endl. else return false. for(i=1. } 4) Reportar los n primeros numerous primos #include<iostream> using namespace std. while(c<n) { num++. c++.i<=n. if(b>0) cout<<"+"<<b<<endl. } bool esPrimo(int n) { int i. #include<iostream. if(sonAmigos(num1. }while(n<=0). Curso: Fundamentos de Algoritmos – Sesión 08 void leeNro(char mensaje[].i++) { if(n%i==0) sd=sd+i.sd=0. sd2=sumaDivisores(n2). } DOCENTE: Ing.sd1. ingreso("Segundo numero : ". int sumaDivisores(int n). } 5) Escribir un programa que permita leer dos numeros y reporte si son amigos. } int sumaDivisores(int n) { int i. Se dice que dos números son amigos si cada uno de ellos es igual a la suma de los divisores (menores que el número) del otro. Marcelino Torres Villanueva 10 .int n2) { int i. ingreso("Primer numero : ".sd2. } void ingreso(char mensaje[].int n2).num1). if(n1==sd2 && n2==sd1) return true.h> using namespace std.int &n). int main() { int num1.i<=n/2. } bool sonAmigos(int n1. Ejemplo: 220 y 284 son amigos.int &n) { do{ cout<<mensaje. void ingreso(char mensaje[].num2)) cout<<"Son amigos "<<endl. } return sd. else return false. cin>>n.num2). else cout<<"No son amigos "<<endl. system("pause").num2. return 0. sd1=sumaDivisores(n1). }while(n<=0).int &n) { do{ cout<<mensaje. cin>>n. for(i=1. bool sonAmigos(int n1. invierno o primavera 11) Ingresar 2 números y luego un carácter indicando la operación a realizar (+. Un número es capicúa cuando se lee igual de izquierda a derecha y viceversa. Por ejemplo 2002 es capicúa 19) Ingresar un numero entero en base 10 y convertirlo en un numero de base b (entre 2 y 9) 20) Ingresar un numero entero en base b y convertirlo a base 10. 23) Dado un numero entero positivo N. A A+B A + 2B A + 3B A + nB 13) Ingresar un numero entero y reportar si es perfecto o no... 14) Ingresar 2 números y reportar su mínimo común múltiplo 15) Ingresar un quebrado (numerador y denominador) y reducirlo a su mínima expresión. 4) Ingrese un número que represente segundos y determinar a cuanto equivale en horas. 21) Convertir un numero de base n a otro de base m 22) Ingresar el numero de mes y el año y reporte el número de días que tiene ese mes. Marcelino Torres Villanueva 11 . dibujar el siguiente triangulo: DOCENTE: Ing. Hacer un programa para ingresar las notas de los 4 exámenes y reportar la nota eliminada y el promedio final del alumno 7) Ingresar 3 números y reportar el menor de ellos 8) Diseñe un programa que determine le categoría de un estudiante en base a su promedio ponderado de acuerdo a la siguiente tabla: PROMEDIO CATEGORIA >=17 A >=14 pero <17 B >=12 pero <14 C < 12 D 9) Ingresar el día y el mes de nacimiento y reportar su signo zodiacal. 38 minutos y 20 segundos. + .. b.8 m/seg2) 2) Calcular Monto generado por un capital depositado durante cierta cantidad de períodos a una tasa de interés determinada y expresada en porcentaje. Curso: Fundamentos de Algoritmos – Sesión 08 Ejercicios Propuestos 1) Calcular la altura que cae un objeto. G = 9. 10) Ingresar el día y el mes de una fecha y reportar la estación a la que pertenece: verano. minutos y segundos.. -. Monto = Capital*(1 + tasa/100)NumeroPeríodos 3) Calcular el volumen de un cilindro dada el radio y la altura. 17) Ingresar un número y reportarlo al revés 18) Ingresar un número y reportar si es capicúa. Se debe ingresar el tiempo recorrido en segundos. (H = 0.^) y reportar el resultado de la operación 12) Escribir un programa que lea 3 números enteros positivos a. para x < 0 Fx = 4x2 – 2 . calcule la sumatoria de : 1! 2! 3! 4! (n+1)! . dada por x3 + x/2. + . para x ≥ 0 6) En el curso de Algoritmos se rinden 4 exámenes de las cuales se elimina la menor nota. n>0. 5) Calcule el valor de la función Fx. otoño. Un numero es perfecto cuando es igual a la suma de divisores menores que el.*. 16) Ingresar un número y reportar el número de dígitos que tiene.5 * G * T 2 . Ejemplo: Si se ingresa 9500 segundos el programa debería reportar: 2 horas./. Curso: Fundamentos de Algoritmos – Sesión 08 Si N=5 saldrá 1 21 321 4321 54321 24) Dado un numero entero positivo N. dibujar el siguiente rectángulo: Si N=4 saldrá ******** ******** ******** ******** 25) Dado un numero entero positivo N. Marcelino Torres Villanueva 12 . dibujar en la pantalla el siguiente triangulo: Si N=4 **** *** ** * DOCENTE: Ing.