Ir ao conteúdo
  • Cadastre-se
leonardobage

como soma de matrizes de inteiros em binario

Recommended Posts

:confused::confused::confused::confused:

Seguinto to perdendo os cabelos fazendo isso... ta eu e mais um colega trabalhano em cima disto

mas não estamos obtendo sucesso...

é um multiplicador binario em C.

Agente ta fazendo com procedimento e vetores...

Não estamos conseguindo fazer a soma dos numros na matriz...

SE alguém PODE NOS AJUDAR NESSA EMPREITADA...

AGRADECEMOS desde JÁ!

-> código


void multi () {
int a[12],b[12],ri[12][24],c[25],r[24],ac[24];
int cont,cont1,cont2,d,l,i;

for (l=0;l<=11;l++) {
for (i=0;i<=23;i++) {
ri[l][i]=0;
r[i]=0;
ac[i]=0;
}
}
printf("Digite o numero A \n");
for (cont=0;cont<=11;cont++) { /*LEITURA A*/
scanf("%d",&a[cont]);
}
printf("Digite o numero B \n");
for (cont=0;cont<=11;cont++) { /*LEITURA B*/
scanf("%d",&b[cont]);
}
d=0;
for (cont=0;cont<=11;cont++) {
for (cont1=0;cont1<=11;cont1++) {
ri[cont][cont1+d]=b[cont]*a[cont1];
}
d++;
}printf(" \n");printf("MATRIZES: \n");

for (cont=0;cont<=11;cont++) {
for (cont1=23;cont1>=0;cont1--) {
printf("%d",ri[cont][cont1]);
}
printf(" \n");
}
printf("RESULTADO: \n");

for (cont1=0;cont<=11;cont++) {
for (cont=0;cont<=23;cont++) {
ac[cont]=ri[cont1][cont];
r[cont]=(ac[cont]+r[cont]+c[cont]) % 2;
c[cont+1]= (ac[cont]+r[cont]+c[cont]) / 2;
}
}




printf(" \n");
for (i=0;i<=23;i++) {
printf("%d",r[cont]);
}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

outras coisas que esqueci...

to usando Dev C++, mas depois tenho vou fazer rodar pelo gcc do linux (com o kate)

to na tentativa aqui.. caso eu consiga a solução postarei a resultado final aqui e encerro o topico

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte..

eu quero fazer um multiplicador binário de 12bits e sendo assim a resposta vai ser 24 bits

tem um for que lê os numeros binario que o usuário digita..

esses numaros é colocado em uma matriz com o deslocamento do zero..

bom .. o que eu não to conseguindo fazer...

é somar as parcelas desta matriz. para dar o resultado da multiplicação.

é o que falta para funionaro o programa.

faz acho que uns 4 dias que to so nusso... minhas tentativas esgotaraum hehe

mas to na tentativa ainda..

não sei se esclareci sua duvida sobre a pergunta

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Pelo que eu entendi, é isso o que você quer:

void multiMatrix(void)
{
int i, j, k;
for (i = 0; i < maxLineA; i++)
for (j = 0; j < maxColB; j++)
for (k = 0; k < maxLineB; k++)
c[i][j] := c[i][j] + (a[i][k] * b[k][j]);
}

Eu fiz isso nos tempos de curso técnico e funcionou. maxLineA é o número de linhas de A, maxColB é o número máximo de colunas de B e maxLineB é o número de linhas de B. O código era em Pascal, mas eu escrevi em C porque não sabia se você conhecia Pascal. É simples depois que a gente entende... :D

Não pude compilar aqui pra testar porque o meu computador tá um lixo, mas se tiver alguma dúvida, pergunte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu texto esta bem confuso... nao onsegui entender tudo. É permitido o uso de multiplicaçao ou você tem q faze risso via soma? O usuario irá digitar apenas 0 e/ou 1 ou qualquer numero?

Se for qualquer numero, aconselho a você usar um vetor de inteiros com apenas uma posiçao e mandar o usuario digitar o numero inteiro. Dps, pegue esse numero e converta-o para base 2(binaria). Faça tudo isso usando funçoes e evite de trabalhar com variaveis globais.vou ver se me sobra tempo pra fazer isso pra você,campeao. abração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz aqui o q eu entendi. COloquei ate um menu pra seleionar o q deseja; somar, subtrair ou multiplicar.

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <iostream>

#include <string.h>

typedef struct bin

{

int *numeral;

}bin;

void converte(int *decimal,bin *binario,int *tamanho);

void somar(int *decimal,bin *binario);

void subtrair(int *decimal,bin *binario);

void multiplicar(int *decimal,bin *binario);

int main()

{

system("CLS");

int decimal;

int r;

bin binario;

fflush(stdin);

while(1)

{ printf("Digite:\n1:SOMAR\n2:SUBTRAIR\n3:MULTIPLICAR\n4:SAIR ");

r=toupper(getche());

switch®

{

case'1':

somar(&decimal,&binario);

break;

case'2':

subtrair(&decimal,&binario);

break;

case'3':

multiplicar(&decimal,&binario);

break;

case'4':

exit(0);

break;

}

}

return 0;

}

void somar(int *decimal,bin *binario)

{

int A,B,tamanho=0;

system("CLS");

fflush(stdin);

printf("Digite os numeros os quais deseja operar:");

printf("\n");

printf("A: ");

scanf("%d",&A);printf("\n");fflush(stdin);

printf("B: ");

scanf("%d",&B);

(*decimal)=A+B;

converte(decimal,binario,&tamanho);

printf("RESULTADO\n");

printf("\n");(*decimal)=A+B;

printf("%d em decimal -> ",(*decimal));

for(int i=0;i<tamanho;i++)

{

printf("%d",(*binario).numeral);

}

printf(" em binario");

printf("\n");

system("PAUSE");

system("CLS");

}

void subtrair(int *decimal,bin *binario)

{

int A,B,tamanho=0;

system("CLS");

fflush(stdin);

printf("Digite os numeros os quais deseja operar:");

printf("\n");

printf("A: ");

scanf("%d",&A);printf("\n");fflush(stdin);

printf("B: ");

scanf("%d",&B);

(*decimal)=A-B;

converte(decimal,binario,&tamanho);

printf("RESULTADO\n");

printf("\n");(*decimal)=A-B;

printf("%d em decimal -> ",(*decimal));

for(int i=0;i<tamanho;i++)

{

printf("%d",(*binario).numeral);

}

printf(" em binario");

printf("\n");

system("PAUSE");

system("CLS");

}

void multiplicar(int *decimal,bin *binario)

{

int A,B,tamanho=0;

system("CLS");

fflush(stdin);

printf("Digite os numeros os quais deseja operar:");

printf("\n");

printf("A: ");

scanf("%d",&A);printf("\n");fflush(stdin);

printf("B: ");

scanf("%d",&B);

(*decimal)=A*B;

converte(decimal,binario,&tamanho);

printf("RESULTADO\n");

printf("\n");(*decimal)=A*B;

printf("%d em decimal -> ",(*decimal));

for(int i=0;i<tamanho;i++)

{

printf("%d",(*binario).numeral);

}

printf(" em binario");

printf("\n");

system("PAUSE");

system("CLS");

}

void converte(int *decimal,bin *binario,int *tamanho)

{

int quociente,resto,incremento=1;

(*binario).numeral=(int *)calloc(incremento,sizeof(int));

do

{

quociente=(*decimal)/2;

resto=(*decimal)%2;

(*binario).numeral[incremento-1]=resto;

(*decimal)=(*decimal)/2;

incremento++;

(*binario).numeral=(int *)realloc((*binario).numeral,incremento*sizeof(int));

}while(quociente!=0);

int aux;

aux=incremento-2;

int bin_aux[aux+1];

for(int i=0;i<aux+1;i++)

{

bin_aux=(*binario).numeral;

}

for(int i=0;i<aux+1;i++)

{

(*binario).numeral=bin_aux[(aux)-i];

}

(*tamanho)=(aux+1);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae pessoal... as dicas foraum de grande valia...

conseguimos finalizar o programa...

ecrementei todos os codigos mandados para nos...

bom explicando... tenho que salvar em *.c porque vai ser compilado pelo gcc do kate (linux) e eu to fazendo ele no dev c++ hehehe...

bom acredito que este codigo vai ajudar muitas pessoas...

mas lembro a todos que ... tentem ! não copiem .. fazendo agente aprende..

não consegui venha a este forum .. que agente ajuda xD

OBRIGADO A TODOS aqui DO FORUM ....

SEM PALAVRAS

Par funcionar do dev c++ é so fazer assim:

icluir a biblioteca

#include <stdlib.h>

e no final do código por system("PAUSE");


#include <stdio.h>
int n;

void soma () { /*PROCEDIMENTO SOMA*/
int cont,s;
int a[n],b[n],r[n],c[n+1];

printf("Digite o numero A Comecando pelo bit 0\n");
for (cont=0;cont<=n-1;cont++) { /*LEITURA A*/
scanf("%d",&a[cont]);
}
printf("Digite o numero B Comecando pelo bit 0\n");
for (cont=0;cont<=n-1;cont++) { /*LEITURA B*/
scanf("%d",&b[cont]);
}


c[0]=0;
for (cont=0;cont<n;cont++) {
r[cont]=(a[cont]+b[cont]+c[cont])%2;
c[cont+1]=(a[cont]+b[cont]+c[cont])/2;
}

if (c[n+1]!=c[n]) {
printf("Ocorreu Overflow\n");
}else {
printf("Nao Ocorreu Overflow\n");
}
if (c[n]==1) {
printf("Numero negativo\n");
}else {
printf("Numero positivo\n");
}

printf("O resultado da soma e : \n");
for (cont=n-1;cont>=0;cont--) {
s=r[cont];
printf("%d",s);
}
printf(" \n");
}

void subtracao () { /*PROCEDIMENTO SUBTRAÇÃO*/
int a[n],b[n],c[n+1],r[n],s,cont;
c[0]=0;


printf("Digite o numero A Comecando pelo bit 0\n");
for (cont=0;cont<=n-1;cont++) { /*LEITURA A*/
scanf("%d",&a[cont]);
}
printf("Digite o numero B Comecando pelo bit 0\n");
for (cont=0;cont<=n-1;cont++) { /*LEITURA B*/
scanf("%d",&b[cont]);
}
for (cont=0;cont<n;cont++) {
s=a[cont]-b[cont]-c[cont];
if (s==0) {
r[cont]=0;
c[cont+1]=0;
}
if (s==-1) {
r[cont]=1;
c[cont+1]=1;
}
if (s==-2) {
r[cont]=0;
c[cont+1]=1;
}
if (s==1) {
r[cont]=1;
c[cont+1]=0;
}
if (s==-1) {
r[cont]=1;
c[cont+1]=1;
}
}
if (c[n]!=c[n-1]) {
printf("Ocorreu Overflow\n");
}else {
printf("Nao Ocorreu Overflow\n");
}
if (r[n]==1) {
printf("Numero negativo\n");
}else {
printf("Numero positivo\n");
}
printf("O resultado da subtracao e : \n");
for (cont=n-1;cont>=0;cont--) {
s=r[cont];
printf("%d",s);
}
printf(" \n");
}

void multi () { /*PROCEDIMENTO MULTIPLICAÇÃO*/
int a[12],b[12],ri[12][24],c[25],r[24],ac[24];
int cont,cont1,cont2,d;

for (cont=0;cont<=11;cont++) {
for (cont1=0;cont1<=23;cont1++) {
r[cont1]=0;
ac[cont1]=0;
ri[cont][cont1]=0;
}
}

printf("Digite o MULTIPLICANDO Comecando pelo bit 0\n");
for (cont=0;cont<=11;cont++) { /*LEITURA A*/
printf("Bit %d:",cont);
scanf("%d",&a[cont]);
}
printf("Digite o MULTIPLICADOR Comecando pelo bit 0\n");
for (cont=0;cont<=11;cont++) { /*LEITURA B*/
printf("Bit %d:",cont);
scanf("%d",&b[cont]);
}

d=0;
for (cont=0;cont<=11;cont++) {
for (cont1=0;cont1<=11;cont1++) {
ri[cont][cont1+d]=b[cont]*a[cont1];
}
d++;
}printf(" \n");printf("MATRIZES: \n");

for (cont=0;cont<=11;cont++) {
for (cont1=23;cont1>=0;cont1--) {
printf("%d",ri[cont][cont1]);
}
printf(" \n");
}printf(" \n");

for(cont=0;cont<=11;cont++){
d=0;
for(cont1=0;cont1<=23;cont1++){ r[cont1] = ac[cont1];}
for(cont1=0;cont1<=23;cont1++){
ac[cont1] = (ri[cont][cont1] + ac[cont1] + c[cont1]) %2;
d++;
c[d] = (ri[cont][cont1] + r[cont1] + c[cont1]) /2;
}
}

for(cont1=23;cont1>=0;cont1--){
printf("%i", ac[cont1]);
}

}
/*PROGRAMA NORMAL*/
int main (void) {
int op;
printf("XXXXXXXXXXXX MENU DE OPERACOES XXXXXXXXXXXX \n\n");
printf("Digite a Operacao Utilizada \n"); /*LEITURA OPERAÇÃO*/
printf("-- 1 para Soma +\n");
printf("-- 2 para Subtracao -\n");
printf("-- 3 para Multiplicacao *\n");
scanf("%d",&op);
printf(" \n");
switch (op) { /*ESCOLHA COMO MENU DAS OPERAÇÕES*/
case (1): /*CASO SOMA*/
printf("Digite o numero de bits (2 a 8) \n");
scanf("%d",&n);
soma ();
break;
case (2): /*CASO SUBTRAÇÃO*/
printf("Digite o numero de bits (2 a 8) \n");
scanf("%d",&n);
subtracao ();
break;
case (3): /*CASO MULTIPLICAÇÃO*/
multi ();
break;
}
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Plateu:

Pelo que entendi do teu código você converteu os binarios para dec né ?

tipo nesse programa não dar porque eu to implementando uma ULA (um hardware em software) dae não posso converter os binarios... porque a makina trabalha so com binarios ... outras makinas tipo o neander trabalha com o complemento de 2

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×