Ir ao conteúdo

Pascal Vetores Alternados


Visitante: cronon

Posts recomendados

Visitante: cronon
 
Postado

Fazer um programa em pascal que carregue os vetores A e B de quatro posiçoes. Gerar um vetor C de 8 posiçoes que seja a intercalaçao de A e B.

Ex: 1 1 1 1 <= A

2 2 2 2 <= B

1 2 1 2 1 2 1 2 <= C

Program Vetor_Alt ;
Uses crt;
Var
A , B : array [1..4] of Integer;
C : array [1..8] of Integer;
x , i , w : integer;
Begin
Clrscr;
Write ('Insira o valor dos vetor A e B: ');
x := 8;
For i := 1 to 4 do
Begin
gotoxy (x,4);
readln (A[i]);
x := (x+4);
End;
x := 8;
For i := 1 to 4 do
Begin
gotoxy (x,8);
readln (B[i]);
x := (x+4);
End;
x := 8;
w := 0;
For w := 1 to 8 do
Begin
gotoxy (x,12);
inc(w);
C[w] := (A[i]);
write (C[w]);
x := (x+2);
inc(w);
C[w] := (B[i]);
write (C[w]);
x := (x+2);
End;
Readkey;
End.

Meu vetor tá dando erro e nao sei como arrumar:

Erro de execuçao na linha 30
A posiçao 5 esta fora dos limites do vetor

Agradeço a ajuda!

Postado

Apenas corrija o "for" do final:


For w:=1 to 8 do
Begin
if w mod 2 = 1 then C[w]:=A[(w+1) div 2] else C[w]:=B[w div 2];
gotoxy(x,12);
write(C[w]);
x := x+2;
End;

Aguardando resposta.

Visitante: cronon
 
Postado

tipo acho que nao entendi seu pensando, mas a logica minha nao esta errada esta?

se tiver certa tem jeito de tentar arrumar isso?

poderia por gentileza explicar o que foi feito nao entendi muito bem sua equaçao!

seria : quando w divido por 2 for = 1 fazer:

vetorC = vetorA (w+1 div 2) <=== ???????

senao: vetorC = vetorB (w div 2) <=== ???????

Ahhh valeu tb!

seu metodo deu certo!

Abrazz!

Postado

O vetor C é basicamente [A1,B1,A2,B2,A3,B3,A4,C4].

Veja que, nas posições ímpares, usam-se os elementos do A. Veja também que C1=A1, C3=A2, C5=A3 e C7=A5. Há uma regularidade. C[w]=A[(w+1)/2].

Algo parecido ocorre nas posições pares, em que C[w]=B[w/2].

Usei DIV porque sei que o resultado vai ser inteiro, e isso é exigido na hora de compilar.

Analisando seu código:


For w := 1 to 8 do
Begin
gotoxy (x,12);
inc(w);
[B]C[w] := (A[[U]i[/U]]);[/B]
[B]write (C[w]);[/B]
x := (x+2);
inc(w);
[B]C[w] := (B[[U]i[/U]]);[/B]
[B]write (C[w]);[/B]
x := (x+2);
End;

No início do FOR, o valor de i é 4, desde o outro FOR. Além disso, seu valor não está sendo mudado durante o loop. Então, será sempre 4.

Talvez você possa corrigir alguma coisa, mas de qualquer forma o modo como fiz é mais curto e funciona.

Aguardando...

Visitante: cronon
 
Postado

Muito bem obrigado a ajuda!

Só fico a duvida na equaçao mesmo do W sendo dividido por 2.

O conceito eu entendi mais se W=2 intao 2/2 = 1 ai B nao iria pra gaveta 1?

Postado
Muito bem obrigado a ajuda!

De nada! Para isso estamos aqui: para ensinar e aprender.

Só fico a duvida na equaçao mesmo do W sendo dividido por 2.

O conceito eu entendi mais se W=2 intao 2/2 = 1 ai B nao iria pra gaveta 1?

Correto! O segundo elemento de C é o primeiro de B! Veja:


[I]{
A: k,l,m,n
B: o,p,q,r
C: k,o,l,p,m,q,n,r
}[/I]

Realmente, C[2]=B[1]=o .

Visitante: cronon
 
Postado

huhu agora entendi a logica =P

valeu mesmo cara!

Fico de devendo uma.

abração

  • Membro VIP
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!