Jump to content

[urgente] cifra de cesar


avisado
 Share

Recommended Posts

Guest id194

Eu por acaso fiz um trabalho disso o ano passado em Haskell, mas não me parece que te vá ajudar muito pois são linguagens bem diferentes.

E se colocares as tuas dúvidas em concreto? Não era melhor?

Link to comment
Share on other sites

alguem me pode dizer se isto faz a cifra de cesar?

#include<stdio.h>

main()
{
//* declaração de um array com 26 casas e inicializado com o alfabeto
char alfa[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char msg[100];
int casas;
int x;

gets(msg);
printf(" %s\n",msg);
scanf("%d",&casas);

for(x=0;x<=26;x++)
{
	for(x=0;x<=100;x++)
	{
		if(msg[x]==alfa[x])
		{
			msg[x]=alfa[x+casas];
		}
	}
}
puts(msg);		

}
Link to comment
Share on other sites

Estás a pensar bem, mas tens aí algumas falhas:

1) Para cada ciclo for precisas de uma variável diferente, porque senão, quando, por ex, estás a começar a 3ª iteração do for mais exterior (x=2), depois ele entra no for interior e volta a meter o x a 0. Vais estar sempre a escrever na posição 0 do array. Precisas então de 2 variáveis. E não te esqueças também de alterar no código dentro dos ciclos.

2) Estás a percorrer cada um dos arrays. Ora sabes que a dimensão dos array alfa é 26 e do msg é 100. Nos ciclos estás a percorrer desde o índice 0 até ao índice n (sendo n a dimensão do array). O que vai acontecer é que, por exemplo, para o array alfa, não vais percorrer 26 posições mas sim 27, pois vais percorrer de 0 até 26. Os índices nos arrays variam de 0 até n-1, sendo n a sua dimensão. Logo esses ciclos vão acabar por dar erro pois vais estar a escrever numa posição de memória onde não deves escrever. Precisas portanto de percorrer os arrays desde 0 até n-1, ou seja, de 0 a 25 e de 0 a 100. Podes fazer isso retirando o sinal de = do teu sinal <=.

3) Finalmente, vais encontrar 1 problema, quando o valor da variável do ciclo exterior, a qual itera sobre o array alfa, somado ao nº de casas, ultrapassar os limites do array alfa. Para resolver esse problema podes usar o operador % (módulo), que te dá o resto da divisão, fazendo: alfa[(x+casas)%26], voltando assim ao início do array alfa.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.