Pràctica 12 en C#: lectura, escriptura i estadístiques de vectors d'enters
Pràctica 12: Lectura i escriptura de fitxers amb vectors en C#
Aquesta pràctica implementa una classe anomenada Practica12 que llegeix un fitxer de text amb valors enters, els emmagatzema en un vector, calcula el màxim, el mínim, la suma i la mitjana, i escriu els resultats en un fitxer de sortida.
Mètodes principals
- ContarLineas(string path): compta el nombre de línies d'un fitxer.
- LeerVectorEntero(string path): llegeix cada línia del fitxer i la converteix en un enter dins d'un vector.
- AñadirAFichero(string path, string texto): afegeix text al final d'un fitxer.
- StringArray(int[] v): retorna una representació en text del vector.
- MaxMinSuma(int[] v, out int max, out int min, out int suma): calcula el màxim, el mínim i la suma del vector.
- Main(): demana els noms dels fitxers d'entrada i sortida, executa els càlculs i mostra i desa els resultats.
Codi
class Practica12
{
static int ContarLineas(string path)
{
StreamReader sr = new StreamReader(path);
int contador = 0;
while (sr.ReadLine() != null) contador++;
sr.Close();
return contador;
}
static int[] LeerVectorEntero(string path)
{
int[] v = new int[ContarLineas(path)];
StreamReader sr = new StreamReader(path);
int i = 0;
string input;
while ((input = sr.ReadLine()) != null)
{
v[i] = Convert.ToInt32(input);
i++;
}
sr.Close();
return v;
}
static void AñadirAFichero(string path, string texto)
{
StreamWriter sw = new StreamWriter(path, true);
sw.WriteLine("\r\n{0}", texto);
sw.Close();
}
static string StringArray(int[] v)
{
string vector = "[ ";
for (int i = 0; i < v.Length; i++)
{
vector += string.Format("{0} ", v[i]);
}
vector += "]";
return vector;
}
static void MaxMinSuma(int[] v, out int max, out int min, out int suma)
{
suma = 0;
max = v[0];
min = v[0];
for (int i = 0; i < v.Length; i++)
{
suma += v[i];
if (v[i] > max) max = v[i];
else if (v[i] < min) min = v[i];
}
}
static void Main()
{
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string carpeta = desktop + @"\MisDatos\";
Console.Write("Nombre del fichero de entrada? ");
string entrada = Console.ReadLine();
Console.Write("Nombre del fichero de salida? ");
string salida = Console.ReadLine();
int[] vector1 = LeerVectorEntero(carpeta + entrada);
int suma, maximo, minimo;
MaxMinSuma(vector1, out maximo, out minimo, out suma);
double media = Convert.ToDouble(suma) / vector1.Length;
Console.WriteLine(StringArray(vector1));
Console.WriteLine("suma= {0} media= {1:F2} maximo= {2} minimo= {3}", suma, media, maximo, minimo);
string pathSalida = carpeta + salida;
AñadirAFichero(pathSalida, StringArray(vector1));
AñadirAFichero(pathSalida, string.Format("suma= {0} media= {1:F2} maximo= {2} minimo= {3}", suma, media, maximo, minimo));
Console.ReadLine();
}
}