Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - criser20

#1
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?
#2
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 >.<
#3
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");
    }
}
#4
Programación C/C++ / Re: media con arreglos
4 Abril 2014, 18:46 PM
gracias a ambos ya lo resolvi de verdad muchas gracias
#5
Programación C/C++ / media con arreglos
4 Abril 2014, 07:01 AM
no entiendo pq no me funciona esto para sacar la media de un arreglo dinamico, me podrian decir que tiene mal o algun consejo?
code=c]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200



void media(int n,int arr[MAX]);

int main()
{int opc, n, arreglo[n] ;

   do{
        system("CLS");
   printf("Seleccione una accion.\n");
   printf("1.Multiplicacion de matrices.\n");
   printf("2.transpuesta de una matriz.\n");
   printf("4.fibonacci.\n");
   printf("7.Media,Varianza.");
   printf("0.Salir");
   scanf("%d", &opc);
    switch(opc){
    case 0:
        printf("gracias por usar el programa");
        system("PAUSE");
        break;

case 7:
    printf("cuantos numeros desea evaluar?");
    scanf("%d", &n);
    media(n, arreglo);
    break;


    }

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


void media(int n,int arr[MAX]){
int i, x=0, j;
for (i=0;i<n;i++){
    printf("ingrese el %d numero", i+1);
    scanf("%d", &arr[i]);
}
for (j=0;j<n;j++){
    x=x+arr[j];
}
printf("la media es %d", x/n);
}
#6
Programación C/C++ / Re: Matrices en C
3 Abril 2014, 20:26 PM
Cita de: leosansan en  3 Abril 2014, 20:04 PM

Código (cpp) [Seleccionar]
void llenaMatriz(int n, int m, int matriz[n][m]

Y análogamente en las demás funciones y declaraciones.

Y lo que no puedes hacer en la traspuesta de repente cambiar las filas por las columnas sin más. Sólo si son cuadradas las matrices no petará el código.


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



me sigue dando el error si quieres correlo para ver si es tal vez mi pc o no se pero no me quiere continuar a la segunda fila de la matriz
#7
Programación C/C++ / Matrices en C
3 Abril 2014, 19:38 PM
ayudenme que por alguna razon el programa no me avanza a la segunda fila, es de una tarea y eso es lo que he avanzado y me hace lo mismo en la transpuesta ayuda porfavor:((


#include <stdio.h>
#include <stdlib.h>
#define MAX 200

void llenaMatriz(int n, int m, int matriz[MAX][MAX]);
void despliegaMatriz(int n, int m, int matriz[MAX][MAX]);
void transpuesta(int n, int m, int matriz[MAX][MAX]);
void multiplicacion(int fila, int col, int fila2, int col2, int A[MAX][MAX], int B[MAX][MAX], int C[MAX][MAX]);

int main()
{int opc, f, c, c2, f2, matriz[f][c], matriz2[f][c], matriz3[f][c];

   do{
        system("CLS");
   printf("Seleccione una accion.\n");
   printf("1.Multiplicacion de matrices.\n");
   printf("2.transpuesta de una matriz.\n");
   scanf("%d", &opc);
    switch(opc){
case 1:
    printf("numero de filas:");
    scanf("%d", &f);
    printf("numero de columnas:");
    scanf("%d", &c);
    llenaMatriz(f, c, matriz);

    printf("numero de filas de la segunda matriz:");
    scanf("%d", &f2);
    printf("numero de columnas de la segunda matriz:");
    scanf("%d", &c2);
    llenaMatriz(f2, c2, matriz2);
    multiplicacion(f, c, f2, c2, matriz, matriz2, matriz3);
    despliegaMatriz(f, c, matriz);
    despliegaMatriz(f2, c2, matriz2);
    despliegaMatriz(f, c2, matriz3);
    break;

case 2:
    printf("numero de filas:");
    scanf("%d", &f);
    printf("numero de columnas:");
    scanf("%d", &c);
    llenaMatriz(f, c, matriz);
    transpuesta(f, c, matriz);
    break;


    }

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

void llenaMatriz(int n, int m, int matriz[MAX][MAX]){
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[MAX][MAX]){
int i, j;
    for(i=0; i<n; i++) {
        for (j=0; j<m; j++) {
            printf("%d\t", matriz[i][j]);
        }
        printf("\n");
    }
}

void multiplicacion(int fila, int col, int fila2, int col2, int A[MAX][MAX], int B[MAX][MAX], int C[MAX][MAX]) {
    int i, j, k;
if(col==fila2){
    for(i=0;i<fila;i++){
      for(j=0;j<col2;j++){
          C[i][j]=0;
          for(k=0;k<col;k++){
              C[i][j]=(C[i][j]+(A[i][k]*B[k][j]));
          }
      }
  }
}else{printf("no es posible la multiplicacion");}
}


void transpuesta(int n, int m, int matriz[MAX][MAX]){
int i, j;

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