Inicio > .NET > Certamen I LENGUAJES DE PROGRAMACIÓN I MS.NET

Certamen I LENGUAJES DE PROGRAMACIÓN I MS.NET

Este Fue el Primer y unico certamen de .NET xD les dejo el Enunciado y el programa

Enunciado:

Se desea manejar una lista de alumnos, para cada alumno se debe manejar su nombre y su nota finales (en la escala de 1.0 a 7.0) en su “querida” asignatura de LDP2501. Se pide que usted construya una aplicación de CONSOLA en C# que permita cumplir con la siguiente funcionalidad:

  • Crear un archivo XML, llamado Curso.XML que contenga una carga inicial de datos a la lista. (10 PUNTOS)
  • Mostrar la lista de alumnos presentes en la lista. (10 PUNTOS)
  • Mostrar la nota de un alumno a partir del nombre. (15 PUNTOS)
  • Mostrar el promedio de notas de curso. (5 PUNTOS)
  • Mostrar la mediana de las notas de los alumnos del curso. (20 PUNTOS)
  • Mostrar una tabla de frecuencia de las notas que se han registrado en el curso. (20 PUNTOS)
  • Mostrar el nombre de los alumnos que han obtenido la mejor nota. (10 PUNTOS)
  • Mostrar el nombre de los alumnos que han obtenido la peor nota. (10 PUNTOS)

OBSERVACIONES
Suponga el siguiente conjunto de datos:
23 56 78 34 29 56 29 23 67
CÁLCULO DE LA MEDIANA
Para obtener la mediana se deben ordenar los valores de la lista y se tiene:
23 23 29 29 34 56 56 67 78
Ahora es posible calcular la mediana y se obtiene sacando el elemento de la posición central. En este caso es el 34. En el caso de que el número de observaciones sea par se debe seleccionar el elemento central y el siguiente y luego obtener el promedio entre los dos; el resultado de lo anterior corresponde a la mediana.

GENERACIÓN DE LA TABLA DE FRECUENCIA
Para el caso de la tabla de frecuencia se tiene:
DATO FRECUENCIA
23 2
29 2
34 1
56 2
67 1
78 1
Solucion:

Lo Primero es Crear el Curso.xml


  
    111-1
    Esteban Fuentealba
    7.0
  
  
    222-2
    Juan Perez
    2.0
  
  
    333-3
    Leonardo Farkas
    5.5
  
  
    444-4
    El Shipamogli
    4.4
  
  
    555-5
    Alejo
    7.0
  

Despues de eso creamos la Clase Alumno.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace CertamenIDotNet
{
/* La Clase Implementa IComparable */
class Alumno : IComparable
{
/* Atributos de Clase */
private String rut;
private String nombre;
private Double nota;
/* Constructor por defecto */
public Alumno() { }
/* Constructor que recibe todos los parametros */
public Alumno(String r, String n, Double no)
{
this.Rut = r;
this.Nombre = n;
this.Nota = no;
}
/* Metodo Para comparar un objeto de alumno con otro objeto de alumno y ordenar por nota */
public int CompareTo(object x)
{
Alumno o = ((Alumno)x);
if (this.Nota > o.Nota) return 1;
else if (this.Nota < o.Nota) return -1;
else return 0;
}
public Double Nota
{
get { return nota; }
set { nota = value; }
}

public String Nombre
{
get { return nombre; }
set { nombre = value; }
}
public String Rut
{
get { return rut; }
set { rut = value; }
}
}
}

Despues de eso Creamos Nuestro Program.cs que hará todo:

using System;
using System.Collections.Generic;
using System.Text;
/* Importo Collections para poder usar los arraylist */
using System.Collections;
/* Importo XML para usar la lectura de archivos xml */
using System.Xml;

/*
*
* Por Esteban Fuentealba
*
*/
namespace CertamenIDotNet
{
class Program
{
/* Atributos de Clase */
public static ArrayList listaAlumnos;
public static XmlDocument documento;

static void Main(string[] args)
{
/* Inicializo el arrayList que contenerá todos los alumnos*/
listaAlumnos = new ArrayList();
/* paso el xml “Curso.xml” a el arrayList */
XMLToArrayList();
/* este do while es para las opciones */
int opcion = 0;
do
{
Console.WriteLine(“1) Muestra Lista de Alumnos.”);
Console.WriteLine(“2) Muestra la nota a partir del Nombre.”);
Console.WriteLine(“3) Muestra el Promedio de notas del Curso.”);
Console.WriteLine(“4) Muestra la Mediana de notas del Curso.”);
Console.WriteLine(“5) Muestra una Tabla de Frecuencia de notas del Curso.”);
Console.WriteLine(“6) Muestra el nombre de los alumnos con mejor nota.”);
Console.WriteLine(“7) Muestra el nombre de los alumnos con peor nota.”);
Console.WriteLine(“8) Salir.”);
opcion = getNumero();
switch(opcion) {
case 1 :
mostrarLista();
break;
case 2 :
Console.WriteLine(“Ingresa el Nombre:”);
int i = 0;
foreach (Alumno a in buscarPorNombre(Console.ReadLine()))
{
if (i == 0) Console.WriteLine(“\r\nNombre\t\t\t\tRut\t\tNota”);
Console.WriteLine(a.Nombre.PadRight(30, ‘ ‘) + a.Rut.PadRight(20, ‘ ‘) + a.Nota.ToString().PadRight(20, ‘ ‘));
i++;
}
if (i == 0) Console.WriteLine(“No se encontro un alumno con ese Nombre”);
Console.WriteLine();
break;
case 3 :
Console.WriteLine(“Promedio del Curso: ” + obtenerPromedio());
break;
case 4:
Console.WriteLine(“Mediana del Curso: “+ obtenerMediana());
break;
case 5 :
frecuencia();
break;
case 6 :
mejorPeorNota(0);
break;
case 7 :
mejorPeorNota(1);
break;
}
} while (opcion != 8);
}
/*
*
* Metodo Para Pasar el xml al arrayList
*
*/
static void XMLToArrayList()
{
documento = new XmlDocument();
documento.Load(@”..\..\Curso.xml”);
foreach (XmlNode nod in documento)
{
foreach (XmlNode dato in nod)
{
String rut = dato.SelectSingleNode(“rut”).InnerText;
String nombre = dato.SelectSingleNode(“nombre”).InnerText;
Double nota = Double.Parse(dato.SelectSingleNode(“nota”).InnerText);
listaAlumnos.Add(new Alumno(rut, nombre, nota));
}
}
}
/*
*
* Muestro los datos del ArrayList
*
*/
static void mostrarLista()
{
Console.WriteLine(“\r\nNombre\t\t\t\tRut\t\tNota”);
foreach (Alumno alumno in listaAlumnos)
{
Console.WriteLine(alumno.Nombre.PadRight(30, ‘ ‘) + alumno.Rut.PadRight(20, ‘ ‘) + alumno.Nota.ToString().PadRight(20, ‘ ‘));
}
Console.WriteLine();
}
/*
*
* Metodo que busca en el ArrayList un nombre y devuelve un ArrayList con todos Los Resultados de Busqueda
*
*/
static ArrayList buscarPorNombre(String nombre)
{
ArrayList arr = new ArrayList();
foreach(Alumno a in listaAlumnos) {
if (a.Nombre.ToLower().Contains(nombre.ToLower()) || a.Nombre.ToLower() == nombre.ToLower())
arr.Add(a);
}
return arr;
}
/*
*
* Calcula el promedio del curso sumando las notas de todos los alumnos y dividiendolo por el total
*
*/

static Double obtenerPromedio()
{
Double promedio = 0.0;
foreach (Alumno a in listaAlumnos)
{
promedio += a.Nota;
}
return (promedio / listaAlumnos.Count);
}
/*
*
* Metodo Para Obtener la Mediana de las notas
*
*/

static Double obtenerMediana()
{
ArrayList listaOrdenada = listaAlumnos;
listaOrdenada.Sort();
if ((listaOrdenada.Count % 2) == 0)
{
return (((Alumno)listaOrdenada[listaOrdenada.Count / 2]).Nota + ((Alumno)listaOrdenada[(listaOrdenada.Count / 2) + 1]).Nota) / 2;
}
else
{
return ((Alumno)listaOrdenada[listaOrdenada.Count / 2]).Nota;
}
}
/*
*
* Obtiene la Frecuencia de notas
*
*/
static void frecuencia()
{
ArrayList listaFrecuencia = listaAlumnos;
listaFrecuencia.Sort();
Double saltarNota =0;
Console.WriteLine(“\tNota\tFrecuencia”);
foreach (Alumno alumno in listaFrecuencia)
{
int frecuencia = 0;
foreach (Alumno alumno2 in listaFrecuencia)
{
if (alumno.Nota == alumno2.Nota) frecuencia++;
}
if (alumno.Nota != saltarNota) Console.WriteLine(“\t”+alumno.Nota.ToString().PadRight(10, ‘ ‘) + frecuencia.ToString().PadRight(10, ‘ ‘));
saltarNota = alumno.Nota;
}
}
/*
*
* Imprime los alumnos con Mejor o Peor Nota, segun el parametro que se le pase
* Tipo 0 = MejorNota
* Tipo 1 = PeorNota
*
*/
static void mejorPeorNota(int tipo)
{
ArrayList listaNotas = listaAlumnos;
listaNotas.Sort();
if (tipo == 0)
{
listaNotas.Reverse();
Console.WriteLine(“\r\nAlumnos con Mejores Notas:”);
for (int i = 0; i < listaNotas.Count; i++)
{
if (((Alumno)listaNotas[0]).Nota == ((Alumno)listaNotas[i]).Nota) Console.WriteLine("Nombre: " + ((Alumno)listaNotas[i]).Nombre + " Nota: " + ((Alumno)listaNotas[i]).Nota);
}
}
else if (tipo == 1)
{
Console.WriteLine("\r\nAlumnos con Peores Notas:");
for (int i = 0; i < listaNotas.Count; i++)
{
if (((Alumno)listaNotas[0]).Nota == ((Alumno)listaNotas[i]).Nota) Console.WriteLine("Nombre: " + ((Alumno)listaNotas[i]).Nombre + " Nota: " + ((Alumno)listaNotas[i]).Nota);
}
}
Console.WriteLine();
}

static int getNumero()
{
String numeroInsertado;
numeroInsertado = Console.ReadLine();
while (!esNumero(numeroInsertado))
{
Console.WriteLine("ERROR: Ingresa un Numero.");
numeroInsertado = Console.ReadLine();
}
return int.Parse(numeroInsertado);
}
static bool esNumero(String val)
{
bool num = false;
try
{
int.Parse(val);
num = true;
}
catch (Exception e) { num = false; }
return num;
}
}
}

Y Listo =D

Espero que les Sirva, aqui dejo el src …. Esta en VisualStudio 2008
CertamenIDotNet-EstebanFuentealba.rar

Categorías:.NET Etiquetas: , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: