Matriz

Iniciado por gcghr, 2 Febrero 2012, 22:49 PM

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

gcghr

Hola, soy nuevo en esto y tengo el siguiente problema: necesito generar una matriz 5x5 en la que se vayan sumando los numeros que esten a un desplazamiento a su izquierda y arriba, pongo el siguiente ejemplo:
(La matriz debera generar un cuadrado de cualquier dimension)

1 1  1   1   1
1 2  3   4   5
1 3  6  10 15
1 4 10 20 35
1 5 15 35 70

Hasta ahora e conseguido lo siguiente:
00000
12345
23456
34567
45678

    int matriz[][] = new int[5][5];
    // Ponemos datos en el array
        for ( int i=1; i < 5; i++ ) {
            for ( int j=0; j < matriz.length; j++ )
            matriz[j] = i + j;
      }
    // y vemos su contenido, utilizando un bucle for
        for ( int i=0; i < 5; i++ ) {
            for ( int j=0; j < matriz.length; j++ )
                System.out.print( matriz[j] );
                System.out.println(" ");
        }
    }
}

armizh

Ehhh hombre, por tu problema me hiciste hacer el problema completo xd. Pero tu lo intentaste en C++, y yo no le pego mucho a C++ pero lo hice en C.
int matriz[25] = {
1, 1, 1, 1, 1,
1, 0, 0, 0, 0,
1, 0, 0, 0, 0,
1, 0, 0, 0, 0,
1, 0, 0, 0, 0,
};

int j;

void set_matriz()
{
matriz[j] = ((matriz[j-1])+(matriz[j-5]));
}

int main()
{
for(j = 6; j < 10; j++) set_matriz();
for(j = 11; j < 15; j++) set_matriz();
for(j = 16; j < 20; j++) set_matriz();
for(j = 21; j < 25; j++) set_matriz();

for(j = 0; j < 5; j++) printf("%i ",matriz[j]);
printf("\n");
for(; j < 10; j++) printf("%i ",matriz[j]);
printf("\n");
for(; j < 15; j++) printf("%i ",matriz[j]);
printf("\n");
for(; j < 20; j++) printf("%i ",matriz[j]);
printf("\n");
for(; j < 25; j++) printf("%i ",matriz[j]);
printf("\n");

return 0;
}


Y la salida me dio esto:
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70


Ahora tratare de optimizarlo al maximo el codigo ya que es muy tosco. Bueno espero te ayude esto y te de una idea de como hacerlo. Ya que me di cuenta que hay por lo menos 3 formas distintas de hacerlo (hablando de algoritmos).

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

gcghr

Muchas gracias : )
Ya lo siento ya dije que era nuevo en esto jajaja pero la verdad esque no entiendo todavia muy bien como va esto de las matrices y vectores de todo lo que e dado es lo peor que llevo :S
Como lo llevo mal estoy intentadolo hacer de otra forma... con la matriz me pondre luego haber si comprendo como funciona ya que luego supongo que sera todo igual solo que con otros ejemplos
De la manera que lo estoy intentando hacer seria de forma recursiva me falta todavia un trocito de codigo lo pongo para que le hecheis un vistazo : D

public class EjP1 {
   
    public static int dato(int fila, int columna)
    {
        if (fila<1 || columna<1)
            return 0;
        if (fila<1 || columna==1)
            return 1;
        return dato(fila-1,columna)+dato(fila,columna-1);
    }

    public static void cuadrado(int dimension)
    {
        for (int j=1;j<dimension+1;j++)
        {
            for (int i=1;j<dimension+1;j++)
            {
               
            }
        }
        System.out.println("");
    }     
   
    public static void main( String args[] ) {
        cuadrado(5);
    }
}

armizh

De nada :) Por cierto, para que sepas, lo que hice yo no es una matriz, es solo un array, las matrices son multidimensionales, los array son unidimensionales. El ejercicio que pones se resuelve con una array facilmente (como yo lo hice) pero con una matriz tambien se puede perfectamente, de hecho ahora mismo te muestro la misma función, pero con matriz en vez de array (tal vez el código es mas lindo con la matriz)
#include <stdio.h>

int matriz[5][5] = {
{ 1, 1, 1, 1, 1, },
{ 1, 0, 0, 0, 0, },
{ 1, 0, 0, 0, 0, },
{ 1, 0, 0, 0, 0, },
{ 1, 0, 0, 0, 0, },
};

int x, y;

void set_matriz()
{
matriz[x][y] = ((matriz[x][y-1])+(matriz[x-1][y]));
}

int main()
{
for(x=1;x<5;x++) {
for(y=1;y<5;y++)
set_matriz();
}

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

return 0;
}


Saludos.
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster