Ir para conteúdo

Arquivado

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

Tisilva

[Resolvido] codificador / descodificador

Recommended Posts

bom galera vamos pensar primeiro na codificacao..

algo do tipo:

le o numero e joga no vetor.

ai come;ca

 

ivez = 0;
aux = num[0];
i = 0;
pos = 0;
while(i<=strlen(num)){
	cont = 0
	while (aux == num[i++] && i < strlen(num)) {
		cont++;
		pos++;
	}
	if (iVez == 0) {
		iVez = 1;
		strcpy(num_codif,cont); 
		strcat(num_codif,aux);
	}
	else {
	   strcat(num_codif,cont);
	   strcat(num_codif,aux);
	}
	aux = num[pos];
}

tipo naum cheguei testar c vai dar erro de falha de segmentacao e tal..

pensei nessa logica..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha cara fiz algo assim, to meio sem tempo pois to no servico, e num to usando muita logica na coisa..

at[e agora esta assim:

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

int main(){
	int ivez, i, pos, cont, tam;
	char num[256];
	char char1[1], char2[1];
	char aux[2];
	char num_codif[256];
	ivez = 0;
	i = 0;
	pos = 0;
	printf("Digite o numero a ser codificado: ");
	fgets(num , 256,stdin);
	aux[0] = num[0];
	aux[1] = '\0';
	tam = strlen(num);
	while(i < tam){
						  cont = 0;
						  while (aux[0] == num[i++]) {
								if (i < tam){
									  if (cont < 9) cont++;
									  else break;
								pos++;
								}
						  }
						  if (ivez == 0) {
							 ivez = 1;
							 itoa (cont, char1,10);
							 strcpy(num_codif,char1); 
							 strcat(num_codif,aux);
						  }
						  else {
							   if (cont != 0){
								   itoa (cont, char1,10);
								   strcat(num_codif,char1);
								   strcat(num_codif,aux);
								}
						  }
						  aux[0] = num[pos];
						  aux[1] = '\0';
						  --i;
	}
	printf("Numero codificado: %s", num_codif);
	getch();
	return 0;
}}

tente ver aeeee.. qnd eu tiver + tempo analizo melhor..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta bem melhor q o meu, umas 20 ou 30vezes,

brigado nem sei como te agradeçer..

como consegues entender tanto de programaçao, da ai umas dicas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, realmente tá fantástico.

 

Sabes mesmo disto.

 

O problema é que nós é que deveriamos saber como fazer isto e eu não sei (muito sinceramente http://forum.imasters.com.br/public/style_emoticons/default/cry.gif/> http://forum.imasters.com.br/public/style_emoticons/default/cry.gif/> ....)

 

Assim, não custa nada vir aqui, sakar o codigo e apresentar. A ideia não era essa..

 

O que eu queria, se possivel para o quitZAUMMM, era que desse umas dicas de como aprender a fazer, qual a melhor forma, quais os melhores manuais.

 

Obrigado desde já, pelo teu esforço.

 

http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/> http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

explique-me o q faz:

 

itoa (cont, char1,10);

 

o "itao" nao precisa de estar declarado?

itoa converte uma string para um inteiro.

Veja:

http://www.mkssoftware.com/docs/man3/itoa.3.asp

 

Vou tentar criar um aqui pelo jeito que o quit passou a diferença do método dele é que o dele pega o que o usuario digitar o meu pega de um arquivo .txt mas segue a mesma lógica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para quitZAUMMM:

 

Estive a compilar o teu codigo e para já há 2 problemas:

 

1º - Se introduzirmos um valor negativo (por exe. -234-3334), deveria dar erro.

 

2º - Também nos pedem para decodificar novamente o mesmo nº...

 

Como se faz isso (todos os procedimentos ao contrário???).

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atualizei o topico la com o metodo runlengt vejam abaixo que coloquei os testes que fiz agora aqui com o código veja se se encaixa no que vcs precisam:

 

http://forum.imasters.com.br/index.php...p;#entry1183172

 

Edit: o codigo do quit faz somente a codificação, para fazer o contrario vcs tem que fazer a logica inversa pelo que eu vi não foi incluso nada para dizer se o numero esta codificado ou não, por isso utilizei caracteres especiais no meu exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha o mew codifica, c vier um numero negativo, é soh você tratar o char, e realizar o deslocamento dos numeros a direita..

para descodificar é muito simples..

 

ta vendo galera naum desistam o algoritmo é simples..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, eu naum tenho a logica muito boa, fui desenvolvendo usando printf's para ver oq tava passando nos loops,

nunca desista cara..

a descodificação é simples..

ve pega os numeros pares q seram a quantidade de vzs q um numero sera repedito, e as impares os numeros q serao repetidos, tentem expressar a logica q eu ajudo..

 

qro ver vcs passando de ano.. go

Compartilhar este post


Link para o post
Compartilhar em outros sites

O codigo do quit é bem compacto, tem que fazer o inverso pra descodificar, ele servirá para um numero que o usuario acabou de digitar, tipo se o professor quiser apenas algo para o momento mostrar o arquivo como ele fica criptografado e depois descriptografado é a melhor escolha.

 

é só utilizar primeiro numero como contador e depois repetilo armazenando em um vetor ou mostrando na tela, o problema é se o numero ultrapassar 10 repetições, não será somente o numero posterior pois o valor terá duas casas decimais, estou fazendo algo aqui utilizando uma junção dos dois programas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

gente, é algo simples assim:

for (int i=0;i<tam;i+=2) imps[i] = num[i];
for (int j=1;j<tam;j+=2) pars[j] = num[j];
pronto agora, é soh dar os printf's.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

É bem isso pessoal, do jeito que o quit falou, bem acho melhor deixar o pessoal pensar um pouco se eles tiverem duvidas o pessoal ajuda aqui.

 

Inté pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Obrigado pelas dicas. Vamos ver se o prof. alarga o prazo de entrega para se poder completar o programa....

 

Mais uma vez, obrigado.

 

PS: mandem lá as vossas dicas de como aprender programação....

Compartilhar este post


Link para o post
Compartilhar em outros sites

naum gosto muito de postar coisas prontas, + sei q num [e um algoritmo muito simples de vcs fazerem, os testes q fiz aki deram corretos, caso alguem veja algum erro, fique a vontade para falar.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

void deslocaEsq(char sPalavra[]){
	for(int i = 0; i < strlen(sPalavra); i++){
		sPalavra[i] = sPalavra[i+1];
	}
}

void desenvolvedor(){
	 system("cls");
	 printf("quitZAUMMM");
	 getch();
}

int menu(){
	int iOpc;
	system("cls");
	printf(" Sistema de Codificacao e Descodificacao");
	printf("\n 1 - Codificar\n 2 - Descodificar\n 3 - Desenvolvedor\n 4 - Sair");
	printf("\n Digite a sua opcao: ");
	scanf("%d", &iOpc);
	return(iOpc);
}  

void codifica(){
	system("cls");
	int ivez, i, pos, cont, tam, iNegativo;
	char num[256], char1[1], aux[2], num_codif[256];
	ivez = i =  pos = iNegativo = 0;
	getchar();
	printf(" CODIFICACAO\n\n");
	printf(" Digite o numero a ser codificado: ");
	fgets(num , 255,stdin);
	 if (num[0] == '-') {
		deslocaEsq(num);
		iNegativo = 1;
	}
	aux[0] = num[0];
	aux[1] = '\0';
	tam = strlen(num);
	while(i < tam){
						  cont = 0;
						  while (aux[0] == num[i++]) {
								if (i < tam){
									  if (cont < 9) cont++;
									  else break;
								pos++;
								}
						  }
						  if (ivez == 0) {
							 ivez = 1;
							 itoa (cont, char1,10);
							 strcpy(num_codif,char1); 
							 strcat(num_codif,aux);
						  }
						  else {
							   if (cont != 0){
								   itoa (cont, char1,10);
								   strcat(num_codif,char1);
								   strcat(num_codif,aux);
								}
						  }
						  aux[0] = num[pos];
						  aux[1] = '\0';
						  --i;
	}
	if (iNegativo == 1) printf(" Numero codificado: -%s", num_codif);
	else				printf(" Numero codificado: %s", num_codif);
	getch();
}	

void descodifica(){
	 system("cls");
	 char sNum[256], sPars[128], sImps[128];
	 int j = 0, h = 0, k =0, iNegativo = 0;;
	 char cChar[2];
	 getchar();
	 printf(" DESCODIFICACAO\n\n");
	 printf(" Digite o numero a ser descodificado: ");
	 fgets(sNum , 255, stdin);
	 if (sNum[0] == '-') {
		deslocaEsq(sNum);
		iNegativo = 1;
	 }
	 for (int i = 0; i < strlen(sNum) - 1; i += 2) sPars[j++] = sNum[i];
	 j = 0;
	 for (int i = 1; i < strlen(sNum); i += 2)	 sImps[j++] = sNum[i];
	 printf(" Numero Descodificado: ");
	 if (iNegativo == 1) printf("-");
	 for (int i = 0; i < strlen(sPars); i++) {
		 cChar[0] = sPars[k++];
		 cChar[1] = '\0';
		 int n = atoi(cChar);
		 for (int j = 0; j < n; j++) printf("%c", sImps[h]);
		 h++;
		 }
	 getch();
}
int main(){
	int iMenu;
	while(1){
			 iMenu = menu();
			 if (iMenu == 4) break;
			 switch(iMenu){
						  case 1: codifica(); break;
						  case 2: descodifica(); break;
						  case 3: desenvolvedor(); break;
						  default : printf("Opcao Invalida");
						  }
			 }
	return 0;
}

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif/>

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.