Ir para conteúdo

Arquivado

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

Tisilva

[Resolvido] codificador / descodificador

Recommended Posts

Esta foi uma das possíveis soluções do professor.

 

Aqui fica para poder ajudar toda a comunidade:

 

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

#define NUL '\0'	

void init(char[]);
void input(char[], char[]);
int even(char[]);
int code(char[], char[]);
int decode(char, char[], char[]);
void show(char*, char, char[], char[]);
int add_pair(int, int, char, char[]);


int main() {
	char inp[MAX], 	
		num[MAX],	
		cod[MAX],	
		dec[MAX],	
		opt;		
	int	more = 1,	
		err = 0;	

	system ("chcp 1252");

	/
	while (more) {

		do {


			init (num);
			init (cod);
			init (dec);

			
			fflush(stdin); 
			printf ("\n====== MENU ========"); 
			printf ("\n ©odificar "); 
			printf ("\n (D)escodificar "); 
			printf ("\n (S)air: ");
			printf ("\n Opção: (C/D/S) ");
			scanf (" %c", &opt);

			
			err = 0;
			switch (toupper(opt)) {
				case 'C':
					input (inp, num);
					if (code (num, cod)) 
						show ("codificado", inp[0], cod, num);
					break;
				case 'D': 
					input (inp, num);
					if (decode (inp[0], num, dec)) 
						show ("descodificado", inp[0], dec, num);
					break;
				case 'S': 
					more = 0; 
					break;
				default: 
					err = 1;
			}
			if (err) printf ("\nA opção é inválida\n");


			printf ("\n\nPrima qualquer tecla ...");
			getch ();
			system ("cls");
		} while (err);

	}
	printf("\n\n");
	system("pause");
	return 0;
}


void init (char any[]) {
	int i;
	for (i=0; i<MAX-1; i++) any[i] = NUL;
}

void input(char inp[], char num[]) {
	unsigned i, n, err;
	do {
		fflush (stdin);
		printf ("\n Número inteiro: "); 
		scanf (" %19s", inp, MAX);
		err = 0;

		

		if (strlen(inp) > MAX-2) err = 1;

		

		if (!isdigit(inp[0]) && inp[0] != '-') err = 1;

		

		for (i=1; i<strlen(inp); i++)
			if (!isdigit(inp[i])) err = 1;

		

		n = atoi(inp);
		if (inp[0] == '-' && n == 0) err = 1;

		if (err) printf ("\nO input é inválido\n");
	} while (err);

	

	if (inp[0] == '-')
		for (i=1; i<strlen(inp); i++) 
			num[i-1] = inp[i];
	else
		for (i=0; i<strlen(inp); i++) 
			num[i] = inp[i];
}


int even(char inp[]) {
	int k;
	if (inp[0] == '-') k = strlen(inp) - 1;
	else k = strlen(inp);
	if (k % 2 == 0) return 1;
	else return 0;
}



int code(char num[],char cod[]) {
	unsigned i, j=0, count=0, err=0;
	char k;
	k = num[0];
	for (i=1; i<strlen(num); i++) {
		count++;

		
		if (j > MAX-2) {
			err = 1;
			break;
		}

		
		if (count > MAX_COUNT) {
			j = add_pair(count-1,j,k,cod) + 1;
			count = 1;
		}

		

		else {
			if (num[i] != k) {
				j = add_pair(count,j,k,cod) + 1;
				count = 0;
				k = num[i];
			}
		}
	}

	

	if (j > MAX-2) err = 1;
	else {

		
		++count;
		j = add_pair(count,j,k,cod) + 1;
	}

	if (err) {
		printf ("\nO número não pode ser codificado");
		return 0;
	}
	else return 1;
}



int decode(char sign, char num[],char dec[]) {
	unsigned i, j, n, k=0, err=0;
	char p1[2], p2[2];

	

	if (even(num)) {
		for (i=0; i<strlen(num); i++) {

			

			if (i > 0) {
				p2[0] = num[i];
				p2[1] = num[i+1];
				if (p2[1] == p1[1] && p1[0] != '9') {
					err = 1;
					break;
				}
			}

			

			p1[0] = num[i];
			p1[1] = num[i+1];

			

			if (p1[0] != '0') {
				for (j=0; j<p1[0]-'0'; j++) {
					dec[k] = p1[1];
					k++;

					
					if (k > MAX-2) {
						err = 1;
					}
				}
				i++;
			}

			else {
				err = 1;
				break;
			}
		}
	}

	else err = 1;

	

	n = atoi(dec);

	if (sign == '-' && n == 0) err = 1;

	if (err) {
		printf ("\nO número não pode ser descodificado");
		return 0;
	}
	else return 1;
}


void show(char *msg, char sign, char codec[], char num[]) {
	unsigned i, k=0;

	

	init (num);
	if (sign == '-') {
		num[k] = sign;
		for (i=0; i<strlen(codec); i++) {
			num[++k] = codec[i];
		}
	}
	else num = codec;

	

	printf ("\nO número foi %s como ", msg);
	for (i=0; i<strlen(num); i++) printf("%c",num[i]); 
}



int add_pair(int count, int pos, char digit, char cod[]) {
	cod[pos] = count + '0';
	cod[++pos] = digit;
	return pos;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

boas pessoal..tou com grande problema..

 

preciso de fazer este programa será k alguem poderia ajudar..???

 

um programa k sob a forma de menu, faça o seguinte:

a. Opção nº1 - codificação:

i. Leia um ficheiro com uma palavra-chave (chave.txt);

ii. Leia um ficheiro com o texto a codificar (texto.txt);

iii. Codifique o texto e grave-o num novo ficheiro (codigo.txt).

b. Opção nº2 - codificação:

i. Leia um ficheiro com uma palavra-chave (chave.txt);

ii. Leia um ficheiro com o texto codificado (codigo.txt);

iii. Descodifique o texto e grave-o num novo ficheiro (texto1.txt).

Compartilhar este post


Link para o post
Compartilhar em outros sites

por favor abra um novo tópico para sua duvida.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente baixar o DevC++ ow o TurboC..

no site do baixaki ow do superdownloads você acha o DevC++

 

[]s

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.