Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación Estructurada Tema: Funciones y Procedimientos en C#. Objetivos Utilizar la sintaxis de las funciones definidas por el usuario (programador) para resolver problemas. Identificar la diferencia entre una función y un procedimiento. Introducción Un problema complejo se puede dividir en pequeños subproblemas más sencillos. Estos subproblemas se conocen como módulos y su implementación en un lenguaje se llama subprograma (procedimientos y funciones). Un subprograma realiza las mismas acciones que un programa, sin embargo, vamos a utilizar el subprograma o módulo para una acción u operación específica. Un subprograma recibe datos de un programa y le devuelve resultados (el programa llama o invoca al subprograma, éste ejecuta una tarea específica y devuelve el control al programa que lo llamó). En C# a las funciones o procedimientos se le conocen con el nombre de métodos. Métodos en C# Función Procedimiento 154
Funciones (Retornan un valor) En el ámbito de la programación, una función es un tipo de subalgoritmo, es el término para describir una secuencia de órdenes que hacen una tarea específica de una aplicación más grande. Las declaraciones de las funciones, generalmente son especificadas por: Un nombre único en el ámbito. Nombre de la función con el que se identifica y se distingue de otras. No podrá ser otra función o procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). Un tipo de dato de retorno. Tipo de dato del valor que la función devolverá al terminar su ejecución. Una lista de parámetros. Especificación del conjunto de argumentos (pueden ser cero uno o más) que la función debe recibir para realizar su tarea. Sintaxis de una Función. Modificador de acceso_tipo Devuelto_Nombre Funcion (tipo(s) argumento(s) nombres) { // declaración de datos y cuerpo de la función. return (valor); } Procedimientos (No retornan valor) Fragmento de código (subprograma) que realiza una tarea específica y es relativamente independiente del resto del código. Los procedimientos suelen utilizarse para reducir la duplicación de códigos en un programa. Los procedimientos pueden recibir parámetros, pero no necesitan devolver un valor como es el caso de las funciones. Sintaxis Procedimiento Modificador_de_acceso void Nombre_procedimiento(tipo(s)_argumento(s) nombres) { //declaración de datos y cuerpo de la función. } Material y Equipo Guía de laboratorio No. 7. Computadora con Visual Studio 2013 o superior. Dispositivo de almacenamiento (USB). 155
Procedimiento G7Ejemplo1: Programa que permite digitar un número entero positivo y me diga si es par o impar. 1 { 2 //Inicio del programa principal 3 Console.ForegroundColor = ConsoleColor.Black; 4 Console.BackgroundColor = ConsoleColor.White; 5 Console.Clear(); 6 Console.Title = "Uso de un procedimiento"; 7 int num; 8 Console.WriteLine("Digitar un numero entero positivo:"); 9 num = int.parse(console.readline()); 10 Par(num); 11 Console.WriteLine("\n"); 12 Console.WriteLine("-->Fin del programa"); 13 Console.ReadKey(); 14 } 15 static void Par(int a) 16 { 17 int x; 18 x = (a % 2); 19 if (x == 0) 20 { 21 Console.WriteLine("\nEs par"); 22 } 23 else 24 { 25 Console.WriteLine("\nEs impar"); 26 } 27 } 156
G7Ejemplo2: En nuestro segundo ejemplo, vamos a implementar un procedimiento que sea capaz de realizar una suma y una resta. 1 static void Main(string[] args) 2 { 3 Console.Title = "Trabajando con Procedimientos"; 4 suma(); // llamando al procedimiento llamado suma 5 Console.ReadKey(); 6 Console.Clear(); 7 resta(); // llamando al procedimiento llamado resta 8 Console.ReadKey(); 9 } 10 11 static void suma() 12 { 13 Double r, n1, n2; 14 Console.WriteLine("Digitar primera cantidad"); 15 n1 = Double.Parse(Console.ReadLine()); 16 Console.WriteLine("Digitar segunda cantidad"); 17 n2 = Double.Parse(Console.ReadLine()); 18 r = n1 + n2; 19 Console.WriteLine("El resultado de la suma es: " + r); 20 } 21 22 static void resta() 23 { 24 Double r, n1, n2; 25 Console.WriteLine("Digitar primera cantidad"); 26 n1 = Double.Parse(Console.ReadLine()); 27 Console.WriteLine("Digitar segunda cantidad"); 28 n2 = Double.Parse(Console.ReadLine()); 29 r = n1 - n2; 30 Console.WriteLine("El resultado de la resta es: " + r); 31 } 157
Corrida del programa1 Corrida del programa2 G7Ejemplo3: Programa que permite hacer conversión de monedas digitando una cantidad en dólares, utilizando funciones. 1 { 2 //Inicia el programa principal 3 Console.ForegroundColor = ConsoleColor.Black; 4 Console.BackgroundColor = ConsoleColor.White; 5 Console.Clear(); 6 Console.Title = "Ejemplo3 utilizando la sintaxis de funciones"; 7 Double x,p,r; 8 Console.WriteLine("Digitar la cantidad en dólares:"); 9 x = Double.Parse(Console.ReadLine()); 10 // llamadas a las funciones 11 p = euros(x); 12 Console.WriteLine("Los {0} dolares son {1} euros ", x, p); 13 r = libras(x); 14 Console.WriteLine("Los {0} dolares son {1} libras ", x, r); 15 Console.WriteLine("\n"); 16 Console.WriteLine("-->Fin del programa"); 17 Console.ReadKey(); 18 } 158
19 static Double euros(double a) 20 { 21 Double g; 22 g = a * 1.15; 23 return g; 24 } 25 static Double libras(double a) 26 { 27 Double v; 28 v = a * 3.15; 29 return v; 30 } G7Ejemplo4: Utilización de un menú principal con la estructura Switch-Case y su facilidad al unirse con los procedimientos 1 static void Main(string[] args) 2 { 3 Console.ForegroundColor = ConsoleColor.Black; 4 Console.BackgroundColor = ConsoleColor.Yellow; 5 Console.Clear(); 6 Console.Title = "Ejemplo4 de Procedimientos en un menú"; 7 Int32 num1, num2; 8 int opcion; 9 Console.WriteLine("\n MENU PRINCIPAL DE OPERACIONES MATEMATICAS:"); 10 Console.WriteLine("\n"); 11 Console.Write("\tDigitar el primer número: "); 12 num1 = Int32.Parse(Console.ReadLine()); 13 Console.WriteLine("\n"); 159
14 Console.Write("\tDigitar el segundo numero: "); 15 num2 = Int32.Parse(Console.ReadLine()); 16 Console.Clear(); 17 Console.WriteLine("\n MENU PRINCIPAL DE OPERACIONES MATEMATICAS:"); 18 Console.ForegroundColor = ConsoleColor.Blue; 19 Console.WriteLine("\n ==============================================="); 20 Console.WriteLine("\n"); 21 Console.WriteLine("\t1) Mayor de los 2"); 22 Console.WriteLine("\t2) Multiplo"); 23 Console.WriteLine("\t3) Potencia"); 24 Console.WriteLine("\n ==============================================="); 25 Console.ForegroundColor = ConsoleColor.Red; 26 Console.WriteLine("\n"); 27 Console.Write("\tDigitar la opción deseada [1..3]: "); 28 opcion = int.parse(console.readline()); 29 Console.WriteLine("\n"); 30 switch (opcion) 31 { 32 case 1: 33 mayor(num1,num2); 34 break; 35 case 2: 36 multiplo(num1,num2); 37 break; 38 case 3: 39 potencia(num1,num2); 40 break; 41 default: 42 Console.WriteLine("\tSe ha equivocado de opcion, solo acepta[1..3]"); 43 break; 44 } 45 Console.WriteLine("\n"); 46 Console.WriteLine("\t-->Fin del programa"); 47 Console.ReadKey(); 48 } 160
49 50 static void mayor(int32 a, Int32 b) 51 { 52 if (a > b) 53 { 54 Console.WriteLine("\tEl numero {0} es mayor que {1} ", a, b); 55 } 56 else 57 { 58 Console.WriteLine("\tEl numero {0} es mayor que {1} ", b, a); 59 } 60 } 61 static void multiplo(int32 a, Int32 b) 62 { 63 Int32 w; 64 w = (a%b); 65 if (w == 0) 66 { 67 Console.WriteLine("\tEl numero {0} es multiplo de {1} ", a, b); 68 } 69 else 70 { 71 Console.WriteLine("\tEl numero {0} no es multiplo de {1} ", b, a); 72 } 73 } 74 static void potencia(int32 a, Int32 b) 75 { 76 Double s; 77 s = Math.Pow(a,b); 78 Console.WriteLine("\tEl numero {0} a la potencia de {1} es: {2}",a,b,s); 79 } 161
162
Análisis de Resultados 1. Crear un programa que solicite el año de nacimiento de una persona y retorne la edad haciendo uso de procedimientos. 2. Desarrollar un programa que implemente una función para convertir coordenadas polares a rectangulares. Debe tener en cuenta lo siguiente: x = rcos(θ) ; y = rsen(θ) 3. Cree un programa que contenga el siguiente menú: a) Dividir. b) Obtener cubo. c) Cálculo de IMC (Índice de Masa Corporal). d) Salir. Consideraciones: El menú debe permanecer disponible hasta que el usuario elija la opción d. Utilizar una función o procedimiento para cada opción. Para la opción d, utilice la fórmula: IMC = Peso[Kg] / Altura 2 [Metros]. Investigación Complementaria 1. Escribir un programa que lea dos números desde teclado (x y n) e implemente una función para calcular la siguiente progresión: 1 + X + X 2 + X 3 + + X n 2. Escribir un programa que permita al usuario elegir el cálculo del área de cualquiera de las figuras geométricas: circulo, cuadrado, rectángulo o triangulo, mediante procedimientos o funciones. No se le olvide presentarlo en un menú. Bibliografía Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007. 163