Ir ao conteúdo
  • Cadastre-se
Gabriel Pancaldi

C Conversao binario-octal como fazer?

Recommended Posts

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#define T 10

void bin_oct(char [], char []);

int main(){
    char b[50], o[50];

    printf("Informe um numero binario:");
    gets(b);

    bin_oct(b, o);


return 0;
}

void bin_oct(char *bin, char *oct){
    int i, j;
        for(i = 0; i < strlen(oct); i++){
            for(j = 0; j < strlen(bin); j = j + 3){
                if(bin[j] == '0' && bin[j + 1] == '0' && bin[j + 2] == '0'){
                    oct[i] = '0';

                }
                else if(bin[j] == '0' && bin[j + 1] == '0' && bin[j + 2] == '1'){
                    oct[i] = '1';


                }
                else if(bin[j] == '0' && bin[j + 1] == '1' && bin[j + 2] == '0'){
                    oct[i] = '2';


                }
                else if(bin[j] == '0' && bin[j + 1] == '1' && bin[j + 2] == '1'){
                    oct[i] = '3';


                }
                else if(bin[j] == '1' && bin[j + 1] == '0' && bin[j + 2] == '0'){
                    oct[i] = '4';


                }
                else if(bin[j] == '1' && bin[j + 1] == '0' && bin[j + 2] == '1'){
                    oct[i] = '5';


                }
                else if(bin[j] == '1' && bin[j + 1] == '1' && bin[j + 2] == '0'){
                    oct[i] = '6';

                }
                else if(bin[j] == '1' && bin[j + 1] == '1' && bin[j + 2] == '1'){
                    oct[i] = '7';


                }

            }
        }
        printf("%s", oct);

}

 

Estou observando que só o ultimo valor é mostrado no printf, o certo seria quando achasse o valor que batesse o for fosse alterado assim, buscando uma novo grupo de 3 e um valor i diferente da string mas n sei como faz isso. Alguma ideia do que fazer?

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Gabriel Pancaldi !

  • Elementar! Se cada 3 binários compreende 1 octal, significa que todo vez que j incrementa em 3, incrementa também a i em +1. Ao mesmo tempo que j cresce, cresce também o i. Ainda sim da maneira como  os laços se encontram o mais externo (i) é obrigado esperar pelo mais interno (j) acabar,  pois é daí que vem ... 
    15 horas atrás, Gabriel Pancaldi disse:

    observando que só o ultimo valor é mostrado no printf, o certo seria quando achasse o valor que batesse o for fosse alterado assim, buscando uma novo grupo de 3 e um valor i diferente da string mas n sei como faz isso.

 

 

Entendeu?

 

 

Existem outras fragilidades, você precisa garantir que o número de bits é múltiplo de 3 em quantidade.

111 - 010101 - 011101011 ... Por enquanto, ainda depende do que o usuário vai digitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como corrijo isso, gostaria que quando o binario correto fosse achado o j continuasse de onde parou e o i fosse incrementado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • No mesmo laço em que se incrementa a j-contadora, incrementara-se-á também i-contadora.
    57 minutos atrás, Gabriel Pancaldi disse:

    gostaria que quando o binario correto fosse achado o j continuasse de onde parou e o i fosse incrementado.

 

 

A regra é 3/1: 

Recordando uma instrução FOR se divide em 3 partes de comando, assim:

 

for (expressão¹; expressão²; expressão³ )

 

Desde da reforma que criou o C'11 é possível definir variáveis internas a instrução na primeira expressão. E na segundo expressão tem-se a condição lógica para continuidade do laço podendo ser expressão vazio. Na última e terceira expressão³ em geral têm a contagem de ciclos da instrução. Assim, em todas as partes, o número de comandos nas expressões pode ir além de 1, basta para isso o uso da vírgula (,) aninhando o máximo de comandos que puder.

 

É útil nessa situação porque com a vírgula declaremos 2 variáveis (i,j) no comando da primeira expressão, e na terceira expressão declaramos o incremento de variáveis (i,j) na regra 3/1, desta maneira precisamos de apenas 1 FOR:

for(int j= 0, i= 0; j < strlen(bin); j= j + 3, i= i + 1)

* Observe: Á proporção que j-contadora cresce em 3, cresce i-contadora em 1.

 

adicionado 0 minutos depois

@Gabriel Pancaldi Perguntas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Edit:

 

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

×