Tisilva 0 Denunciar post Postado Dezembro 3, 2008 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
quitZAUMMM 18 Denunciar post Postado Dezembro 3, 2008 ? Compartilhar este post Link para o post Compartilhar em outros sites
Tisilva 0 Denunciar post Postado Dezembro 3, 2008 quitZAUMMM disse: ? desculpe mas não consigo explicar melhor. Por Exemplo: 277733444 tem : 1-2 3-7 2-3 3-4 Compartilhar este post Link para o post Compartilhar em outros sites
Endeavour 0 Denunciar post Postado Dezembro 3, 2008 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
Tisilva 0 Denunciar post Postado Dezembro 4, 2008 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
Endeavour 0 Denunciar post Postado Dezembro 5, 2008 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
quitZAUMMM 18 Denunciar post Postado Dezembro 5, 2008 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
Tisilva 0 Denunciar post Postado Dezembro 5, 2008 esse foi um exemplo, mas o numero q se introduz e uma incognita, nunca se sabe qual é. isso e q me esta a dificultar Compartilhar este post Link para o post Compartilhar em outros sites
Endeavour 0 Denunciar post Postado Dezembro 5, 2008 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
Edultra 13 Denunciar post Postado Dezembro 5, 2008 'quitZAUMMM' disse: 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
Tisilva 0 Denunciar post Postado Dezembro 7, 2008 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
Carlos C 0 Denunciar post Postado Dezembro 8, 2008 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
quitZAUMMM 18 Denunciar post Postado Dezembro 8, 2008 nossa nunca vi for assim: for(c = 0; n!=0; n /= 10) Compartilhar este post Link para o post Compartilhar em outros sites
Edultra 13 Denunciar post Postado Dezembro 8, 2008 Tisilva disse: 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
Tisilva 0 Denunciar post Postado Dezembro 8, 2008 e quando fosse negativo? Brigada por tudo Compartilhar este post Link para o post Compartilhar em outros sites
Edultra 13 Denunciar post Postado Dezembro 8, 2008 Tisilva disse: 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
Tisilva 0 Denunciar post Postado Dezembro 10, 2008 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
quitZAUMMM 18 Denunciar post Postado Dezembro 10, 2008 q isso cara.. continua tentando.. sem esforco nunca tera nd http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif/> Compartilhar este post Link para o post Compartilhar em outros sites
rop12770 0 Denunciar post Postado Dezembro 10, 2008 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
Endeavour 0 Denunciar post Postado Dezembro 10, 2008 Tem ate que dia pra fazer? Nao disista, o programa e' facil. Vou dar um lida aqui em alocacao de dados e vou tentar postar o codigo pronto Compartilhar este post Link para o post Compartilhar em outros sites