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.
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
ResponderEliminarficarem a espera da tua repost bgd.
Agora quem quiser me contactar por mail, poderá ir ao post "Bem-Vindos", que estará la.
ResponderEliminarObrigado.