Jump to content

[urgente] cifra de cesar


avisado
 Share

Recommended Posts

tb fiz isso em haskel o ano passado...

tb ja fiz uma versao disso em C este ano num test mas n tenho aki o código...

basicamente o que tens d fazer é algo do genero

char cesar(char a, int n){

if(a + n > 'z')
   a = 'z' - a + 'a';
else a = a + n;
  
return a;
} 

e dps aplicares esta função a todos os elementos de uma string...

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.