Zolrak 0 Denunciar post Postado Dezembro 22, 2008 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
Dias/49 0 Denunciar post Postado Janeiro 13, 2009 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
quitZAUMMM 18 Denunciar post Postado Janeiro 13, 2009 por favor abra um novo tópico para sua duvida. []s Compartilhar este post Link para o post Compartilhar em outros sites
Dias/49 0 Denunciar post Postado Janeiro 13, 2009 Eu usei o programa visual c++2008, para compilar o programa que pedi, mas o programa não ocorre... Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Janeiro 13, 2009 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