punto silla de una matriz

Iniciado por criser20, 5 Abril 2014, 04:57 AM

0 Miembros y 3 Visitantes están viendo este tema.

criser20

hola me podrian ayudar a tener una idea de como entrarle pq de verdad que no se como hacerle miren

int main()
{int opc, f, c,  matriz[f][c] ;
do{
        system("CLS");
 
   printf("8.punto de silla");
   printf("0.Salir\n");
   printf("que opcion desea?\n");
   scanf("%d", &opc);
    switch(opc){

case 8:
  printf("numero de filas:");
    scanf("%d", &f);
    printf("numero de columnas:");
    scanf("%d", &c);
    llenaMatriz(f, c, matriz);
    printf("la matriz es:\n");
    despliegaMatriz(f,c,matriz);
    break;
  }

   } while(opc!=0);
    return 0;
}

void llenaMatriz(int n, int m, int matriz[n][m]){
int i, j;
    for (i=0; i<n; i++) {
        for(j=0; j<m; j++) {
            printf("Introduzca la posicion %d, %d: ", i+1, j+1);
            scanf("%d", &matriz[i][j]);
        }

    }
}

void despliegaMatriz(int n, int m, int matriz[n][m]){
int i, j;
    for(i=0; i<n; i++) {
        for (j=0; j<m; j++) {
            printf("%d\t", matriz[i][j]);
        }
        printf("\n");
    }
}

noele1995

Bueno puedes ir columna por columna buscando el mayor, y cuando lo encuentras despues compruebas su fila a ver si es el menor.
Cita de: criser20 en  5 Abril 2014, 04:57 AM

int opc, f, c,  matriz[f][c] ;

Estas declarando una matriz de tamaño f x c cuando f y c no estan inicializados y su contenido es basura, inicializalos o usa una constante o un define.

Saludos


criser20

Cita de: noele1995 en  5 Abril 2014, 13:58 PM
Bueno puedes ir columna por columna buscando el mayor, y cuando lo encuentras despues compruebas su fila a ver si es el menor.
Estas declarando una matriz de tamaño f x c cuando f y c no estan inicializados y su contenido es basura, inicializalos o usa una constante o un define.

Saludos


se que seria asi lo que no se como hacer eso :/ y en el libro que tengo solo habla de lo basico y no aparece eso >.<

leosansan

#3
Cita de: criser20 en  5 Abril 2014, 19:52 PM
se que seria asi lo que no se como hacer eso :/ y en el libro que tengo solo habla de lo basico y no aparece eso >.<

Para empezar tienes que arreglar lo de la matriz.

Como  ya te indiqué en dos de los temas anteriores, no puedes declararla antes de conocer sus dimensiones.


* Esto no:

Código (cpp) [Seleccionar]
int opc, f, c,  matriz[f][c] ;

* Esto si:

Código (cpp) [Seleccionar]

.........................
int  f, c;
 printf("numero de filas:");
 scanf("%d", &f);
 printf("numero de columnas:");
 scanf("%d", &c);
 int matriz[f][c];
...........................


Y respecto al tema del punto silla sólo tienes que seguir los pasos que te indicó noele1995.

Por ejemplo, primero calculas el máximo de cada columna (los valores de mayor y menor pones tu los que consideres, aunque para hacerlo bien habría que usar la librería limits.h y elegir el máximo=INT_MIN y mínimo=INT_MAX de los int):


Código (cpp) [Seleccionar]
int i,iM,jm ,j,k,mayor=-1000,menor=1000;
 for (j=0; j<m; j++){
   mayor=-1000,menor=1000;
   for(i=0; i<n; i++) {
     if (matriz[i][j]>mayor){
       mayor=matriz[i][j];
       iM=i;
     }
   }


Y una vez localizado el máximo de una columna, cosa que hace el código anterior, miras cual es el mínimo de la fila donde está ese máximo:

Código (cpp) [Seleccionar]
for (k=0; k<m; k++){
     if (matriz[iM][k]<menor){
       menor=matriz[iM][k];
       jm=k;
     }
   }


Y ya sólo queda comparar si el mayor de la columna coincide con el mínimo de la fila correspondiente:

Código (cpp) [Seleccionar]
if (mayor==menor)
     printf ("\nPunto de silla el a[%d][%d]=%d\n",iM,jm,matriz[iM][jm]);


Si aplicas lo anterior a la matriz:

Citar
1       2       3
2       3       4
1       5       2



obtendrás:

Citar
Punto de silla el a[1][0]=2

Espero que lo tengas ahora más claro.

Saludos!.

criser20

Cita de: leosansan en  5 Abril 2014, 20:25 PM
Para empezar tienes que arreglar lo de la matriz.

Como  ya te indiqué en dos de los temas anteriores, no puedes declararla antes de conocer sus dimensiones.


* Esto no:

Código (cpp) [Seleccionar]
int opc, f, c,  matriz[f][c] ;

* Esto si:

Código (cpp) [Seleccionar]

.........................
int  f, c;
 printf("numero de filas:");
 scanf("%d", &f);
 printf("numero de columnas:");
 scanf("%d", &c);
 int matriz[f][c];
...........................


Y respecto al tema del punto silla sólo tienes que seguir los pasos que te indicó noele1995.

Por ejemplo, primero calculas el máximo de cada columna (los valores de mayor y menor pones tu los que consideres, aunque para hacerlo bien habría que usar la librería limits.h y elegir el máximo=INT_MIN y mínimo=INT_MAX de los int):


Código (cpp) [Seleccionar]
int i,iM,jm ,j,k,mayor=-1000,menor=1000;
 for (j=0; j<m; j++){
   mayor=-1000,menor=1000;
   for(i=0; i<n; i++) {
     if (matriz[i][j]>mayor){
       mayor=matriz[i][j];
       iM=i;
     }
   }


Y una vez localizado el máximo de una columna, cosa que hace el código anterior, miras cual es el mínimo de la fila donde está ese máximo:

Código (cpp) [Seleccionar]
for (k=0; k<m-1; k++){
     if (matriz[iM][k]<menor){
       menor=matriz[iM][k];
       jm=k;
     }
   }


Y ya sólo queda comparar si el mayor de la columna coincide con el mínimo de la fila correspondiente:

Código (cpp) [Seleccionar]
if (mayor==menor)
     printf ("\nPunto de silla el a[%d][%d]=%d\n",iM,jm,matriz[iM][jm]);


Si aplicas lo anterior a la matriz:


obtendrás:

Espero que lo tengas ahora más claro.

Saludos!.


gracias y por cierto no sabras de algun libro que explique cosas como esta que me peuda servir para futuras referencias?

leosansan

#5
Cita de: criser20 en  5 Abril 2014, 20:45 PM
gracias y por cierto no sabrás de algún libro que explique cosas como esta que me pueda servir para futuras referencias?

En la página de inicio tienes un enlace a diversos libros muy válidos.

Si te digo la verdad he llegado a un punto en  que los libros sólo me dicen más de los mismo, en cambio las diversas cosas que aprendo  y muy interesantes en los diversos foros en los que participo, es crema.

Yo te aconsejo seguir de entrada dos o tres buenos libros y nada si te trabas en alguno de los ejercicios colgar en el foro tus avances. Seguro que con las respuestas que te ofrezcan los usuarios iras sacando poco a poco buenos códigos y/o prácticas de programación. La práctica lo es casi todo, eso si, con un nivel de  teoría correcto y profundo.  


¡¡¡¡ Saluditos! ..... !!!!