Ir ao conteúdo
  • Cadastre-se

como soma de matrizes de inteiros em binario


leonardobage

Posts recomendados

: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]);
}

}

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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);

}

Link para o comentário
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;
}

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!