[C con Clase] Una ayuda con arreglos bidimensionales, por favor!

José Luis Torre joseluistorrehernandez en gmail.com
Lun Oct 22 06:18:26 CEST 2012


Hola Ali:

Antes de analizar tu último código detenidamente, te comento:

¿Has tenido en cuenta que el tamaño de la matriz que estás considerando es
muy grande?
¿Has tenido en cuenta si el tamaño de tu matriz entra en la memoria RAM de
tu ordenador?
Multiplica el número de filas, por el número de columnas y por el tamaño de
un entero sizeof(int) con el fin de obtener el tamaño de la matriz.erá
¿Tu aplicación necesitará determinar el tamaño de la matriz y solicitar ese
tamaño al sistema operativo o será suficiente utilizar una matriz de un
tamaño predeterminado antes de la ejecución del programa (aunque no
utilices todo ese tamaño)?
Ten en cuenta que el factorial de 10 es 3628800.

Saludos
José Luis




El 20 de octubre de 2012 05:16, Ali Rincon <alrincon1963 en hotmail.com>escribió:

> Estimado amigo Jose Luis:  Muchas gracias por ayudarme a resolver el
> ejercicio. Tu codigo es correcto, especialmente la linea 21, f=0; la cual
> "sacaste" del bucle de for. Excelente paso. Yo solamente le hice una
> pequeña modificacion, de manera de ver mas claramente la notacion matricial
> y fue esta:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> /*Programa que calcula las combinaciones de 3 numeros tomados de 2 en 2 y
> el resultado lo expresa en forma de una matriz 3x2*/
> /*Autor: Jose Luis Torres*/
>
> int main()
>
> {
>     int i, j;
>
>     int f ; // Fila
>
>     int c ; // Columna
>
>     const int nF = 3; // Número de filas
>
>     const int nC = 2; // Número de columnas
>
>     int mat[nF][nC];
>
>     f = 0;
>
>     for (i = 1; i <= 3; i++)
>     {
>         for (j = i + 1; j <= 3; j++)
>         {
>             if(i != j)
>             {
>                 c = 0;
>
>                     mat[f][c] = i;
>
>                     c = c + 1;
>
>                     mat[f][c] = j;
>
>                     f = f + 1;
>             }
>         }
>     }
>
>     // Mostrar matriz
>
>     for (f=0; f<nF; ++f)
>     {
>         for (c=0; c<nC; ++c)
>
>             printf(" %d ",mat[f][c]);
>             printf("\n");
>
>     }
>
>     system("pause");
>
>     return 0;
> }
>
> lo cual podrás ver fácilmente. Luego lo extendí para las combinaciones
> tomadas de 4 en 4, y el código resulto ser, por analogía:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> //CombArrays4
> /*Programa que calcula las combinaciones de 6 numeros tomados de 4 en 4 y
> el resultado lo expresa en forma de una matriz 15x4*/
>
> int main()
>
> {
>     int i1, i2, i3, i4;
>
>     int f; // fila
>
>     int c; // columna
>
>     int nF = 15; // número de filas
>
>     int nC = 4; // número de columnas
>
>     //const int nF = 15; // número de filas
>
>     //const int nC = 4; // número de columnas
>
>     int mat[nF][nC];
>
>     f = 0;
>
>     for (i1 = 20; i1 <= 25; i1++)
>     {
>         for (i2 = i1 + 1; i2 <= 25; i2++)
>         {
>             for (i3 = i2 + 1; i3 <= 25; i3++)
>             {
>                 for (i4 = i3 + 1; i4 <= 25; i4++)
>                 {
>                     if ((i1 != i2) && (i1 != i3) && (i1 != i4) && (i2 !=
> i3) && (i2 != i4) && (i3 != i4))
>
>                     c = 0;
>
>                     mat[f][c] = i1;
>
>                     c = c + 1;
>
>                     mat[f][c] = i2;
>
>                     c = c + 1;
>
>                     mat[f][c] = i3;
>
>                     c = c + 1;
>
>                     mat[f][c] = i4;
>
>                     f = f + 1;
>                 }
>             }
>         }
>     }
>
>     // mostrar matriz
>
>     for (f=0; f<nF; ++f)
>     {
>         for (c=0; c<nC; ++c)
>
>             printf(" %d ",mat[f][c]);
>             printf("\n");
>
>     }
>     getchar();
>     return 0;
> }
> Ambos códigos corren muy bien, Pero cuando lo extendi, aun mas,
> precisamente a donde quiero llegar:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> //CombArray15
> /*Programa que calcula las combinaciones de 25 numeros tomados de 15 en 15
> y expresa estas combinaciones en forma matricial*/
>
> int main()
> {
>     int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15;
>     int f; // Fila
>     int c; // Columna
>     int nF = 3268760; // Número de filas
>     int nC = 15; // Número de columnas
>     int mat[nF][nC];
>
>     f = 0;
>
>     for (i1 = 1; i1 <= 25; i1++)
>     {
>         for (i2 = i1 + 1; i2 <= 25; i2++)
>         {
>             for (i3 = i2 + 1; i3 <= 25; i3++)
>             {
>                 for (i4 = i3 + 1; i4 <= 25; i4++)
>                 {
>                     for (i5 = i4 + 1; i5 <= 25; i5++)
>                     {
>                         for (i6 = i5 + 1; i6 <= 25; i6++)
>                         {
>                             for (i7 = i6 + 1; i7 <= 25; i7++)
>                             {
>                                 for (i8 = i7 + 1; i8 <= 25; i8++)
>                                 {
>                                     for (i9 = i8 + 1; i9 <= 25; i9++)
>                                     {
>                                         for (i10 = i9 + 1; i10 <= 25;
> i10++)
>                                         {
>                                             for (i11 = i10 + 1; i11 <= 25;
> i11++)
>                                             {
>                                                 for (i12 = i11 + 1; i12 <=
> 25; i12++)
>                                                 {
>                                                     for (i13 = i12 + 1;
> i13 <= 25; i13++)
>                                                     {
>                                                         for (i14 = i13 +
> 1; i14 <= 25; i14++)
>                                                         {
>                                                             for (i15 = i14
> + 1; i15 <= 25; i15++)
>                                                             {
>                                                                 if ((i1 !=
> i2) && (i1 != i3) && (i1 != i4) && (i1 != i5) && (i1 != i6) && (i1 != i7) &&
>                                                                     (i1 !=
> i8) && (i1 != i9) && (i1 != i10) && (i1 != i11) && (i1 != i12) && (i1 !=
> i13) &&
>                                                                     (i1 !=
> i14) && (i1 != i15) && (i2 != i3) && (i2 != i4) && (i2 != i5) && (i2 != i6)
> &&
>                                                                     (i2 !=
> i7) && (i2 != i8) && (i2 != i9) && (i2 != i10) && (i2 != i11) && (i2 !=
> i12) &&
>                                                                     (i2 !=
> i13) && (i2 != i14) && (i2 != i15) && (i3 != i4) && (i3 != i5) && (i3 !=
> i6) &&
>                                                                     (i3 !=
> i7) && (i3 != i8) && (i3 != i9) && (i3 != i10) && (i3 != i11) && (i3 !=
> i12) &&
>                                                                     (i3 !=
> i13) && (i3 != i14) && (i3 != i15) && (i4 != i5) && (i4 != i6) && (i4 !=
> i7) &&
>                                                                     (i4 !=
> i8) && (i4 != i9) && (i4 != i10) && (i4 != i11) && (i4 != i12) && (i4 !=
> i13) &&
>                                                                     (i4 !=
> i14) && (i4 != i15) && (i5 != i6) && (i5 != i7) && (i5 != i8) && (i5 != i9)
> &&
>                                                                     (i5 !=
> i10) && (i5 != i11) && (i5 != i12) && (i5 != i13) && (i5 != i14) && (i5 !=
> i15) &&
>                                                                     (i6 !=
> i7) && (i6 != i8) && (i6 != i9) && (i6 != i10) && (i6 != i11) && (i6 !=
> i12) &&
>                                                                     (i6 !=
> i13) && (i6 != i14) && (i6 != i15) && (i7 != i8) && (i7 != i9) && (i7 !=
> i10) &&
>                                                                     (i7 !=
> i11) && (i7 != i12) && (i7 != i13) && (i7 != i14) && (i7 != i15) && (i8 !=
> i9) &&
>                                                                     (i8 !=
> i10) && (i8 != i11) && (i8 != i12) && (i8 != i13) && (i8 != i14) && (i8 !=
> i15) &&
>                                                                     (i9 !=
> i10) && (i9 != i11) && (i9 != i12) && (i9 != i13) && (i9 != i14) && (i9 !=
> i15) &&
>                                                                     (i10
> != i11) && (i10 != i12) && (i10 != i13) && (i10 != i14) && (i10 != i15) &&
>                                                                     (i11
> != i12) && (i11 != i13) && (i11 != i14) && (i11 != i15) && (i12 != i13) &&
>                                                                     (i12
> != i14) && (i12 != i15) && (i13 != i14) && (i13 != i15) && (i14 != i15))
>
>                                                                     c = 0;
>
> mat[f][c] = i1;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i2;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i3;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i4;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i5;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i6;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i7;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i8;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i9;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i10;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i11;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i12;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i13;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i14;
>                                                                     c = c
> + 1;
>
> mat[f][c] = i15;
>                                                                     f = f
> + 1;
>
>                                                             }
>                                                         }
>                                                     }
>                                                 }
>                                             }
>                                         }
>                                     }
>                                 }
>                             }
>                         }
>                     }
>                 }
>             }
>         }
>     }
>
>     // Mostrar matriz
>
>     for (f=0; f<nF; ++f)
>     {
>         for (c=0; c<nC; ++c)
>             printf(" %d ",mat[f][c]);
>             printf("\n");
>     }
>     return 0;
>
> el programa no funciona bien,es decir, corre pero no arroja ningún valor,
> como los dos código anteriores. Te pido si lo puedes mirar y examinar, y
> darme alguna idea del porqué no da ningún valor, es decir, por que no corre
> bien.
>
> Muchisimas gracias, amigo por las ayudas que me has brindado,
>
> Muy atentamente,
>
> Ali Rincon.
> Venezuela.
>
>
>
>
>
>
>
> El pasado 2012-10-17 17:26:30, jiptohej escribió:
>
> j> Entendido, a continuación te muestro un código que lo hace (no utilizo
> j> funciones definidas por el usuario)
> j> #include <stdio.h>
> j> #include <stdlib.h>
> j> int main()
> j> {
> j>     int i, j;
> j>     int f ; // fila
> j>     int c ; // columna
> j>     const int nF = 3; // número de filas
> j>     const int nC = 2; // número de columnas
> j>     int mat[nF][nC];
> j>     f = 0;
> j>     for (i = 1; i <= 3; i++)
> j>     {
> j>         for (j = i + 1; j <= 3; j++)
> j>             if(i != j)
> j>             {
> j>                c = 0;
> j>                printf("[%d %d] \n", i , j);
> j>                mat[f][c] = i;
> j>                c = c + 1;
> j>                mat[f][c] = j;
> j>                f = f + 1;
> j>             }
> j>     }
> j>     // mostrar matriz
> j>     for (f=0; f<nF; ++f)
> j>     {
> j>         for (c=0; c<nC; ++c)
> j>         {
> j>             printf("fila:%d columna:%d mat[%d][%d]=%d\n", f, c, f, c,
> j> mat[f][c]);
> j>         }
> j>     }
> j>     system("pause");
> j>     return 0;
> j> }
> j> Saludos
> j> José Luis
> j> El 17 de octubre de 2012 16:58, Ali Rincon <alrincon1963 en hotmail.com
> >escribió:
> j> > No, no es un ejercicio de clase. Es un proyecto de programación que
> pienso
> j> > llevar adelante, y lo estoy haciendo poco a poco. Acuérdate que te
> dije que
> j> > me estoy iniciando. No es mi área de especialización. Pero la
> necesidad
> j> > aquí en Venezuela nos obliga a buscar caminos que nos puedan traer
> j> > dividendos económicos extras, pues nuestro país esta devastado
> j> > económicamente.
> j> >
> j> > Te expreso mi gratitud por tu amable ayuda.
> j> >
> j> > Ali Rincon
> j> >
> j> >
> j> >
> j> > El pasado 2012-10-17 10:20:12, jiptohej escribió:
> j> >
> j> > j> Hola Ali:
> j> > j> Espero que no sea un ejercicio de clase, de todas formas te
> explico cómo
> j> > j> puedes hacerlo.
> j> > j> Dado que sabes cuál tiene que ser el resultado, lo único que
> tienes que
> j> > j> hacer es definir una matriz para almacenar dicho resultado.
> j> > j> Haciéndolo de forma burda, si defines una matriz del siguiente
> modo:
> j> > j>     const int nF = 3; // número de filas
> j> > j>     const int nC = 2; // número de columnas
> j> > j>     int mat[nF][nC];
> j> > j>   lo que tendrías que hacer es almacenar lo siguiente:
> j> > j> mat[0][0] = 1; mat[0][1]=2;
> j> > j> mat[1][0] = 1; mat[1][1]=3;
> j> > j> mat[2][0] = 2; mat[2][1]=3;
> j> > j> dado que en cada línea imprimes i y j, puedes ponerlo de este modo:
> j> > j> mat[0][0] = i; mat[0][1]=j;
> j> > j> mat[1][0] = i; mat[1][1]=j;
> j> > j> mat[2][0] = i; mat[2][1]=j;
> j> > j> dado que los valores los obtienes el 3 líneas y tienes filas en la
> j> > matriz,
> j> > j> puedes generalizar lo anterior
> j> > j> f=0
> j> > j> mat[f][0] = i; mat[f][1]=j;
> j> > j> f= f+1;
> j> > j> mat[f][0] = i; mat[f][1]=j;
> j> > j> f=f+1
> j> > j> mat[f][0] = i; mat[f][1]=j;
> j> > j> En fín, creo que con esto puedes terminarlo.
> j> > j> Saludos
> j> > j> José Luis
> j> > j> El 17 de octubre de 2012 03:48, Ali Rincon <
> alrincon1963 en hotmail.com
> j> > >escribió:
> j> > j> > Hola a Todos. Disculpen mi ignorancia sobre el tema, pero como
> soy
> j> > nuevo
> j> > j> > en programacion en C, necesito pedirles ayuda en un ejercicio el
> cual
> j> > no he
> j> > j> > podido resolver, y que a lo mejor resulta trivial para algunos
> de Uds.
> j> > j> > Necesito expresar (u obtener) las combinaciones del siguiente
> codigo:
> j> > j> >
> j> > j> > #include <stdio.h>
> j> > j> > #include <stdlib.h>
> j> > j> >
> j> > j> > int main()
> j> > j> > {
> j> > j> > int i, j;
> j> > j> >
> j> > j> > for (i = 1; i <= 3; i++)
> j> > j> > {
> j> > j> > for (j = i + 1; j <= 3; j++)
> j> > j> > if(i != j)
> j> > j> > printf("[%d %d] \n", i , j);
> j> > j> > }
> j> > j> > return 0;
> j> > j> > }
> j> > j> >
> j> > j> > en forma de un arreglo, es decir, en una matriz 3x2. Al compilar
> el
> j> > j> > ejercicio anterior, la salida que produce es:
> j> > j> >
> j> > j> > [1 2]
> j> > j> > [1 3]
> j> > j> > [2 3]
> j> > j> >
> j> > j> > Necesito que este resultado se exprese en forma de una matriz
> 3x2, y
> j> > no se
> j> > j> > hacerlo. O dicho de otra forma, los elementos de la matriz 3x2
> deben
> j> > ser
> j> > j> > los anteriores resultados. Puede alguien ayudarme a resolverlo??
> j> > j> >
> j> > j> > Muchisimas gracias por la ayuda que me puedan brindar,
> j> > j> >
> j> > j> > Ali Rincon
> j> > j> > _______________________________________________
> j> > j> > Lista de correo Cconclase Cconclase en listas.conclase.net
> j> > j> >
> j> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> j> > j> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> j> > j> >
> j> > j> --
> j> > j> José Luis Torre
> j> > j> ww.ehu.es
> j> > j> _______________________________________________
> j> > j> Lista de correo Cconclase Cconclase en listas.conclase.net
> j> > j>
> j> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> j> > j> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> j> > _______________________________________________
> j> > Lista de correo Cconclase Cconclase en listas.conclase.net
> j> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> j> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> j> >
> j> --
> j> José Luis Torre
> j> ww.ehu.es
> j> _______________________________________________
> j> Lista de correo Cconclase Cconclase en listas.conclase.net
> j>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> j> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
José Luis Torre
ww.ehu.es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121022/a3db7829/attachment.html>


Más información sobre la lista de distribución Cconclase