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;
}
Ibas bien:
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.
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;
}
Cita de: amchacon en 30 Junio 2013, 22:54 PM
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 :)
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
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 :)
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.
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?
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í
int max[5]={m1[0][0],m1[0][0],m1[0][0],m1[0][0],m1[0][0]};
Prueba lo siguiente:
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]
}
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
Joe, pues avisa xD.
int c,f;
int max[f];
int max_coordenada[5];
for (f = 0; f <5;f++)
{
max[f] = m[f][0];
max_coordenada[f] = 0;
for (c=1;c < 20;c++)
{
if (m1[f][c] > max[f])
{
max[f] = m1[f][c];
max_coordenada[f] = c;
}
}
mira esta igual y me sigue saliendo en la posicion 5 del aux se guarda 20
el tema es que en for(c=1;c<=20;c++) tengo que p oner <= sino si pongo el valor 20 no me lo toma y poniendo <20 solo llega al 19
estoy perdido xD
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++)
{
max[f]=m1[f][0];
aux[f]=0;
for(c=1;c<=20;c++)
{
if(m1[f][c]>max[f])
{
max[f]=m1[f][c];
aux[f]=c;
}
}
}
probe con tu code y en vez de 20 me tira 29999 lol
lo arregle un poco y me sigue tirando 20 qe raro
edit no dije nada la ptm xD
no puedo hacer qe no me tire 20 :s
Cita de: feedf en 2 Julio 2013, 00:51 AM
mira esta igual y me sigue saliendo en la posicion 5 del aux se guarda 20
No está igual, mira el bucle for:
for(f=1;f<=5;f++)
Menor o igual? Tiene que ser menor estricto. Además te estás saltando la primera fila:
for(f=0;f<5;f++)
Lo mismo con el otro for:
for(c=1;c<20;c++)
por que menor estricto? si la matriz llega a 20
si se elige la columna 20 no la toma por qe con el < solo no la toma
Cita de: feedf en 2 Julio 2013, 01:46 AM
por que menor estricto? si la matriz llega a 20
si se elige la columna 20 no la toma por qe con el < solo no la toma
Son 20 elementos a contar desde el cero, ergo los índices van 0-19
sabes que me sigue trayendo basura en la poscion 5 del vector fuuuuuuuuuuuuuuuuu
no cargo nada y se carga solo con 2 o 3
es una boludes pero me esta volviendo loco XD
Cita de: feedf en 2 Julio 2013, 02:34 AM
sabes que me sigue trayendo basura en la poscion 5 del vector fuuuuuuuuuuuuuuuuu
La posición 5 del vector sería [4] ;)
Por otro lado, asegurate de que la matriz esté inicializada completamente :silbar:
la verdad nose qe ***** ensima siento qe es una boludes y no la puedo razonar =(
lo resolvi agregandole una fila a la matriz quedo [6][20] y funciona bien
porque? nose
pero la verdad me queme la cabeza xD
Cita de: feedf en 2 Julio 2013, 04:20 AM
lo resolvi agregandole una fila a la matriz quedo [6][20] y funciona bien
¿Pusister el for como te dije? >:D