Exactamente, en mi opinion: no creo que sea necesario más emoticons de los que hay ahora.
Salu2s
Salu2s
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúpublic static int Determinant(int[,] matrix)
static int DeterminantOrder2(int[,] matrix)
static int DeterminantRec(int[,] matrix)
static void FillMatrix(int[,] matrix, int[,] toFill, int row, int column)
public static int Determinant(int[,] matrix)
{
//Comprobamos que sea cuadrada
if (matrix.GetLength(0) != matrix.GetLength(1))
throw new ArgumentException("La matriz debe ser cuadrada");
//Vemos si es de orden 2
if (matrix.GetLength(0) == 2)
return DeterminantOrder2(matrix);
else
return DeterminantRec(matrix);
}
matrix.GetLength(0) != matrix.GetLength(1)
static int DeterminantOrder2(int[,] matrix)
{
return (matrix[0, 0] * matrix[1, 1]) - (matrix[0, 1] * matrix[1, 0]);
}
static int DeterminantRec(int[,] matrix)
{
//Caso de parada que sea de orden 2 y lo calculamos con el método para
//el determinante de orden 2
if (matrix.GetLength(0) == 2)
{
return DeterminantOrder2(matrix);
}
else
{
int det = 0; //Inicializamos una variable para almacenar el valor del determinante
//En este ciclo recorremos una fila para para obtener el adjunto de cada elemento
//de esta fila así calcular el determinante de este fijando cada elemento de la fila
//0
for (int i = 0; i < matrix.GetLength(1); i++)
{
//Creamos una matriz para rellenarla con la matriz para luego calcular su
//determinante llamando recursivo. Esta matriz tiene un orden menor (en una
//unidad) que la matriz original
int[,] minor = new int[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
//Aquí llamamos al método auxiliar que se encarga de rellenar la matriz auxiliar
FillMatrix(matrix, minor, 0, i);
//Aquí lo que vamos a definir si lo que se hace es sumar o restar. Esto es una
//manera de representar el cambio de signo que trae consigo el (-1) elevado a
//i+j. En este caso como utilizamos la fila 0 siempre, ese número va a ser
//positivo solo cuando estemos en una columna (j) que sea par, negativo en
//caso contrario
if (i % 2 == 0)
//Aquí lo que hacemos es multiplicar el valor del elemento en cuestión
//por el adjunto teniendo en cuenta el signo correspondiente y se lo
//sumamos a la variable det (en el else es lo mismo lo que con el signo
//negativo). Aquí es donde está la llamada recursiva pues hay que calcular el
//determinante de la matriz "minor"
det+= (matrix[0, i]) * (DeterminantRec(minor));
else
det+= (-matrix[0, i]) * (DeterminantRec(minor));
}
//Una vez que ya recorrimos toda la fila, devolvemos el determinante
return det;
}
}
static void FillMatrix(int[,] matrix, int[,] toFill, int row, int column)
{
//Ciclo anidado para recorrer la matriz desde la cual se van a sacar los valores
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
//Si estamos en una fila menor a la que se va a eliminar
if (i < row)
{
//Si estamos en una columna menor a la que se va a eliminar
if (j < column)
toFill[i, j] = matrix[i, j]; //Copiamos el valor normalmente
else
if (j > column)
//En este momento estamos en una fila menor a la que se va a
//eliminar pero por encima de la columna a eliminar, por lo tanto
//se saca el valor de la matriz y se coloca en una columna con una
//unidad menos (j-1)
toFill[i, j - 1] = matrix[i, j];
}
else
//Si estamos en una fila mayor a la que se va a eliminar
if (i > row)
{
//Si estamos en una columna mayor a la que se va a eliminar
if (j < column)
//En este momento estamos por encima de la fila a eliminar pero por debajo
//de la columna a eliminar, por lo tanto tenemos que quitarle una unidad a la fila
//(i-1)
toFill[i - 1, j] = matrix[i, j];
else
if (j > column)
//Aquí estamos por encima tanto de la fila como de la columna a eliminar por lo
//tanto le quitamos una unidad tanto a las filas como a la columna (i-1, j-1)
toFill[i - 1, j - 1] = matrix[i, j];
}
}
}
}
'4' '2' '10' '+' '*' '5' '-' = '43'
Citar
-Si hay elementos en la bandeja de entrada
-Leer el primer elemento de la bandeja de entrada.
-Si el elemento es un operando.
-Poner el operando en la pila.
-Si no, el elemento es una función (los operadores, como "+", no son más que funciones que toman dos argumentos).
-Se sabe que la función x toma n argumentos.
-Si hay menos de n argumentos en la pila
-(Error) El usuario no ha introducido suficientes argumentos en la expresión.
-Si no, tomar los últimos n operandos de la pila.
-Evaluar la función con respecto a los operandos.
-Introducir el resultado (si lo hubiere) en la pila.
-Si hay un sólo elemento en la pila
-El valor de ese elemento es el resultado del cálculo.
-Si hay más de un elemento en la pila
-(Error) El usuario ha introducido demasiados elementos.
static long EvalPosFixed(string[] exp)
{
Stack<long> values = new Stack<long>();
long first, second = 0;
for (int i = 0; i < exp.Length; i++)
{
switch (exp[i])
{
case "+":
if (values.Count < 2)
throw new Exception("There are not enough arguments to operate");
second = values.Pop();
first = values.Pop();
values.Push(first + second);
break;
case "-":
if (values.Count < 2)
throw new Exception("There are not enough arguments to operate");
second = values.Pop();
first = values.Pop();
values.Push(first - second);
break;
case "*":
if (values.Count < 2)
throw new Exception("There are not enough arguments to operate");
second = values.Pop();
first = values.Pop();
values.Push(first * second);
break;
case "/":
if (values.Count < 2)
throw new Exception("There are not enough arguments to operate");
second = values.Pop();
if (second == 0)
throw new DivideByZeroException("Can't divide by 0");
first = values.Pop();
values.Push(first / second);
break;
default:
values.Push(long.Parse(exp[i]));
break;
}
}
if (values.Count > 1)
throw new Exception("The expression had more arguments than it should have");
return values.Peek();
}
string[] expresion = { "4", "2", "10", "+", "*", "5", "-"};
Entrada | Operación | Pila | Comentario |
4 | Introducir en la pila | 4 | |
2 | Introducir en la pila | 4, 2 | |
10 | Introducir en la pila | 4, 2, 10 | |
+ | Suma | 4, 12 | Toma los dos últimos valores de la pila (2, 10) y los sustituye por el resultado (12) |
* | Multiplicación | 48 | Toma los dos últimos valores de la pila (4, 12) y los sustituye por el resultado (48) |
5 | Introducir en la pila | 48 5 |
- | Resta | 43 | Toma los dos últimos valores de la pila (48, 5) y los sustituye por el resultado (43) |
CitarLa entrada consiste de varios casos de prueba hasta fin de archivo. Cada caso de prueba consiste en un número entero <= 1000.
MIENTRAS NO FINAL DEL ARCHIVO
HACER
INICIALIZAR VARIABLES
LEER NUMERO
REALIZAR LAS OPERACIONES
DAR RESULTADO
FIN MIENTRAS
Cita de: Senior++ en 16 Julio 2015, 17:21 PM
Muchos hijos dicen que por sus padres darían todo... ¿tu estaría dispuesto a dar un ORGANO a tu padre para salvarle la vida y que pueda durar muchos años mas? incluso darle la vida? sean sinceros...
Esta pregunta me surgio por que vi varios Twits diciendo que Nadie da la vida por nadie, y quiero saber...
Cita de: nito-quie en 16 Julio 2015, 10:36 AM
estoy empezando con la programacion y queria saber las diferencias entre
visual studio 2003. 2005. 2008. 2010 y 2012
Cita de: Orubatosu en 15 Julio 2015, 19:00 PM
Antiguamente también las conexiones eran con modem de 56K