Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tisilva

[Resolvido] codificador / descodificador

Recommended Posts

O programa deve ler um número inteiro e escrever o número que resulta

da sua codificação ou descodificação com base nas seguintes regras:

 

1. (Codificar) – Substituir cada sequência de n dígitos x repetidos,

pelo par de dígitos nx ;

 

2. (Descodificar) – Substituir cada par de dígitos nx , pela sequência

de n dígitos x repetidos (operação inversa).

A codificação e/ou descodificação deve ser uma opção de escolha. Note

que só podem ser descodificados números que possuam um número par

de dígitos.

 

O programa deve permitir a codificação/descodificação de mais do que

um número na mesma corrida (“run”) e deve identificar todas as

situações de erro. O programa deve imprimir mensagens em Português.

Por exemplo, se 277733444 for o inteiro lido, o programa pode codificálo

como

 

 

1 2 3 7 2 3 3 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já entendi seu código,

o que voce deve fazer é pegar o numero codificado e admitir como os ÍMPARES serao índices do cypher que voce usou na codificacao por exemplo

1,3,5,7,9... os pares serao os elementos do numero codificado, seu programa devera ler os pares e repetilos de acordo com seu índice, por exemplo

voce pega o numero codificado como no que eu fiz em baixo 1314353782923 e vamos supor que ele seja inserido em um array unidimensional

 

int numberleght; // esse eh o numero de caracteres que vao ter o numero a ser decodificado

 

arraydecodificicador[numberlenght]

 

o que eu nao sei como se faz é dividir o numero em pequenos outros numeros, pesquise.

 

agora voce adiciona cada numero separada no array

 

por exemplo

 

arraydecodificador[0] = 1

arraydecodificador[1] = 3

arraydecodificador[2] = 1

arraydecodificador[3] = 4

 

e assim vai de acordo com o numero.

 

na hora de escrever, voce vai bolar um codigo que seja por exemplo assim

 

cout<<"Numero decodificado : "<< arraycodificado[1] <<" * "<< arraycodificado[0] <<""; e por ai vai, mas isso só vai multiplicar os números, minha dica seria voce criar uma funcao pra decodificar cada numero, por exemplo, o programa pega o nosso numero 1314353782923 ele identifica o os números que serao inseridos nos indices PARES do array, note que agora estamos falando dos indices do array e nao os indices do numero, assim teremos 0,2,4,6 esses numero definiram quantas vezes os outros repetirao, os de indices impar do array. Ai, o que voce faz é chamar a funcao decodificadora, a funcaodecodificadora seria tipo essa

 

int decodificanumero3()

{

cout<<"3";

}

 

esse funcao devera ser chamada baseada no numero que estiver dentro do array de indice 0

agora é só voce criar os argumentos de identificacao de qual numero esta nos indice impares do array e chamar a funcao baseada no numero que precede o array que foi identificado.

 

Espero ter dado uma luz, vou tentar fazer o programa aqui.

 

3455577789933 --- Codifica >> 1314353782923

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce faz :

 

arraydecodificador[0] = 1

arraydecodificador[1] = 3

arraydecodificador[2] = 1

arraydecodificador[3] = 4

 

mas se nao souber o numero que se vai introduzir???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso foi exemplo para o nosso numero, para um numero qualquer voce devera criar variaveis que recebrao cada um dos numeros primeiro.

Por exemplo

 

in primeironumero, segundonumero, terceironumero, quartonumero; //Essas sao as variaveis onde seu programa deve inserir os numeros um a um


arraydecodificador[0] = primeironumero;
arraydecodificador[1] = segundonumero;
arraydecodificador[2] = terceironumero;
arraydecodificador[3] = quartonumero;
Estou pensando ainda como o programa decompoe o numero inserido e manda cada parte do numero pro seu lugar, que seriam aquelas variaveis citada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo exemplo q você deu da at[e pra fazer um programa simples..

e com esse exemplo ql seria a saida:

 

27773344477

 

??

 

espero q você entenda pq tenho essa duvida ;D

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

quitZAUMMM a saida pro seu numero ficaria 27773344477 -> 1237233427

Se imaginarmos que XYZQ ( imagine que as letras representam a posicao de cada numero) e' um numero, teriamos que as letras X e Z definem quantas vezes serao repetidas as outras duas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo exemplo q você deu da at[e pra fazer um programa simples..

e com esse exemplo ql seria a saida:

 

27773344477

 

??

 

espero q você entenda pq tenho essa duvida ;D

 

[]s

Pelo que entendi ficaria:

1-2

3-7

2-3

3-4

2-7

ou 1-23-72-33-42-7 depende do modo que deseja imprimir ou armanzenar no arquivo ou vetor, este médo de substituição utilizei no compactador de arquivos que postei aqui no laboratorio de scripts, neste caso utilizaria mas o método runlenght, apesar de não estar implementado no exemplo ja serve para entendimento veja:

http://forum.imasters.com.br/index.php?showtopic=314205

 

Fiz a implementação do runlenght e assim que encontre-o aqui atualizarei o post la no laboratório de scripts, para ir adiantando utilizei um segundo contador para verificar se o numero ou letra se repete tipo:

 

int cont, k=0;
for(i=0;i<tam;i++)//sendo tam o tamanho do vetor (fixo ou alocação dinamica);
{
	if(vetor[i]==vetor[i+1])
	  {
		 j=i;
		 cont=0;
		 while(vetor[j]==vetor[j+1]&&cont<10)
				 cont++;
		 vetorB[k]=vetor[i];
		 vetorB[k+1]='-';
		 vetorB[k+2]=cont;
		 k+=3;
		 i+=cont;
	 } 
  else
		 {
		 vetorB[k]=vetor[i];
				 k++;
		 }
}

Espero ter lhe ajudado precisando estamos ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isto tem q dar pra numeros positivos, negativos e nulos...

 

 

a descodificação de 77777777777 será 9727 e a descodificação de -7777777777777 será -9747.

 

e tudo pra mem moer a cabeça

Compartilhar este post


Link para o post
Compartilhar em outros sites

ALGUEM PERCEBE ONDE ESTA O ERRO?

TOU FARTO DESTE CODIGO.

 

 

#include<stdlib.h>
#include<stdio.h>

int dgtlen(int n)
{
	if(n == 0)
		return 1;
	else
	{
		int c;
		for(c = 0; n!=0; n /= 10)
			c++;
		return c;
	}
}

void codificar(char copy[], char indiv[], char code[])
{
	int a=0, b=0;
	while (indiv[a] != '\0'){
		code[a] = indiv[a];
		a++;
			if (copy[b] == indiv[a]+2 ){
						 code = copy[b];
						 b++;
			}
	 }
	} 


int main ()
{system ("chcp 1252");
	
	
	int n=0;
	int aux=0; 
	char copy, code;
	do{
	
	printf("\n\nIntroduza um numero Inteiro\n");
	
	scanf("%d", &n);
	
	aux = dgtlen(n)+1; 
	
	char indiv[aux]; 
	sprintf(indiv, " %d", n);  
	
	copy=indiv[aux];
	printf("\n%s", indiv);
	printf("\n%s", copy);
	printf("\n%s", codificar (char code[]);
	printf("\n\n"); 
   
	}while (n!=0);

system ("\n\npause"); 
return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa nunca vi for assim:

for(c = 0; n!=0; n /= 10)

Compartilhar este post


Link para o post
Compartilhar em outros sites

isto tem q dar pra numeros positivos, negativos e nulos...

 

 

a descodificação de 77777777777 será 9727 e a descodificação de -7777777777777 será -9747.

 

e tudo pra mem moer a cabeça

Cara ai então aconselho a ter um separador que indique que o que vem a frente é uma codificação, tipo pode ser um caracter especial tipo um ¬ ou ¨ entendeu tipo ele iria criptogravar ele iria modificar o numero 777777777 para 9¬72¬7 dai você faria a comparação tipo:

 

if(vetor[i+1]=='¬')

Compartilhar este post


Link para o post
Compartilhar em outros sites

e quando fosse negativo?

 

Brigada por tudo

Vamos ver:

 

-77777777777 ficaria -9¬72¬7

O - seria apenas um char e nada mais, apenas repetiria ele no arquivo com os numeros descodificados.

 

Veja o exemplo que passei la em cima pelo que vejo encaixaria inteiramente no que te falei.

 

Qualquer duvida estamos ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

agradeço a vossa ajuda mas qd nao se sabe nao se sabe....

 

o programa ficou por fazer nao tenho mais cabeça pra isto

 

obrigado a todos q me tentaram ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Eu devo ser teu colega, pois tenho o mesmo programa para fazer e também estou à rasca...

 

Eu bloqueei na parte que tenho que comparar os numeros no vetor para fazer a contagem dos mesmos... Não estou mesmo nada a ver como fazer essa contagem.

 

Se alguem pudesse fazer alguma luz...

Não quero o programa feito, mas apenas alguma luz sobre como fazer...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.