#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "conio.h"
#include <vector>
#define NOTOKENS 6
int contarUnos(int conjunto[]);
unsigned long conversor(unsigned long n1,int base1,int base2);
void binarioCharInt(char *binarioA, int *binario2,int unos);
void imprimirBinarioInt(int *binarioI);
void generarPotencia(int conjunto[],int unos);
void inicializarPotencia(int conjunto[][NOTOKENS], int numeroConjuntos, int unos);
void IntToBin(int valor, int digitos, char *binario);
void crearConjuntoAux(int conjunto[], int conjuntoAux[], int unos);
void cambiarNumeros(int conjunto[], int conjuntoP[][NOTOKENS], int conjuntoPAux[][NOTOKENS], int numeroConjuntos, int unos);
void inicializarZeroes(int conjunto[][NOTOKENS], int numeroConjuntos);
void cambiarFinal(int conjuntoPAux[][NOTOKENS], int conjuntoFinal[][NOTOKENS], int numeroConjuntos, int unos);
void imprimirConjuntoInicial(int conjunto[]);
int main (void){
int conjunto[NOTOKENS]={0,1,1,1,1,0};
int unos = contarUnos(conjunto);
int conjuntoAux[unos];
imprimirConjuntoInicial(conjunto);
crearConjuntoAux(conjunto,conjuntoAux,unos);
generarPotencia(conjuntoAux,unos);
return 0;
}
void imprimirConjuntoInicial(int conjunto[]){
printf("Conjunto Inicial = "); for(int i = 0;i<NOTOKENS;i++){
}
}
void crearConjuntoAux(int conjunto[], int conjuntoAux[], int unos){
int j=0;
for(int i = 0;i<NOTOKENS;i++){
if(conjunto[i]==1){
conjuntoAux[j]=i+1;
printf("%d, ",conjuntoAux
[j
]); j++;
}
}
}
void generarPotencia(int conjunto[],int unos){
int numeroConjuntos
= (int)pow(2,unos
); int conjuntoPotenciaAux[numeroConjuntos][NOTOKENS];
int conjuntoPotencia[numeroConjuntos][NOTOKENS];
int conjuntoPotenciaFinal[numeroConjuntos][NOTOKENS];
inicializarZeroes(conjuntoPotencia,numeroConjuntos);
inicializarZeroes(conjuntoPotenciaAux,numeroConjuntos);
inicializarPotencia(conjuntoPotencia,numeroConjuntos,unos);
inicializarPotencia(conjuntoPotenciaAux,numeroConjuntos,unos);
cambiarNumeros(conjunto,conjuntoPotencia,conjuntoPotenciaAux,numeroConjuntos,unos);
inicializarZeroes(conjuntoPotenciaFinal,numeroConjuntos);
cambiarFinal(conjuntoPotenciaAux,conjuntoPotenciaFinal,numeroConjuntos,unos);
}
void inicializarPotencia(int conjunto[][NOTOKENS], int numeroConjuntos, int unos){
unsigned long binario;
unsigned long decimal;
char binarioA[unos];
int binario2[unos];
binarioA[unos]=' ';
for(int i = 0;i<numeroConjuntos;i++){
binario=conversor(i,2,10);
IntToBin(i,unos,binarioA);
binarioCharInt(binarioA,binario2,unos);
for(int j = 0;j<unos;j++){
conjunto[i][j]=binario2[j];
}
}
}
void cambiarNumeros(int conjunto[], int conjuntoP[][NOTOKENS], int conjuntoPAux[][NOTOKENS], int numeroConjuntos, int unos){
printf("nConjunto Potencia Auxnn"); for (int i=0;i<numeroConjuntos;i++){
for(int j=0;j<unos;j++){
if(conjuntoP[i][j]==1){
conjuntoPAux[i][j]=conjunto[j];
printf("%d ",conjuntoPAux
[i
][j
]); }
}
}
}
void inicializarZeroes(int conjunto[][NOTOKENS], int numeroConjuntos){
for(int i = 0;i<numeroConjuntos; i++){
for(int j=0;j<NOTOKENS;j++){
conjunto[i][j]=0;
}
}
}
void cambiarFinal(int conjuntoPAux[][NOTOKENS], int conjuntoFinal[][NOTOKENS], int numeroConjuntos, int unos){
printf("nConjunto Potenciann"); int cambio=0;
for(int i = 0;i<numeroConjuntos;i++){
for(int j = 0;j<NOTOKENS;j++){
cambio=conjuntoPAux[i][j];
if(cambio!=0)conjuntoFinal[i][cambio-1]=1;
}
}
for(int i = 0;i<numeroConjuntos;i++){
for(int j = 0;j<NOTOKENS;j++){
printf("%d",conjuntoFinal
[i
][j
]); }
}
}
int contarUnos(int conjunto[]){
int cont=0;
for(int i =0;i<NOTOKENS;++i){
if(conjunto[i]==1)cont++;
}
return cont;
}
void binarioCharInt(char *binarioA, int *binario2,int unos){
for(int i = 0;i<unos;i++){
if(binarioA[i]=='0')binario2[i]=0;
if(binarioA[i]=='1')binario2[i]=1;
}
}
unsigned long conversor(unsigned long n1,int base1,int base2){
unsigned long alg,mult=1,n2=0;
while (n1 > 0){
alg = n1 % base1;
n1 /= base1;
n2 += (alg*mult);
mult *= base2;
}
return n2;
}
void imprimirBinarioInt(int *binarioI){
for(int i = 0;i<NOTOKENS;i++){
}
}
void IntToBin(int valor, int digitos, char *binario){
for (int i = 0; i <= digitos; i++){
if (((1 << i) & valor) > 0)
binario[digitos-1-i]= '1';
else
binario[digitos-1-i]= '0';
}
}