static void Main(string[] args)
{
Matriz<double> oM = new Matriz<double>(4, 4);
Vector<double> oV = new Vector<double>(4);
int x = 5, y = 5, alto = y + 10;
int[,] auxM = new int[,] { {6,-2,2,4},{12,-8,6,10},{3,-13,9,3},{-6,4,1,-18} };
int[] auxV = new int[] {12,34,27,-38};
for(int i=0;i<oM.Renglon;i++)
for (int j = 0; j < oM.Columna; j++)
{
oM[i, j] = auxM[i, j];
oV[i] = auxV[i];
Console.SetCursorPosition(x, y);
Console.Write(oM[i, j]);
x += 2;
if (x >= alto)
{
Console.SetCursorPosition(x, y);
Console.Write(""+oV[i]);
y +=2;
x = 5;
}
}
int ren = 0; y += 2;
Console.WriteLine();
Paso_1(oM, ren, oV);
Visualizar(oM, x, y, alto, oV);
Console.WriteLine();
Paso_2(oM, ren, oV);
Visualizar(oM, x, y, alto, oV);
Console.WriteLine();
Paso_3(oM, ren, oV);
Visualizar(oM, x, y, alto, oV);
Console.WriteLine();
Paso_4(oM, ren, oV);
Visualizar(oM, x, y, alto, oV);
Console.ReadKey();
}
static public void Visualizar(Matriz<double> oM, int x, int y, int alto,Vector<double> oV)
{
for (int i = 0; i < oM.Renglon; i++)
{
for (int j = 0; j < oM.Columna; j++)
{
Console.Write(oM[i, j].ToString("###.00") + "\t");
Console.Write(oV[i].ToString("###.00") + "\t")
}
Console.WriteLine();
}
}
static public void Paso_1(Matriz<double> oM, int ren, Vector<double> oV)
{
for (int r = 1; r < oM.Renglon; r++)
for (int c = 0; c < oM.Columna; c++)
{
double div = (oM[r, 0] / oM[0, 0]);
oM[r, c] = (double)((oM[0, c] * div) - oM[r, c]);
oV[r] = (double)((oV[0] * div) - oV[r]);
}
ren++;
}
static public void Paso_2(Matriz<double> oM, int ren, Vector<double> oV)
{
int r = 1, c = 1;
double div = oM[r, c];
int i = 1;
for (i = 1, r = 1; i < oM.Renglon; i++, r++)
{
div = (double)(oM[r, c]);
for (int j = 0; j < oM.Columna; j++)
{
if (oM[i, j] == oM[ren, j])
{
oM[ren, j] = (double)(oM[ren, j] / div);
oV[ren] = (double)(oV[ren] / div);
}
else
if (div > 0)
{
oM[i, j] = (double)( (oM[c, j] * div)-oM[i, j] );
oV[c] = (double)((oV[c] * div)-oV[c]);
}
else
if (div < 0)
{
oM[i, j] = (double)((oM[c, j] * div) + oM[i, j]);
oV[c] = (double)((oV[c] * div)+oV[c] );
}
}
}
ren++;
}
static public void Paso_3(Matriz<double> oM, int ren, Vector<double> oV)
{
int r = 2, c = 2;
double div = oM[r, c];
int i = 1;
for (i = 1, r = 1; i < oM.Renglon; i++, r++)
{
div = (double)(oM[r, c]);
for (int j = 0; j < oM.Columna; j++)
{
if (oM[i, j] == oM[ren, j])
{
oM[ren, j] = oM[ren, j] / div;
oV[ren] = oV[ren] / div;
}
else
if (div > 0)
{
oM[i, j] = (double)((oM[c, j] * div) - oM[i, j]);
oV[c] = (double)((oV[c] * div) - oV[c]);
}
else
if (div < 0)
{
oM[i, j] = (double)((oM[c, j] * div) + oM[i, j]);
oV[c] = (double)((oV[c] * div) + oV[c]);
}
}
}
ren++;
}
static public void Paso_4(Matriz<double> oM, int ren, Vector<double> oV)
{
int r = 3, c = 3;
double div = oM[r, c];
int i = 1;
for (i = 1, r = 1; i < oM.Renglon; i++, r++)
{
div = (double)(oM[r, c]);
for (int j = 0; j < oM.Columna; j++)
{
if (oM[i, j] == oM[ren, j])
{
oM[ren, j] = oM[ren, j] / div;
oV[ren] = oV[ren] / div;
}
else
if (div > 0)
{
oM[i, j] = (double)( (oM[c, j] * div)-oM[i, j] );
oV[c] = (double)((oV[c] * div)-oV[c]);
}
else
if (div < 0)
{
oM[i, j] = (double)((oM[c, j] * div) + oM[i, j]);
oV[c] = (double)((oV[c] * div)+oV[c] );
}
}
}
ren++;
}
class Matriz<T>
{
T[,] _mat;
int ren, col;
public Matriz(int r, int c)
{
ren=r;
col = c;
_mat= new T[ren,col];
}
public int Renglon
{
get { return _mat.GetLength(0); }
}
public int Columna
{
get { return _mat.GetLength(1); }
}
//indexadores
public T this[int i, int j]
{
get { return _mat[i, j]; }
set { _mat[i, j] = value; }
}
public bool Nonnes(int n)
{
if (Convert.ToBoolean(n % 2))
return true;
else
return false;
}
class Vector<T>
{
T[] _vector;
public Vector(int dato)//Constructor por defecto del tamaño del arreglos
{
_vector = new T[dato];
}
//public Vector(int dato)//CONSTRUCTOR POR DEFECTO, DONDE SE DECLARA EL TAMAÑO DEL ARREGLO VECTOR Y DONDE LE DAMOS UN VALOR RANDOM
//{
// Random oR = new Random();
// if (dato > 0)
// {
// _vector = new T[dato];
// for (int i = 0; i < dato; i++)
// _vector[i] = (T)oR.Next();
// }
//}
public Vector(T a, T b, T c, T d, T e)//constructor parametrizado que recibe datos;
{
_vector = new T[]{a,b,c,d,e};
//_vector[0]= a;
//_vector[1] = b;
//_vector[2] = c;
//_vector[3] = d;
//_vector[4] = e;
//T[] _vector = ;
}
public void Asignar(T val, int pos)
{
if (pos >= 0 && pos < _vector.Length)
_vector[pos] = val;
}
public int Tamano
{
get { return _vector.Length; }
}
public T this[int pos]
{
get { return _vector[pos];}
set { _vector[pos] = value; }
}
public void Ordenar()
{ Array.Sort(_vector);
}
public T Mostrar(int dato)//METODO QUE REGRESA LOS VALORES GUARDADOS
{
return _vector[dato];
}
public T Mayor()//METODO QUE BUSCA EL NUMERO MAYOR DE ARREGLO DEFINIDO DE NUMEROS
{
T mayor = _vector[0];
for (int i = 0; i < _vector.Length; i++)
{
if (Convert.ToDouble(_vector[i]) >= Convert.ToDouble(mayor))
mayor = _vector[i];
}
return mayor;
}
public T Menor()//METODO QUE BUSCA EL NUMERO MENOR DE UNA ARREGLO
{
T menor = _vector[0];
for (int i = 0; i < _vector.Length; i++)
{
if (Convert.ToDouble(_vector[i]) <= Convert.ToDouble(menor))
menor = _vector[i];
}
return menor;
}
No hay comentarios:
Publicar un comentario