lunes, 23 de marzo de 2009

Soluciones propuestas a evaluación 2, grupo 21

Hacer una aplicación que forme un vector del que no se sabe el número de elementos (el tamaño y los datos los indica el usuario). Calcule el promedio de todos los elementos e imprima dos nuevos arreglos, uno con los elementos menores o iguales al promedio y otro con los superiores.


int[] a;
int tamaño, posicion = 0, suma = 0,promedio;

private void btnTamaño_Click(object sender, EventArgs e)
{
tamaño = Convert.ToInt32(txtTamaño.Text);
a = new int[tamaño];
grpCrear.Enabled = false;
grpLlenar.Enabled = true;
}

private void btnLlenar_Click(object sender, EventArgs e)
{
if (posicion < tamaño)
{
a[posicion] = Convert.ToInt32(txtLlenar.Text);
suma += a[posicion];
txtLlenar.Clear();
txtLlenar.Focus();
posicion++;
}
if (posicion == tamaño)
{
grpLlenar.Enabled = false;
grpResultado.Enabled = true;
}
}

private void btnResultado_Click(object sender, EventArgs e)
{
promedio=suma/tamaño;
txtPromedio.Text = promedio.ToString();
for (posicion = 0; posicion < tamaño; posicion++)
{
lblVector.Text += a[posicion].ToString() + " ";
if (a[posicion] <= promedio)
{
lblMenores.Text += a[posicion].ToString() + " ";
}
else {
lblMayores.Text += a[posicion].ToString() + " ";
}
}
grpResultado.Enabled = false;
}

Elabore una aplicación que forme una matriz de orden NxM y la llene de datos enteros, (esta información la proporciona el programador), encuentre e imprima el elemento mayor y menbor, así como sus posiciones.

int[,] A = { {3,5,1},{-6,3,4},{8,0,4},{5,-7,3}};
int i, j,mayor,menor,fMayor,fMenor,cMayor,cMenor;

private void btnVerMatriz_Click(object sender, EventArgs e)
{
for(i=0;i<4;i++){
for(j= 0;j<3;j++){
txtMatriz.Text += A[i, j].ToString() + "\t";
}
txtMatriz.Text += "\r\n";
}
}

private void btnCalcular_Click(object sender, EventArgs e)
{
fMayor = fMenor = cMayor = cMenor = 0;
mayor = A[0, 0];
menor = A[0, 0];
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
if(A[i, j]>mayor){
mayor = A[i, j];
fMayor=i;
cMayor=j;
}
else if (A[i, j] < menor)
{
menor = A[i, j];
fMenor=i;
cMenor=j;
}
}
}
txtMayor.Text = mayor.ToString();
txtMenor.Text = menor.ToString();
txtPosMayor.Text = "[" + fMayor + "," + cMayor + "]";
txtPosMenor.Text = "[" + fMenor + "," + cMenor + "]";
}

Elabore una aplicación que forme una matriz de orden NxM y la llene de datos enteros, (esta información la proporciona el programador), a continuación obtenga e imprima:
* Número de valores iguales a cero
* Suma de todos los elementos de las filas impares

int[,] A = { { 3, 5, 0 }, { -6, 3, 4 }, { 8, 0, 4 }, { 5, -7, 3 }, { 3, 0, -8 }, { 5, 0, 7 }, { 1, 7, 0 } };
int i, j, numCeros = 0, sumaImpares = 0;
private void btnCalcular_Click(object sender, EventArgs e)
{
for (i = 0; i < 7; i++)
{
for (j = 0; j < 3; j++)
{
if (A[i, j] == 0)
{
numCeros += 1;
}
}
}
txtCeros.Text = numCeros.ToString();
}

private void btnSuma_Click(object sender, EventArgs e)
{
for (i = 0; i < 7; i += 2)
{
for (j = 0; j < 3; j++)
{
sumaImpares += A[i, j];

}
txtSuma.Text += sumaImpares.ToString() + " ";
sumaImpares = 0;
}
}

private void btnVerMatriz_Click(object sender, EventArgs e)
{
for (i = 0; i < 7; i++)
{
for (j = 0; j < 3; j++)
{
txtMatriz.Text += A[i, j].ToString() + "\t";
}
txtMatriz.Text += "\r\n";
}

}

miércoles, 18 de marzo de 2009

TALLER SOBRE OBJETOS

1. Cree una clase llamada Empleado, en la que existan los recursos necesarios para efectuar las siguientes acciones:
• Obtener el número de horas trabajadas por el empleado
• Obtener el valor de cada hora trabajada por el empleado
• Obtener el valor de la comisión del empleado
• Calcular y Entregar el pago total del empleado
• Obtener/Entregar el nombre del empleado (En C# esto es una propiedad)
Restricciones de implementación:
• Asuma que si el empleado trabajó más de 48 horas, las horas extra se le cancelan con un porcentaje del 50% adicional al valor de la hora normal.
• No deben existir valores negativos en los argumentos de llamada a los elementos de la clase.
• Se debe permitir al usuario decidir en qué momento desea terminar de ejecutar la aplicación.
Cree una clase llamada PruebaEmpleado que utilice la clase Empleado

2. Cree una clase llamada Poligonos, en la que existan los recursos necesarios para efectuar las siguientes acciones:
• Obtener el valor del lado de un cuadrado
• Obtener el valor del los dos lados diferentes de un rectángulo
• Obtener los dos valores (base y altura) de un triángulo
• Calcular y Entregar el área de un cuadrado
• Calcular y Entregar el área de un rectángulo
• Calcular y Entregar el área de un triángulo
Restricciones de implementación:
• No deben existir valores negativos en los argumentos de llamada a los elementos de la clase.
• Se debe permitir al usuario decidir en qué momento desea terminar de ejecutar la aplicación.
Cree una clase llamada PruebaFiguras que utilice la clase Poligonos

SOLUCIONES PROPUESTAS

Clase Empleado:
using System;

public class Empleado
{
private double horasT, valorH, comision,pago;
private String nEmpleado;

//Obtener el número de horas trabajadas por el empleado
public void ObtenerHoras(double h)
{
horasT = ((h>0)?h:0);
}

//Obtener el valor de cada hora trabajada por el empleado
public void ObtenerValor(double v)
{
valorH = ((v>0)?v:0);
}

//Obtener el valor de la comisión del empleado
public void ObtenerComision(double c)
{
comision = ((c>0)?c:0);
}

//Calcular y Entregar el pago total del empleado
public double PagoEmpleado()
{
/*Asuma que si el empleado trabajó más de 48 horas,
* las horas extra se le cancelan con un porcentaje
* del 50% adicional al valor de la hora normal.*/
if (horasT > 48)
{
pago = ((horasT - 48) * valorH * 1.5) + (48 * valorH) + comision; ;
}
else {
pago = horasT * valorH + comision;
}
return pago;
}

//Obtener/Entregar el nombre del empleado (En C# esto es una propiedad)
public String NombreEmpleado
{
get
{
return nEmpleado;
}
set
{
nEmpleado = value;
}
}
}


Clase PruebaEmpleado
using System;
public class PruebaEmpleado
{
public static void Main(string[] args) {
Empleado MiEmpleado = new Empleado();
String horas, valor, comision, menu,nombre;
double horasD, valorD, comisionD;
int seguir = 1, opcion;

while(seguir == 1){
Console.WriteLine("Seleccione una opción:\n1.Calcular pago\n2.Salir");
menu = Console.ReadLine();
opcion = Convert.ToInt32(menu);
switch (opcion)
{
case 1: Console.WriteLine("\n\nDigite su nombre");
nombre = Console.ReadLine();
MiEmpleado.NombreEmpleado = nombre;

Console.WriteLine("Digite el número de horas trabajadas");
horas = Console.ReadLine();
horasD = Convert.ToDouble(horas);
MiEmpleado.ObtenerHoras(horasD);

Console.WriteLine("Digite el valor de cada hora trabajada");
valor = Console.ReadLine();
valorD = Convert.ToDouble(valor);
MiEmpleado.ObtenerValor(valorD);

Console.WriteLine("Digite el valor de la comisión");
comision = Console.ReadLine();
comisionD = Convert.ToDouble(comision);
MiEmpleado.ObtenerComision(comisionD);

Console.WriteLine(MiEmpleado.NombreEmpleado + " su pago es: " + MiEmpleado.PagoEmpleado());
break;
case 2: seguir = 0;
break;
default: Console.WriteLine("Seleccione una opción válida");
break;
}//switch
}//while
}//Main
}//class


Clase Poligonos
using System;
public class Poligonos
{
private int ladoC, baseR, ladoR, baseT, ladoT;

//Obtener el valor del lado de un cuadrado
public void Cuadrado(int l)
{
ladoC = ((l>0)?l:0);
}

//Obtener el valor del los dos lados diferentes de un rectángulo
public void Rectangulo(int l1,int l2)
{
baseR = ((l1 > 0) ? l1 : 0);
ladoR = ((l2 > 0) ? l2 : 0);
}

//Obtener los dos valores (base y altura) de un triángulo
public void Triángulo(int l1, int l2)
{
baseT = ((l1 > 0) ? l1 : 0);
ladoT = ((l2 > 0) ? l2 : 0);
}

//Calcular y Entregar el área de un cuadrado
public int AreaCuadrado()
{
return ladoC*ladoC;
}

//Calcular y Entregar el área de un rectángulo
public int AreaRectangulo()
{
return ladoR * baseR;
}

//Calcular y Entregar el área de un triángulo
public int AreaTriangulo()
{
return (ladoT * baseT)/2;
}
}


Clase PruebaFiguras
using System;
public class PruebaFiguras
{
public static void Main(string[] args)
{
Poligonos MisPoligonos = new Poligonos();
String lado1, lado2,menu;
int l1, l2;
int seguir = 1, opcion;

while (seguir == 1)
{
Console.WriteLine("Seleccione una opción:\n1.Área cuadrado\n2.Área rectángulo\n3.Área triángulo\n4.Salir");
menu = Console.ReadLine();
opcion = Convert.ToInt32(menu);
switch (opcion)
{
case 1: Console.WriteLine("\n\nDigite el tamaño de un lado del cuadrado");
lado1 = Console.ReadLine();
l1 = Convert.ToInt32(lado1);
MisPoligonos.Cuadrado(l1);
Console.WriteLine("El área del cuadrado es : " + MisPoligonos.AreaCuadrado());
break;

case 2: Console.WriteLine("\n\nDigite el tamaño de la base del rectángulo");
lado1 = Console.ReadLine();
l1 = Convert.ToInt32(lado1);

Console.WriteLine("\n\nDigite el tamaño de uno de los lados del rectángulo");
lado2 = Console.ReadLine();
l2 = Convert.ToInt32(lado2);

MisPoligonos.Rectangulo(l1, l2);

Console.WriteLine("El área del rectángulo es : " + MisPoligonos.AreaRectangulo());
break;

case 3: Console.WriteLine("\n\nDigite el tamaño de la base del triángulo");
lado1 = Console.ReadLine();
l1 = Convert.ToInt32(lado1);

Console.WriteLine("\n\nDigite el tamaño de la altura del triángulo");
lado2 = Console.ReadLine();
l2 = Convert.ToInt32(lado2);

MisPoligonos.Triángulo(l1, l2);

Console.WriteLine("El área del triángulo es : " + MisPoligonos.AreaTriangulo());
break;

case 4: seguir = 0;
break;
default: Console.WriteLine("Seleccione una opción válida");
break;
}//switch
Console.WriteLine("\n\n\n");
}//while
}//Main
}//class

domingo, 1 de marzo de 2009

Ejercicios propuestos de arreglos

Ejercicios propuestos de arreglos unidimensionales y bidimensionales. (Tomados del libro Algoritmos estructurados 2ª edición, Autor: Efraín Oviedo R, Universidad de Antioquia). La versión completa se enccuentra en la siguiente dirección: http://books.google.com.co/books?isbn=9586483088

Soluciones propuestas en Java: http://lenguajes2mariu.blogspot.com/

1. Hacer una aplicación que solicite 5 valores al usuario y los almacene en un vector, imprima el vector.
2. Elaborar una aplicación que genere un arreglo de N elementos y encuentre el valor y la posición del mayor elemento. (N es un valor entero que ingresa el usuario).
3. Usando el arreglo anterior escribir los elementos cuyos valores sean múltiplos de 3.
4. Hacer una aplicación que entre una serie de valores (dados por el usuario), los almacene en un vector y sume los elementos de las posiciones pares, lo mismo que las posiciones impares por separado.
5. Hacer una aplicación que forme un vector del que no se sabe el número de elementos (el tamaño lo indica el usuario). Calcule el promedio de todos los elementos y forme dos nuevos arreglos, uno con los elementos menores o iguales al promedio y otro con los superiores. Imprima los dos nuevos arreglos.
6. Elaborar una aplicación que lea dos arreglos unidimensionales de igual tamaño y forme un tercer arreglo mediante el producto de los elementos de los dos arreglos, tomados en orden inverso, es decir, productos del primer elemento del primer arreglo, con el último del segundo; del segundo del primer arreglo con el penúltimo del segundo arreglo; hasta llegara al último del primer arreglo, con el primero del segundo arreglo. Imprimir el arreglo formado.
7. Elaborar una aplicación que forme un vector B de M elementos, luego entre el valor de la variable CLAVE y la búsquelo secuencialmente dentro del arreglo, suspendiendo la búsqueda cuando lo encuentre. Imprima un mensaje para el usuario, indicando si encontró dicho valor o no, en caso afirmativo, indique la posición en la que estaba el dato.
8. Se tienen dos arreglos unidimensionales A y B de M elementos. Partiendo de los dos arreglos, elaborar una aplicación que forme tres nuevos arreglos. El primero con la suma de los elementos respectivos, el otro con el producto y el último con la diferencia. Imprima los tres arreglos.
9. Elaborar una aplicación que sume los elementos de un vector de tamaño N, excepto el primero, último y el elemento del centro (si existe).
10. Elaborar una aplicación que forme dos arreglos. El primero contiene los M códigos de los estudiantes que perdieron LÓGICA y el segundo los N códigos de los estudiantes que perdieron LENGUAJES. Partiendo de los dos arreglos formar un nuevo arreglo con los códigos de los estudiantes que perdieron ambas materias.
11. Elaborar una aplicación que forme dos vectores de NA y NB elementos, solicite al usuario datos numéricos para llenarlos, ordene ascendentemente cada vector, luego forme un tercer arreglo que quede ordenado en la medida que pasan los elementos de los dos arreglos iniciales. Imprimir el nuevo arreglo.
12. Elaborar una aplicación que forme un vector con una serie de códigos y otro con una serie de nombres asociados a los códigos. Luego entre un conjunto de códigos y determine si están o no en el arreglo y, si es así, escriba el código y el nombre.
13. Implemente una aplicación que dado un vector de tamaño N elimine de éste cuantas veces aparezca un valor dado por el usuario. Imprima el arreglo con el nuevo tamaño, es decir, cada elemento eliminado es reemplazado por el que lo sigue.
14. Elabore una aplicación que dado un arreglo unidimensional y su tamaño, elimine los elementos repetidos. Dejando un elemento en cada caso.
15. Dado un arreglo unidimensional de tamaño N, encuentre la moda. Es decir, el valor que se presenta más número de veces entre sus elementos.
16. Haga una aplicación con las mismas características que el anterior, en el caso que exista más de una moda.
17. Si tres elementos cualesquiera de un vector V se relacionan por la ecuación:
V[i+2] = V[i+1] + V[i], si V[1]= 1, V[2]=2, encontrar los primeros N elementos del vector. (N es un valor que ingresa el usuario)
18. Utilice el operador módulo(%) en una aplicación que entre un arreglo unidimensional, y calcule e imprima:
a. Número de datos repetidos en el arreglo.
b. El número de valores impares.
c. El número de valores pares.
19. Elaborar un algoritmo que forme dos arreglos relacionados que almacenen los códigos de los N artículos que se venden en un almacén y la existencia (número de unidades existentes) de cada uno de los artículos, ejemplo:

Del artículo con código 101 hay 30 unidades en existencia; del artículo con código 200 hay 40 unidades y así sucesivamente.
Por cada proveedor o cliente que llega al almacén se genera un registro con los siguientes datos:
a. Tipo de transacción [1 para proveedor (recibo); 2 para cliente (venta)]
b. Código del artículo transado
c. Número de unidades transadas (recibidas o vendidas)
Al final se deben mostrar los códigos de los artículos y las existencias de cada uno de ellos, es decir, los arreglos de códigos y de existencias actualizados. En caso de que la cantidad vendida supere la existencia, la operación se debe anular, y se debe emitir un mensaje de error al usuario.

Matrices
1. Elaborar una aplicación que llene una matriz por columnas y la imprima por filas.
2. Para el ejercicio anterior, encuentre el elemento mayor y el menor, así como sus posiciones, en caso de que alguno de los elementos (mayor y/o menor) esté varias veces en la matriz, indíquele esta situación al usuario mediante un mensaje.
3. Elabore una aplicación que convierta una matriz (llena), en un arreglo unidimensional. La conversión debe hacerse por columnas, es decir, mover la primera columna al vector, a continuación la segunda columna y así sucesivamente. Imprima ambos arreglos.
4. Elabore una aplicación que llene una matriz de un tamaño definido por el usuario. Luego intercambie el contenido de la primera y la última columna, de la segunda y la penúltima y así hasta completar cambios que den una matriz con columnas invertidas. Imprima ambas matrices.
5. Realice una aplicación similar a la anterior, pero intercambiando filas.
6. Elabore una aplicación que llene una matriz cuadrada, la magnitud y los datos los ingresa el usuario, luego averigüe si es simétrica, es decir, si todos los pares de elementos equidistantes perpendicularmente de la diagonal principal son iguales.
7. En las elecciones para alcalde de EL PUEBLITO PAISA se han presentado tres candidatos (A,B,C). el pueblito está dividido en 5 zonas de votación.
El reporte de votos de las zonas se recibe en orden: primero la zona 1, la 2, etc. Elabore una aplicación que:
• Forme una matriz de 5 filas y 3 columnas que contenga, en cada fila, los votos reportados por las zonas para cada uno de los tres candidatos.
• Encuentre el total de votos obtenidos por cada candidato y el porcentaje que éste representa.
• Escriba un mensaje declarando ganador a un candidato, si éste obtuvo más del 50% de la votación, en caso de “empate”, notifíquelo mediante un mensaje.
8. Elabore una aplicación que forme una matriz de orden NxM y la llene de datos enteros, (toda esta información la proporciona el usuario), a continuación obtenga e imprima:
• Suma de cada fila impar (1,3,5,etc)
• Productoria de la diagonal secundaria
• Número de valores iguales a cero
• Suma de todos los elementos de las columnas pares