hola ya he podido hacer algunos programas pero me aparecen estos errores:
matrices.cs(263,25): error CS0120: An objet reference is required for the
non-static field, method or property 'Matriz.suma()'
matrices.cs(125,17): (Location of symbol related to previous error)
matrices.cs(265,25): error CS0120: An objet reference is required for the
non-static field, method or property 'Matriz.multiplica()'
matrices.cs(158,17): (Location of symbol related to previous error)
estos errores nose a que se deban son de un programa que debe multiplicar, sumar y determinantes de una matriz de nxn con sobrecarga de operadores desde un menu. del siguiente programa que estoy haciendo(la parte de determinante esta en forma de comentario porque no se si se pueda hacer, lo estoy compilando desde el simbolo de sistema porque es la unica forma que se hacer pero bueno ahi lo pongo para que lo chequen):
using System;
class Matriz
{
private double[,] a;
private int r, c;
public Matriz(int nr, int nc)
{
a = new double[nr, nc];
r = nr;
c = nc;
}
public void leer()
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
Console.Write("\tA[" + i + "," + j + "]= ");
a[i, j] = leer_double();
}
}
}
public void imprimir()
{
string str;
double tmp;
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
tmp = a[i, j];
str = String.Format("\t{0:e}", tmp);
Console.Write(str);
Console.Write(a[i, j]);
}
Console.WriteLine();
}
}
public double leer_double()
{
double tmp = 0.0;
string str;
bool b;
do
{
b = true;
str = Console.ReadLine();
try
{
tmp = double.Parse(str);
}
catch (FormatException exc)
{
Console.WriteLine("\nError: " + exc.Message);
Console.Write("Escriba un número: ");
b = false;
}
} while (b == false);
return tmp;
}
public static int leer_int()
{
int tmp = 0;
string str;
bool b;
do
{
b = true;
str = Console.ReadLine();
try
{
tmp = int.Parse(str);
}
catch (FormatException exc)
{
Console.WriteLine("\nError: " + exc.Message);
Console.Write("Escriba un numero: ");
b = false;
}
} while (b == false);
return tmp;
}
public static Matriz operator +(Matriz O1, Matriz O2)
{
Matriz tmp = new Matriz(O1.r, O1.c);
for (int i = 0; i < O1.r; i++)
{
for (int j = 0; j < O1.c; j++)
{
tmp.a[i, j] = O1.a[i, j] + O2.a[i, j];
}
}
return tmp;
}
public static Matriz operator -(Matriz O1, Matriz O2)
{
Matriz tmp = new Matriz(O1.r, O1.c);
for (int i = 0; i < O1.r; i++)
{
for (int j = 0; j < O1.c; j++)
{
tmp.a[i, j] = O1.a[i, j] - O2.a[i, j];
}
}
return tmp;
}
public static Matriz operator *(Matriz O1, Matriz O2)
{
Matriz tmp = new Matriz(O1.r, O2.c);
for (int i = 0; i < O1.r; i++)
{
for (int j = 0; j < O1.c; j++)
{
tmp.a[i, j] = 0;
for (int k = 0; k < O2.c; k++)
{
tmp.a[i, j] = tmp.a[i, j] + O1.a[i, k] * O2.a[k, j];
}
}
}
return tmp;
}
public void suma()
{
int f, b, c, d;
do
{
Console.Write("\n¿Cuantos renglones tiene la primera matriz? ");
f = leer_int();
Console.Write("\n¿Cuantas columnas tiene la primera matriz? ");
b = leer_int();
Console.Write("\n¿Cuantos renglones tiene la segunda matriz? ");
c = leer_int();
Console.Write("\n¿Cuantas columnas tiene la segunda matriz? ");
d = leer_int();
if ((f != c) && (b != d))
{
Console.WriteLine("\nPara poder sumar las matrices las dimenciones deben ser iguales");
}
} while ((f != c) && (b != d));
Matriz A = new Matriz(f, b);
Matriz B = new Matriz(c, d);
Matriz C;
Console.WriteLine("\nIncerta los elementos de la matriz A son:");
A.leer();
Console.WriteLine("\nIncerta los elementos de la matriz B son:");
B.leer();
Console.WriteLine("\nlos elementos de la matriz A son:");
A.imprimir();
Console.WriteLine("\nlos elementos de la matriz B son:");
B.imprimir();
Console.WriteLine("\nA+B= ");
C = A + B;
C.imprimir();
}
public void multiplica()
{
int f, b, c, d;
do
{
Console.WriteLine("\n¿Cuantos renglones tiene la primera matriz? ");
f = leer_int();
Console.WriteLine("\n¿Cuantas columnas tiene la primera matriz? ");
b = leer_int();
Console.WriteLine("\n¿Cuantos renglones tiene la segunda matriz? ");
c = leer_int();
Console.WriteLine("\n¿Cuantas columnas tiene la segunda matriz? ");
d = leer_int();
if ((f != c) && (b != d))
{
Console.WriteLine("\nError: Para poder multiplicar las columnas de la primera");
Console.WriteLine("\tmatriz debe ser igual a los renglones de la segunda matriz");
}
} while ((f != c) && (b != d));
Matriz A = new Matriz(f, b);
Matriz B = new Matriz(c, d);
Matriz C;
Console.WriteLine("\nIncerta los elementos de la matriz A son:");
A.leer();
Console.WriteLine("\nIncerta los elementos de la matriz B son:");
B.leer();
Console.WriteLine("\nlos elementos de la matriz A son:");
A.imprimir();
Console.WriteLine("\nlos elementos de la matriz B son:");
B.imprimir();
Console.WriteLine("\nA*B= ");
C = A * B;
C.imprimir();
}
/*
public void determinante()
{
int f, b;
do
{
Console.Write("\n¿Cuantos renglones tiene la matriz? ");
f = leer_int();
Console.Write("\n¿Cuantas columnas tiene la matriz? ");
b = leer_int();
if (f != b)
{
Console.WriteLine("\nError: Para poder obtener el determinante");
Console.WriteLine("\tla matriz debe ser cuadrada");
}
} while (f != b);
Matriz A = new Matriz(f, b);
Console.WriteLine("\nIncerta los elementos de la matriz son:");
A.leer();
Console.WriteLine("\nlos elementos de la matriz son:");
A.imprimir();
float det = 1;
if (f == 2)
{
det = (A[0, 0] * A[1, 1]) - (A[0, 1] * A[1, 0]);
}
if (f == 3)
{
det += A[0, 0] * (A[1, 1] * A[2, 2] - A[1, 2] * A[2, 1]);
det += -A[0, 1] * (A[1, 0] * A[2, 2] - A[1, 2] * A[2, 0]);
det += A[0, 2] * (A[1, 0] * A[2, 1] - A[1, 1] * A[2, 0]);
det -= 1;
}
if (f == 4)
{
det += A[0, 0] * (A[1, 1] * (A[2, 2] * A[3, 3] - A[2, 3] * A[3, 2]) - A[1, 2] * (A[2, 1] * A[3, 3] - A[2, 3] * A[3, 1]) + A[1, 3] * (A[2, 1] * A[3, 2] - A[2, 2] * A[3, 1]));
det += -A[0, 1] * (A[1, 0] * (A[2, 2] * A[3, 3] - A[2, 3] * A[3, 2]) - A[1, 2] * (A[2, 0] * A[3, 3] - A[2, 3] * A[3, 0]) + A[1, 3] * (A[2, 0] * A[3, 2] - A[2, 2] * A[3, 0]));
det += A[0, 2] * (A[1, 0] * (A[2, 1] * A[3, 3] - A[2, 3] * A[3, 1]) - A[1, 1] * (A[2, 0] * A[3, 3] - A[2, 3] * A[3, 0]) + A[1, 3] * (A[2, 0] * A[3, 1] - A[2, 1] * A[3, 0]));
det += -A[0, 3] * (A[1, 0] * (A[2, 1] * A[3, 2] - A[2, 2] * A[3, 1]) - A[1, 1] * (A[2, 0] * A[3, 2] - A[2, 2] * A[3, 0]) + A[1, 2] * (A[2, 0] * A[3, 1] - A[2, 1] * A[3, 0]));
det -= 1;
}
Console.WriteLine("\nEl determinate es:");
string str = String.Format("\t{0:e}", det);
Console.Write(str);
}
*/
public static int menu()
{
int n;
Console.WriteLine("\nOperaciones de matrices");
do
{
Console.WriteLine("\t(1)Suma");
Console.WriteLine("\t(2)Multiplicacion");
Console.WriteLine("\t(3)Determinante");
Console.WriteLine("\t(4)Salir");
n = leer_int();
} while (n < 1 || n > 4);
return n;
}
}
class Test_Matriz
{
public static void Main()
{
for (; ; )
{
int op = Matriz.menu();
switch (op)
{
case 1: Matriz.suma();
break;
case 2: Matriz.multiplica();
break;
case 3:// Matriz.determinante();
break;
}
if (op == 4)
break;
}
}
}
en si la pregunta seria: ¿como le hago para que no salgan esos errores?
bueno espero que me puedan ayudar; el compilador que tengo es visual studio 2008 expres edition
y es con c#
de antemano gracias
matriz.multiplica();
y
matriz.suma();
y en ellas las respectivas operaciones
Soy nuevo programando, (diria MUY nuevo) y por exigencia academica necesito aprender tooodooo lo relacionado con matrices... pero solo se nos pide trabajar con C# ... Me podrias Ayudar???
mi correo: otahola@hotmail.com