Ir ao conteúdo
  • Cadastre-se
rovoliveira

Vetores

Recommended Posts

Estou iniciando na programação, neste momento comecei a estudar ARRAY.

Alguém pode me ajudar com o seguinte problema?

atribuir valores a 2 vetores A e B com 25 elementos cada,  e no vetor C com 50 elementos devo fazer a intercalação dos vetores A e B conforme exemplo abaixo.

A= 1 2 3

B= 7 8 9

Resultado

C= 1 7 2 8 3 9

 

Consegui chega nisso aqui, está até imprimindo na tela o que quero, porém não está armazenando coretamente em C. 

Neste caso fiz apenas com 3 elementos para A , B e 6 elementos para C.

 

Program Pzim ;
var
matrizA: array[1..3] of integer;
matrizB: array[1..3] of integer;
matrizC: array[1..6] of integer;
i, j, k, l, n, o:integer;
Begin
  for i := 1 to 3 do
  begin
    n:=random(3);
    matrizA:=n;
    writeln( ' A ',matrizA ) ;
  end;
  writeln( ' ' ) ;
  for i := 1 to 3 do
  begin
    o:=random(3);
    matrizB:=o;
    writeln( ' B ',matrizB ) ;
  end;
    writeln( ' ' ) ;
  for j := 1 to 3  do
   begin
    for i := 1 to 1 do
     begin
      matrizC:=matrizA[j];
      k:=i+1;
     end;
     writeln( ' c ',matrizC ) ; 
    for i := k to k do
     begin
      matrizC:=matrizB[j];
     end;
      writeln( ' c ',matrizC ) ; 
   end;
   
   for l := 1 to 6 do
      write(#177, matrizC[l] ) ; 
End.

 

O código está bem primário, mas creio que vai melhorar com o passar dos dias. rsrsrsrsrs

 

 

 

Editado por dif
inserir o código com o botão CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @rovoliveira,

 

 

1) Um detalhe...

 

20 horas atrás, rovoliveira disse:

for i := 1 to 1 do

 

20 horas atrás, rovoliveira disse:

for i := k to k do

 

1 até 1 e k até k é um laço só, logo não faz sentido usar um for.

 

 

2) Entenda o problema

 

O enunciando já diz:

20 horas atrás, rovoliveira disse:

fazer a intercalação dos vetores A e B

Ou seja, insere um de A, e após um de B, insere um de A, após um de B....

 

Como no exemplo..

20 horas atrás, rovoliveira disse:

A= 1 2 3

B= 7 8 9

Resultado

C= 1 7 2 8 3 9

 

Ou seja, na hora de intercalar, para cada loop (como são 3 em cada, serão 3 loops), você insere um de A e outro de B em C (controlando as posições de C separadamente, ou usando alguma fórmula que se relacione com o loop que está).

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu irmão pela ajuda, acho que consegui chegar em algum lugar agora. veja como ficou:

Program Pzim ;
var
matrizA: array[1..3] of integer;
matrizB: array[1..3] of integer;
matrizC: array[1..6] of integer;
i, j, cont:integer;
Begin
  for i := 1 to 3 do   { FOR Atribir valores aos elementos de matrizA e matrizB}
  begin
    matriza[i]:=random(10);
    matrizb[i]:=random(10);
  end;                   { Fim for Atribuição dos valores de matrizA e matrizB}
  
  for i := 1 to 3 do  { FOR Intercalação dos valores de matrizA e matrizB em  matrizC}
  begin
    if cont = 0 then
    begin
      cont:=1;
    end
    else
    begin
      cont:=cont+1;
    end;
    matrizc[cont]:=matriza[i];
    cont:=cont+1;
    matrizc[cont]:=matrizb[i] ;
  end; { fim for intercalação}
  
  
	for i := 1 to 3 do     { FOR imprime valores de matrizA na tela }
  begin
    writeln( 'matriza-', i,' = ', matriza[i] ) ;
  end;  { Fim for imprime matrizA}
  
  writeln(  ) ; 
  for i := 1 to 3 do     { FOR imprime valores de matrizB na tela }
  begin
    writeln( 'matrizb-', i,' = ', matrizb[i] ) ;
  end;  { Fim for imprime matrizB}
  
	writeln(  ) ; 
	for i := 1 to 6 do     { FOR imprime valores de matrizC na tela }
  begin
    writeln( 'matrizc-', i,' = ', matrizc[i] ) ;
  end; { Fim for imprime matrizC}
  
 readkey; 
  
End.

 

intercalação de valores.JPG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Alguns pontos:

 

1) Ao usar o Ramdon(), é necessário usar o Randomize, para embaralhar os números! (aqui, se não usar, os números se repetem!!... Usar o Randomize faz parte do processo, mesmo que não esteja repetindo...

Pode colocar logo após o BEGIN principal

 

2) Na parte da intercalação, você pode simplesmente inicializar a variável antes do for, colocando cont:=0;. Daí não vai ser mais preciso o if/else.


PS: uma outra forma de fazer um cont:cont+1; é usar um Inc(cont);.  (tem o mesmo resultado, só que mais elegante)

 

3) Dá para intercalar sem usar o cont... basta usar o próprio i. Veja que existe uma relação entre o valor de i e a posição em C. (deixo para você tentar, se quiser, desenvolver).

 

Ficaria algo assim:

for i := 1 to 3 do  { FOR Intercalação dos valores de matrizA e matrizB em  matrizC}
  begin
  matrizC[xxxx]:=matrizA[i];
  matrizC[yyyy]:=matrizB[i] ;
  end; { fim for intercalação}

Onde esse xxxx e yyyy são expressões matemática... ou seja, "uma conta". Pense assim... no primeiro loop, o i vale 1, e quanto devem valer as posições de C para receber o A e receber o B? No i valendo 2, quanto devem valer? Ai verá que existe uma correlação simples...só montar a fórmula e jogar no lugar do xxxx e yyyy respectivamente.

Observação/Complementação: assim como podem-se usar uma variável, como o i e o cont, é possível usar uma expressão matemática de boa, e o vetor vai usar o resultado dessa conta, ou seja, qualquer coisa que "retorne um número" pode ser usado como parâmetro, entende?

 

Por exemplo, o ReadKey é uma function que serve para "ler uma tecla, e retornar o código da tecla nela mesma", correto? (no seu código, ela está sendo usada como um "pause", ou seja, como o programa fica esperando uma tecla, essa característica é usada para pausar o programa). Se quisesse, daria para usar o número retornado como parâmetro também, algo como:

 

matrizA[Readkey];

Correto?  Mas não, pois o ReadKey retorna "uma letra"!!!, mas o parâmetro do vetor é um número!! Logo, seria necessário converter a tal "letra", em número... algo assim:

 

matrizA[ord(ReadKey)-48];

Obs.: Esse "-48" é para compensar... pois o valor convertido não fica igual ao correspondente em caractere...

 

Então, o Ord() converte o caractere em número, após o - subtrai 48... o resultado disso dá um número, que por sua vez é "jogado" no parâmetro! Então, o resultado disso é um número, logo é válido*!

 

Veja, isso é só uma "explicação" para "provar" que qualquer coisa que retorne um número pode ser usado... para abrir a mente!!!
 

 

 

 

Abaixo seu código com uns pequenos ajustes em relação sintaxe, que podem servir como sugestão/dicas...

Program Pzim;
uses
  CRT; //necessário declara a biblioteca em alguns compiladores (como meu caso, no Free Pascal)
var
  matrizA, matrizB: array[1..3] of integer;
  matrizC: array[1..6] of integer;
  i, j, cont: integer;
BEGIn
for i := 1 to 3 do   { FOR Atribir valores aos elementos de matrizA e matrizB}
  begin
  matrizA[i]:=Random(10);
  matrizA[i]:=Random(10);
  end;                   { Fim for Atribuição dos valores de matrizA e matrizB}

for i := 1 to 3 do  { FOR Intercalação dos valores de matrizA e matrizB em  matrizC}
  begin
  if cont = 0 then
    cont:=1
  else
    cont:=cont+1;
  matrizC[cont]:=matrizA[i];
  cont:=cont+1;
  matrizC[cont]:=matrizB[i] ;
end; { fim for intercalação}

for i := 1 to 3 do     { FOR imprime valores de matrizA na tela }
  writeln( 'matrizA-', i,' = ', matrizA[i] ) ;
{writeln(  ) ;} //dá para simplificar o comando
writeln;
for i := 1 to 3 do     { FOR imprime valores de matrizB na tela }
  writeln( 'matrizB-', i,' = ', matrizB[i] ) ;
writeln;
for i := 1 to 6 do     { FOR imprime valores de matrizC na tela }
  writeln( 'matrizC-', i,' = ', matrizC[i] ) ;

  ReadKey; 
END.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×