Autor
|
Tema: una duda simple. como hallar el maximo de una columna (Leído 4,487 veces)
|
XpandyX
Desconectado
Mensajes: 55
|
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.
|
|
« Última modificación: 27 Septiembre 2010, 04:02 am por [D4N93R] »
|
En línea
|
|
|
|
Ari Slash
|
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# saludos
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
La longitud es fija o es dinamica?
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Los códigos por favor dentro de [code=csharp][/code]
Un saludo
|
|
|
En línea
|
|
|
|
seba123neo
|
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 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.
|
|
|
En línea
|
|
|
|
XpandyX
Desconectado
Mensajes: 55
|
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# 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
|
|
|
En línea
|
|
|
|
XpandyX
Desconectado
Mensajes: 55
|
La longitud es fija o es dinamica?
Hola es bueno si te refieres a eso si es fija gracias por responder
|
|
|
En línea
|
|
|
|
XpandyX
Desconectado
Mensajes: 55
|
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 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
|
|
|
En línea
|
|
|
|
Siuto
Ex-Staff
Desconectado
Mensajes: 1.587
Que puedo decir??
|
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.
|
|
« Última modificación: 28 Septiembre 2010, 04:05 am por Siuto »
|
En línea
|
|
|
|
|
|