• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

avisado

[urgente] cifra de cesar

8 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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);		

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora