Ir ao conteúdo
  • Cadastre-se

C++ projeto binario de c++


emanuelrichard
Ir à solução Resolvido por Visitante,

Posts recomendados

Estou com um projeto q tenho que transforma numeros em binario e converte para decimal ...  

aqui esta o video de ajuda ... 

#include <fstream>
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>

using namespace std;




int main()
{
	//variavel
	ifstream dados;  
	int numbit, y = 0;
	char bite[10000] , b[10000];
	int x = 0 , z = 0 , a,i=0;

	dados.open("teste1.txt", ifstream::in); // abrir arquivo

	dados >> numbit;
	dados >> bite;
	
	a = strlen(bite); //tamanho do vetor 

	dados.close(); //fechar arquivo;
	
	cout<<a<<endl;
	
	//programa

	for(i = 0 ; i < a ; i++)
	{
		if(bite[i] == '0')
			x++;
		else if (bite[i] == '1')
			z++;

		
		if(x + z == numbit)
		{
			if(x > z)
				bite[y] = '0';
			else if(z > x)
				bite[y] = '1';
			
			b[y] = bite[y];
			
			y++;
			
			x = 0;
			z = 0;
		}
		
	}


	for (int i = 1 ; i <= y ; i++)
	{
		
	cout << b[i];
	
	}

 int tam,vlr;
  
  tam = strlen(b);
  
  cout<<tam<<endl;
  
  for(i=0;i<=tam;i++){
  	
    int num = bite[i]-'0'; //converte char em int
    
    vlr += num*(pow(2,(tam-i)));
  }
  
  cout<<vlr;
 



	return 0;
}

Faça um programa que leia o nome de um arquivo com uma sequência de bits resultante de uma transmissão ruidosa de uma mensagem codificada em Rn, e mostre na tela a mensagem decifrada.

Entrada

A entrada consiste de uma única linha com o nome do arquivo a ser processado.

Este arquivo contém duas linhas:

- na primeira linha, é informado o valor de n

- a segunda linha contém vários bits (valores 1 ou 0).

Saída

Na saída, o programa deve mostrar a mensagem originalmente transmitida, em caracteres ASCII

Exemplo de entrada    Exemplo de saída   

teste1.txt                       TODOS OS FATOS TEM TRES versões: A SUA, A MINHA E A VERDADEIRA

teste1.txt

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

  • Solução

Não tá tão difícil fazer. Basta apenas ler caractere por caractere e ir ajeitando tudo numa std::string, digo, buffer auxiliar.

Por exemplo, vou dizer apenas sobre a conversão de std::string pra binário:

-supoondo que você chegou na segunda linha, que é logo após o primeiro '\n'. Como estamos numa linha que é provavelmente um múltiplo de 8, pois, cada byte tem 8 bits, então você deve fazer assim:

-no inicio da segunda linha, crie um std::string auxiliar (std::string aux)

-depois, leia os próximos 8 chars do arquivo e guarde todos em sequência no aux (exemplo: aux.push_back(charLido))

-agora, depois de ler os 8 próximos chars, você deve converter a string aux para um número binário.

Mas pra isso, você deve considerar a ordem dos bits, tipo, eu suponho que seja da direita para esquerda (do último char de aux para o aux[0])

-use um loop indo do fim ao inicio de aux para converter os binários e use if para saber se o char de aux atual é um '1' ou um '0' (isso muda todo o valor final

-daí você segue como converter lá o que fala no vídeo

-depois você limpa o aux com aux.clear() (vai zerar todo o aux)

-pronto, convertido o aux para decimal (ou char no seu caso), você deve ler os próximos 8 chars da segunda linha. E novamente você converte para decimal (ou char) e guarda ele em algum lugar.

-repita esse processo até terminar de ler o arquivo.

 

Eu sugiro que não leia todo o conteúdo do arquivo logo de cara, mas faça como um compilador faz: leia char por char (byte por byte). Use um while para ir lendo cara caractere do arquivo, isso é apenas processamento de texto simples, exatamente como faz um compilador.

 

Até.

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...