Ir ao conteúdo
  • Cadastre-se

Posts recomendados

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

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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
Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!