Ir ao conteúdo
  • Cadastre-se

C cadeia binária em C?


Zithion

Posts recomendados

Oi gente, tudo bem? Queria uma ajuda em adaptar um programa que esta em portugol, para C. To quebrando a cabeça já tem dias, mas não consigo...ainda estou aprendendo a programar em C, ficaria muito feliz pois este é um exercicio para praticar e to mt curioso em saber como seria adapta-lo em C. 

Obrigado pela atenção.

 

1. Faça um algoritmo em portugol que execute os seguintes passos: 0. Procura o 1º Dígito “1” 1. Troca 1 ® 0 2. Procura posição de inserção 3. Troca 0 ® 1 4. Escreve marca fim numeral 5. Procura o 2o dígito “0” à esquerda 6. Troca 0 ® 1 7. Avança uma Posição a Direita 8. Se “0” fim 9. Se “1” continua passo 1 Considerações: · Posição de inserção é a posição do último zero mais a Direita · Marca Fim de Numeral é um zero na próxima posição após o último “Um” mais a Direita. Este pseudo-algoritmo executa a cópia de uma dada cadeia binária em uma fita infinita, utilizando um vetor de grande dimensão. O conteúdo da fita é um numeral unário delimitado à esquerda por 0 (zero) e à direita por 00 (duplo zero), como mostrado abaixo.

 

011111100

Observações: · A posição inicial da cabeça de leitura/gravação é a primeira posição da fita. · Os valores possíveis do conteúdo da fita são 0 e 1. · Os movimentos possíveis são: Direita, Esquerda e Nada. · O estado inicial é 0.

 

Segue abaixo meu programa em portugol.

 

// Função :
// Autor : 
// Data : 07/06/2017
// Seção de Declarações
var
   num:vetor[1..45] de inteiro
   cont,numero,soma,posi,limite,dobro,linha,mais:inteiro
   // Inicio de procedimentos
 Procedimento imprimir()
 inicio
    Escreva("   Esta é a ",linha, " linha: ")
    para cont de 1 ate (limite) faca
         escreva(num[cont]," " )
    fimpara
    Escreval("")
    linha<-linha+1
fimprocedimento
inicio
      // Inicio Seção de Comandos
      cont<-2
      Escreval("|---------------------------------------------|")
      Escreval("   Quantos número 1 tem sua fita? ")
      Escreval("   Digite um número de 1 a 20: ")
      leia(numero)
      se numero>20 então
         Escreval("   Número maior do que o limite estipulado ")
         Escreval("   O programa esta sendo finalizado. ")
         interrompa
      senao
      // Processando quantidade número "1" o usuario digito.
      mais<-2
      dobro<-(numero*2)
      limite<-(numero+2)
      para cont de 3 ate(limite) faca
           num[cont]<-1
      fimpara
      se num[cont]=1 então
         num[cont]<-1
      senao
           num[cont]<-0
      fimse
      Escreval("")
      posi<-cont
      limite<-(limite+2)
      linha<-1
      // Escrevendo na tela a formação de digitos e a quantidade de "1" que o usuario digito.")
      imprimir()
      // Procurando o primeiro numero 1 e trocando para 0.
      para cont de 1 ate(limite) faca
           se num[cont]=1 então
              soma<-soma+1
              se soma=1 então
                 num[cont]<-0
              senao
                   num[cont]<-1
              fimse
           fimse
      fimpara
      // Imprimindo na tela a modificação
      imprimir()
      repita
      // Inicio da repetição
      // Procurando o segundo digito "0" a esquerda e substituindo por "1"!!
      soma<-0
      para cont de 3 ate (limite) faca
      se num[cont]=0 então
      soma<-soma+1
       se soma=3 então
          num[cont]<-1
       senao
          num[cont]<-0
       fimse
      fimse
    fimpara
    //Procurando o ultimo "1" e acrescentando mais o "0" no final
      //Imprimindo na tela a modificação
      posi<-cont
      limite<-(limite+1)
      imprimir()
      // Procurando o Segundo "0" a esquerda
      soma<-0
      para cont de (limite) ate 3 passo-1 faca
         se num[cont]=0 então
            soma<-soma+1
            se soma=3 então
                 num[cont]<-1
            senao
                 num[cont]<-0
            fimse
         fimse
      fimpara
      //Modificando na tela a modificação!
       posi<-cont
       imprimir()
       //Avança uma posição a direita e verifica
       //Se "0" sera o fim
       //Se "1" volt ao repita
       posi<-posi+mais
       se num[posi]=0 então
          interrompa
       senao
            num[posi]<-0
            imprimir()
       fimse
       soma<-0
       para cont de 1 ate (limite) faca
            se num[cont]=1 então
               soma<-soma+1
            fimse
          fimse
      fimpara
      mais<-(mais+1)
      ate soma=dobro
fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Zithion    para converter para a linguagem c, você precisa substituir os comandos, por exemplo:

no lugar de  para cont de 1 ate (limite) faca coloque for( cont=1;cont<=limite;cont++)

no lugar de repita / ate coloque do{ aqui dentro coloque o código que está dentro do repita até o ate }while(soma != dobro);

no lugar de leia(numero) coloque scanf("%d",&numero);

no lugar de se num[cont]=1 então coloque if(num[cont]==1)

no lugar de senao coloque else{  }

no lugar do primeiro interrompa coloque return 0; e no segundo coloque break;

o loop para vai até o valor estipulado, por exemplo para cont de 3 até 10 faca , então ele vai de 3 até 10 e na saída cont terá o valor 10, mas em  c o for começa no 3 evai até 10, mas no final ele soma um ao cont, ficando então cont com valor 11, e nesse caso como vai usar a variável cont, precisa diminuir um para que o resultado do código seja igual,  no entanto quando o loop for decrescente em portugol cont começaria de 10 e vai até 3 e no final ele diminui um, passando cont a valer 2 e em c também estaria valendo 2, o que seria igual, não precisando modificar o valor,  então seguindo essas regras você pode conseguir converter esse código .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...