Ir ao conteúdo
  • Cadastre-se

me ajudem pf


TenhoNickNaum

Posts recomendados

preciso fazer um programa em codigo C que leia numeros binários de 8 digitos e transformeos em decimal

exemplo eu boto lá 00001010

ele me retorna Numero : 10 em decimal


me ajudem  nao consigo completalo pf me ajudem

falem no q errei e tal


================================================== =========================================



#include <stdio.h>
#include <locale.h>


int main(){

int d1, d2, d3, d4, d5, d6, d7, d8, DECIMAL; /*variaveis onde irei guardar os numeros digitados*/

setlocale(LC_ALL,"portuguese"); 

printf("Digitar um numero em binário de 8 digitos: ");

scanf("%1d%1d%1d%1d%1d%1d%1d%1d", &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8);

printf("Numero em decimal: %d &DECIMAL");

DECIMAL = 0;
if(d1==1)
DECIMAL += 128;
if(d2==1)
DECIMAL += 64;
if(d3==1)
DECIMAL += 32;
if(d4==1)
DECIMAL += 16;
if(d5==1)
DECIMAL += 8;
if(d6==1)
DECIMAL += 4;
if(d7==1)
DECIMAL += 2;
if(d8==1)
DECIMAL += 1;


DECIMAL = d1*128 + d2*64 + d3*32 + d4*16 + d5*8 + d6*4 + d7*2 + d8*1;



return 0;
}
/*tabela

128 64 32 16 8 4 2 1
d1 1d2 d3 d4 d5 d6 d7 d8


*/

Link para o comentário
Compartilhar em outros sites

Olá @,

 

Eu apenas retirei o símbolo & da variável DECIMAL e coloquei para fora das aspas, depois movi a frase de saída printf para a parte de baixo dos cálculos, pois a variável DECIMAL estava sendo mostrada antes dos cálculos serem processados. Também retirei uma parte "redundante" dos cálculos. Segue abaixo como ficou o código:

 

#include <stdio.h>#include <stdlib.h>#include <locale.h>int main(){int d1, d2, d3, d4, d5, d6, d7, d8, DECIMAL; /*variaveis onde irei guardar os numeros digitados*/setlocale(LC_ALL,"portuguese");printf("Digitar um numero em binário de 8 digitos: ");scanf("%1d%1d%1d%1d%1d%1d%1d%1d", &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8);DECIMAL = d1*128 + d2*64 + d3*32 + d4*16 + d5*8 + d6*4 + d7*2 + d8*1;printf("Numero em decimal: %d", DECIMAL);return 0;}/*tabela128 64 32 16 8 4 2 1d1 1d2 d3 d4 d5 d6 d7 d8*/
Espero ter ajudado.
Link para o comentário
Compartilhar em outros sites

Um dica que me disseram para essa questão.

DECIMAL = d1*128 + d2*64 + d3*32 + d4*16 + d5*8 + d6*4 + d7*2 + d8*1

Para humanos, o algoritmo assim: É frágil, e fácil de bugar!
Se na entrada acontecer algo como digitar: 0000 0102  [ENTER]

Na saída: Numero em decimal: 6

*Porém deveria ser 5!
 

if(d1==1)DECIMAL += 128;if(d2==1)DECIMAL += 64;if(d3==1)DECIMAL += 32;if(d4==1)DECIMAL += 16;if(d5==1)DECIMAL += 8;if(d6==1)DECIMAL += 4;if(d7==1)DECIMAL += 2;if(d8==1)DECIMAL += 1;

...o algoritmo assim: É mais robusto, e não tão fácil de bugar!
Se na entrada acontecer algo como digitar: 0000 0102  [ENTER]

Na saída: Numero em decimal: 4

*Porém deveria ser 5!

if(d1)DECIMAL += 128;if(d2)DECIMAL += 64;if(d3)DECIMAL += 32;if(d4)DECIMAL += 16;if(d5)DECIMAL += 8;if(d6)DECIMAL += 4;if(d7)DECIMAL += 2;if(d8)DECIMAL += 1;

...o algoritmo assim: É mais robusto, é impossível de bugar!
Se na entrada acontecer algo como digitar: 0000 0702  [ENTER]

Na saída: Numero em decimal: 5

*Porém deveria ser 5! OK não bugou.

 

Isso em  C, já que qualquer valor diferente de 0 é considerado conjunto de verdades!

 

Eu achei esse dica útil, e estou passando adiante pessoal.

:)

Link para o comentário
Compartilhar em outros sites

 Ohhh mundo pequeno esse, sou da sua sala mano jacaré 

 

Enfim já fizeram o código para você kkkk

 

Agora usa a sequencia do código para fazer o algorítimo.

 

kkkk

huehueuhe mano seriao me matei pra fazer até ai e n sabia o que tava de errado conta pros mano nao se n to *****

Um dica que me disseram para essa questão.

DECIMAL = d1*128 + d2*64 + d3*32 + d4*16 + d5*8 + d6*4 + d7*2 + d8*1

Para humanos, o algoritmo assim: É frágil, e fácil de bugar!

Se na entrada acontecer algo como digitar: 0000 0102  [ENTER]

Na saída: Numero em decimal: 6

*Porém deveria ser 5!

 

if(d1==1)DECIMAL += 128;if(d2==1)DECIMAL += 64;if(d3==1)DECIMAL += 32;if(d4==1)DECIMAL += 16;if(d5==1)DECIMAL += 8;if(d6==1)DECIMAL += 4;if(d7==1)DECIMAL += 2;if(d8==1)DECIMAL += 1;

...o algoritmo assim: É mais robusto, e não tão fácil de bugar!

Se na entrada acontecer algo como digitar: 0000 0102  [ENTER]

Na saída: Numero em decimal: 4

*Porém deveria ser 5!

if(d1)DECIMAL += 128;if(d2)DECIMAL += 64;if(d3)DECIMAL += 32;if(d4)DECIMAL += 16;if(d5)DECIMAL += 8;if(d6)DECIMAL += 4;if(d7)DECIMAL += 2;if(d8)DECIMAL += 1;

...o algoritmo assim: É mais robusto, é impossível de bugar!

Se na entrada acontecer algo como digitar: 0000 0702  [ENTER]

Na saída: Numero em decimal: 5

*Porém deveria ser 5! OK não bugou.

 

Isso em  C, já que qualquer valor diferente de 0 é considerado conjunto de verdades!

 

Eu achei esse dica útil, e estou passando adiante pessoal.

:)

ai mano valeu mais tipo nao entendi porque você nao usou o comando IF e deu certo '-' eu me matei pra faze essa bagaça e tu resolveu rapidao ***** se puder me explicar de uma forma clara o que aconteceu agradeço valeu pego aqui

Link para o comentário
Compartilhar em outros sites

Esse exercício pode ser facilmente resolvido multiplicando uma variável auxiliar por 2, dentro de um loop, a cada ciclo

Declare um vetor de char para armazenar os bits.

A operação da variável 'b' já retorna os valores, potências de 2, que serão multiplicados pelos bits digitados pelo usuário.

    char bits[9];    int i, decimal = 0, b = 1;    printf("bits: ");    scanf("%s", bits);    for(i = strlen(bits) - 1; i >= 0; i--){                decimal += b * (bits[i] - '0');               b *= 2;    }    printf("%s = %d\n", bits, decimal);
Assim fica fácil inclusive aumentar o número de bits a serem apresentados

Por exemplo, se quiser 16 bits.

char bits[17]long decimal......
Link para o comentário
Compartilhar em outros sites

huehueuhe mano seriao me matei pra fazer até ai e n sabia o que tava de errado conta pros mano nao se n to *****

ai mano valeu mais tipo nao entendi porque você nao usou o comando IF e deu certo '-' eu me matei pra faze essa bagaça e tu resolveu rapidao ***** se puder me explicar de uma forma clara o que aconteceu agradeço valeu pego aqui

 

OK!

Entendemos que os comando if ler o (condicional) e o condicional sempre retorna um valor dependendo da condição;

Ex.: if (5 > 1) o condicional responde 1; Então dentro do if vai ficar assim com a resposta do Computador: if ( 1 ).

Ex2.: if( 5 == 5) o condicioanl responde 1; Então dentro do if vai ficar assim com a resposta do Computador: if ( 1 ).

Ex2.: if( 5 < 1) o condicional responde 0; Então dentro do if vai ficar assim com a resposta do Computador: if ( 0 ).

 

Bem entendemos que quando existe 1; Comando do if( 1 ) é executado;

Entendemos que quando existe 0; Comando do if( 0 ) não é executado;

 

Isso é uma meia verdade, pois na verdade o if será executado sempre que o valor dentro dele for diferente de 0;

Exemplo de nosso código acima:

Se na entrada acontecer algo como digitar: 0000 0702  [ENTER]

O Computador ver da seguinte forma

// Aqui o código fica assim // Aqui dentro dos parênteses o IF ver assim

if(0)DECIMAL += 128;       // 0; Não executar

if(0)DECIMAL += 64;         // 0; Não executar

if(0)DECIMAL += 32;         // 0; Não executar

if(0)DECIMAL += 16;         // 0; Não executar

if(0)DECIMAL += 8;           // 0; Não executar

if(7)DECIMAL += 4;           // 7; diferente de 0, então executar

if(0)DECIMAL += 2;           // 0; Não executar

if(2)DECIMAL += 1;           // 2; diferente de 0, então executar

 

Por isso que esse método é o mais seguro contra bugs !

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...