Logo Hardware.com.br
Boutrik
Boutrik Membro Junior Registrado
72 Mensagens 26 Curtidas

Problema no script ( Linguagem C )

#1 Por Boutrik 28/10/2015 - 22:24
Olá. Então, aqui estou eu de novo... mas dessa vez estou com uma duvida.
Considerem esse arquivo para criptografar em cifra de cesar ( sem problema ou erros, e que funciona ) :
[code=C]
#include
#include
#include
#include
int main (void) {
char letra;
char alfa[35] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
int i = 0, a = 0;
char entrada[500]; char saída[500];
do {
letra = getchar();
entrada[i] = toupper(letra);
++i;
} while (letra != '\n');
entrada[i-1] = '\0';
i = 0; a = 0; re: // mais fácil usar um goto aqui, me perdoem
if (entrada[i] == 'Z') {
saída[i] = 'A';
++i;
goto re;
}
do {
if (entrada[i] == '\0') {
goto fim; // relaxa, so tem 2 goto's kkk
} else {
++a;
}
} while (entrada[i] != alfa[a]);
++a; // nesta parte está a minha duvida
saída[i] = alfa[a];
a = 0; ++i; goto re;
fim:
saída[i] = '\0';
printf ("\n\n%s\n", saída);
getch();
return (0);
}
[/code]
Então, a minha duvida está nessa parte :
[code=C]
++a; // nesta parte está a minha duvida
[/code]
Eu não consigo por um loop ali ( que seria minha Chave na cifra de Cesar ). Ex :
[code=C]
while (verify != chave) {
++a; ++verify;
}
[/code]
Quando compilo isso, ele não mostra erro mas o comando não funfa como o esperado.
Gostaria de saber como colocar um loop ali e se possível uma explicação sobre o porque que isso ocorreu.
Obrigado pela atenção !!!
Boutrik
Boutrik Membro Junior Registrado
72 Mensagens 26 Curtidas
#3 Por Boutrik
29/10/2015 - 11:56
Olá, Pirituba.
"Blz, bom eu não entendi o lance da chave... e os go to são pra deixar o professor irritado...hauahhauhuaahuahu".
Meu objetivo é esse kkkkk.
Sobra a chave, o lance dela é para ver quantos pulos a cifra de cesar vai fazer. Ex :
(chave=1) A = B, B = C, C = D...
(chave=2) A = C, B = D, C = E...
(chave=3) A = D, B = E, C = F...
e assim continua até a chave 25.
Com isso, eu pensei em por um while mas quando eu o executo ele não ocorre como planejado.
Pirituba
Pirituba Super Participante Registrado
355 Mensagens 91 Curtidas
#5 Por Pirituba
29/10/2015 - 14:23
No seu código vc esta fixando a chave com valor 1... na linha
if (entrada[i] == 'Z') {
saída[i] = 'A';

Eu acho melhor vc dar uma olhada aqui..... a parte que fala sofre a aritmética modular, vou colocar em spoiler um código que fiz aqui, mas aconselho só olhar depois que vc tentar fazer o seu.....
"Código"

[code=C] int chave;
int j;
chave = 5; //podia ser um scanf pra pegar valores de key diferentes
for( i = 0; entrada[i] != '\0'; i++ ) {
for ( j = 0; ; j++ )
if ( entrada[i] == alfa[j]){
indice = (j + chave) % 26;
printf("------ %d ------ \n", indice);
break;
}
saida[i] = alfa[indice];
}
saida[i] = '\0';
printf("%s", saida);[/code]

Pra descriptografar vc pode usar a função que esta no wiki... pois vc tem a chave... abraço
"O mundo é um moinho."
– Cartola

“A primeira coisa a entender é que você não entende."
– Soren Aabye Kierkegaard
Boutrik
Boutrik Membro Junior Registrado
72 Mensagens 26 Curtidas
#6 Por Boutrik
29/10/2015 - 15:27
Olá Pirituba e Tpcvasco.
--""Qual o valor q vc está inicializando "verify"? Qual o valor de "chave"?""
Eu inicio o verify como = 0, e a chave é definida pelo usuário. ( int ).
--""Eu acho melhor vc dar uma olhada aqui..... a parte que fala sofre a aritmética modular, vou colocar em spoiler um código que fiz aqui, mas aconselho só olhar depois que vc tentar fazer o seu.....""
Ok, vou dar uma olhada no link. Obrigado pelo conselho =).
Sobre a linha :
[code=C]
if (entrada[i] == 'Z') {
saída[i] = 'A';
[/code]
Eu já havia considerado isso, mas obrigado pela atenção a mais. Vou tentar copiar um pouco da logica do seu código, modificar o resto e por no meu código.
Vlw aos dois que estão sempre de plantão ai kkkkk.
Boutrik
Boutrik Membro Junior Registrado
72 Mensagens 26 Curtidas
#7 Por Boutrik
29/10/2015 - 15:31
Olá denovo. Acabei de observar que o scanf() entra em conflito com o getchar(). Já arrumei o código trocando o scanf() para o getch() e depois subtraindo o resultado, mas gostaria de saber de uma explicação do porque isso ocorreu.
Em questão das chaves do código, está parcialmente resolvido, pois não dá para inserir uma chave de 10 ou mais. ( por causa do getch() e o calculo feito sobre ele ).
[code=C]
#include
#include
#include
#include
int main (void) {
char letra;
int verify = 0;
int chave = getch(); // não deu para por scanf
chave = chave - 48; // 1=49 na tabela ASCII então...
char alfa[65] = " ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ "; // colocar dois alfabetos=solução preguiçosa para o caso "Z"
int i = 0, a = 0;
char entrada[500]; char saida[500];
do {
letra = getchar();
entrada[i] = toupper(letra);
++i;
} while (letra != '\n');
entrada[i-1] = '\0';
i = 0; a = 0; re:
do {
if (entrada[i] == '\0') {
goto fim;
} else {
++a;
}
} while (entrada[i] != alfa[a]);
while (verify != chave) {
++a; ++verify; // para descriptografar é so por --a em vez de ++a
}
saida[i] = alfa[a];
a = 0; ++i; verify = 0; goto re;
fim:
saida[i] = '\0';
printf ("\n\n%s\n", saida);
getch();
return (0);
}[/code]
Obrigado pela atenção =).
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal