elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Guardar la segunda diagonal de una matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Guardar la segunda diagonal de una matriz  (Leído 7,902 veces)
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Guardar la segunda diagonal de una matriz
« en: 4 Marzo 2012, 21:44 pm »

Hola.

Estoy haciendo un ejercicio que tiene este enunciado:

"Escribir un programa que pida al usuario los datos de una matriz de tamaño 3x3, y
guarde en un vector la diagonal principal, y en otro la otra diagonal."

Tengo guardada en un vector la diagonal "Principal". Sin embargo, no se me ocurre cómo guardar la otra diagonal. Sé que tengo que obtener los números de la fila 0, columna 2; fila 1, columna 1; fila 2, columna 0. Pero no sé cómo hacerlo (me refiero a hacerlo con un bucle for, no a guardar de decir "diagonal2 = M[0][2] y eso).

Lo que tengo por ahora es:

Código
  1. /* Escribir un programa que pida al usuario los datos de una matriz de tamaño 3x3, y
  2. guarde en un vector la diagonal principal, y en otro la otra diagonal. */
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. int main()
  8. {
  9.    int i, j, aux, numero;
  10.    int M[3][3];
  11.    int diagonal1[3], diagonal2[3];
  12.  
  13.    for(i=0;i<3;i++)
  14.    {
  15.       for(j=0;j<3;j++)
  16.       {
  17.          printf("COLUMNA: %d\nFILA: %d\nNumero: ", i+1, j+1);
  18.          scanf("%d", &M[i][j]);
  19.          printf("\n");
  20.       }
  21.    }
  22.  
  23.    for(i=0;i<3;i++) diagonal1[i] = M[i][i];
  24.    //diagonal2 = ?
  25.  
  26.    printf("La primera diagonal es:\n");
  27.    for(i=0;i<3;i++) printf("%d ", diagonal1[i]);
  28.    printf("y la segunda:\n");
  29.    for(i=0;i<3;i++) printf("%d ", diagonal2[i]);
  30.  
  31.    system("pause");
  32.    return 0;
  33. }
  34.  

Muchísimas gracias.
Saludos.


En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Guardar la segunda diagonal de una matriz
« Respuesta #1 en: 4 Marzo 2012, 23:23 pm »

Oh, en general, para una matriz mat cuadrada de orden M.

El primer elemento de la diagonal secundaria es mat[0][M-1], el segundo es mat[1][M-2]... y el último es mat[M-1][0]. A partir de esto se puede extraer el patrón. Sea mat[ i ][ j ] un elemento de la diagonal secundaria. Si i va de 0 a M-1, j va de M-1 a 0. Podemos expresar j como función de i: j = M-1-i.

Comprobamos:
-Cuando i = 0, j = M-1-0 = M-1 -> correcto
-Cuando i = 1, j = M-1-1 = M-2 -> correcto
...
-Cuando i = M-1, j = M-1-(M-1)=0 -> correcto.

Por ende, podemos utilizar el siguiente bucle para recorrer la diagonal secundaria:

Código
  1. for (i = 0; i < M; ++i) foo(mat[i][M-1-i]);

Donde foo() es una función o código arbitrario.

Saludos.


« Última modificación: 5 Marzo 2012, 10:43 am por Xandrete » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Guardar la segunda diagonal de una matriz
« Respuesta #2 en: 4 Marzo 2012, 23:59 pm »

Muchas gracias, Xandrete.

He entendido bien la explicación, sin embargo, estoy intentando no hacer uso de funciones. ¿No hay ninguna forma de hacerlo sin "foo"?

Gracias.

Saludos.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Guardar la segunda diagonal de una matriz
« Respuesta #3 en: 5 Marzo 2012, 00:42 am »

El uso de la función "foo" en el fragmento de Xandrete es solo ilustrativo, el ya lo indica así al final de su mensaje:
Cita de: Xandrete
Donde foo() es una función o código arbitrario.

Un saludo
En línea

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
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Guardar la segunda diagonal de una matriz
« Respuesta #4 en: 5 Marzo 2012, 10:37 am »

El uso de la función "foo" en el fragmento de Xandrete es solo ilustrativo, el ya lo indica así al final de su mensaje:
Un saludo

Exacto. ¡Gracias ;D!
Por cierto, he editado el código. Había puesto M[ i ][ M-i-1 ] en lugar de mat[ i ][ M-i-1 ].

Saludos
« Última modificación: 5 Marzo 2012, 10:42 am por Xandrete » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Guardar la segunda diagonal de una matriz
« Respuesta #5 en: 5 Marzo 2012, 18:54 pm »

Muchas gracias a los dos.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Diagonal secundaria de matriz.!
Scripting
cuazzo 6 32,300 Último mensaje 22 Junio 2010, 01:17 am
por cuazzo
matriz nxm numeros, como imprimir segunda fila[SOLUCIONADO]
Java
rub'n 6 12,733 Último mensaje 28 Noviembre 2011, 00:25 am
por rub'n
Moverse por las paralelas a la diagonal secundaria de una matriz.
Programación C/C++
AlucardDracula 4 3,038 Último mensaje 17 Diciembre 2013, 22:34 pm
por AlucardDracula
Recorrido de matriz diagonal secundaria c++
Programación C/C++
SojatDotar 4 10,828 Último mensaje 21 Octubre 2015, 04:10 am
por SojatDotar
ayuda con la diagonal principal de una matriz para dejarla vacía
Programación C/C++
creiko 2 2,370 Último mensaje 1 Junio 2016, 20:00 pm
por geeke
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines