AJBM Posted October 24, 2012 at 06:44 PM Report #480297 Posted October 24, 2012 at 06:44 PM Boas!! Eu tenho que Implementar o programa para a descodificação de mensagens com recurso a uma CircularArrayQueue, eu já implementei o arraycircular e parece estar a funcionar, agora onde eu tenho a duvida é fazer o método que descodifique a mensagem. Para descodificar a mensagem, eu tenho uma chave, por exemplo 3 1 7 4 2 5, E a mensagem é novanjghi mu urxlv o resultado devia ser KNOWLEDGE IS POWER. Alguem me pode ajudar?
HappyHippyHippo Posted October 24, 2012 at 07:27 PM Report #480304 Posted October 24, 2012 at 07:27 PM (edited) (((k + 3) - a) % 26) + a) => n (((n + 1) - a) % 26) + a) => o (((o + 7) - a) % 26) + a) => v (((w + 4) - a) % 26) + a) => a (((l + 2) - a) % 26) + a) => n (((e + 5) - a) % 26) + a) => j (((d + 3) - a) % 26) + a) => g (((g + 1) - a) % 26) + a) => h ... Edited October 24, 2012 at 07:29 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 24, 2012 at 07:38 PM Author Report #480306 Posted October 24, 2012 at 07:38 PM o teu a é exactamente o que, é o a do alfabeto ou algum valor ?
HappyHippyHippo Posted October 24, 2012 at 07:41 PM Report #480309 Posted October 24, 2012 at 07:41 PM do alfabeto (o seu valor ascii) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 26, 2012 at 11:33 AM Author Report #480539 Posted October 26, 2012 at 11:33 AM Boas!! Já que tinha de fazer um descodificador, também fiz um codificador, o codificador esta a funcionar, agora a minha duvida é como eu volto a descodificar a mensagem usei o que tu me disseste em cima. Eu por exemplo ponho um A e ele devolve me um I,sms = sms + (char) ((((A + chave[0]) - 65) % 26) + 65)= I agora como é que eu volto obter o A.(A chave é aleatória usei a Random Classe, e tenho os valores guardados no array chave);
HappyHippyHippo Posted October 26, 2012 at 01:23 PM Report #480543 Posted October 26, 2012 at 01:23 PM apresenta o código que tens IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 26, 2012 at 08:44 PM Author Report #480614 Posted October 26, 2012 at 08:44 PM Ja consegui, mas não sei se era isto que o prof pretendia mas fica aqui o codigo. private QuequeADT<String> array = new ArrayCircular<String>(); private int[] chave; private String mensageM; String codificador(String mensagem) { mensagem = mensagem.toUpperCase(); String sms = ""; chave = new int[mensagem.trim().length()]; Random chavealeotoria = new Random(); for (int i = 0; i < chave.length; i++) { chave[i] = 1 + chavealeotoria.nextInt(90); } for (int i = 0, j = 0; i < mensagem.length(); i++, j++) { if (mensagem.charAt(i) == ' ') { sms += " "; } else { array.enqueue(""+mensagem.charAt(i)); sms = sms + (char) ((((mensagem.charAt(i) + chave[j]) - 65) % 26) + 65); } } mensageM = sms; return sms; } String decodificador() { String sms=""; for (int i = 0, j = 0; i < mensageM.length(); i++, j++) { if (mensageM.charAt(i) == ' ') { sms += " "; } else { sms=sms+array.dequeue(); } } return sms; }
HappyHippyHippo Posted October 26, 2012 at 09:43 PM Report #480625 Posted October 26, 2012 at 09:43 PM ora bem, para tentares ver o problema no teu código, tenta criar uma classe que implementa esta interface public interface IMessageCodec { /** * Função usada para ler a chave que codifica as mensagens * * @return Array com a chave usada */ public int[] getKey(); /** * Função usada para alterar a chave que codifica as mensagens * * @param key Array com a chave a ser usada */ public void setKet(int[] key); /** * Função usada para codificar a mensagem * * @param message Mensagem a ser codificada * @return Mensagem codificada */ public String encode(String message); /** * Função usada para descodificar a mensagem * * @param message Mensagem a ser descodificada * @return Mensagem descodificada */ public String decode(String message); } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 27, 2012 at 07:51 AM Author Report #480651 Posted October 27, 2012 at 07:51 AM Boas! Pelo que eu percebi no meu código eu só consigo descodificar, se tiver alguma coisa na mensageM, ou seja se já tiver codificado alguma mensagem, na interface que tu forneceste posso codificar e descodificar mensagens desde que tenha a chave. É isto?
HappyHippyHippo Posted October 27, 2012 at 12:08 PM Report #480664 Posted October 27, 2012 at 12:08 PM sim IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 28, 2012 at 10:20 PM Author Report #480831 Posted October 28, 2012 at 10:20 PM Boas!! Fiz umas alterações no meu código, usei mais ao menos a tua interface só acrescentei ao descodificar e ao codificar a chave ou seja passo a mensagem e a chave, agora tenho um problema por exemplo: codificar("Joao","1111") e da me GLXL agora no descodificar("GLXL","1111") e da me DIUI, e eu queria que desse joao, eu codifico a mensagem desta forma ((((mensagem.charAt(i) + chave.charAt(j)) - 65) % 26) + 65); como e que eu posso descodificar para que o resultado seja o que eu pretendo?
HappyHippyHippo Posted October 29, 2012 at 03:26 AM Report #480850 Posted October 29, 2012 at 03:26 AM primeiro verifica se o codificador está correcto. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 29, 2012 at 08:23 PM Author Report #480913 Posted October 29, 2012 at 08:23 PM Eu acho que sim. public String codificar(String mensagem,String chave) { String sms = ""; mensagem = mensagem.toUpperCase(); setChave(chave); for (int i = 0, j = 0; i < mensagem.length(); i++, j++) { if (mensagem.charAt(i) == ' ') { sms += " "; } else { lista.enqueue("" + mensagem.charAt(i)); sms = sms + (char) ((((mensagem.charAt(i) + chave.charAt(j)) - 65) % 26) + 65); } } return sms; }
HappyHippyHippo Posted October 29, 2012 at 08:31 PM Report #480914 Posted October 29, 2012 at 08:31 PM experimenta colocar a mensagem de exemplo "knowledge is power" e verifica se fica igual ao esperado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted October 31, 2012 at 06:19 PM Author Report #481162 Posted October 31, 2012 at 06:19 PM Nao, mas isso e porque o meu professor so andava para tras a chave, ou seja tinha o n chave 3 dava k, mas isso agora eu so tenho de alterar a maneira como estou a codificar a mensagem em vez de fazer como me disseste, ponho n-3. Mas acho a tua maneira de codificar mais engraçada,e mais complexa.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now