Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida com operador %


_bruniolos

Pergunta

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

  • 0

#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);

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

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 ¬¬

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...