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

Luis Pedro Méndez elinv.elinv en gmail.com
Mie Oct 17 05:58:56 CEST 2012


Hola estimada ali, aquí te dejamos un código que quizás pueda servirte y te
genera una matriz de 3 filas por dos 2 columnas.
-----------------------------------------------------------------------------------------
/*
* Código desarrollado por Elinv.
* http://www.bragadomas.com/forodeprogramacion/index.php
* http://www.bragadomas.com
* http://www.bragadomas.com.ar
* http://luispedromendez.blogspot.com/
* http://elinv-elinv.blogspot.com/?expref=next-blog
*/
#include <stdio.h>
#include <iostream>
using namespace std;
//Variable array auxiliar
int Auxiliar[100];
//Variable array para imprimir las permutas
int imprime[100];
//Variable array contiene las sustituciones
//Aquí el cero es inamovible pero el resto puede cambiarlo por
//numeros de varias cifras o letras e inclusive puede aumentar
//el tamaño del array...
int numeros[4]= {1,2,3};
//Variables para la cantidad de digitos  a analizar
//y la cantidad de combinaciones o columnas que se mostrarán.
int digitos_analiza, cantidad_columnas_muestra;
//Variable para informar cuantas combinaciones se lograron.
int cuantos=0;
//Procedimiento para imprimir
void print()
{
//Variable para el bucle
int i;
//Hasta la cantidad de combinaciones o columnas deseadas.
for (i=1; i<=cantidad_columnas_muestra; ++i)
{
//Imprimimos el valor de cada elemento de imprime
printf(" -%d- ", imprime[i]);
}
printf("\t\t");
for (i=1; i<=cantidad_columnas_muestra; ++i)
{
//Aquí sustituimos por los valores ingresdos por el usuario
printf("%d\t", numeros[imprime[i]]);
}
printf("\t\t");
for (i=1; i<=cantidad_columnas_muestra; ++i)
{
//Aquí vemos el funcionamiento de la matriz Auxiliar despues de cada ciclo
printf("%d ", Auxiliar[i]);
}
//salto de linea para la siguiente combinación
printf("\n");
}
//Procedimiento recursivo para las permutas
void combinar(int n, int k)
{
//si el valor de las columnas a mostrar es igual a cero
if (k==0)
{
print();        //Llama a la función imprimir
cuantos++;
//Aumenta en mas 1 el contador de ciclos
}
//Caso contrario
else
{
int i;
//Define variable
for (i=1; i<=n; ++i)
{
if (Auxiliar[i]==1) //Si el array Auxiliar en ese indice es igual a uno
{
Auxiliar[i]= 0;
//Ponemos ese elemento del array Auxiliar a cero
imprime[k]= i;
//Asignamos al array imprime indice de las columnas a mostrar el valor de i
combinar(n, k-1);//llamamos recursivamente a la misma función combinar con
k menos 1 (columnas a mostrar menos 1)
Auxiliar[i]= 1;
//Auxiliar en ese indice le reasignamos 1
}
}
}
}
int main(void)
{
int i;
digitos_analiza=3;
//Cantidad de digitos a combinar
cantidad_columnas_muestra=2;
//Columnas que mostrará
//Llenamos con valor 1 el array -Auxiliar-
for (i=1; i<=digitos_analiza; ++i)
{
Auxiliar[i]= 1;
}
//Titulos
printf("Orden de la combinacion\tResultado\n");
printf("-----------------------\t---------\n");
//Llamamos a la función para combinar y enviamos parámetros.
combinar(digitos_analiza, cantidad_columnas_muestra);
//Vamos cerrando.
printf("-----------------------\t---------\n");
//Informamos los ciclos que se han utilizado.
printf("Total de ciclos: %d ", cuantos);
printf("\n");
//Esperamos por una pulsación de tecla.
getchar();
}
---------------------------------------------------------------------------------------------------

El código lo hemos adaptado míninamente para tus necesidades, pero puedes
verlo en nuestro blog --> aqui
http://todocporelinv.blogspot.com.ar/2011/04/combinaciones-de-numeros-letras-todas.html

Si te ha servido, no te olvides de visitar e resto de nuestros artículos
como así a nuestros sponsor para ayudar al sostenimiento.

Invita a quienes conozcas a visitarnos.

Gracias

Cualquier duda por favor nos tienes en cuenta.

Atentamente.


Elinv.




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

> Hola a Todos. Disculpen mi ignorancia sobre el tema, pero como soy nuevo
> en programacion en C, necesito pedirles ayuda en un ejercicio el cual no he
> podido resolver, y que a lo mejor resulta trivial para algunos de Uds.
> Necesito expresar (u obtener) las combinaciones del siguiente codigo:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main()
> {
> int i, j;
>
> for (i = 1; i <= 3; i++)
> {
> for (j = i + 1; j <= 3; j++)
> if(i != j)
> printf("[%d %d] \n", i , j);
> }
> return 0;
> }
>
> en forma de un arreglo, es decir, en una matriz 3x2. Al compilar el
> ejercicio anterior, la salida que produce es:
>
> [1 2]
> [1 3]
> [2 3]
>
> Necesito que este resultado se exprese en forma de una matriz 3x2, y no se
> hacerlo. O dicho de otra forma, los elementos de la matriz 3x2 deben ser
> los anteriores resultados. Puede alguien ayudarme a resolverlo??
>
> Muchisimas gracias por la ayuda que me puedan brindar,
>
> Ali Rincon
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121017/448b9e53/attachment.html>


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