terça-feira, 28 de setembro de 2010

Afinal não era o fim dos apontadores ...

Os apontadores persegue-me ... :p
Pensava eu que o teste final significava o final do modulo, mas pensei mal como sempre. Os testes foram uma miséria e se calhar a única positiva da turma é a minha, o que significa que hoje tive teste prático. Não foi nada doutro mundo, o teste era o mesmo só que tínhamos a possibilidade de ver os nossos erros e corrigidos através de outros meios, como por exemplo verificar executando no dev c++.
Acho que foi melhor, muito melhor, e hoje decidi postar um exercício que deu-me umas dores de cabeça tremendas.
O exercício "cadeia", o problema não é resolver, mas sim fazer a traçagem, ai é que foi...
Então é o seguinte:

char *func (char *cadeia, int i, int j) {
char aux;
if(i < j) {
aux = cadeia[i];
cadeia[i] = cadeia[j];
cadeia[j] = aux;
func(cadeia, i + 1, j - 1);
}
return cadeia;
}

int main(){
char vector[]= “programa”;
func(vector,3,8);
printf(“%s\n”,vector);
return 0;
}


o output do programa é "pro" vamos lá ver se sei explicar o meu raciocínio nesta traçagem...

 

main
cadeia
vector
i
j
aux
cadeia
If(i<j)
“programa”
3
8
aux = cadeia[i]
aux=cadeia[3]
aux=’g’
Cadeia[i]=cadeia[j]
Cadeia[3]=cadeia[8]
‘g’=’\0’
V
“programa”
3
8
‘g’
Cadeia[j]=aux
Cadeia[8]=cadeia[3]
‘\0’=’g’
-
cadeia[]=’p’ ’r’ ’o’ ’\0’
vector=”pro”

3
8
‘g’
Cadeia[]=”pro”
-



Então, coloquei duas tabelas juntas, uma para o main e outra para a função cadeia e depois coloquei as variáveis de cada tabela e as condições.
O programa começava com deferir  vector[]= “programa”, depois havia uma passagem por valor das variáveis, sendo portanto i=3, j=8, e um apontador para o vector (*cadeia).
Depois verificava a condição If (i< j), sendo verdadeira (3<8), aux iria fica  aux = cadeia[i] ou seja aux=cadeia[3] que é igual aux=’g’, de seguida, Cadeia[i]=cadeia[j] ou seja, Cadeia[3]=cadeia[8] que é igual ‘g’=’\0’ e Cadeia[j]=aux ou seja Cadeia[8]=cadeia[3] que é igual a ‘\0’=’g’. Então o apontador iria ficar "pro", porque a partir dai teria o '\0' que termina. O vector reservaria o "pro" do apontador.

2 comentários:

  1. boas Cláudia Valente gostaria será posivel falar ctg por email ? é que tenh umas duvidas sobr um trabalho de VB que tu tens aqui no teu blog se me poderes ajudar sff manda email para est mail: francisco.esma@sapo.pt

    ficarem a espera da tua repost bgd.

    ResponderEliminar
  2. Agora quem quiser me contactar por mail, poderá ir ao post "Bem-Vindos", que estará la.
    Obrigado.

    ResponderEliminar