Hola espero que me puedan ayudar la cuestion es que he venido haciendo una matriz en C# y con lo cual me tope con una duda muy grande bueno intente resolverla de muchas maneras "Se trata de como hallar el maximo de una sola columna"
Mi matriz es de esta manera
Columna1 Columna2 Columna3
fila 1 10 80 10
fila 2 0 0 10
fila 3 1 0 10
fila 4 2 100 10
fila 5 3 50 10
fila 6 5 20 10
fila 7 80 30 10
fila 8 15 40 12
fila 9 84 50 80
fila 10 10 10 100
bueno los valores no importan tanto, solo como puedo hallar el maximo de cada columna? he intentadp recorriendo pero el caso es que no encuentro la manera.
Maximo = vector[0,0];
for(i=0;i<Filas;i++)
{
for(j=0;j<columnas;j++)
{
supongo que tambien se utilizara un.
if(vector[i,j]>Maximo)
Maximo=Vector[i,j];
}
}
Supongo que de esa manera seria? pero en todo caso me sale el maximo de toda la matriz. o talvez se hace de otra manera en la cual se recorre primero el "j" y luego el "i"?, tambien estuve pensando en un vector simple el cual me guarde el maximo de cada columna pero no me sale. Espero que puedan ayudarme. Saludos y gracias de antemano.
basta con agregar una condicion mas a ese IF
si vector i,j es mayor al maximo && j es igual a 1, entonces maximo es igual a vector i,j //comentario, 1 se refiere a columna 1
no se C# ;D
saludos
La longitud es fija o es dinamica?
Los códigos por favor dentro de [code=csharp][/code]
Un saludo
Hola, podrias usar un ordenamiento para arrays con multiples dimensiones, o sea como usar .Sort , pero como esta solo funciona para una dimensión, podes usar la Interface IComparer.
aca te pongo un ejemplo de una matriz con 2 dimensiones y como ordena los elementos de cada una...vos adaptalo a tu ejemplo..y pasalo a C#...si no podes te ayudo.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim vNumeros(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
Dim tagArray() As Integer = {0, 1, 2, 3}
Dim myComparer As New RectangularComparer(vNumeros)
myComparer.vDimension = 0
Array.Sort(tagArray, myComparer)
'Primera Dimensión
For i As Integer = 0 To tagArray.Length - 1
Debug.WriteLine(vNumeros(tagArray(i), 0))
Next
Debug.WriteLine("")
myComparer.vDimension = 1
Array.Sort(tagArray, myComparer)
'Segunda Dimensión
For i As Integer = 0 To tagArray.Length - 1
Debug.WriteLine(vNumeros(tagArray(i), 1))
Next
End Sub
End Class
Class RectangularComparer
Implements IComparer
Public vDimension As Integer
Private sortArray(,) As Integer
Public Sub New(ByVal theArray(,) As Integer)
sortArray = theArray
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim i1 As Integer = DirectCast(x, Integer)
Dim i2 As Integer = DirectCast(y, Integer)
Return sortArray(i1, vDimension).CompareTo(sortArray(i2, vDimension))
End Function
End Class
lo que hace es llenar un array de 2 dimensiones con algunos valores, despues llama a esta clase que ordena los numeros para la dimensión que quieras y luego te imprime los valores ordenados.
saludos.
Cita de: Ari-Slash en 27 Septiembre 2010, 02:57 AM
basta con agregar una condicion mas a ese IF
si vector i,j es mayor al maximo && j es igual a 1, entonces maximo es igual a vector i,j //comentario, 1 se refiere a columna 1
no se C# ;D
saludos
Hola gracias por responder bueno la verdad pense qeu iva a funcionar lo que me dijiste pero al cuestion es que cuando hago aquello pos me dice que nos e puede convertir implicitamente el tipo int en tipo bool y la verda dno se como seria..... espero me respondas :D
Cita de: Lord R.N.A. en 27 Septiembre 2010, 03:51 AM
La longitud es fija o es dinamica?
Hola es bueno si te refieres a eso si es fija :D gracias por responder
Cita de: seba123neo en 27 Septiembre 2010, 04:18 AM
Hola, podrias usar un ordenamiento para arrays con multiples dimensiones, o sea como usar .Sort , pero como esta solo funciona para una dimensión, podes usar la Interface IComparer.
aca te pongo un ejemplo de una matriz con 2 dimensiones y como ordena los elementos de cada una...vos adaptalo a tu ejemplo..y pasalo a C#...si no podes te ayudo.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim vNumeros(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
Dim tagArray() As Integer = {0, 1, 2, 3}
Dim myComparer As New RectangularComparer(vNumeros)
myComparer.vDimension = 0
Array.Sort(tagArray, myComparer)
'Primera Dimensión
For i As Integer = 0 To tagArray.Length - 1
Debug.WriteLine(vNumeros(tagArray(i), 0))
Next
Debug.WriteLine("")
myComparer.vDimension = 1
Array.Sort(tagArray, myComparer)
'Segunda Dimensión
For i As Integer = 0 To tagArray.Length - 1
Debug.WriteLine(vNumeros(tagArray(i), 1))
Next
End Sub
End Class
Class RectangularComparer
Implements IComparer
Public vDimension As Integer
Private sortArray(,) As Integer
Public Sub New(ByVal theArray(,) As Integer)
sortArray = theArray
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim i1 As Integer = DirectCast(x, Integer)
Dim i2 As Integer = DirectCast(y, Integer)
Return sortArray(i1, vDimension).CompareTo(sortArray(i2, vDimension))
End Function
End Class
lo que hace es llenar un array de 2 dimensiones con algunos valores, despues llama a esta clase que ordena los numeros para la dimensión que quieras y luego te imprime los valores ordenados.
saludos.
Hola gracias por responder la verdad entendi muy poco del codigo por qeu recien esot aprendiendo y en C# y bueno la verdad nose como seria eso en C#. intente otros metodos pero nada. espero y me respondan porfa.
Saludos
Tu algoritmo te da el maximo de la matriz porque la esta recorriendo entera y nunca para hasta terminar.
for(i=0;i<Columnas;i++)
{
Maximo = 0 // Si son todos valores positivos podes ponerlo en 0
for(j=0;j<Filas;j++)
{
if(vector[i,j]>Maximo) Maximo=Vector[i,j];
}
// Guardar/imprimir el resultado de la columna
}
Cada vez que sale del bucle mas profundo es cuando terminas una columna, en ese momento tenes el maximo de la columna. Y nota que la inicializacion de Maximo la tenes que hacer una vez por columna y no una vez por matriz.
EDIT: Intercambien las filas por columnas, porque antes recorrias la matriz por filas y no por columnas.