Programación Instituto Tecnológico de Celaya FUNCIONES Cuando es necesario escribir programas complicados para resolver problemas complejos, una práctica común entre los programadores es descomponer el algoritmo (el diagrama de flujo) en varias partes. Cada de una de éstas partes puede codificarse en forma independiente en la forma de subprogramas. Así, habrá un cierto número de subprogramas que se encargan de realizar sólo parte de las tareas requeridas para resolver el problema; estos subprogramas estarán relacionados de forma que su ejecución conjunta permitirá la solución del programa global. Funciones como Subprogramas en C++ C++ permite la definición de este tipo de subprogramas. En algunos lenguajes de programación, las subpartes son llamadas procedimientos o subrutinas. En C++ las subpartes de un programa se denominan funciones. Una de las ventajas de dividir los programas en subprogramas es que diferentes programadores pueden realizar diferentes tareas. Este tipo de trabajo de equipo es indispensable para la elaboración de programas complicados en un tiempo razonable. FUNCIONES PREDEFINIDAS El lenguaje C++, como la mayoría de los lenguajes de programación, permite el uso de “bibliotecas” con funciones predefinidas que se pueden utilizar en cualquier programa. Se discutirá primero como se utilizan estas funciones predefinidas y, posteriormente, se mostrará como un programador puede construir sus propias funciones. Uso de Funciones Predefinidas Se utilizará la función sqrt (square root = raíz cuadrada) para ejemplificar el uso de funciones predefinidas. La función sqrt toma el valor de un número, por ejemplo 9.0, y calcula el valor de su raíz cuadrada, en este caso 3.0. El valor que la función toma como punto de partida (9.0 en el ejemplo) se le conoce como su argumento. Al valor que calcula se le conoce como valor de regreso (o retorno). Ingeniería Química Programación Instituto Tecnológico de Celaya Algunas funciones pueden tener más de un argumento, pero todas las funciones tienen un solo valor de retorno. Si se trata de comparar a una función con los programas que se han analizado hasta ahora, los argumentos son análogos a los datos, mientras que los valores de retorno son análogos a los resultados. Un ejemplo del uso de una función es el siguiente: raiz = sqrt(9.0); A la expresión sqrt(9.0) se le conoce como llamado a la función (o invocación a la función). El argumento de una función puede, como en este caso, ser un valor constante, pero también puede ser una variable o una expresión más complicada. La única restricción en este sentido es que la constante, la variable o la expresión deben de proporcionar un valor que sea del tipo requerido por la función. Las funciones pueden utilizarse como parte de cualquier expresión legal en C++. Por ejemplo, las siguientes son expresiones válidas en C++: double venta, beneficio, area; venta = 100.50; area = 27.5; beneficio = sqrt(venta); cout<< “El lado del cuadrado es “ << sqrt(area) <<”\n”; LLAMADO A FUNCIONES Un llamado a una función consiste en el nombre de una función seguida por la lista de sus argumentos encerrados entre paréntesis. Si hay más un de argumento, los argumentos se separan mediante comas. Un llamado a una función puede ser usado como cualquier otra expresión en C++ siempre y cuando se conserve la consistencia entre los tipos de las variables del programa. La sintaxis es la siguiente. Si hay un solo argumento: nombre_de_funcion(argumento) Ingeniería Química Programación Instituto Tecnológico de Celaya si hay más de un argumento: nombre_de_funcion(argumento_1, argumento_2, ... , ultimo_argumento) Bibliotecas de Funciones Se recordará que, cuando se analizó la instrucción cout, se vió que era necesario incluir en el programa a la biblioteca iostream.h, dado que la definición de cout se encontraba en dicha biblioteca. De la misma forma, para utilizar algunas funciones matemáticas será necesario incluir en nuestros programas otras bibliotecas de C++. Esta bibliotecas son, por ejemplo, math.h y stdlib.h. Esto significa que, en programas en los que se utilicen funciones predefinidas, será necesario utilizar la directiva include para incluir en el programa la definición de dichas funciones. En el caso de la biblioteca math.h, el programa deberá contener la instrucción: #include <math.h> A los archivos que tienen extensión .h se les conoce como archivos de encabezados. A través de la directiva include, los archivos de encabezados proporcionan al compilador la información básica contenida en la biblioteca correspondiente. Algunas Funciones Predefinidas Algunas funciones predefinidas se describen en la Tabla siguiente: Nombre Descripción Tipo de Argumentos sqrt pow abs Raíz Cuadrada Potencia Valor absoluto de un int Valor absoluto de un double Redondeo hacia el número inmediato superior double double int Tipo de Valor de Regreso double double int double double double double fabs ceil Ingeniería Química Ejemplo Valor Biblioteca sqrt(4.0) pow(2.0,3.0) abs(-7) abs(7) fabs(-7.5) fabs(7.5) ceil(3.2) ceil(3.9) 2.0 8.0 7 math.h math.h stdlib.h 7.5 math.h 4.0 math.h Programación floor sin cos tan Instituto Tecnológico de Celaya Redondeo hacia el número inmediato inferior Seno Coseno Tangente double double floor(3.2) floor(3.9) 3.0 math.h double double double double double double sin(0.0) cos(0.0) tan(0.0) 0.0 1.0 0.0 math.h math.h math.h La más complicada de las funciones de la tabla es la función pow que sirve para obtener la potencia de un número. Por ejemplo, las siguientes sentencias son un ejemplo de aplicación de la función pow: double resultado, x=3.0, y=2.0; resultado = pow(x,y); cout<< resultado; Las sentencias anteriores mostrarían en pantalla al número 9.0. Ejemplos Las siguientes expresiones algebraicas y en C++ son equivalentes: x+ y sqrt(x+y) x y +7 pow(x,y+7) x− y abs(x-y) sen(angulo) Ingeniería Química sin(angulo) Programación Instituto Tecnológico de Celaya El siguiente programa calcula las raíces la ecuación cuadrática ax2 + bx + c = 0 #include <iostream.h> #include <stdlib.h> #include <math.h> int main() { /* Este programa permite el calculo de las raices de una ecuacion cuadratica */ /* Declaración de variables*/ double a, b, c, x_1, x_2; /* Entrada de datos */ cout<< "Dame los coeficientes a,b y c de la ecuacion cuadratica \n"; cin>>a >> b >> c; /* Procesamiento de datos */ x_1 = ( -b + sqrt( pow(b,2.0) – 4.0 * a * c) ) / (2.0 * a); x_2 = ( -b - sqrt( pow(b,2.0) – 4.0 * a * c) ) / (2.0 * a); /* Salida de Resultados */ cout<<”\n”; cout<<”La primera raiz es ”<< x_1 << "\n"; cout<<”La segunda raiz es ”<< x_2 << "\n"; cout<<”\n”; } system("PAUSE"); return 0; Ingeniería Química Programación Instituto Tecnológico de Celaya El siguiente programa también calcula las raíces de la ecuación cuadrática, pero considera el caso general en el que pueden haber raíces imaginarias: #include <iostream.h> #include <stdlib.h> #include <math.h> int main() { /* Este programa permite el calculo de las raices de una ecuacion cuadratica */ /* Declaración de variables*/ double a, b, c, x_1, x_2; double x_1r, x_1i, x_2r, x_2i; /* Entrada de datos */ cout<< "Dame los coeficientes a, b y c de la ecuacion cuadratica \n"; cin>>a >> b >> c; /* Procesamiento de datos y Salida de Resultados */ if ( (pow(b,2.0) - 4.0 * a * c) > 0) { x_1 = ( -b + sqrt( pow(b,2.0) - 4.0 * a * c) ) / (2.0 * a); x_2 = ( -b - sqrt( pow(b,2.0) - 4.0 * a * c) ) / (2.0 * a); cout<<"\n"; cout<<"La primera raiz es "<< x_1 << "\n"; cout<<"La segunda raiz es "<< x_2 << "\n"; cout<<"\n"; } else { x_1r = -b / (2.0 * a); x_1i = sqrt( fabs(pow(b,2.0) - 4.0 * a * c) ) / (2.0 * a); x_2r = -b / (2.0 * a); x_2i = -sqrt( fabs(pow(b,2.0) - 4.0 * a * c) ) / (2.0 * a); } cout<<"\n"; cout<<"La primera raiz es "<< x_1r <<" + " <<x_1i << " i \n"; cout<<"La segunda raiz es "<< x_2r <<" " <<x_2i << " i \n"; cout<<"\n"; system("PAUSE"); return 0; } Ingeniería Química Programación Instituto Tecnológico de Celaya DEFINICIÓN DE CONSTANTES Con la finalidad de proporcionar un significado a los valores constantes que se utilizan en un programa, una práctica común en programación es asignar nombres a dichos valores y usar los nombres en el programa en lugar de utilizar los valores constantes. C++ permite que cualquier cantidad, de cualquier tipo, pueda ser declarada (definida) como una constante. Una vez que se ha inicializado una cantidad que se considera constante, C++ no permitirá que su valor sea modificado durante la ejecución del programa. Aunque no es estrictamente necesario, se acostumbra que los nombres de valores constantes sean escritos con mayúsculas. Para establecer que una cantidad va a poseer un valor constante, se utiliza el modificador const. Por ejemplo, para declarar la variable INDICE como entera se utilizaría: int INDICE; Si además se desea que indice sea constante e igual a 3, se haría: const int INDICE = 3; Declarando Constantes con el Modificador const Cuando se inicializa una variable en una declaración, puedes definir también el hecho de que la variable no pueda cambiar su valor. Para ello se utiliza el modificador const en la declaración. Sintaxis: const nombre_del_tipo nombre_de_la_variable= valor_constante; Ejemplos: const double PI = 3.1415926; const double R = 0.0821; Ingeniería Química