UNP.
PROGRAMACION VISUAL
17. Estructura de Datos
Permite procesar una colección de datos que están relacionados entre sí, por ejemplo
la lista de notas de alumnos, procesar esta lista de forma independiente con variables
simples sería muy difícil, por el contrario las estructuras de datos facilitan la
manipulación y organización.
Se subdividen en:
Estáticas: Espacio fijo establecido de memoria.
Arrays (Vectores y Matrices)
Cadenas
Registros
Ficheros
Dinámicas: Sin restricciones y limitaciones en el espacio usado en memoria.
Listas (Pilas y colas)
Listas enlazadas
Árboles
Grafos
Arrays - Arreglos
Es un conjunto finito y ordenado de datos homogéneos.
Los arreglos pueden ser de una dimensión (vector), dos dimensiones (matriz) y “n”
dimensiones (matriz multidimensional)
Sintáxis Vector
Problema 15
Implementar un vector para almacenar las notas del curso de matemática de 5
alumnos; al final mostrar el promedio de esas notas.
V 0
0 14
1 15
2 13
3 11
4 16
Formulario:
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Código del Botón ingresar
private void btnCargar_Click(object sender, EventArgs e)
{ //Declaración de variables
int[] notas = new int[7];
notas[0] = 14;
notas[1] = 15;
notas[2] = 13;
notas[3] = 11;
notas[4] = 16;
notas[5] = 18;
notas[6] = 19;
int suma = 0;
double promedio;
//Proceso
//Limpiar los datos del ComboBox
cboNotas.Items.Clear();
//Calcular la suma de todos los valores
for(int i=0;i<=6;i++)
{ //Mostrando en el Combobox
cboNotas.Items.Add(notas[i]);
suma = suma + notas[i];
}
promedio = suma / 7;
//Salida de Información
txtPromedio.Text = Convert.ToString(promedio);
}
Código del botón nuevo
private void btnNuevo_Click(object sender, EventArgs e)
{
cboNotas.Items.Clear();
txtPromedio.Clear();
}
Código del botón salir
private void btnSalir_Click(object sender, EventArgs e)
{
Close();
}
18. Arrays - Arreglos
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Es un conjunto finito y ordenado de datos homogéneos.
Los arreglos pueden ser de una dimensión (vector), dos dimensiones (matriz) y “n”
dimensiones (matriz multidimensional)
Sintáxis Vector
Problema 16
Implementar un programa que permita gestionar los gastos de los “n” días de una
persona, los gastos se deben de ingresar con un inputBox; al final se deberá mostrar
el total de gastos y que día se hizo el mayor gasto.
V 0
Día 01 100
Día 02 85
Día 03 19
Día 04 110
Día 05 106
Día 06 108
Día 07 95
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Formulario:
Código del botón Ingresar
private void btnCargar_Click(object sender, EventArgs e)
{
//Declaración de variables
double[] vGastos;
double gasto,totalGasto, diaMayor, gastoMayor;
int cantDias;
//Entrada de datos
cantDias = Convert.ToInt32(txtCantDias.Text);
//Declaramos el total de valores del vector
vGastos = new double[cantDias];
//Empezamos a leer los gastos
for (int dia=1;dia<=cantDias;dia++)
{
//Agregamos la referencia a vb para utilizar Inputbox
gasto
= Convert.ToDouble(Microsoft.VisualBasic.Interaction.InputBox("Ingrese el gasto del
dia " + dia, "Gastos"));
//Almacenamos el valor en el vector
//como el vector inicializa en cero
//y los dias en 1 pues restamos 1
vGastos[dia - 1] = gasto;
H.A.P.Z.
UNP. PROGRAMACION VISUAL
}
//Ya tenemos todo el vector almacenado
//Ahora vamos a calcular el total de gastos,
//el gasto mayo y mostrar lo gastos
//Inicialemte el gasto mayor cera 0
//el total de gastos 0
gastoMayor = 0;
totalGasto = 0;
diaMayor = 1;
for(int i=0;i<cantDias;i++)
{
//Evaluamos el gasto mayor
if (vGastos[i]>gastoMayor)
{
gastoMayor = vGastos[i];
diaMayor = i + 1;
}
//Calculamos el total
totalGasto = totalGasto + vGastos[i];
//Mostrmos los gastos en el combobox
cboGastos.Items.Add("Día " + (i + 1) + " Total: " + vGastos[i]);
}
//Mostramos el resultado final
txtGastoMayor.Text = Convert.ToString(gastoMayor);
txtTotalGasto.Text = Convert.ToString(totalGasto);
txtDiaMayor.Text = "Día " + Convert.ToString(diaMayor);
Código del botón Nuevo
private void btnNuevo_Click(object sender, EventArgs e)
{
txtDiaMayor.Clear();
txtGastoMayor.Clear();
txtTotalGasto.Clear();
txtCantDias.Clear();
cboGastos.Items.Clear();
}
Código del botón Salir
private void btnSalir_Click(object sender, EventArgs e)
{
Close();
H.A.P.Z.
UNP. PROGRAMACION VISUAL
19. Arrays - Arreglos
Es un conjunto finito y ordenado de datos homogéneos.
Los arreglos pueden ser de una dimensión (vector), dos dimensiones (matriz) y “n”
dimensiones (matriz multidimensional).
Sintáxis Matriz Multidimensional
Problema 17
Implementar una programa para registrar los datos de venta de un restaurant, se debe
almacenar en una matriz el nombre del plato, su precio, y la cantidad disponible.
El programa permitirá realizar búsquedas por el nombre del plato, si existe el plato
buscado nos mostrará su precio y la cantidad disponible para vender, el stock se debe
de actualizar por cada venta.
V 0 1 2
0 Arroz $5 10
1 Fideos $4 15
2 Gaseosa $2 20
3 Vino $50 5
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Formulario:
Código del Formulario (Declaración de variables de ámbito de clase)
public FrmRestaurant()
{
InitializeComponent();
btnVender.Enabled = false;
}
private string[,] mPlatos;
private int cantPlatos;
private int index;
private int encuentra=0;
Código del botón Cargar
private void btnCargar_Click(object sender, EventArgs e)
{ //Entrada de Datos
cantPlatos=Convert.ToInt32(txtCantPlatos.Text);
//Inicializamos la matriz
mPlatos = new string[cantPlatos, 3];
//Ingresamos datos a la matriz con un inputBox
//Para ingresar datos a la matriz
for (int i = 0; i < cantPlatos;i++ )
{
mPlatos[i, 0] = Microsoft.VisualBasic.Interaction.InputBox("Ingrese
Nombre del plato "+(i+1),"Restaurant");
mPlatos[i, 1] = Microsoft.VisualBasic.Interaction.InputBox("Ingrese Precio
del plato " +( i+1), "Restaurant");
mPlatos[i, 2] = Microsoft.VisualBasic.Interaction.InputBox("Ingrese
Cantidad disponible del plato " + (i+1), "Restaurant");
}
}
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Código del Botón Buscar
private void btnBuscar_Click(object sender, EventArgs e)
{
//Declaración de variables
string plato;
//Entrada de Datos
plato = txtPlato.Text;
//Filtramos el plato en la matriz
for(int i=0;i<cantPlatos;i++)
{
if(mPlatos[i,0].Equals(plato))
{
txtPrecio.Text = mPlatos[i, 1];
txtDisponible.Text = mPlatos[i, 2];
index = i;
btnVender.Enabled=true;
encuentra = 1;
}
}
if (encuentra == 0)
{
MessageBox.Show("No existe el
plato", "Restaurant", MessageBoxButtons.OK,MessageBoxIcon.Error);
btnVender.Enabled = false;
}
}
Código del Botón Vender
private void btnVender_Click(object sender, EventArgs e)
{
//Declaración de variables
int cant,stock;
//Entrada de Datos
cant = Convert.ToInt32(txtCant.Text);
stock = Convert.ToInt32(txtDisponible.Text);
if (cant<=stock)
{
//Disminuimos el stock de ese plato
mPlatos[index, 2] = Convert.ToString(stock - cant);
}
else
{
MessageBox.Show("No hay Suficiente
Stock", "Restaurant",MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
}
H.A.P.Z.
UNP. PROGRAMACION VISUAL
20. Funciones con cadenas de caracteres (string)
El lenguaje de programación c# tiene algunas funciones para realizar operaciones con
cadenas de caracteres (string), que nos pueden ser muy útiles. Vamos a revisar algunas
de ellas:
Length: Permite obtener la longitud de la cadena.
SubString: Recupera una subcadena indicándole la ubicación inicial y la cadena de
caracteres.
IndexOf: Devuelve el índice de un carácter específico.
ToUpper: Convierte a mayúscula los caracteres de la cadena.
ToLower: Convierte a minúscula los caracteres de la cadena.
Replace: Reemplaza un carácter o caracteres de una cadena por otros caracteres.
Problema 18: Diseñar una aplicación en c#, donde se ingrese una cadena de caracteres
y se implementen funciones de cadenas (String).
Formulario:
Código del botón Procesar
private void btnProcesar_Click(object sender, EventArgs e)
{ string cadena = txtCadena.Text;
//Calculamos la longitud de la cadena
txtLongitud.Text = Convert.ToString(cadena.Length);
//Mostramos el primer caracter
txtPrimer.Text = cadena.Substring(0, 1);
//Mostramos el último caracter
txtUltimo.Text = cadena.Substring(cadena.Length - 1, 1);
//Mostramos el del segundo al sexto caracter
txt26.Text = cadena.Substring(2, 6);
H.A.P.Z.
UNP. PROGRAMACION VISUAL
//Buscamos la posición de la primera letra "A" o "a"
txtA.Text = Convert.ToString(cadena.IndexOf("A", 0)+1);
//Convertimos las letras a mayúsculas
txtMay.Text = cadena.ToUpper();
//Convertimos las letras a minúsuculas
txtMin.Text = cadena.ToLower();
//Eliminar caracteres en blanco
txtBorrarEspacios.Text = cadena.Replace(" ","");
}
21. Procedimientos y Funciones
Todas las instrucciones deben estar incluidas en un procedimiento o función, a las que
llamaremos mediante su identificador.
En C# tenemos 4 tipos:
Los procedimientos que ejecutan un código a petición sin devolver ningún resultado.
Las funciones que ejecutan un código y devuelven el resultado al código que las llamó.
Los procedimientos de propiedades que permiten manejar las propiedades de los
objetos creados.
Los procedimientos de operador utilizados para modificar el funcionamiento de un
operador cuando se aplica a una clase o una estructura.
Procedimientos
La visibilidad de un procedimiento viene determinada por la declaración private, public
o internal. Por defecto si no se indica nada se entiende que es public.
Un procedimiento puede recibir o no parámetros, ejecuta instrucciones, pero nunca
retorna ningún valor.
Sintáxis
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Formulario
Código del botón Limpiar
private void btnLimpiar_Click(object sender, EventArgs e)
{
//LLamamos al procedimiento limpiar
limpiar();
}
Procedimiento limpiar
//Procedimiento limpiar, para dejar vacías las cajas de texto
private void limpiar()
{ txtNumero1.Clear();
txtNumero2.Clear();
txtResultado.Clear();
}
Funciones
Una función puede recibir o no parámetros, ejecuta ciertas instrucciones y la ejecución
return devuelve un valor de salida de la función.
Sintáxis Función:
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Código funciones
//Función sumar que recibe 2 parámetros de entrada
private int sumar(int num1, int num2)
{
int resultado = num1 + num2;
return resultado;
}
private void btnSumar_Click(object sender, EventArgs e)
{
//Función operaciones que recibe 3 parámetros de entrada
private int operaciones(int num1, int num2, string op)
{
int resultado;
if (op == "s")
{
resultado = num1 + num2;
}
else if (op == "r")
{
resultado = num1 - num2;
}
else if (op == "m")
{
resultado = num1 * num2;
}
else
{
resultado = num1 / num2;
}
return resultado;
}
Código del botón Sumar
private void btnSumar_Click(object sender, EventArgs e)
{
//Declaración de variables
int numero1;
int numero2;
int suma;
//Entrada de datos
numero1=Convert.ToInt32(txtNumero1.Text);
numero2= Convert.ToInt32(txtNumero2.Text);
//Asignamos a la variable suma el valor retornado de la función sumar
suma = sumar(numero1,numero2);
txtResultado.Text=Convert.ToString(suma);
}
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Codigo del botón Restar
private void btnRestar_Click(object sender, EventArgs e)
{
int numero1;
int numero2;
double resta;
//Entrada de datos
numero1 = Convert.ToInt32(txtNumero1.Text);
numero2 = Convert.ToInt32(txtNumero2.Text);
//Asignamos a la variable resta el valor retornado de la función operaciones, le
envíamos como operación la "r" de resta
resta = operaciones(numero1, numero2,"r");
txtResultado.Text = Convert.ToString(resta);
}
Código del botón Multiplicar
private void btnMultiplicar_Click(object sender, EventArgs e)
{ int numero1;
int numero2;
int resultado;
//Entrada de datos
numero1 = Convert.ToInt32(txtNumero1.Text);
numero2 = Convert.ToInt32(txtNumero2.Text);
//Asignamos a la variable mult el valor retornado de la función operaciones, le
envíamos como operación la "m" de resta
resultado= operaciones(numero1, numero2,"m");
txtResultado.Text = Convert.ToString(resultado);
}
Código del Botón Dividir
private void btnDividir_Click(object sender, EventArgs e)
{
int numero1;
int numero2;
double resultado;
//Entrada de datos
numero1 = Convert.ToInt32(txtNumero1.Text);
numero2 = Convert.ToInt32(txtNumero2.Text);
//Asignamos a la variable mult el valor retornado de la función operaciones, le
envíamos como operación la "m" de resta
resultado= operaciones(numero1, numero2,"d");
txtResultado.Text = Convert.ToString(resultado);
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Procedimiento de Propiedades
Estos procedimientos se llaman “encapsuladores” ya que el valor de la propiedad se
encapsula. Se utilizarán cuando queramos modificar y/o recuperar un valor (Set / Get).
Declaramos dos variables privadas de ámbito
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Procedimientosyfunciones2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Declaramos las variables para crear sus propiedades
private int _numero1;
private int _numero2;
private int _resultado;
//Propiedad Numero1 para encapsular la variable _numero1
public int Numero1
{
get { return _numero1; }
H.A.P.Z.
UNP. PROGRAMACION VISUAL
set { _numero1 = value; }
}
//Propiedad Numero2 para encapsular la variable _numero2
public int Numero2
{
get { return _numero2; }
set { _numero2 = value; }
}
//Propiedad Resultado para encapsular la variable _resultado
public int Resultado
{
get { return _resultado; }
set { _resultado = value; }
}
}
Agregamos un nuevo botón llamado btnPropiedades
private void btnPropiedades_Click(object sender, EventArgs e)
{
Numero1=10;
Numero2=30;
int suma;
Suma=Numero1 + Numero2;
txtResultado.Text=Convert.ToString(suma);
}
}
}
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Procedimiento de Operadores
Permite la redifinición de un operador estándar del lenguaje para utilizarlo en tipo
personalizados (clase o estructura).
Declaramos nuestra estructura cliente
struct cliente
{
public string nombre;
public string apellidos;
public string telefono;
}
Agregamos un nuevo botón llamado btnEstructura
private void btnEstructura_Click(object sender, EventArgs e)
{
cliente cliente1;
cliente1.nombre = "Juan";
cliente1.apellidos = "Carlos";
cliente1.telefono = "979026684";
}
22. Procedimientos y Funciones
Problema 19:
Diseñar y programar una aplicación que permita gestionar los retiros y depósitos de la
cuenta bancaria de un cliente.
Se debe primero ingresar los datos del cliente y cuál es el monto de apertura de la
cuenta de ahorros.
El cliente puede realizar "n" depósitos, almacenándolos en su cuenta de ahorros.
El cliente puede realizar "n" retiros, pero siempre que se realiza el retiro se debe de
tener en cuenta inicialmente que el monto de retiro sea menor al dinero almacenado en
la cuenta de ahorros.
Se debe de mostrar el historial de depósitos y retiros.
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Formulario:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Procedimientosyfunciones2
{
public partial class frmCuentaAhorros : Form
{
public frmCuentaAhorros()
{
InitializeComponent();
//Llamamos al método para desactivar los controles específicos
desactivarControles();
}
private Double monto;
private void groupBox2_Enter(object sender, EventArgs e)
{
private void label1_Click(object sender, EventArgs e)
{
H.A.P.Z.
UNP. PROGRAMACION VISUAL
private void btnAbrir_Click(object sender, EventArgs e)
{
string cliente;
cliente = txtCliente.Text;
//Leemos el monto a depositar
monto = Convert.ToDouble(txtMonto.Text);
if (monto >= 0)
{
//Activamos los controles si el monto de depósito es correcto
activarControles();
}
else
{
//Mostramos un mensaje de error si el monto inicial es cero o negativo
MessageBox.Show("El monto debe ser mayor a cero", "Gestión de
Ahorros",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void activarControles()
{
//Procedimiento que permite activar los controles
txtCliente.Enabled = false;
txtMonto.Enabled = false;
btnAbrir.Enabled = false;
btnRetiros.Enabled = true;
btnDepositos.Enabled = true;
}
private void desactivarControles()
{
//Procedimiento que permite desactivar los controles
txtCliente.Enabled = true;
txtMonto.Enabled = true;
btnAbrir.Enabled = true;
btnRetiros.Enabled = false;
btnDepositos.Enabled = false;
}
private Double leer(string mensaje)
{
//Leemos la cantidad a retirar o depositar con un InputBox
Double cantidad;
cantidad
= Convert.ToDouble(Microsoft.VisualBasic.Interaction.InputBox("Ingrese monto a " +
mensaje, "Gestión de Ahorros", "0", 100, 0));
return cantidad;
}
private void mostrar()
{
//procedimiento que permite mostrar el monto actual
txtSaldo.Text = Convert.ToString(monto);
}
H.A.P.Z.
UNP. PROGRAMACION VISUAL
Código Botón Depositos
private void btnDepositos_Click(object sender, EventArgs e)
{
Double deposito;
//Llamamos a la función leer y le enviamos como cadena la palabra "Depositar"
deposito = leer("depositar");
monto = monto + deposito;
lstDepositos.Items.Add(deposito);
mostrar();
}
Código del Botón Retiros
private void btnRetiros_Click(object sender, EventArgs e)
{
Double retiro;
//Llamamos a la función leer y le enviamos como cadena la palabra "Depositar"
retiro = leer("retirar");
//Si la cantidad a retirar es mayor al monto actual mostramos un error
if (retiro <= monto)
{
monto = monto - retiro;
lstRetiros.Items.Add(retiro);
mostrar();
}
else
{
MessageBox.Show("El cantidad a retirar excede el saldo", "Gestión de
Ahorros", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
H.A.P.Z.