Ir ao conteúdo
  • Cadastre-se

C++ Nao consigo decodificar código RN;


emanuelrichard
Ir à solução Resolvido por Ansi C,

Posts recomendados

Faça um programa que leia uma sequência de bits provenientes de um código Rn, que podem ter sido corrompidos por ruído e recupere a informação original.

Entrada

A entrada consiste de duas linhas:

- a primeira linha contém um inteiro N (N<=10), que corresponde ao número de repetições de cada bit;

- a segunda linha contém os bits a serem processados, e finaliza com o FLAG  -1.

Saída

Na saída, o programa deve mostrar a informação recuperada

Exemplo de entrada    Exemplo de saída   

3
0 1 0 1 1 0 0 1 0

 

#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc, char** argv)
{
	int n, x, z;
	char bit[10];

	do
	{
		cout << " Entre com numero de codigo RN : " ;
		cin >> n;
	}
	while(n > 10);

	cout << " Digite numero do bits : " ;
	cin >> bit[n];

	while(bit[n] != -1)
	{
		x = 0;
		z = 0;

		for(int i = 0 ; i < n - 1; i++)
		{
			if(bit[n] == 0)
				x++;
			else
			{
				z++;
			}
		}

		cout << " Digite numero do bits : " ;
		cin >> bit[n];

	}

	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@emanuelrichard Bom Dia.

 

Você consegue sintetizar a tarefa do problema para mim. Existem essas etapas (processos) na tarefa:

  1. Ler N: Número não negativo <= 10.
  2. Ler BIT: Sequência (indeterminada) de dígitos binários.
  3. Exibir N * BIT [ i ]: Sequência (indeterminada) de bit em BIT por N.

 

É isso?

O código não me ficou claro também.

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

@Mauro Britivaldo Isso mesmo ... o exemplo da saida nao saiu ali , vou escrever de novo ...

 

Faça um programa que leia uma sequência de bits provenientes de um código Rn, que podem ter sido corrompidos por ruído e recupere a informação original.

Entrada

A entrada consiste de duas linhas:

- a primeira linha contém um inteiro N (N<=10), que corresponde ao número de repetições de cada bit;

- a segunda linha contém os bits a serem processados, e finaliza com o FLAG  -1.

Saída

Na saída, o programa deve mostrar a informação recuperada

Exemplo de entrada    Exemplo de saída   

3                                    0 1 0
0 1 0 1 1 0 0 1 0 

 

E aqui tem um video pra tirar sua duvida 

 

Link para o comentário
Compartilhar em outros sites

@emanuelrichard Ótimo.

 

Retificando: O número N também representa o subconjunto de bits a se examinar, pois no exato número N aconteceu o ruído na mensagem recepção da mensagem. A saída ajudou, e o vídeo mais ainda.

 

Com disse anteriormente N é o número de repetições na mensagem por Bit, e também os subgrupos para recuperação da mensagem. Se dividir o problema em 3 tarefas teremos: entrada, processamento e saída.

 

O processamento é entender o vetor mensagem codificada Rn em sub-vetores de tamanho n em que cada sub-vetor tem a mensagem original se tiraramos o ruído.

Então você pode por exemplo:

 

  1. Copiar os n primeiros elementos do vetor Rn para segundo sub-vetor auxiliar de tamanho n.
  2. Examinar o vetor auxiliar e determinar qual é o maior número de 0s ou de 1s.
  3. Salvar no vetor mensagem corrigida Mn em sua primeira posição 0 ou 1 que depende do resultado na etapa 2.
  4. Repetir as etapas 1...3 do processo até que não resta mais sub-vetores para se examinar em Rn. E fácil concluir que o número de sub-vetores em Rn é igual ao número de elementos Rn / n. Ainda se diz que; existe proporção de 1 pra n entre os vetores Mn e Rn, ou seja, cada elemento de Mn depende de n elementos de Rn.

 

Consegue implementar essa parte?

Link para o comentário
Compartilhar em outros sites

@Mauro Britivaldo Ta dando muito certo nao cara ...

#include <iostream>
#include <iomanip>

using namespace std;

int main(int argc, char** argv)
{
	int n, x = 0, z = 0, j = 0, i = 0;
	int bit[10], b[10];

	do
	{
		cout << " Entre com numero de codigo RN : " ;
		cin >> n;
	}
	while(n > 10);

	cout << "Entre com os bits : " << endl;
	cin >> bit[j];

	while(bit[j] != -1)
	{

		b[i] = bit[j];

		if(x == 3)
			b[i] = 0;
		else if(z == 3)
			b[i] = 1;
		i++;

		cout << "Entre com os bits : " << endl;
		cin >> bit[j];

	}

	for (int i = 0 ; i < n; i ++)
	{
		if(b[i] == 0)
			x++;
		else if (b[i] == 1)
			z++;
			}


	for (int i = 0 ; i < n ; i++)
	{
		if(x == 3)
		{
			b[i] = 0;


		}
		else if(z == 3)
			b[i] = 1;
	}

	for(int i = 0; i < n; i++)
	{
		cout << " E : " << b[i];
	}

	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@emanuelrichard Bom dia.

 

 

eryO9szimsIt-d9_GLUgIFF2_mJ1xUph3SuwQnDe

Se uma rotina é muito complexa então pense nas rotinas menores. 

Em 30/10/2019 às 09:24, emanuelrichard disse:

@Mauro Britivaldo Ta dando muito certo nao cara ...

 

O rotina (em 4 etapas) da maneira como proponho fica complexa mesmo, fica mais complexa ainda quando tenta-se de uma só vez implementa-la. Para ter sucesso nesse caso é necessário dividir tudo em 3 partes e trabalhar com suas etapas individualmente. Não funcionou pra você.

 

Vamos tentar do seu jeito! Entada+Processamento+Saída tudo de uma só vez. Então...

 

 

1# A entrada do receber o Rn, a entrada não determinada de bits, o que sabemos é que a entradas param com -1. Seria que tamanho esse vetor? Como armazenar essas informações de bits sem largura fixa em C++?

 

Exemplo.

#include <iostream>
#include <string>

int main(void)
{
        std::string bits  ("");
        std::string plusbits ("");

        for (;;) {
                std::cin >>(bits);

                if (bits == "-1") break;

                plusbits = plusbits + bits;
        }
        std::cout <<(plusbits)<< std::endl;
        return 0;
}

Experimente entrar: 101 101 101 101 -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...