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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Moverse por las paralelas a la diagonal secundaria de una matriz.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Moverse por las paralelas a la diagonal secundaria de una matriz.  (Leído 3,031 veces)
AlucardDracula

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Moverse por las paralelas a la diagonal secundaria de una matriz.
« en: 17 Diciembre 2013, 17:45 pm »

Intento hacer un programa que resuelva este problema:

http://gyazo.com/971bdf866b6e4882b58503499a8b1376.png


Se que para que un elemento este en la diagonal k (k>= 0 y k < size de la matriz) se tiene que cumplir que f(fila) + c(columna) = k.

Pero me estoy haciendo un lio enorme para poder moverme por la matriz y como tengo que especificar las variables de los whiles/fors que necesito  :huh:

¿Alguna idea de como implementar los fors o whiles? Gracias


En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Moverse por las paralelas a la diagonal secundaria de una matriz.
« Respuesta #1 en: 17 Diciembre 2013, 20:57 pm »

Parece un problema interesante, tienes algo hecho ya? Así no partimos de 0 y además creo que la tarea es tuya no nuestra. ;)

Un saludo


En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Moverse por las paralelas a la diagonal secundaria de una matriz.
« Respuesta #2 en: 17 Diciembre 2013, 21:49 pm »

Bueno, como me parecía interesante y no tenía mucho que hacer, aquí tienes mi versión:


Código
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.    int d,c,i,j;
  5.    cout<<"Longitud de la matriz: ";
  6.    cin>>d;
  7.    int matriz[d][d];
  8.    for(int k=0;k<(2*d-1);k++){
  9.            cout<<"Constante de la diagonal "<<k<<": ";
  10.            cin>>c;
  11.            if(k<d){
  12.                    i=0;
  13.                    j=k;
  14.                    if(i==j){
  15.                              matriz[i][j]=c;
  16.                    }else{
  17.                          matriz[i][j]=c;
  18.                          while(i!=k){
  19.                                      i++;
  20.                                      j--;
  21.                                      matriz[i][j]=c;
  22.                          }
  23.                    }
  24.            }else{
  25.                  i=k-(d-1);
  26.                  j=d-1;
  27.                  if(i==j){
  28.                              matriz[i][j]=c;
  29.                  }else{
  30.                        matriz[i][j]=c;
  31.                        while(i!=d-1){
  32.                                    i++;
  33.                                    j--;
  34.                                    matriz[i][j]=c;
  35.                        }
  36.                  }
  37.            }        
  38.    }
  39.    cout<<endl<<endl<<"Matriz inicial"<<endl;
  40. for(int k=0;k<d;k++){
  41.        for(int l=0;l<d;l++){
  42.  
  43.                cout<<matriz[k][l];
  44.        }
  45.        cout<<endl;
  46. }
  47. int f;
  48. while(1){
  49.         cout<<endl<<endl<<"Magnitud de la fuerza a aplicar: ";
  50.         cin>>f;
  51.         for(int k=0;k<(2*d-1);k++){
  52.                 if(k<d){
  53.                         c=(f+matriz[0][k])-(f+matriz[0][k])/2;
  54.                         f=(f+matriz[0][k])/2;
  55.                         i=0;
  56.                         j=k;
  57.                         if(i==j){
  58.                              matriz[i][j]=c;
  59.                         }else{
  60.                              matriz[i][j]=c;
  61.                              while(i!=k){
  62.                                      i++;
  63.                                      j--;
  64.                                      matriz[i][j]=c;
  65.                              }
  66.                         }
  67.  
  68.                 }else{
  69.                       c=(f+matriz[k-(d-1)][d-1])-(f+matriz[k-(d-1)][d-1])/2;
  70.                       f=(f+matriz[k-(d-1)][d-1])/2;
  71.                       i=k-(d-1);
  72.                       j=d-1;
  73.                       if(i==j){
  74.                              matriz[i][j]=c;
  75.                       }else{
  76.                             matriz[i][j]=c;
  77.                             while(i!=d-1){
  78.                                    i++;
  79.                                    j--;
  80.                                    matriz[i][j]=c;
  81.                             }
  82.                       }
  83.                  }  
  84.         }
  85.         cout<<endl<<"Matriz resultante"<<endl<<endl;
  86.         for(int k=0;k<d;k++){
  87.                 for(int l=0;l<d;l++){
  88.                         cout<<matriz[k][l];
  89.                 }
  90.                 cout<<endl;
  91.         }
  92.  
  93. }
  94. return 0;
  95. }
En línea

AlucardDracula

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Moverse por las paralelas a la diagonal secundaria de una matriz.
« Respuesta #3 en: 17 Diciembre 2013, 21:54 pm »

Parece un problema interesante, tienes algo hecho ya? Así no partimos de 0 y además creo que la tarea es tuya no nuestra. ;)

Un saludo

De momento tengo esto, pero esta inacabado porque llegado a un punto me lie demasiado xD

Lo que tenia en mente era algo como esto para una matriz 3x3 que tiene 5 diagonales (las secundarias).
k = 0;
(0,0)
--------
k = 1;
(0,1)
(1,0)
-------
k=2;
(0,2)
(1,1)
(2,0)
---
k=3;
(1,2)
(2,1)
----
k = 4;
(2,2)


O sea vi que el patrón era que ibas sumándole 1 al numero de filas y restándole al de columnas hasta que en el de columnas llegabas al limite entonces ese lo dejabas fijos en el primer caso y sumabas uno al nº de filas y luego seguías normalmente sumando y restando filas y columnas respectivamente como en el ejemplo.
Y que siempre cumpla que f+c = k.

Uno de los problemas que tenia era que no sabia exactamente donde podría poner la variable f para modificarla.

Aqui lo que tengo, se que esta mal pero vamos aprendiendo  :P

Código:
#include <iostream>
#include <vector>
using namespace std;

typedef vector< vector<int> > Ocea;

void llegir_matriu(Ocea& a) {
    int mida = a.size();
    for (int i = 0; i < mida; ++i) {
        for (int j = 0; j < mida; ++j) cin >> a[i][j];
    }
}

void propaga(Ocea& oc, int f) {
    int mida = oc.size();
    int k = 0;
    while (k < mida) {
        int i, j, ai, aj;
        i = j = ai = aj = 0;
        while (i < mida) {
            if (ai+aj == k) {
                oc[ai][aj] = (oc[ai][aj] + f) - (oc[ai][aj]+f)/2;
                if (ai < mida and aj > 0) {
                    ++ai;
                    --aj;
                }
                else {
                    ai = i;
                    aj = j;
                    if (j == mida-1) ++i;
                    else ++j;
                }
            }
        }
        f = (f+oc[ai][aj])/2;
        ++k;
    }
}

void escriu(const Ocea& mines) {
    int mida = mines.size();
    for (int i = 0; i < mida; ++i) {
        cout << mines[i][0];
        for (int j = 1; j < mida; ++j) {
            cout << " " << mines[i][j];
        }
        cout << endl;
    }
}

int main() {
    int m;
    cin >> m;

    for (int k = 0; k < m; ++k) {
        int f, n;
        cin >> f >> n;
        Ocea burra(n, vector<int>(n));
        llegir_matriu(burra);
        propaga(burra, f);
        escriu(burra);
        cout << endl;

    }
}
En línea

AlucardDracula

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Moverse por las paralelas a la diagonal secundaria de una matriz.
« Respuesta #4 en: 17 Diciembre 2013, 22:34 pm »

Muchas gracias Almapa  ;-) Ya he entendido como tenían que ir las condiciones  :P
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,283 Último mensaje 22 Junio 2010, 01:17 am
por cuazzo
Guardar la segunda diagonal de una matriz
Programación C/C++
DickGumshoe 5 7,883 Último mensaje 5 Marzo 2012, 18:54 pm
por DickGumshoe
Recorrido de matriz diagonal secundaria c++
Programación C/C++
SojatDotar 4 10,805 Ú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,359 Último mensaje 1 Junio 2016, 20:00 pm
por geeke
ayuda diagonal principal y secundaria phyton 3
Scripting
papess 2 12,456 Último mensaje 13 Mayo 2019, 18:51 pm
por papess
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines