vetor em c [RESOLVIDO]

1. vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 22/11/2012 - 18:42h

boa noite galera do VOL,

mais uma vez aqui to buscando uma ajuda..

Gostaria de fazer um simples programa que altera a posicao do vetor...

Ex:

Se eu digitar a string: abcdefghi

eu quero trocar as posicoes de lugares, decrementando em 5 posicoes anteriores...

Nesta string:

- A posicao '0' ocupada pela letra 'a', seria substituida pela letra 'e'...
- A posicao '7' ocupada pela letra 'h', seria substituida pela letra 'c'...


Meu codigo ficou assim:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

char frase[100];
char frase2[100];
int i=0;

printf("Digite a mensagem: "); // Aqui a pessoa digitaria a frase/string
fgets(frase, 100, stdin); // armazeno ela dentro da variavel 'frase'

for (i=0; i<100; i++) {

frase2[i] = frase[i-5]; //Aqui eu tento armazenar na posicao atual de 'frase2' a posicao "decrementada" no valor de -5, pois quero 5 posicoes anteriores a posicao 'i' atual...

}

printf("%s",frase2); //aqui eu imprimo a frase modificada..

system("PAUSE");
return 0;
}



***OBS: estou fazendo no DevC++ Rwin :P


Se puderem me ajudar, agradeco

Daniel.



  


2. MELHOR RESPOSTA

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 22:22h

Sim, mas lembre-se que de você não precisa do vetor frase2 também. Afinal de contas, por que trabalhar com a cópia do vetor frase se você pode utilizar ele diretamente?

Não é necessário os parenteses que você colocou aí. E vamos pensar um pouco a respeito do índice. Considere a seguinte matriz de caracteres:


frase = "abcdefghihklmn"


Qual é o tamanho REAL desse vetor? Bem, temos 14 letras, mas toda string deve terminar com um caractere nulo ('{TEXTO}'). O compilador adiciona ele automaticamente neste caso. Sendo assim, o tamanho real da string é 15, devido ao caractere nulo '{TEXTO}' que é adicionado ao final de frase, logo após o n. No entanto, a função strlen retorna tamanho da string, tal como a vemos acima, ou seja, ela desconsidera o nulo, já que ele na verdade não faz parte realmente da nossa frase, sendo apenas um marcador para dizer 'A string terminar aqui'. Logo, strlen (frase) == 14.

OK, mas matrizes começam a ser indexadas a partir do 0 (zero). Ou seja,


frase[0] = 'a'
frase[1] = 'b'
frase[3] = 'c'
...
frase[13] = 'n'


Ou seja, o índice deve ir de 0 até strlen (frase) - 1. Mas agora observe o loop abaixo:


tamanho = strlen (frase);
for (i = 0; i < tamanho; i++)
printf ("%c", frase[i] - 5);


Quando você acha que a condição 'i < tamanho' se tornará falsa? Hmmm, se tivermos tamanho == 14, como acima, teremos:



i < tamanho | avaliação | loop
---------------+------------+-------------
0 < 14 | verdadeira | loop executa
1 < 14 | verdadeira | loop executa
2 < 14 | verdadeira | loop executa
3 < 14 | verdadeira | loop executa
4 < 14 | verdadeira | loop executa
5 < 14 | verdadeira | loop executa
6 < 14 | verdadeira | loop executa
7 < 14 | verdadeira | loop executa
8 < 14 | verdadeira | loop executa
9 < 14 | verdadeira | loop executa
10 < 14 | verdadeira | loop executa
11 < 14 | verdadeira | loop executa
12 < 14 | verdadeira | loop executa
13 < 14 | verdadeira | loop executa
14 < 14 | falsa | loop não executa


Ou seja, o loop será executado somente até strlen (frase) - 1, que nesse caso é 13, o índice do último elemento da string, tirando o nulo que não importa para nós. Se quisesse que ele fosse até strlen (frase), você teria de que fazer i <= tamanho e não i < tamanho. Portanto, você não precisa do -1, se estiver fazendo da maneira como te disse.

3. Resposta 1.

Bruno Paschoali Regis
Paschoali

(usa Ubuntu)

Enviado em 22/11/2012 - 18:51h

Olá.

Estou um pouco ocupado pra trabalhar bem em cima do código, porém encontrei duas coisas para você modificar (me corrijam se eu estiver errado):

1. Você tem dois vetores do tipo string, sendo eles frase e frase2, ambos do tamanho de 100 posição (do índice 0 ao 99). Quando você digita "frase2 = ..." você tem que se lembrar que frase2 é um vetor, portanto você tem que indicar o índice. Por exemplo: "frase2[i] = frase[i];";

2. Se você colocar como parâmetro frase[i - 5], logo de cara vai dar erro. Isto porque você inicializa a variável i como 0, então a primeira iteração encontraria frase[0 - 5], que seria o índice "-5" do vetor frase, ou seja, algo que não existe.

Corrija isso primeiro e volte a postar.

Paschoali.


4. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 22/11/2012 - 18:57h

na realidade no codigo original esta desta forma q vc disse, mas qdo postei ele aqui no forum nao apareceu os indices..
no codigo original esta assim: frase2[ii] = frase[i-5];

Eu nao to conseguindo fazer ele decrementar a posicao de 5 em 5..



5. Re: vetor em c [RESOLVIDO]

Bruno Paschoali Regis
Paschoali

(usa Ubuntu)

Enviado em 22/11/2012 - 19:10h

Olá.

Ao escrevermos "colchetes i colchetes", eu acredito que o site entenda como comando HTML para deixar o texto em itálico, e aí esse comando não é exibido, o que pode acarretar erros no seu código.

Pois bem, antes preciso entender uma coisa. Vamos considerar o vetor do tipo string "abcdefg". Se o vetor estiver na posição 1, terá o valor "b". Caso você queira voltar 5 posições, você quer que o programa imprima a primeira posição válida, que seria o "a" (isso porque índice 1 - 5 daria número negativo, então para no índice 0), ou você deseja que, chegando no 0, o programa continue a contagem a partir do último índice?

Conseguiu entender a minha pergunta? Pergunto isso me baseando em um índice menor que 5, pois subtraindo 5 daria número de índice negativo, aí o programa teria que parar no 0 ou continuar a contagem como se fosse uma fila.

Paschoali.


6. Re: vetor em c [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/11/2012 - 19:28h

Você pode utilizar o codepad e exibir o link aqui no fórum: http://codepad.org/


7. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 22/11/2012 - 19:36h

Entendi perfeitamente sua pergunta....

Se ele tiver na posicao 0 e for volta 5, ele vai la pro final e vem contando...

se o vetor for:

abcdefghi ...


se tiver na posicao 0, que equivale ao 'a', ele conta do final pro comeco, ou seja, do 'i', ate o 'e'...




8. Re: vetor em c [RESOLVIDO]

Bruno Paschoali Regis
Paschoali

(usa Ubuntu)

Enviado em 22/11/2012 - 20:14h

rei_astro escreveu:

Você pode utilizar o codepad e exibir o link aqui no fórum: http://codepad.org/


Boa! Não conhecia o site, obrigado pela recomendação!

---

Cara, estou saindo do trabalho e não deu pra terminar, mas fiz algo. Olha só:

http://codepad.org/eA2nFJz1

Isto ainda está dando erro porque tem que utilizar direito o comando fgets. Note que eu mudei o tamanho do vetor para 8, isso para ficar mais fácil de trabalhar. Eu supus que o usuário vai digitar "abcdefgh", sendo isto uma string de 8 caracteres. Pense que se você colocar tamanho 100, o fgets vai começar a pegar lixo de memória e vai virar uma bagunça. Tem como reconhecer se terminou o que o usuário digitou, não sei se você sabe fazer isto, mas antes vamos tentar consertar da forma que eu coloquei. Se conseguirmos ajustar isto, o resto fica mais fácil.

Paschoali.


9. Re: vetor em c [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 22/11/2012 - 22:12h

Eu fiz um comentário no seu código e postei por lá também. Dê uma olhada, corrija as coisas que citei e então tentamos resolver as outras coisas:

http://codepad.org/KQhIw16J


10. Re: vetor em c [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/11/2012 - 22:14h

[/i]Algo assim? (não entendi direito qual seria o output)

http://pastie.org/5420860


11. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 22/11/2012 - 23:05h

galera valeu a colaboracao de todos, porem eu voltei a ler a questao e informei errado aqui no forum o meu problema...

acredito que eu ja tenho informacoes o suficiente pra tentar novamente, desta forma, gostaria de agradecer a colaboracao de vcs....

quando tiver pronto o codigo eu posto aqui pra vcs darem uma olhada...


Obrigado,

Daniel.


12. Re: vetor em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 24/11/2012 - 19:27h

Eai galera blz??? Entao como voces me ajudaram nao poderia deixar de divulgar aqui o codigo quase pronto do que eu queria, e aceito sugestoes e criticas a respeito do codigo..

Eu estava navegando no VOL e vi o desafio neste link logo abaixo:

http://www.vivaolinux.com.br/artigo/Desafio-Analise-Forense-Computacional-Forense-em-Trafego-de-Rede...

Ao final ele utiliza um script ja pronto para fazer a quebra da criptografia (Cifra de Caesar).

Como eu travei em uma determinada parte, resolvi entao desenvolver o proprio codigo da Cifra de Caesar que quebra a senha..

O link do codigo segue logo abaixo:

http://codepad.org/OJyR8aPB


***OBS: No desafio eles pedem pra quando passar por caracteres acentuados, ignorar.. Porem eu ainda nao fiz esta parte :D



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts