Jump to content
avisado

[urgente] cifra de cesar

Recommended Posts

avisado

ola pessoal...

gostava que alguém quem tivesse feito o trabalho da cifra de césar me pudesse deixar ver o código pois os trabalhos que estão aqui no fórum não consigo perceber

desde ja muito obrigado

Share this post


Link to post
Share on other sites
Nazgulled

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?

Share this post


Link to post
Share on other sites
nata79

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

Share this post


Link to post
Share on other sites
avisado

pessoal alguem me pode dizer como e que posso meter as letras do alfabeto automaticamente dentro de um array??? em linguagem C

Share this post


Link to post
Share on other sites
avisado

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

}

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
Rui Carlos

Ainda não percebi o que é que faz essa implementação, mas mesmo que sirva para o que queres, está a complicar demasiado a implementação... Com o % consegues simplificar bastante isso... e não preciso do array alfa para nada.

Share this post


Link to post
Share on other sites
pedrosorio

Tal como o Rui Carlos disse, não precisas do alfa para nada, os chars são "equivalentes" a inteiros de 1 byte portanto podes somar para obter as outras letras.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
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

×
×
  • 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.