avisado Posted June 22, 2008 at 06:30 PM Report Share #192879 Posted June 22, 2008 at 06:30 PM 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 Link to comment Share on other sites More sharing options...
Guest id194 Posted June 22, 2008 at 06:32 PM Report Share #192880 Posted June 22, 2008 at 06:32 PM 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 More sharing options...
nata79 Posted June 22, 2008 at 06:44 PM Report Share #192884 Posted June 22, 2008 at 06:44 PM 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... arithmeticoverflow.wordpress.com Link to comment Share on other sites More sharing options...
avisado Posted June 22, 2008 at 07:25 PM Author Report Share #192889 Posted June 22, 2008 at 07:25 PM pessoal alguem me pode dizer como e que posso meter as letras do alfabeto automaticamente dentro de um array??? em linguagem C Link to comment Share on other sites More sharing options...
avisado Posted June 22, 2008 at 07:56 PM Author Report Share #192894 Posted June 22, 2008 at 07:56 PM 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 More sharing options...
Baderous Posted June 22, 2008 at 08:20 PM Report Share #192895 Posted June 22, 2008 at 08:20 PM 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 More sharing options...
Rui Carlos Posted June 22, 2008 at 09:59 PM Report Share #192915 Posted June 22, 2008 at 09:59 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
pedrosorio Posted June 23, 2008 at 09:24 AM Report Share #192965 Posted June 23, 2008 at 09:24 AM 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. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now