Foros del Web » Programación para mayores de 30 ;) » .NET »

Duda en C#. Programa para calcular calificaciones.

Estas en el tema de Duda en C#. Programa para calcular calificaciones. en el foro de .NET en Foros del Web. Saludos cordiales. Estoy haciendo un programa en c#, si tú ingresas el puntaje obtenido de un certamen, te calculará la nota. Las condiciones (if-else) a ...
  #1 (permalink)  
Antiguo 07/06/2014, 12:21
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Duda en C#. Programa para calcular calificaciones.

Saludos cordiales.

Estoy haciendo un programa en c#, si tú ingresas el puntaje obtenido de un certamen, te calculará la nota.
Las condiciones (if-else) a mi parecer están bien.
El problema es que al ingresar por ejemplo:
puntaje total: 10
puntaje obtenido: 10

El programa se cierra... y no muestra el resultado. y creo que el error se debe a esta línea:

Console.WriteLine("La calificación obtenida es: {0}", formula1);

Probablemente sea el numero que está en los { }

Utilizo SharpDevelop 4.4.
-----------
Al invocar la segunda formula, no hay problema, muestra el resultado.
Ahora bien, ¿Cuál es mi error?


Código:
using System;
namespace borrar2
{
class programa
{
static void Main()
{
float puntajetotal;
float puntajeobtenido;
float porcentajedeexigencia;
float puntajecorte;
float porcentajedeexigencia2;
float formula1;
float formula2;
			
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Programa para calcular una nota.");
Console.WriteLine("Válido para Chile.");
Console.Write("Ingrese el puntaje total del certamen: ");
puntajetotal = Convert.ToSingle(
Console.ReadLine());
			
Console.Write("Ingrese puntaje obtenido: ");
puntajeobtenido = Convert.ToSingle(
Console.ReadLine());
			
Console.Write("Ingrese porcentaje de exigencia (%): ");
porcentajedeexigencia = Convert.ToSingle(
Console.ReadLine());
while (porcentajedeexigencia <= 9)
{
Console.Write("Ingrese un número mayor que 9: ");
porcentajedeexigencia = Convert.ToSingle(
Console.ReadLine());
			}
			
porcentajedeexigencia2 = porcentajedeexigencia / 100;
puntajecorte = puntajetotal * porcentajedeexigencia2;
			
formula1 = (puntajeobtenido * 7) / puntajetotal;
formula2 = (puntajeobtenido * 4) / puntajecorte;
			
if (puntajeobtenido > puntajecorte)
			
Console.WriteLine("La calificación obtenida es: {0}", formula1);
					
else
if (puntajeobtenido <= puntajecorte)
Console.WriteLine("La calificación obtenida es: {0}", formula2);
Console.ReadKey();
}}}

Última edición por wind7; 07/06/2014 a las 12:27 Razón: espaciamiento en c#
  #2 (permalink)  
Antiguo 08/06/2014, 17:30
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 10 años, 11 meses
Puntos: 3
Sonrisa Respuesta: Duda en C#. Programa para calcular calificaciones.

Hola wind7, el código está bien, por lo que debería funcionar correctamente. Tal vez lo que esté pasando sea que el usuario teclea varias veces la tecla ENTER o si no se pulsan dos o más teclas al mismo tiempoo la otra es que la tecla ENTER se encuentra averiada y al pulsarla, en lugar de mandar una pulsación envía dos o más y por eso sale del programa. En todo caso se podría resolver, envolviendo todo el código cun un bucle do..while, para hacerlo cíclico. Ejemplo:
Código C#:
Ver original
  1. using System;
  2. namespace borrar2
  3. {
  4.     class programa
  5.     {
  6.         static void Main()
  7.         {
  8.             float puntajetotal,
  9.                     puntajeobtenido,
  10.                     porcentajedeexigencia,
  11.                     puntajecorte,
  12.                     porcentajedeexigencia2,
  13.                     formula1,
  14.                     formula2;
  15.  
  16.             char respuesta;
  17.  
  18.             do // éste es el bucle do..while que evita que se cierre el programa inesperadamente
  19.             {
  20.                 Console.ForegroundColor = ConsoleColor.White;
  21.                 Console.Clear();
  22.                 Console.WriteLine("Programa para calcular una nota.");
  23.                 Console.WriteLine("Válido para Chile.");
  24.                 Console.Write("Ingrese el puntaje total del certamen: ");
  25.                 puntajetotal = Convert.ToSingle(Console.ReadLine());
  26.  
  27.                 Console.Write("Ingrese puntaje obtenido: ");
  28.                 puntajeobtenido = Convert.ToSingle(Console.ReadLine());
  29.  
  30.                 Console.Write("Ingrese porcentaje de exigencia (%): ");
  31.                 porcentajedeexigencia = Convert.ToSingle(Console.ReadLine());
  32.                 while (porcentajedeexigencia <= 9)
  33.                 {
  34.                     Console.Write("Ingrese un número mayor que 9: ");
  35.                     porcentajedeexigencia = Convert.ToSingle(Console.ReadLine());
  36.                 }
  37.  
  38.                 porcentajedeexigencia2 = porcentajedeexigencia / 100;
  39.                 puntajecorte = puntajetotal * porcentajedeexigencia2;
  40.  
  41.                 formula1 = (puntajeobtenido * 7) / puntajetotal;
  42.                 formula2 = (puntajeobtenido * 4) / puntajecorte;
  43.  
  44.                 if (puntajeobtenido > puntajecorte)
  45.  
  46.                     Console.WriteLine("La calificación obtenida es: {0}", formula1);
  47.  
  48.                 else
  49.                     if (puntajeobtenido <= puntajecorte)
  50.                         Console.WriteLine("La calificación obtenida es: {0}", formula2);
  51. //aquí dibujo la ventanita que tanto me gusta
  52.                 Console.CursorTop = 10;
  53.                 Console.CursorLeft = 15; Console.WriteLine("┌───────────────────────────────────────────────┐");
  54.                 Console.CursorLeft = 15; Console.WriteLine("│                                               │");
  55.                 Console.CursorLeft = 15; Console.WriteLine("│  ¿Desea calcular otra calificación? [S/N]     │");
  56.                 Console.CursorLeft = 15; Console.WriteLine("│                                               │");
  57.                 Console.CursorLeft = 15; Console.WriteLine("└───────────────────────────────────────────────┘");
  58.  
  59.                 do // este bucle limita las teclas que puede pulsar el usuario a sólo la S o sólo la N
  60.                 {
  61.                     Console.CursorTop = 12;
  62.                     Console.CursorLeft = 60;
  63.                     respuesta = Convert.ToChar(Console.ReadKey().KeyChar.ToString().ToUpper());
  64.  
  65.                 } while (respuesta != 'N' && respuesta != 'S');
  66.  
  67.             } while (respuesta == 'S');
  68.         } // static void Main
  69.     } // Class
  70. } // namespace
Cuando uso consola me gustan usar ventanitas, pero si no te gusta podés quitarla, lo importante es que conserves el bucle do..while que envuelve el código para que no se cierre el programita por un error de tipeo.

¡Saludos cordiales desde Argentina!
  #3 (permalink)  
Antiguo 10/06/2014, 11:57
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda en C#. Programa para calcular calificaciones.

Muchas gracias por tu respuesta. Efectivamente estaba obligado a usar Do while, de esta forma el programa funciona bien.
Solo me queda una duda.
En pascal, tenía dos opciones, borrar toda la pantalla y borrar una linea o varias lineas especificas. En C# no busco borrar toda la pantalla ¿Se puede borrar una línea?
  #4 (permalink)  
Antiguo 11/06/2014, 15:36
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 10 años, 11 meses
Puntos: 3
Sonrisa Respuesta: Duda en C#. Programa para calcular calificaciones.

Hola wind7, me alegro que te haya ayudado mi respuesta!
Que hermoso lenguaje Pascal, me trae lindos recuerdos de la facu!
Para borrar la pantalla ya viste el Console.Clear() que usé en el código anterior.
Sí se puede borrar una línea y también limpiarla . Veamos en qué consisten estos dos términos. En Pascal tenemos la instrucción DelLine que borra una línea, pero no tenemos la instrucción ClrLine, para limpiar una línea (en su lugar tenemos ClrEOL). ¿Cuál sería la diferencia?
En Pascal al hacer DelLine se borra toda la línea donde se encuentra el cursor, subiendo una posición las que se encuentren por debajo de ésta.
Pero si en Pascal deseamos limpiar en lugar de borrar, para que las líneas inferiores permanezcan en su lugar; primero debemos posicionar el cursor con GotoXY y luego usar la instrucción ClrEOL:
Código Pascal:
Ver original
  1. GotoXY(0, 0);
  2. ClrEOL;
En .Net podemos remedar todas estas instrucciones y ya que la vamos a implementar hagámoslas mejoradas; por ejemplo en DelLine podríamos especificar un parámetro opcional para la línea a borrar y lo mismo para ClrLine:
Código C#:
Ver original
  1. // Definimos una clase llamada Pascal de tipo estática para referenciarla sin necesidad de crear una instancia de la misma
  2. // Con esta Clase pretendemos simular las instrucciones de nuestro querido Lenguaje Pascal :)
  3. static class Pascal
  4. {
  5.     // Declaramos una función, en este caso con carácter de procedimiento, también estática para poderla usar sin necesidad de una instancia; y con un parámetro opcional
  6.     public static void DelLine(int Line = -1)
  7.     {
  8.         if (Line == -1)    // si no se especifica ningún argumento para el parámetro opcional, entonces usamos la línea actual del cursor
  9.             Line = Console.CursorTop;
  10.  
  11.             Console.MoveBufferArea(0, Line + 1, Console.WindowWidth, Console.WindowHeight - Line - 1, 0, Line);
  12.     } // DelLine
  13.  
  14.     // ídem al comentario de la función anterior
  15.     public static void ClrLine(int Line = -1)
  16.     {
  17.         if (Line == -1)    // ídem al comentario del If de la función DelLine()
  18.             Line = Console.CursorTop;
  19.  
  20.             Console.SetCursorPosition(0, Line);
  21.             Console.Write(string.Format("{0," + Console.WindowWidth.ToString() + "}", " "));
  22.     } // ClrLine
  23.  
  24. } // class Pascal
Ejemplos de uso, supongamos que tenemos la siguiente pantalla:
Código:
Linea #0
Linea #1
Linea #2
Linea #3
Linea #4
Linea #5
y deseamos borrar la número 3, haríamos:
Código C#:
Ver original
  1. Pascal.DelLine(3);
Con lo cual nos quedaría:
Código:
Linea #0
Linea #1
Linea #2
Linea #4
Linea #5
y ahora supongamos que deseamos limpiar la línea número 2:
Código C#:
Ver original
  1. Pascal.ClrLine(2);
Nos quedaría:
Código:
Linea #0
Linea #1

Linea #4
Linea #5
Espero se haya entendido.
¡Saludos cordiales desde Argentina!... con la mirada puesta en Brasil !!!

Última edición por javidotnet; 11/06/2014 a las 15:45

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:41.