Matriz principal con secundaria

Iniciado por Jaua10, 21 Noviembre 2014, 06:01 AM

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

Jaua10

Buenas noches disculpen tengo una duda es posible hacer una matriz de 5x5 y que su diagonal principal se cambie por la diagonal secundaria? y viceversa? tengo un codigo pero no se como hacerlo en dev c++

engel lex

si es posible...

no se dan codigos hechos, se resuelven dudas, publica lo que llevas de codigo (usa las etiqeutas GeSHi) y en que tienes duda
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Jaua10

#2
Esto es lo que tengo adelantado y llevo dias tratando de resolver pero no logro conseguir que me ponga la diagonal principal como la secundaria
#include <stdio.h>
#include <conio.h>
main()
{
     int fila,columna,i,n,e,aux;  
     int matriz[10][10];        
     printf("Ingrese el dimension de fila: ");
     scanf("%d",&fila);
     printf("Ingrese el dimension de columna: ");
     scanf("%d",&columna);
     matriz[1][1]=matriz[fila][columna];
     printf("\nMatriz de [%d]x[%d]\n",fila,columna);
     printf("\n");
     for(i=0;i<fila;i++){
                         for(n=0;n<columna;n++){
                                             printf("Ingrese el valor de posicion [%d][%d]: ",i+1,n+1);
                                             scanf("%d",&matriz[i][n]);                                              
                                             }
                         }
     printf("\nLa matriz original:\n\n");
     for(i=0;i<fila;i++){
                         for(n=0;n<columna;n++){
                                             printf("[%d]",matriz[i][n]);
                                                                                           
                                             }
                                             printf("\n");
                         }
printf("\nLa matriz con intercambio de diagonal principal por la secundaria\n\n");
printf("\n");
e=10;
for (i=0;i<=fila;i++)
{
 
  for (n=0;n<=columna;n++)
  {

   if (i==n)
   {
        aux=matriz[i][e];
  matriz[i][e]=matriz[i][n];
  matriz[i][n]=aux;
 e--;
   }
  };



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


 };
     getch();
     return 0;
}


gracias de ante mano

rir3760

Lo primero que debes hacer es evitar el uso de la biblioteca conio de Borland, cambiar la definición de la función main a "int main(void) ..." o "int main() ...", mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

* Debes eliminar la sentencia:
matriz[1][1]=matriz[fila][columna];
Ya que es inutil y puede causar que el programa reviente si se indica una matriz de diez filas y columnas.

* Las llaves de cierre no requieren de un punto después de estas:
for (n=0; n<=10; n++){
   printf("[%d]",matriz[i][n]);
};

Ese punto y coma se procesa como una sentencia nula, esta de mas y hay que eliminarla. Y si el cuerpo del bucle es una sola sentencia no hay necesidad de paréntesis con lo cual el bucle anterior se reduce a:
for (n=0; n<=10; n++)
   printf("[%d]",matriz[i][n]);


* En el ultimo bucle donde imprimes la matriz con las diagonales intercambiadas utilizas 10 como el limite de ambos bucles cuando deberías utilizar fila y columna.

* Por ultimo para intercambiar los valores de las diagonales solo necesitas de un bucle, de esta forma:
for (i = 0; i < fila; i++){
   aux = matriz[i][i];
   matriz[i][i] = matriz[i][columna - 1 - i];
   matriz[i][columna - 1 - i] = aux;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Jaua10

#include <stdio.h>
#include <conio.h>
main()
{
      int fila,columna,i,n,e,aux; 
      int matriz[10][10];         
      printf("Ingrese el dimension de fila: ");
      scanf("%d",&fila);
      printf("Ingrese el dimension de columna: ");
      scanf("%d",&columna);

      printf("\nMatriz de [%d]x[%d]\n",fila,columna);
      printf("\n");
      for(i=0;i<fila;i++){
                          for(n=0;n<columna;n++){
                                              printf("Ingrese el valor de posicion [%d][%d]: ",i+1,n+1);
                                              scanf("%d",&matriz[i][n]);                                             
                                              }
                          }
      printf("\nLa matriz original:\n\n");
      for(i=0;i<fila;i++){
                          for(n=0;n<columna;n++){
                                              printf("[%d]",matriz[i][n]);
                                                                                           
                                              }
                                              printf("\n");
                          }
printf("\nLa matriz con intercambio de diagonal principal por la secundaria\n\n");
printf("\n");
e=10;
for (i=0;i<=fila;i++)
{
 
   for (n=0;n<=columna;n++)
   {

    if (i==n)
    {
         aux=matriz[i][e];
   matriz[i][e]=matriz[i][n];
   matriz[i][n]=aux;
  e--;
    }
   }



  }
   
for (i=0;i<=fila;i++)
{
  printf("\n");
   for (n=0;n<=columna;n++)
   {
   for (i = 0; i < fila; i++){
   aux = matriz[i][i];
   matriz[i][i] = matriz[i][columna - 1 - i];
   matriz[i][columna - 1 - i] = aux;

    printf("[%d]",matriz[i][n]);
   }
   
   }


  }


No logro conseguir que se intercambien las diagonales, me sivio de mucho lo explicado antes, aunque sigo sin poder tener resultado no se que puedo tener malo

leosansan

Haz mezclado parte de tu código con el que te propuso rir3760.

A ver si con esto te funciona ( sobra la e=10 que no sé que pintaba en todo esto):

Código (cpp) [Seleccionar]
printf("\nLa matriz con intercambio de diagonal principal por la secundaria\n\n");
printf("\n");

for (i = 0; i < fila; i++) {
   aux = matriz[i][i];
   matriz[i][i] = matriz[i][columna - 1 - i];
   matriz[i][columna - 1 - i] = aux;
}
   
for (i=0;i<fila;i++) {
   for (n=0;n<columna;n++)
    printf("[%d]",matriz[i][n]);
   printf("\n");
}


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



Jaua10

Muchas gracias leosansan la modificacion de codigo que hiciste funciono y le pude agregar otros detalles perfectamente sin tener error alguno.Feliz dia