Complementos C

7 respostas
ddkclaudio

ola pessoal tenho a seguinte duvida quem puder ajudar agradeço.

numeroBits = 3;

teremos 2^3 numeros.

000
001
010
011
100
101
110
111

caso eu queria achar  o complementar de char a[3][3]= {001,100,111}

resposta:

char b[3][3]={000,010,011,101,110}

dicas ? valeu ai pessoal.

7 Respostas

DavidUser

Afinal de contas que dica para o que?

Andre_Rosa

Também não entendi qual é a do tópico.

JuniorMaia

WTF? oO

ddkclaudio

Desculpa se não expliquei bem. caso saibam o que é mintermo, entramos com os mintermos e achamos os maxtermos. ja resolvi ai pessoal valeu pela ajuda.

ViniGodoy

E qual é a resolução?

ddkclaudio

Ogeito foi converter para decimal a String informada, ver quais não estavam na lista e reconvertelos para String.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// variveisglobais e funcoes
int poww(int base,int  exp);
int busca (int x, int n, int *v);
char* string(int decimal);
int maxtermos=0;
int variaveis=0;
//------------------------------------------------------------------------------
void main(int argc, char **argv){

int i,j,k=0; 
variaveis = strlen(argv[1]);
 maxtermos= 8 - (argc-1) ;
int *tmp = (int*) malloc ( maxtermos * sizeof (int ));
char **maxtermo;
	   maxtermo = (char**) malloc (maxtermos * sizeof (char *));
		for(i=0; i< maxtermos; i++)maxtermo[i] = malloc( (variaveis) * sizeof (char));


unsigned long long a =0;
// Converte estring para decimal
	for( i = 1; i < argc; i++ ){
	  a=0;
	  for( j = 0; j < strlen(argv[i]); j++){
          a = a << 1;
	  if(argv[i][j] == '1'){
	  a |= 1;
	  	}
	  }

/*printf("%llu", a );*/

tmp[i-1] = (int) a;
}

printf("\n" );

// ordena
int indiceMenor =0;int temp=0;
for( i = 0; i < argc-1; i++ )
     {
        indiceMenor = i;
       
       for( j=i+1; j<argc-1; j++)
         if(tmp[j] >< tmp[indiceMenor])
           indiceMenor = j;
       
     temp = tmp[i];
       tmp[i] = tmp[indiceMenor];
       tmp[indiceMenor] = temp;
    printf("%d",tmp[i]); }
int oi=0;
int lu=0;
// forma os maxtermos

int naota =0;printf("\n");
	for(oi =0; oi < 8; oi++){

 	naota = busca (oi,(argc-1),tmp);
	
	if(naota == -1)
		{

		printf("%d é um maxtermo.\n",oi);
		maxtermo[lu] = string(oi);
		printf("maxtermo[%d] : %s\n",k,maxtermo[lu]);		
		k++;
		
		}
}
}
	char* string( int decimal ){
int l, p = 0;
int ddk = variaveis -1;
char **maxtermotmp = (char**) malloc ( 1 * sizeof (char *));maxtermotmp[0] = malloc( (variaveis) * sizeof (char));
	
	for( p = 0; p < variaveis; p++ ) maxtermotmp[0][p] = 'a';// colocando a para saber onde deverei colocar o restande com zero.

	while( decimal != 0 )
	{
	if(decimal%2 == 0){maxtermotmp[0][ddk] = '0';ddk--;}
	else{maxtermotmp[0][ddk] = '1';ddk--;}
	decimal = decimal / 2;
	}
	for( p = 0; p < variaveis; p++ )
		if(maxtermotmp[0][p] == 'a')maxtermotmp[0][p] = '0';

return maxtermotmp[0];
}

int busca (int x, int n, int *v)
{
   int m;
   m = n-1;
   while (m >= 0 && v[m] != x) 
      m -= 1;
   return m;
}


int poww(int base,int  exp){
int o = 1;


while( exp != 0 ) {

o = o * base;
exp--;
}
return o;
}

Valeu ai pessoal e desculpa a dor de cabeça ai valeu.

J
arranca isso aqui, você está usando c e apontadores para char. Só vai engordar o seu programa.

arranca isso aqui, você está usando c e apontadores para char. Só vai engordar o seu programa.

Criado 16 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 7
Participantes 6