Jump to content


Nara Ferreira

Member Since 29/10/2010
Offline Last Active 20/03/2012, 16:04
-----

#1017204 Ajuda Com Inversão De Vetores

Posted by Nara Ferreira on 27/02/2012, 16:14

Galera não estou conseguindo entender por que minha lógica não está funcionando. Ao meu entender eu no for da inversão quando (i for igual a 1 eu armazeno a primeira posição na variável auxiliar e pego a última posição do vetor com i:=11-i que dá igual a 10 e assim continuamente.) Porém quando vai escrever o programa não faz nenhuma inversão. Agradeço desde já quem me ajudar a entender por que minha lógica não funciona.

Program inversao_de_posicao ;
var
vetor,espelho:array[1..10]of integer;
x:integer;
i,j:integer;
Begin
for i:=1 to 10 do
begin
write('Escreva o vetor: ');
readln(vetor[i]);
espelho[i]:=vetor[i];
end;

for i:=1 to 10 do
begin
x:=vetor[i];
vetor[i]:=vetor[11-i];
vetor[11-i]:=x;
end;

for i:=1 to 10 do
writeln('Vetor original: ',espelho[i]);

write('');

for i:=1 to 10 do
writeln('vetor apos a inversao: ',vetor[i]);


End.



O problema começa quando chega na posição 6 do vetor.

Motivo do problema:
Nas primeiras 5 vezes que o FOR rodou, ele já inverteu todos os valores, agora, quando ele rodar da posição 6 em diante, ele vai inverter novamente, colocando todos no lugar que começaram.

Exemplo:
Valores digitados:
vetor[1] = 10;
vetor[2] = 9;
vetor[3] = 8;
vetor[4] = 7;
vetor[5] = 6;
vetor[6] = 5;
vetor[7] = 4;
vetor[8] = 3;
vetor[9] = 2;
vetor[10] = 1;

Quando o FOR rodar, acontecerá o seguinte:
Posição 1 do FOR
x = 10;
vetor[1] = 1;
vetor[10] = 10;

Posição 2 do FOR
x = 9;
vetor[2] = 2;
vetor[9] = 9;

Posição 3 do FOR
x = 8;
vetor[3] = 3;
vetor[8] = 8;

Posição 4 do FOR
x = 7;
vetor[4] = 4;
vetor[7] = 7;

Posição 5 do FOR
x = 6;
vetor[5] = 5;
vetor[6] = 6;

Como você pode perceber, todos os valores já foram invertidos.
Agora, como faltam mais 5 vezes para ele rodar, ele vai começar a inverter tudo de novo.
Ou seja:

Posição 6 do FOR
x = 6;
vetor[6] = 5;
vetor[5] = 6;

Posição 7 do FOR
x = 7;
vetor[7] = 4;
vetor[4] = 7;

E assim por diante...até ele retornar a como começou.

Uma solução:
Faça o for rodar só até a metade do vetor(array), ou seja, como ele tem 10 posições, coloque o limite do for até 5.

for i:=1 to 5 do

begin

x:=vetor[i];
vetor[i]:=vetor[11-i];
vetor[11-i]:=x;

end;




IPB Skin By Virteq