Guia 4
Guia 4
Guia 4
I. OBJETIVOS
LAS FUNCIONES
Las funciones y métodos son elementos muy importantes de programación, estos serán utilizados frecuentemente
en C#, especialmente cuando se avance a la programación orientada a objetos.
Las funciones dan muchas ventajas y permiten desarrollar aplicaciones de forma más rápida y ordenada.
La función es un elemento del programa que contiene código y se puede ejecutar, es decir, llevar a cabo una función.
La función puede llamarse o invocarse cuando sea necesario y entonces el código que se encuentra en su interior se
ejecutará. Una vez que la función termina de ejecutarse, el programa continúa en la sentencia siguiente de donde
fue llamada (Ver la figura 1).
Figura 1.
1
Guía # 04: Creación de Métodos en C#
Es importante seleccionar correctamente el nombre de la función. Éste debe hacer referencia al tipo de trabajo que
lleva a cabo la función.
Uno de los principales beneficios del uso de funciones y procedimientos es la reutilización de código. Los
procedimientos creados en un programa se pueden utilizarse en otros programas o proyectos, frecuentemente con
poca o nula modificación. Los procedimientos son útiles para tareas repetidas o compartidas, como cálculos
utilizados frecuentemente.
Las funciones constan de cinco partes:
Modificador tipo nombre (parámetros)
{
Código
}
Las funciones pueden regresar información y ésta puede ser cadena, entero, flotante o cualquier otro tipo. En la
sección de tipo se tiene que indicar precisamente el tipo de información que regresa. Si la función no retorna ningún
valor, entonces se indica que el tipo de la función es void.
Las funciones pueden necesitar datos o información para trabajar, esa información se le da por medio de sus
parámetros, que son una lista de variables que reciben estos datos. Si la función no necesita utilizar parámetros,
entonces se pueden dejar los paréntesis vacíos. No se debe de olvidar colocar los paréntesis aunque no haya
parámetros.
Las funciones pueden tener 4 tipos de parámetros:
Parámetros de entrada: tienen valores que son enviados a la función pero la función no puede cambiar esos
valores.
Parámetros de salida: no tienen valor cuando son enviados a la función pero la función puede darles un
valor y enviar el valor de vuelta al invocador.
Parámetros por referencia: introducen una referencia en otro valor. Tienen un valor de entrada para la
función y ese valor puede ser cambiado dentro de la función.
Parámetros Params: definen un número variable de argumentos en una lista.
El código de la función se coloca adentro de un bloque de código. En esta sección se puede colocar cualquier código
válido de C#, es decir, declaración de variables, ciclos, estructuras selectivas e incluso invocaciones a funciones.
Al ser declarada una función puede llevar un modificador antes del tipo. Los modificadores cambian como trabaja
una función. Por ejemplo una función declarada con modificador conocido como static, permite utilizar la función
sin necesidad de declarar un objeto de la clase a la que pertenece, ver ejemplo 1.
Ejemplo1. claseOperaciones.cs
FUNCIONES INTRÍNSECAS
Las funciones intrínsecas son proporcionadas directamente por el lenguaje de programación. Las funciones más
comunes son las de conversión de tipos de datos y matemáticas, que ya se han visto en guías anteriores; las
funciones de fecha se verán en el procedimiento de esta guía.
Los procedimientos son las sentencias de código ejecutable de un programa. Las instrucciones de un procedimiento
están delimitadas por una instrucción de declaración y una llave de cierre.
En esta guía, aprenderemos a crear y utilizar Subrutinas y Funciones.
Procedimientos y funciones en C#
Todas las instrucciones deben estar incluidas en un procedimiento o función, a las que llamamos mediante un
identificador.
A estas funciones y procedimientos podemos pasarles datos por medio de parámetros.
Procedimiento
Realizan acciones pero no devuelven un valor al procedimiento que origina la llamada.
Cuando un procedimiento llama a otro procedimiento, se transfiere el control al segundo procedimiento. Luego, al
finaliza la ejecución del código del segundo procedimiento, éste devuelve el control al procedimiento que lo invocó.
public|private|internal void nombreProcedimiento(|lista de parametros|)
{
...
Codigo a ejecutar por el procedimiento
...
}
La visibilidad de un procedimiento se determina por las palabras reservadas: private, public o internal.
Si no se indica la visibilidad, por defecto se establece que es public
Los controladores de eventos son ejemplos de procedimientos, que se ejecutan en respuesta a un evento.
Función
Es similar a un procedimiento, pero al finalizar, devuelve un resultado al código que la invoca. La ejecución de
return provoca la salida de la función.
public|private|internal tipodatoretorno nombreFuncion(|lista de parametros|)
{
Codigo a ejecutar por la funcion
return (valor_a_Retornar);
...
}
El valor que devuelve una función al programa que origina la llamada se denomina valor de retorno.
La instrucción return especifica el valor devuelto, y devuelve el control inmediatamente a programa que origina la
llamada. La instrucción return provoca la salida inmediata de una función.
Pueden utilizarse cualquier número de instrucciones return dentro de una función.
Procedimiento de propiedad
Se utilizan cuando se requiere modificar y/o recuperar un valor (set / get) desde el interior de un Objeto.
get {
...
//código que se ejecuta cuando se lee la propiedad
...
return variable;
}
set {
...
//código que se ejecuta durante la asignación de una propiedad
//Existe una variable que se declara implícitamente y que contiene
//el valor que se debe asignar a la propiedad
...
variable = value;
...
}
}
Se puede crear una propiedad de sólo lectura o sólo escritura, eliminando el bloque set y/o get correspondiente.
También, puede implementar automáticamente la encapsulación cuando no haya tratamiento alguno de la
siguiente manera.
public int tasa { get; set; }
Procedimiento de operador
Permite redefinir a un operador estándar del lenguaje C# para utilizarlo en tipos personalizados (como clases o
estructuras).
Además, definimos el modo en el que otros procedimientos pueden pasar argumentos al nuevo procedimiento.
Podemos escoger pasar argumentos por referencia (con uso de palabras ref o también out) o por valor.
Declarando Parámetros
Cada parámetro de un procedimiento se declara del mismo modo en que declaramos una variable, especificando
el nombre del parámetro y su tipo de datos. También podemos especificar el mecanismo de paso y si el parámetro
es opcional.
La sintaxis para cada parámetro de un procedimiento es como sigue:
{ ref | out } TipodeDato nombreparametro
O sino, como un arreglo de parámetros variables
[TipodeDato] { param [ ] } nombreparametro
En donde:
Param [ ]: utilizado para indicar una lista opcional de parámetros. Proporciona una forma de pasar un
numero arbitrario de argumentos
No es necesario que los nombres de argumentos utilizados cuando se invoca un procedimiento coincidan
con los nombres de parámetros utilizados para definir el procedimiento.
Por valor
Se hace una copia del valor de un argumento hacia el parámetro del procedimiento/función que se invoca.
Si se efectúa un cambio al parámetro en el procedimiento, solo tendrá efecto dentro del procedimiento/función y
no se altera la variable del argumento.
La transferencia por valor es la forma predeterminada para enviar valores enteros o decimales, booleanos y
estructuras definidas por el usuario. Los demás tipos se pasan por referencia.
En el siguiente ejemplo, el procedimiento vernombre está diseñado para tomar un argumento Name de tipo String
por valor desde un procedimiento de llamada.
public void vernombre(string Name){
MessageBox.Show(Name);
}
Por referencia
Se le pasa la dirección de memoria a la que apunta la variable argumento de forma que el procedimiento o función
pueden manipular directamente el valor de esa variable. De esta forma, un procedimiento puede modificar las
variables enviadas como argumentos.
Un parámetro por referencia se crea con el uso de las palabras reservadas ref o out.
La etiqueta ref se debe utilizar tanto en la lista de parámetros de la función o procedimiento, como en la propia
llamada a la función o procedimiento y además debe ser inicializada.
Por el contrario, la etiqueta “out” funciona de igual manera pero sin la exigencia de inicializar la variable
Ejemplo:
Declaración de procedimientos con parámetros:
//******Parametros por valor******
private void ProcEjemplo1(int variable) {
//Instrucciones a ejecutarse
}
Parámetros opcionales
Se puede indicar que un parámetro es opcional asignándole un valor, pero con la precaución de asignar también a
todos los parámetros restantes un valor ya que al declarar un parámetro como opcional, el resto de parámetros se
vuelven opcionales también.
Ejemplos:
double calculoNeto(double Pbruto, double Tasa = 21)
Nos hemos dado cuenta que podemos transferir datos contenidos en variable entre procedimientos y funciones;
pero también podemos enviar y recibir Arreglos esto lo hacemos de la siguiente manera:
Como verán al crear el procedimiento (también en función). Para realizar un llamado y enviar un vector o arreglo
no necesita indicar el índice
private void Form1_Load(object sender, EventArgs e)
{
int[] datos= new int[2];
datos[0] = 1;
datos[1] = 2;
ProcesoVoid(datos);
}
La palabra clave params permite a una función aceptar un número variable de argumentos.
Un parámetro params debe declararse como un tipo de matriz unidimensional.
Utilice la palabra clave params para denotar una matriz de parámetros. Se aplica las siguientes reglas:
Un procedimiento sólo puede tener una matriz de parámetros, que debe ser el último parámetro de la definición
del procedimiento.
La matriz de parámetros debe pasarse por valor. Es un hábito de programación recomendado incluir de manera
explícita la palabra clave int, string, long, etc.. en la definición del procedimiento.
El código del procedimiento debe considerar a la matriz de parámetros una matriz unidimensional; el tipo de datos
de los elementos de la matriz ha de ser el mismo que el tipo de datos de params.
La matriz de parámetros es opcional de forma automática. Su valor predeterminado es una matriz
unidimensional vacía del tipo de elemento de la matriz de parámetros.
Todos los argumentos que preceden a la matriz de parámetros deben ser obligatorios. La matriz de parámetros
debe ser el único argumento opcional.
Cuando uno de los argumentos del procedimiento al que se llame sea una matriz de parámetros, ésta podrá tomar
cualquiera de estos valores:
Ninguno, es decir, puede omitirse el argumento params. En este caso, se pasará una matriz vacía al
procedimiento
Una lista con un número de argumentos indeterminado, separados por comas. El tipo de los datos de cada
argumento debe poder convertirse implícitamente al tipo de elemento params.
double Resultado;
Resultado = media(1,4,67,23.3, 9.8);
Resultado = media(23,69);
IV. PROCEDIMIENTO
Prepare un nuevo proyecto de Visual Studio 2012.net y guárdelo en la ubicación de su preferencia, para luego
asignarle el nombre de Practica04deLP1
EJERCICIO 1:
Elabore un programa que permita generar la tabla de multiplicar y de potencias para un numero N dado por
usuario. El numero N solo puede variar entre 2.0 y 6.9
* Nota: No puede usar operador matematico potencia (^) ni funciones de math
1. Seleccione la propiedad (Name) del formulario actual y cambie valor por frmGuia04ejerc1
2. En este primer formulario, utilice los controles mostrados en el diseño de pantalla de la figura 1.1. Tenga
cuidado de colocar primero al GroupBox y luego ubicar sobre este a los 2 listbox, con el fin que estos ultimos
se integren al control contenedor.
3. Luego alterar las propiedades de los controles según valores de la tabla 1.1.
Propiedades
(Control) (name) Text Maximum Minimum Increment DecimalPlaces
Label1 lbltema Ingrese número
Button1 btnCalculo Ver tablas
Button2 btnSalir Finalizar
NumericUpDown1 nupBase 6.9 2 0.1 1
GroupBox1 grbResult Resultados
ListBox1 lstTabla1
ListBox2 lstTabla2
Tabla 1.1: lista de objetos y propiedades a modificar de Form Ejercicio 1
4. Ingrese al editor de código, y seleccione la ubicación (Partial class) de la clase (frmGuia04ejerc0). Luego
digite las siguientes subrutinas:
//creacion de subrutina a utilizar
lstTabla1.Items.Clear();
c = 1;
do
{
res = N * c;
lstTabla1.Items.Add(N.ToString() + "X" +c.ToString()+"="+res.ToString());
c += 1;
} while (! (c > 10));
do{
res = Elevar(N, c);
lstTabla2.Items.Add(N.ToString() + " a la " + c.ToString() + "=" + res.ToString());
c += 1;
}while(c<= 10);
i += 1;
}while(!(i>expo));
return r;
}
Objeto Evento
btnCalculo Click
//Invoca a subrituna HacerCalculos
decimal n = nupBase.Value;
HacerCalculos(n);
//Muestra resultados
grbResult.Visible = true;
btnSalir Click
Instrucción para finalizar aplicación.
(Form1 eventos) Load
Llamar a función presentacInic.
5. Ahora ejecute el software, escriba un número (entre 2.0 a 6.9), directamente o utilizando las flechas del
control. Presione el botón de cálculos y se mostrara el objeto contenedor con ambas listas
6. Escriba un nuevo valor para N y presione otra vez el botón de cálculos.
7. Analice los resultados obtenidos y presione el 2do boton del form, para terminar ejecución de este ejemplo.
EJERCICIO 2:
Elabore un programa que permita registrar los diferentes montos ($) de ventas realizadas durante el año 2010, para
luego determinar los Montos de ventas ($) generados por cada trimestre de ese año
Notas:
Se utilizara 2 controles nuevos: DataGridView y MaskedTextBox
Desde la ventana del Explorador de soluciones, de clic secundario en el nombre de la solucion y agregue
un nuevo Formulario. Guárdelo bajo el nombre frmGuia04ejerc2.vb
Ingrese a las propiedades del proyecto e seleccione a este nuevo form (frmGuia04ejerc2) como Formulario
de inicio.
Guarde los cambios y ejecute el programa, confirme que arranca con el nuevo form!!
Retorne al modo Diseño y utilice los controles indicados en la figura 1.2 para el diseño de pantalla a
implementar en este segundo ejemplo.
8. Al igual que en el diseño del Form del ejemplo anterior, tenga cuidado en lo siguiente:
a) Colocar primero a controles contenedores (GroupBox1 y TabControl1)
b) Ubicar controles DataGridView1 y Button2 en la Página TabPage1 del contenedor TabControl1 y el resto
en área del otro contenedor GroupBox1
c) (IMPORTANTE, no se muestra en imagen): faltan 2 controles más (una Label3 y un Listbox1), los cuales
deben agregarse en la Página TabPage2 del contenedor TabControl1
9. Por esta vez, no se harán cambios a los nombres de los objetos, con el fin de familiarizarse con los nuevos
controles y sus objetos/propiedades/métodos, especialmente el DataGridView
10. Modifique las propiedades de los controles definidos en tabla 1.2
Propiedades
(Control) Text Mask
Label1 Monto Venta ($)
Label2 Fecha Venta
Button1 Registrar
Groupbox1 Detalle de Venta
Button2 Ver Resumen Ventas
MaskedTextBox1 00000.00
Objeto Evento
Button1 Click
Llamar a función ValidarDatos.
Button2 Click
Llamar a función EvaluacionTrimestral.
Copiar siguiente código:
//Mostrara a la pagina2 del tabControl1
tabControl1.SelectedIndex =1;
//Bloquea ingreso a controles del contenedor Groupbox
groupBox1.Enabled = false;
btnSalir Click
Instrucción para finalizar aplicación.
maskedTextBox1 KeyPress
Digitar el siguiente código:
//Valida que solo se ingrese numero en el maskedTextBox
if (Char.IsNumber(e.KeyChar))
{
e.Handled = false;
}
else {
EJERCICIO 3:
Elaborar una aplicación Windows en la cual se calculen las 4 operaciones matemáticas básicas (suma, resta,
multiplicación, división) y la potencia.
Importante:
Observe los siguientes aspectos en la solución
Código se documenta ya sea línea x línea o por bloques, con explicaciones técnicas comprensibles para otros
programadores
Se redactan primero los procedimientos controlados por evento y luego se agregan los que usted cree para esta
aplicación
Se utilizan procedimientos tipo subrutinas (void) y funciones (return), con o sin parámetros.
Algunos argumentos son enviados/pasados por valor u otros por referencia (ref)
Observe el diseño de c/procedimiento a continuación, los cuales demuestran las diferentes combinaciones a
crear con los elementos anteriores.
1. Proceda a crear el siguiente diseño de pantalla en el formulario Form1. Luego asigne las propiedades
indicadas en la tabla.
NumericUpDown
ComboBox
Control Propiedad(Name)
ComboBox1 cmbOperaciones
Label4 lblResul
NumericUpDown1 nudN1
nudN2.Minimum = -20;
nudN2.Maximum = 35;
nudN2.DecimalPlaces = 1;
nudN2.Increment = 2;
//Define presentacion de control cmbOperaciones
cmbOperaciones.Items.Add("1. Suma");
cmbOperaciones.Items.Add("2. Resta");
cmbOperaciones.Items.Add("3. Multiplicación");
cmbOperaciones.Items.Add("4. División");
cmbOperaciones.Items.Add("5. Potencia");
//Listado será solo selección (solo lectura) de valores del combobox
cmbOperaciones.DropDownStyle = ComboBoxStyle.DropDownList;
lblResul.Text = "(RESULTADO)";
}
MostrarResultado(Potencia(Convert.ToDouble(nudN1.Value),Convert.ToDouble(nudN2.Value)),5);
break;
default:
MessageBox.Show("Operación solicitada no valida", "ERROR", MessageBoxButtons.OK,
MessageBoxIcon.Error);
break;
}
}
Objeto Evento
cmbOperaciones SelectedIndexChange
Digitar el siguiente código:
/*Hace operaciones matematicas especifica cuando usuario selecciona item del combo*/
int nop;/*num de operacion selecciona en comobo
toma indice(0-4) seleccionado actualmente del cmboperaciones,
para obtener num operacion solicitada*/
nop = cmbOperaciones.SelectedIndex + 1;
//procede a realizar operacion matematica indicada
HacerOperacion(nop);
EJERCICIO 4:
En este ejercicio se trabajará con tres formularios, de los cuales dos están desarrollados en esta guía práctica y el
tercero lo hará ud. tomando de referencia algunos puntos tocados en este formulario.
1. Proceda a crear el siguiente diseño de pantalla en el formulario Form1. Luego asigne las propiedades
indicadas en la tabla.
1 Form Login
2 groupBox1 Private
3 Label1 Usuario:
4 Label2 Password:
6 Textbox1 txtusuario
7 Textbox2 txtpwd
if (respuesta == DialogResult.OK)
{
/* Para llamar a otro formulario(Form5),se debe primero instancia al
nuevo formulario,o es decir creamos el objeto
* para nuestro caso formulario2 y luego accesamos al método show, para
mostrar el Form5*/
Form5 formulario2 = new Form5();//instanciando al Form
formulario2.Show(); // Mostramos el Form2
return true;
}
}//Fin de if
else {
MessageBox.Show("Contraseña
incorrecta","Acceso",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
return false;
}// Fin de Función
txtusuario.Focus();
btnAceptar Click
if( validar(txtusuario.Text, txtpwd.Text)){
// Se llama la función validar declarada.
this.Hide();
}// ocultamos el Form4
ASIGNACIÓN: Agregue el código necesario para incorporar las validaciones que se necesitan, para asegurar que
la información que ingrese el usuario sea válida, por ejemplo: que las dos casillas donde se pide información no
estén vacías, en caso de introducir contraseña incorrecta, enviar el focus al control, para que el usuario digite la
clave correcta y todas las que crea necesarias.
5. Agregar un nuevo formulario al proyecto (Este formulario será invocado por el primero, para simular los
montos a cancelar (facturación) por hospedaje en un lugar x).
Control: NumericUpDown
return calculo;
}
/* Usar CheckBox sin tanto if. Para ello se recorre la colección ControlCollection de la
propiedad Controls,
después se verifica si el control es un CheckBox y de serlo, verificar su valor.
Cuando damos click en el boton calcular se invoca esta función y se recorren todos los controles
del formulario,y si un control es un CheckBox, entonces se verifica su valor y si es verdadero
acumulamos el valor del servicio*/
From2 Load
txtnombre.Focus();
txtmontoh.Enabled = false;
txtmontos.Enabled = false;
txtmontot.Enabled = false;
txtinteres.Enabled = false;
nUDpagar.Enabled = false;
radioButton1.Checked = true;
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
button1 Click
button2 Click
txtnombre.Text = "";
txtnombre.Focus();
txtdias.Text = " ";
txtmontoh.Text = "";
txtmontos.Text ="";
txtmontot.Text = "";
txtinteres.Text = "";
nUDpagar.Value =0;
radioButton1.Checked = true;
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
Button4 Click
this.Close();
ASIGNACIÓN:
Agregue el código necesario para incorporar las validaciones que se necesitan, para asegurar que la información
que ingrese el usuario sea válida, por ejemplo:
Que las dos primeros Textbox donde se pide informacion, por ejemplo el Textbox donde se pide el número de días,
solo debe aceptar números enteros, debe seleccionar al menos un control de checkBox y todas las que crea
necesarias.
V. DISCUSION DE RESULTADOS
PROBLEMAS A RESOLVER:
Para los siguientes ejercicios, realizar un solo proyecto de Aplicación Windows, con la resolución de los
problemas en forms distintos:
1. Cree una serie de metodos, que reciban como parámetro a un vector unidimensional para simular el
funcionamiento de una Lista. Los métodos a implementar seran:
a) Crear lista vacia: Crea al vector recibido en un parametro con cero elementos.
b) Mostrar listado elementos de la lista: Recibe como parametros al arreglo que simula la Lista y un control
ListBox. Este retornara en ListBox recibido a los elementos existentes del listado.
c) Insertar elemento en lista: Recibe como parametros al arreglo que simula la lista y un valor a agregar.
El nuevo valor debe ser agregado al final del listado recibido.
d) Remover elemento: Elimina el primer elemento del vector recibido como parametro.
Importante:
* El arreglo que simula el listado de elementos solo puede transferirse en forma de parametros.
* Para modificar el tamaño del vector, investigue a la clase Array.
* La demostración de cada método solicitado, se hará clic sobre un botón diferente. Si es necesario, en un
botón pueden invocarse varios de estos métodos, para demostrar el funcionamiento de uno de ellos.
2. Redactar un método que retorne a una matriz de 5X5, llena con números enteros aleatorios, cada uno de los
cuales estarán ubicados entre 2 numeros limites recibidos como parametros.
Cree otro método que reciba la matriz cuadrada generada previamente y la muestre en un Datagridview.
3. Escribir un método que reciba una lista de N notas numéricas (cada una solamente entre cero a 10.0) y un
control de ListBox.
El método mostrara en el cuadro ListBox a los siguientes resultados estadísticos:
a) Porcentaje de estudiantes Deficientes (con notas menores de 5.0)
b) Número de aprobados (con notas mayores o iguales a 6.0)
c) Identificar la nota más baja y la más alta del listado, así como la nota media de todo el grupo.
VI. BIBLIOGRAFÍA