elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  una duda simple. como hallar el maximo de una columna
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: una duda simple. como hallar el maximo de una columna  (Leído 4,477 veces)
XpandyX

Desconectado Desconectado

Mensajes: 55


Ver Perfil
una duda simple. como hallar el maximo de una columna
« en: 27 Septiembre 2010, 02:44 am »

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.


Código
  1. Maximo = vector[0,0];
  2. for(i=0;i<Filas;i++)
  3.    {
  4.          for(j=0;j<columnas;j++)
  5.              {
  6.                     supongo que tambien se utilizara un.
  7.                     if(vector[i,j]>Maximo)      
  8.                      Maximo=Vector[i,j];
  9.               }          
  10.     }

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


Desconectado Desconectado

Mensajes: 1.783



Ver Perfil WWW
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #1 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


En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #2 en: 27 Septiembre 2010, 03:51 am »

La longitud es fija o es dinamica?
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #3 en: 27 Septiembre 2010, 04:02 am »

Los códigos por favor dentro de [code=csharp][/code]

Un saludo
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #4 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.

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        Dim vNumeros(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
  5.        Dim tagArray() As Integer = {0, 1, 2, 3}
  6.  
  7.        Dim myComparer As New RectangularComparer(vNumeros)
  8.        myComparer.vDimension = 0
  9.        Array.Sort(tagArray, myComparer)
  10.  
  11.        'Primera Dimensión
  12.  
  13.        For i As Integer = 0 To tagArray.Length - 1
  14.            Debug.WriteLine(vNumeros(tagArray(i), 0))
  15.        Next
  16.  
  17.        Debug.WriteLine("")
  18.  
  19.        myComparer.vDimension = 1
  20.        Array.Sort(tagArray, myComparer)
  21.  
  22.        'Segunda Dimensión
  23.        For i As Integer = 0 To tagArray.Length - 1
  24.            Debug.WriteLine(vNumeros(tagArray(i), 1))
  25.        Next
  26.    End Sub
  27. End Class
  28.  
  29. Class RectangularComparer
  30.    Implements IComparer
  31.  
  32.    Public vDimension As Integer
  33.    Private sortArray(,) As Integer
  34.  
  35.    Public Sub New(ByVal theArray(,) As Integer)
  36.        sortArray = theArray
  37.    End Sub
  38.  
  39.    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
  40.  
  41.        Dim i1 As Integer = DirectCast(x, Integer)
  42.        Dim i2 As Integer = DirectCast(y, Integer)
  43.  
  44.        Return sortArray(i1, vDimension).CompareTo(sortArray(i2, vDimension))
  45.    End Function
  46. 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 Desconectado

Mensajes: 55


Ver Perfil
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #5 en: 27 Septiembre 2010, 19:15 pm »

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

En línea

XpandyX

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #6 en: 27 Septiembre 2010, 19:22 pm »

La longitud es fija o es dinamica?


Hola es bueno si te refieres a eso si es fija :D gracias por responder
En línea

XpandyX

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #7 en: 27 Septiembre 2010, 19:25 pm »

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.

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        Dim vNumeros(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
  5.        Dim tagArray() As Integer = {0, 1, 2, 3}
  6.  
  7.        Dim myComparer As New RectangularComparer(vNumeros)
  8.        myComparer.vDimension = 0
  9.        Array.Sort(tagArray, myComparer)
  10.  
  11.        'Primera Dimensión
  12.  
  13.        For i As Integer = 0 To tagArray.Length - 1
  14.            Debug.WriteLine(vNumeros(tagArray(i), 0))
  15.        Next
  16.  
  17.        Debug.WriteLine("")
  18.  
  19.        myComparer.vDimension = 1
  20.        Array.Sort(tagArray, myComparer)
  21.  
  22.        'Segunda Dimensión
  23.        For i As Integer = 0 To tagArray.Length - 1
  24.            Debug.WriteLine(vNumeros(tagArray(i), 1))
  25.        Next
  26.    End Sub
  27. End Class
  28.  
  29. Class RectangularComparer
  30.    Implements IComparer
  31.  
  32.    Public vDimension As Integer
  33.    Private sortArray(,) As Integer
  34.  
  35.    Public Sub New(ByVal theArray(,) As Integer)
  36.        sortArray = theArray
  37.    End Sub
  38.  
  39.    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
  40.  
  41.        Dim i1 As Integer = DirectCast(x, Integer)
  42.        Dim i2 As Integer = DirectCast(y, Integer)
  43.  
  44.        Return sortArray(i1, vDimension).CompareTo(sortArray(i2, vDimension))
  45.    End Function
  46. 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 Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
Re: una duda simple. como hallar el maximo de una columna
« Respuesta #8 en: 28 Septiembre 2010, 02:58 am »

Tu algoritmo te da el maximo de la matriz porque la esta recorriendo entera y nunca para hasta terminar.


Código
  1. for(i=0;i<Columnas;i++)
  2. {
  3.    Maximo = 0 // Si son todos valores positivos podes ponerlo en 0
  4.  
  5.    for(j=0;j<Filas;j++)
  6.    {
  7.            if(vector[i,j]>Maximo) Maximo=Vector[i,j];
  8.    }
  9.  
  10.    // Guardar/imprimir el resultado de la columna
  11. }

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como evitar en una consulta que repita datos en una columna determinada?
Bases de Datos
papita5 2 3,392 Último mensaje 10 Noviembre 2011, 20:43 pm
por papita5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines