quiero hacer un programa que sea de conjuntos (n cantidad de conjuntos) y que cada conjunto contenga 5 elementos. (...) pero al imprimir los valores, el numero de conjunto esta mal y solo los elementos tampoco los imprime bien (en el caso de que trabaje con 2 conjuntos, suman un total de 10 elementos, y solo imprime los últimos 5 que ingrese), espero puedan ayudarme a aclarar mis dudas.
int cantidad;
int arreglo1[cantidad];
Nunca, pero nunca crees un vector fijo sin previamente asignarle un valor. Si vas a trabajar con C puro tenés que crearlo dinámicamente con malloc/calloc y finalmente liberar la memoria con free, en su defecto si utilizás C++ podés utilizar new/delete o vectores dinámicos con el template de vector de la standard template library
int arreglo2[5];
for(i=0;i<cantidad;i++){
for(j=0;j<5;j++){
printf("\nIngrese el elemento %d de su conjunto %d: ",j
+1,i
+1); scanf("%d",&arreglo2
[j
]); }
}
printf("Tus conjuntos son: )"); for(i=0;i<cantidad;i++){
printf("\nconjunto %d",arreglo1
[i
]); for(j=0;j<5;j++){
}
}
El tema es que siempre vas a tener lo últimos 5 valores porque no creaste los elementos por conjuntos, sinó que creaste 5 elementos únicamente y los sobreescribís en el primer for anidado con el for...
Ahora si comencemos: ¿Cada conjunto debe tener sus propios 5 elementos verdad?
typedef struct conjunto_s
{
int m_iElementos[5];
}conjunto_t;
Si se puede usar C++ en este caso yo recomiendo utilizar la plantilla de vectores de la standard template library que permite crear vectores dinámicos facilmente:
#include <vector>
std::vector<conjunto_t> vConjuntos;
Luego creamos un conjunto temporal para ir guardando cada conjunto y añadirselo al vector de conjuntos:
conjunto_t conjuntoTemporal;
Para añadir usamos la función
push_back que lo pone al final del vector y cuando terminamos el programa usamos
clear.
Ejemplo del programa finalizado:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
typedef struct conjunto_s
{
int m_iElementos[5];
}conjunto_t;
int main()
{
int iCantidadConjuntos = -1;
int iIndiceConjunto, iIndiceElemento;
std::vector<conjunto_t> vConjuntos;
conjunto_t conjuntoTemporal;
while (iCantidadConjuntos <= 0)
{
printf("\nCuantos conjuntos?: ");
scanf("%d", &iCantidadConjuntos);
}
printf("\nHas elegido trabajar con %d conjuntos procederemos a ingresar los elementos de sus conjuntos", iCantidadConjuntos);
for (iIndiceConjunto = 0; iIndiceConjunto < iCantidadConjuntos; iIndiceConjunto++)
{
for (iIndiceElemento = 0; iIndiceElemento < 5; iIndiceElemento++)
{
printf("\nIngrese el elemento %d de su conjunto %d: ", iIndiceElemento + 1, iIndiceConjunto + 1);
scanf("%d", &conjuntoTemporal.m_iElementos[iIndiceElemento]);
}
vConjuntos.push_back(conjuntoTemporal);
}
printf("Tus conjuntos son: ");
for (iIndiceConjunto = 0; iIndiceConjunto < vConjuntos.size(); iIndiceConjunto++)
{
printf("\nconjunto %d", iIndiceConjunto);
for (iIndiceElemento = 0; iIndiceElemento < 5; iIndiceElemento++)
printf("\t%d", vConjuntos[iIndiceConjunto].m_iElementos[iIndiceElemento]);
}
vConjuntos.clear();
return 0;
}
Como medida final te recomendaría renombrar todas las variables con un nombre más adecuado...
B#