_bruniolos Postado Maio 29, 2008 Denunciar Share Postado Maio 29, 2008 Gente, seguinte, tenho que fazer um programa em c, nele tenho uma função assim:f(x) = (x+y)*z%26com y e z fornecidos pelo usuario. Até aí tudo bem, mas nele também tenho que fazer a função inversa, ou sejatendo f(x), y e z, tenho que descobrir o xTentei varias formas, fiz até uma com um loop que vai verificando todas as possibilidades, até dar certo, porém isso é porcoencontrei uma formula mas ela falha para alguns valores de y.Bom gente, desde já agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Evandro Postado Maio 29, 2008 Denunciar Share Postado Maio 29, 2008 Posta o código inteiro, em informática agente nunca sabe onde tá o errofica muito mais fácil te ajudar se tu postar o código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 _bruniolos Postado Maio 29, 2008 Autor Denunciar Share Postado Maio 29, 2008 #include "stdio.h"#include "string.h"main(){ char texto[200], trad[200], letra; int i=0, j=0, x, y, z; puts("...::: Codificador - descodificador :::..."); puts(""); //entrada de valores de y e z do { puts("Digite o valor de y e z, com valores de 1 a 9"); scanf(" %d %d",&y,&z); } while(y<1 || y>=10 || z<1 || z>=10); //limpar buffer do teclado, tecla ENTER getchar(); puts("Numeros OK!"); puts(""); puts("Digite uma mensagem"); puts("Se a mensagem comecar com inteiros, sera descodificada."); puts("Digite um '.' na mensagem para encerra-la."); puts(""); //entrada de valor da mensagem while (letra != '.' && (letra = getchar())) { if (letra == 13) texto = '\n'; else texto = letra; i++; } texto = ''; //se a mensagem comecar com inteiro, descodificar if (texto[0] >= '0' && texto[0] <= '9' && texto[1] >= '0' && texto[1] <= '9') { //percorre o texto para descodifica-lo //pula os 2 primeiros pois são numeros for (i=2; i<strlen(texto); i++) { //convertendo os 2 algarismos da string para inteiros y = texto[0] - '0'; z = texto[1] - '0'; //se for maiuscula if (texto >= 'A' && texto <= 'Z') { x = texto - 'A'; j=0; while(x != (j+y)*z%26 && j<26) { j++; } trad[i-2] = j + 'A'; } //se for minuscula else if (texto >= 'a' && texto <= 'z') { x = texto - 'a'; j=0; while(x != (j+y)*z%26 && j<26) { j++; } trad[i-2] = j + 'a'; } else trad[i-2] = texto; } trad[i-3] = ''; printf("Mensagem descodificada: %s.\n",trad); } //codificar else { //percorre o texto para codifica-lo for (i=0; i<strlen(texto); i++) { //se for maiscula if (texto >= 'A' && texto <= 'Z') { //convertendo letras maiusculas em numeros x = texto - 'A'; texto = 'A' + (x+y)*z%26; } //se for minuscula else if (texto >= 'a' && texto <= 'z') { //convertendo letras minusculas em numeros x = texto - 'a'; texto = 'a' + (x+y)*z%26; } } printf("\nMensagem codificada: %d%d%s\n", y, z, texto); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Kassi Postado Maio 29, 2008 Denunciar Share Postado Maio 29, 2008 Primeiramente você deve observar se esta função possui inversa e outra: (x+y)*z%26 será que não precisa colocar algum parentese a mais não? porque * e % apresentam a mesmo ordem de precedencia. Tipo você quer pegar o resto da divição entre z e 26 e multiplicar com o resultado de x+y, porque para realizar a inversa usando o operador % é meio complicado de determinar, pois o resultado vai variar de acordo com o numero podendo assim não satisfazer suas necessidades ¬¬ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 _bruniolos Postado Maio 29, 2008 Autor Denunciar Share Postado Maio 29, 2008 Não, a função é assim mesmo,os valores de y e z são entre 1 e 9, só que só vai funcionar perfeitamente com z valendo 1, esse código é de um exercício, a função é passada no enunciado.Bom, é isso... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
_bruniolos
Gente, seguinte, tenho que fazer um programa em c, nele tenho uma função assim:
f(x) = (x+y)*z%26
com y e z fornecidos pelo usuario. Até aí tudo bem, mas nele também tenho que fazer a função inversa, ou seja
tendo f(x), y e z, tenho que descobrir o x
Tentei varias formas, fiz até uma com um loop que vai verificando todas as possibilidades, até dar certo, porém isso é porco
encontrei uma formula mas ela falha para alguns valores de y.
Bom gente, desde já agradeço.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.