maximo de una matriz?

Iniciado por feedf, 30 Junio 2013, 20:00 PM

0 Miembros y 1 Visitante están viendo este tema.

feedf

buenas tardes tengo que sacar el maximo de cada fila en la matriz m[5][20]

como seria?
yo pense algo asi , que recorra toda la fila uno y valla sacando max
pero habria que hacer 5 iguales me parece que debe haber una forma mas facil

espero una respuesta gracias

int c,f,max,auxc,auxf;
max=m1[1][1];
auxf=1;


for(f=1;f<=1;f++)
{
for(c=1;c<=20;c++)
{
if(m1[f][c]>max)
{
max=m1[f][c];
auxf=f;
auxc=c;
}


amchacon

#1
Ibas bien:

Código (cpp) [Seleccionar]
int Maximo[5] = {m[0][0],m[0][0],m[0][0],m[0][0],m[0][0]};
int f = 0;
int c = 0;

for (f = 0; f < 5;f++)
{
  for (c= 1; c < 5;c++)
  {
        if (m[c][f] > Maximo[f])
            Maximo[f] = m[c][f];
  }
}


No lo he probado, pero debería funcionar.

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

m@o_614

#2
Yo lo haria de esta manera, donde n es el numero de filas y m es el numero de columnas, al entrar al ciclo la variable mayor se inicializa con (0,0) el valor del primer elemento de la primer fila, una vez que se va recorriendo la fila y se obtiene el valor mayor ( de fila 0) se sale del ciclo for y mayor se vuelve a inicializar con el valor del primer elemento pero ahora de la segunda fila ( fila 1), si te fijas en el primer ciclo se aumenta i para que vaya recorriendo las filas (0,1,2,3..) pero el valor de la columna nunca cambia porque tienes que iniciar desde la columna 0. los valores mayores de cada fila se guardan en un vector

int main()
{
   int i,j,mayor,m[TAM][TAM];

   for(i=0;i < n;i++)
   {
       mayor = m[i][0];
       for(j=0; j< m;j++)
       {
           if(m[i][j] > mayor)
               mayor = m[i][j];
       }
       v[i] = mayor;
   }

KaL3o

Cita de: amchacon en 30 Junio 2013, 22:54 PM

Código (cpp) [Seleccionar]
int Maximo[5] = {m[0][0],m[0][0],m[0][0],m[0][0],m[0][0]};
int f = 0;
int c = 0;

for (f = 0; f < 5;f++)
{
   for (c= 1; c < 5;c++)
   {
         if (m[c][f] > Maximo[f])
             Maximo[f] = m[c][f];
   }
}


No lo he probado, pero debería funcionar.


creo q te hizo falta cambiar las filas y columnas en el if, seria

         if (m[f][c] > Maximo[f])
             Maximo[f] = m[f][c];

supongo un pequeño desliz al escribir rapidamente :)


Cita de: m@o_614 en  1 Julio 2013, 05:43 AM
int main()
{
    int i,j,mayor,m[TAM][TAM];

    for(i=0;i < n;i++)
    {
        mayor = m[i][0];
        for(j=0; j< m;j++)
        {
            if(m[i][j] > mayor)
                mayor = m[i][j];
        }
        v[i] = mayor;
    }

en el ciclo interno puedes inicializar j con 1.

Salu2 :)
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

feedf

gente le hago una consulta , lso codigos que me dieron son para definir el maximo de cada fila de una matriz? o de toda la matriz?

por que poniendo por ejemplo

int Maximo[5] = {m[0][0],m[0][0],m[0][0],m[0][0],m[0][0]};
int f = 0;
int c = 0;

for (f = 0; f < 5;f++)
{
   for (c= 1; c < 5;c++)
   {
         if (m[c][f] > Maximo[f])
             Maximo[f] = m[c][f];
   }
}


estaria recorriendo toda la matriz o estaria recorriendo CADA fila y guardando el maximo en el vector ?

muchas gracias

eferion

Código (cpp) [Seleccionar]
for (f = 0; f < 5;f++)
{
   for (c= 1; c < 5;c++)


el primero es un bucle para las filas ( por eso la f por nombre de variable ) que las recorre de la 0 a la 4. El segundo es un bucle para columnas... y las recorre de la 0 a la 4... y eso para cada valor de f.

Dicho esto, si, estarías recorriendo toda la matriz.

Y dicho esto también me permito añadir lo siguiente: si te pierdes con dos bucles y cuatro líneas de código ponte las pilas porque esto no es ni tan siquiera la punta del iceberg. Aprende a usar el depurador de c++ y a seguir la traza de los programas... te ayudará a comprender mejor cómo funciona el código... y haz muuuuchas prácticas :)

amchacon

Cita de: feedf en  1 Julio 2013, 23:42 PMestaria recorriendo toda la matriz o estaria recorriendo CADA fila y guardando el maximo en el vector ?
Ambas afirmaciones son sinonimas (recorrer todas las filas de una matriz = recorrer toda la matriz).

Y si, guarda el máximo de cada fila en el vector Maximo.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

feedf

te hago una consulta

mi codigo quedo asi mira

void opc2(float m1[5][20]) /* funciona pero para una sola Gaceosa(fila) */
{

int c,f,auxc,auxf,i;
int max[5]={m1[0][0],m1[0][0],m1[0][0],m1[0][0],m1[0][0]};
int aux[5]={0};

   i=0;

for(f=1;f<=5;f++)
{
for(c=1;c<=20;c++)
{
if(m1[f][c]>max[f])
{
max[f]=m1[f][c];            
       aux[f]=c;
}
}

}

for(i=1;i<=5;i++)
{

printf("para la gaceosa %d se embotello mas en el centro %d\n",i,aux[i]);
}


}


funciona bien pero cuando lo corro se guarda en el vector aux[5](posicion 5 ) el valor 20 sin haber tocado esa posicion y las demas quedan en 0 o en los valores que deberian estar
no entiendo porque me podrias ayduar?

amchacon

Código (cpp) [Seleccionar]
aux[f]=c;
La c va desde 0 a 20, de que te extrañas?

Usa el vector max que para eso lo puse, por cierto me equivoqué aquí

Código (cpp) [Seleccionar]
int max[5]={m1[0][0],m1[0][0],m1[0][0],m1[0][0],m1[0][0]};

Prueba lo siguiente:

Código (cpp) [Seleccionar]
int c,f;
int max[5];

for (f = 0; f <5;f++)
{
    max[f] = 0;
   
    for (c=1;c < 20;c++)
    {
         if (m1[f][c] > max[f])
              max[f] = m1[f][c]
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

feedf

claro pero al guardar la matriz en el vector max me guarda el valor qe esta en esas cordenadas y lo que yo necesitaria es saber en que columna esta el maximo y no el valor del maximo
nose si m estoy explicando bien o estoy pifiando en algo XD

jaj gracias