[ Foro de C# ]
Saludos.
El programa en consola funciona bien, excepto que no guarda correctamente los datos que se generan en pantalla. Le falta algo al "if" y si agrego aquella línea, me genera un error de compilación.
Adjunto código fuente.
https://mega.co.nz/#!94VAlbzK!uNUf9oU0hVV9msiM9VS0gHleFqf3z7AR8I9ED7pLXDk
Si copias y pegas el fuente en vez de enlazarlo, será más fácil ayudarte, porque se puede leer la consulta desde cualquier dispositivo.
Si no, hará falta un ordenador, descompresor, editor... O no se podrá ver con comodidad. Intentaré mirarlo esta noche, cuando tenga un ordenador delante...
// Lo siento, adjunto código fuente.
using System;
using System.IO;
namespace guardar_ficheros_2
{
class Program
{
static void Main()
{
double puntajetotal;
double puntaje; // Puntajes obtenidos
double porcentajedeexigencia;
double porcentajedeexigencia2;
double puntajecorte;
double formula1;
double formula2;
do
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(0, 0);
Console.WriteLine("Escala de notas.");
// Versión 1.2
Console.SetCursorPosition(0, 1);
Console.WriteLine("Válido para Chile.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Escrito en C# por Benjamín C.");
Console.SetCursorPosition(0, 4);
// Ingrese primer dato.
try
{
Console.Write("Ingrese puntaje total: ");
puntajetotal = Convert.ToDouble(
Console.ReadLine());
while ((puntajetotal <= 0) || (puntajetotal >= 999999999999999))
{
Console.Write("Ingrese un número válido: ");
puntajetotal = Convert.ToDouble(
Console.ReadLine());
}
// Ingrese segundo dato.
Console.Write("Ingrese porcentaje de exigencia (%): ");
porcentajedeexigencia = Convert.ToDouble(
Console.ReadLine());
while ((porcentajedeexigencia <= 9) || (porcentajedeexigencia > 100))
{
Console.Write("Ingrese un número válido: ");
porcentajedeexigencia = Convert.ToDouble(
Console.ReadLine());
}
Console.WriteLine("");
Console.WriteLine("Puntaje Vs Nota");
Console.WriteLine("");
//Centro de operaciones.
porcentajedeexigencia2 = porcentajedeexigencia / 100;
puntajecorte = puntajetotal * porcentajedeexigencia2;
StreamWriter sw = new StreamWriter("C:\\Pruebafor.txt");
for (puntaje = 0; puntaje <= puntajetotal + 0.001; puntaje = puntaje + 0.1)
{
formula1 = ((7 - 4) / (puntajetotal - puntajecorte)) * (puntaje - puntajecorte) + 4; // Ok
formula2 = ((4 - 1) / (puntajecorte)) * (puntaje) + 1;
if (puntaje <= puntajecorte)
Console.WriteLine(" {0} | {1}", puntaje.ToString("N1"), formula2.ToString("N1"));
//sw.WriteLine("{0} | {1}", puntaje.ToString("N1"), formula2.ToString("N1")); // Error de compilación
else
if (puntaje > puntajecorte)
Console.WriteLine(" {0} | {1}", puntaje.ToString("N1"), formula1.ToString("N1")); //Ok
sw.WriteLine("{0} | {1}", puntaje.ToString("N1"), formula1.ToString("N1"));
}
sw.Close();
Console.WriteLine("");
Console.WriteLine("Presione una tecla para ingresar más datos.");
Console.WriteLine("Presione Esc para finalizar el programa.");
} // Termina el Try
catch (FormatException)
{
Console.WriteLine("");
Console.WriteLine("Ingrese sólo números.");
Console.WriteLine("");
Console.WriteLine("Presione una tecla para ingresar más datos.");
Console.WriteLine("Presione Esc para finalizar el programa.");
} /* Termina el catch */
} // Termina el do.
while (Console.ReadKey(true).Key != ConsoleKey.Escape);
}
}
}
Claro, le faltan llaves, como a cualquier orden compuesta. Las tienes puestas en los "for" y "while", pero no en el "if", a pesar de que quieres que haga dos cosas.
Y no hay nada que sentir. Es simplemente que si tu fuente se puede leer, se te puede contestar incluso desde un Smartphone en un tren o autobús, mientras que si es un enlace externo son necesarias "más infraestructuras". ;-)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)