using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sistema
{
class Program
{
static void Main(string[] args)
{
Console.Write("Risoluzione dei sistemi lineari.\n\n\n");
Ciclo();
Console.Write("\n\nFine... ");
Console.ReadKey(true);
}
static void Ciclo()
{
int dimensione = (int)Domanda("Quante equazioni ha il sistema ? ", 2, 70);
Sistemi risolvi
= new Sistemi
(dimensione
);
CaricaSistema(risolvi);
Console.WriteLine("{0}\nSistema inserito:\n{1}\n", "".PadLeft(80, '#'), risolvi.ToString());
if (risolvi.Soluzioni(out double[] soluzioni))
{
Console.WriteLine("Soluzioni del sistema: ");
for (int i=0; i<soluzioni.Length; i++)
{
Console.WriteLine("{0,3} -> {1,12:f6}", i + 1, soluzioni[i]);
}
}
else
{
Console.WriteLine("Il sistema è indeterminato. ");
}
}
static void CaricaSistema(Sistemi equazioni)
{
Console.WriteLine("Caricamento delle equazioni:\n\n");
int fine = equazioni.Dimensione();
for (int riga=0; riga<fine; riga++)
{
Console.WriteLine("Equazione n° {0}:", riga + 1);
for (int colonna=0; colonna<fine; colonna++)
{
equazioni[riga, colonna] = Domanda($"{colonna + 1}° termine ? ", -1e200, 1e200);
}
equazioni[riga, fine] = Domanda("Termine noto ? ", -1e200, 1e200);
Console.WriteLine("".PadLeft(80, '-'));
}
}
static double Domanda(string messaggio, double limiteInferiore, double limiteSuperiore)
{
double esito = 0.0;
while (true)
{
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("{0}", messaggio);
Console.ForegroundColor = ConsoleColor.Cyan;
if (! double.TryParse(Console.ReadLine().Replace('.', ','), out esito))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Sono ammessi solo valori numerici.");
continue;
}
if (esito < limiteInferiore)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Inserire un valore maggiore di {limiteInferiore}");
continue;
}
if (esito > limiteSuperiore)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Inserire un valore minore di {limiteSuperiore}");
continue;
}
break;
}
Console.ForegroundColor = ConsoleColor.Gray;
return esito;
}
}
}