Ir para conteúdo
Matheus William

problema conversão/soma binários

Recommended Posts

 

Eu estou com o seguinte problema: receber dois números decimais e convertê-los para binário e depois realizar a soma binaria dos números que foi convertidos (considerar números negativos). Eu consegui fazer a maior parte, mas a soma esta saindo errada. Quem puder me ajudar eu agradeço.
Segue o código do programa ate agora:

#include <stdio.h>
#define na 16
int main() {
 int n,n1,r[na],r1[na],i,somav[na],vaium=0,invert[na],np=1;

 /*Lê o número*/
 printf("\n Digite o primeiro numero: ");
 scanf("%d", &n);
 /* Utiliza um número de 16 bits como base para a conversão.*/
 for(i = na-1; i >= 0; i--) {
    r[i] = (n >> i) & 1;
    /*Por meio do "e" lógico ele compara se o valor na posição mais à direita é 1 ou 0 e imprime na tela até reproduzir o número binário.*/
    if(r[i] & 1)
        printf("1",r[i]);
     else
        printf("0",r[i]);

 }
 printf("\n Digite o segundo numero: ");
 scanf("%d", &n1);
 for(i = na-1; i >= 0; i--) {
    r1[i] = (n1 >> i) & 1;
    if(r1[i] & 1)
        printf("1",r1[i]);
     else
        printf("0",r1[i]);

 }
/*for (i=na-1;i>=0;i--)
    vaium[i]=0;*/
if(n<0) {
   for(i=na-1;i>=0;i--){
        if(r[i]==1)
            invert[i]=0;
        else
            if(r[i]==0)
                invert[i]=1;
    }
    for (i=na-1;i>=0;i--)
        r[i]=invert[i]+np+vaium;
        if(r[i]==2){
            r[i]=0;
            vaium++;
        }
}
else
    if(n1<0){
        for(i=na-1;i>=0;i--){
        if(r1[i]==1)
            invert[i]=0;
        else
            if(r1[i]==0)
                invert[i]=1;
    }
    for (i=na-1;i>=0;i--)
        r1[i]=invert[i]+np+vaium;
        if(r1[i]==2){
            r1[i]=0;
             vaium++;
        }
}

for(i=na-1;i>=0;i--){
    somav[i]=r[i]+r1[i]+vaium;
    if((somav[i]==2) || (somav[i]==3)){
        somav[i]=0;
        vaium++;
    }
}
printf("\n Soma dos numeros binarios:");
for (i=na-1;i>=0;i--)
    printf("%d",somav[i]%2);
 return 0;
}

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

  • Conteúdo Similar

    • Por Dafny Stefany da Silva
      Oi gente, tô fazendo uma lista de programação c e algoritmo(portugol), esse é meu primeiro semestre fazendo programação, se pudessem me ajudar fazendo programas pra eu usar pra entender e conferir os meus eu agradeço desde já
       
      2. Suponha que a sequência S satisfaz a equação matemática e a condição inicial dadas abaixo. Elabore um programa que calcule um termo k qualquer de S, denominado Sk. No programa, faça o tratamento do valor da variável de entrada k. Sk = 5Sk-1 – 4Sk-2 + 2Sk-3 para todo inteiro k ≥ 3, sendo S0 = 1, S1 = -2 e S2 = 3
       
      3. Calcule o valor de P a partir da série infinita abaixo através de um programa em C. Informe o número de termos como dado de entrada. P = 1 1(3) + 2 3(5) + 3 5(7) +...+ n (2n −1)(2n +1)

       
      4. Economizar dinheiro se torna muito difícil em tempos de recessão; portanto, as empresas podem reduzir seus limites de crédito para evitar que suas contas a receber(dinheiro que lhes é devido) se tornem muito grande. Uma companhia reduziu o limite de crédito de seus clientes à metade. Desta forma, se um cliente tinha um limite de crédito de R$2000, agora seu limite passou a ser R$1000. Escreva um programa que analise a situação de crédito de 3 clientes dessa companhia. De cada cliente, você recebe: - o número da conta - seu limite de crédito antes da recessão - seu saldo atual (ou seja, a quantia que o cliente deve à companhia) Seu programa deve calcular e imprimir o novo limite de crédito de cada cliente e determinar (e imprimir) que clientes possuem saldos que excedem seus novos limites de crédito.
       
      5. Escreva um algoritmo/programa para receber um número complexo na forma POLAR e representá-lo na forma RETANGULAR. Ao final, escreva suas duas representações.
       
      6. Foi realizada uma pesquisa sobre algumas características físicas da população de uma certa região, a qual coletou os seguintes dados referentes a cada habitante para análise: - sexo (‘1’ para masculino ou ‘2’ para feminino) - cor dos olhos ( ‘1’ azuis, ‘2’ verdes, ‘3’ castanhos) - cor dos cabelos (‘1’ loiros, ‘2’ castanhos, ‘3’ pretos) - idade (O final do conjunto de habitantes é reconhecido pelo valor -1 entrando como idade) Faça um programa que determine e escreva: (a) A maior idade dos habitantes; (b) A porcentagem entre os indivíduos do sexo masculino cuja idade está entre 18 e 30 anos, inclusive; (c) A porcentagem do total de indivíduos do sexo feminino cuja idade está entre 18 e 30 anos, inclusive, e que tenham olhos verdes e cabelos loiros. Utilize o comando switch no programa.
       
      7. Escreva um programa que leia o número de habitantes de uma determinada cidade, o valor básico cobrado em R$ por KWh consumido, e para cada habitante, entre com os seguintes dados: (a) o consumo do mês em KWh; (b) o código do consumidor (1-Residencial, 2-Comercial, 3-Industrial). Teste se o código digitado é inválido. Sabe-se que o custo do KWh é 1,5 vezes maior para consumidores do tipo 2 e custa o dobro para consumidores do tipo 3. Caso o consumo seja maior do que 100kWh, inclua uma taxa de “bandeira vermelha” de R$ 100. Ao final, escreva: (i) o maior, o menor e a média do consumo em KWh dos habitantes, independente do tipo; (ii) o total resultante do consumo em R$ de cada categoria de consumidor
    • Por DrDjou
      Boa tarde pessoal estou com muita dificuldade para fazer esse códigos:
      1) Cléo Kuhn contratou você para desenvolver um programa (utilize funções) que leia a quantidade de chuva em milímetros, por dia durante um mês. Sabendo que, podemos ter meses com 28, 30 e 31 dias, (ignorando o ano bissexto). Primeiramente deve ser possível informar o mês que deseja lançar as informações, depois deve ser possível informar a precipitação diária de chuva. Após a inserção dos dados deve ser possível verificar a média mensal de precipitação em milímetro, quantidade de dias que choveu, e a quantidade de dias que não choveu.
      este já começei:
      #include<stdio.h>
      #include<stdlib.h>
      int main(void){
          int mes,a,b,c,m,soma=0,i;
          printf("Digite o mes que voce quer informar a chuva:\n");
          scanf("%d",&mes);
                  if(mes=1,mes=3,mes=5,mes=7,mes=8,mes=10,mes=12){
                      for(m=0;m<=31;m++){
          printf("Milimetros de chuva\nse nao choveu digite'0'.Dia %d:",i);
          scanf("%d",&m);
          }
                  if(mes=4,mes=6,mes=9,mes=11){
                      for(m=0;m<=30;m++){
          printf("Informe quantos milimetros choveu neste dia se nao choveu digite'0':\n");
          scanf("%d",&m);
          }
                  if(mes=2){
                      for(m=0;m<=28;m++){
          printf("Informe quantos milimetros choveu neste dia se nao choveu digite'0':\n");
          scanf("%d",&m);
          }    if(m>=0)
                          Printf("Não choveu");
                          scanf("%d",&a);
                          if(m<0)
                          Printf("Choveu");
                          scanf("%d",&b);
          a=soma+m;
           b=soma+m;
                      printf("choveu %d, nao choveu %d.",b,a);
              
                  }                                    
                      
                      system("pause");
                      }}}
       
       
       
      2) (2 pontos) Implemente um programa que utilize funções para calcular o valor a ser pago no acerto de uma prestação de conta. O programa deverá solicitar ao usuário o valor da prestação e o número de dias em atraso e passar estes valores para a função que calcula o valor a ser pago, e devolverá este valor ao programa que a chamou. O programa deverá então exibir o valor a ser pago na tela, e deverá voltar a pedir outro valor de prestação e assim continuar até que seja informado um valor igual a zero para a prestação. Neste momento o programa deverá ser encerrado, exibindo o relatório do dia, que conterá a quantidade e o valor total de prestações pagas no dia. O cálculo do valor a ser pago é feito da seguinte forma. Para pagamentos sem atraso, cobrar o valor da prestação. Quando houver atraso, cobrar 2% de multa, mais 0,2% de juros por dia de atraso.
    • Por viniciusSantana
      Boa noite meu problema é '$' que sempre da na ultima linha esta ai o codigo
       
       
      Program Pzim ;
      var nome:string;
              sangue:string;
              idade:integer;
      Begin
      writeln('Escreva seu nome aqui ');
      read(nome);
      writeln('Digite sua idade ');
      read(idade);
      writeln('Digite seu tipo sanguineo ');
      read(sangue);
      if sangue=Apositivo then
      write('Você ',nome,'tem);
      End.
    • Por Fábio.info7
      Boa tarde a todos, gostaria de uma ajuda, estou desenvolvendo um pequeno sistema de cadastro de clientes assinastes de um certo pacote de serviços, preciso que ao cadastrar o cliente, automaticamente o sistema grave a data do cadastro e atribui + 30 dias onde esta será a data de vencimento(após os primeiros 30 dias), até aí tudo bem, tudo funcionando, porém preciso também que o sistema liste os clientes em que a data do vencimento está se aproximando(faltando 5 dias para o vencimento), então determinei que o sistema lista os clientes que estão a 5 dias do vencimento, então então peguei a data de cadastro e atribuí + 25 dias, agora que vem o problema, na hora de listar esses clientes cuja data de vencimento se aproxima eu recebo a seguinte mensagem "Warning: Invalid argument supplied for foreach()", sou novo em php OO e não estou conseguindo resolver essa questão, vou deixar aqui a função que criei e a chamada da função também:
       
       
      public function proximosVencimentos(){         //DATA DA ASSINATURA/CADASTRO         $dt_assinatura = $this->assinatura;                  //PEGA A DATA DA ASSINATURA E ACRESCENTA + 30 DIAS (VAI VIRAR A DATA DO VENCIMENTO APÓS 30 DIAS)         $vencimento = date('Y-m-d', strtotime("+30 days" . strtotime($dt_assinatura)));                  //PEGA A DATA DA ASSINATURA E ACRESCENTA + 25 DIAS          $vencimento_proximo = date('Y-m-d', strtotime("+25 days" . strtotime($dt_assinatura)));                                     require 'conexao.php';             $sql = "select * from dados where current_date() between dt_vencimento_proximo = :dt_vencimento_proximo AND dt_vencimento = :dt_vencimento ";             $stmt = $conn->prepare($sql);             $stmt->bindParam(":dt_vencimento_proximo", $vencimento_proximo);             $stmt->bindParam(":dt_vencimento", $vencimento);                                         if($stmt->execute()== TRUE){                 return $stmt->fetchAll(PDO :: FETCH_OBJ);              }else{                 $mensagem = "Não há dados a serem exibidos.";                 return $mensagem;              }        }    
      ABAIXO O TRECHO ONDE EU CHAMO ESSA FUNÇÃO
      foreach ($listadados->proximosVencimentos() as $key => $valor){       echo $valor->nome; }    
    • Por BryanSamuel
      Eu preciso somar a coluna SOMA onde a coluna A e a coluna B(ao outro registro, por exemplo A do registro 1 e A do registro 2 forem iguais) forem iguais, após isso dividir por 3 e em seguida inserir em outra tabela.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.