Ir ao conteúdo
  • Cadastre-se
Uotar

Pascal - interseção de dois conjuntos

Recommended Posts

Boa tarde amigos,

Estou com um problema que não acho o erro de jeito nenhum.

O programa em questão deve determinar a interseção de dois conjuntos de no máximo 100 elementos cada

Ja quebrei a cabeça mas não consigo encontrar o erro. O programa compila mas não imprime corretamente o vetor interseção

Segue o código:

{ Determina a interseção de dois conjuntos de, no máximo, 100 elementos cada }

Program Intersecao ;

type
   Vetor = array [1..100] of real;

procedure DetermineConjuntoIntersecao ( n :integer; A :Vetor; m :integer; B :Vetor;  { A,B : entrada: conjuntos fornecidos }
                                                                                     { n,m: entrada: números de elementos dos conjuntos A e B }
                                                      var p :integer; var I :Vetor );{ I: saída: conjunto Interseção de A com B }
                                                                                     { p: saída: apontador para o conjunto interseção }
var    
		y,k                             { auxiliares }       
     : integer;
	  Achou                           { encontrou um elemento da interseção }
	   : boolean;
begin                                 
p := 0;                             { sinaliza conjunto Interseção vazio }
{y := 1;}
for y:=1 to n do
 begin
  k := 1;
	Achou := false;
	repeat                            { verifica se o elemento A[i] está em B }
	  if A[y] = B[k] then
		  begin
			p := p + 1;
			I [p] := A [y];               { armazena A[i] no conjunto interseção }
			Achou := true;
			end;
		k := k + 1;
  until (k > m) or (Achou);
 end;
end;
    
		  
{ Defina o tipo das variáveis }
var
   m,n,p                        { números de elementos dos conjuntos }
    : integer;
   A,B                          { conjuntos fornecidos como entrada }
    : Vetor;
   I                            { conjunto interseção }
    : Vetor;
   j
    : integer;

Begin
   ClrScr;
   writeLn( 'DETERMINA INTERSEÇÃO DE DOIS CONJUNTOS DE NO MÁXIMO 100 ELEMENTOS CADA' );
   writeLn;
	 writeLn( '=====================================================' );
   writeLn;
   writeLn( 'Aluno: Valter Almeida Santos Júnior' );
   writeLn( 'Matrícula: 2016007243' );
   writeLn;
   writeLn( '=====================================================' );
   
	 writeLn;
	 writeLn( 'Entre com o número de elementos do conjunto A' );
	 readLn( n );
	 
	 { Lê os elementos do conjunto A }
	 writeLn;
	 writeLn( 'Entre com os ', n, ' elementos do conjunto A' );
	 for j := 1 to n do
	   begin
	    write( 'A[', j, '] = ' );
	    readLn( A[j] );
	   end;
   
	 writeLn;
	 writeLn( 'Entre com o número de elementos do conjunto B' );
	 readLn( m );
   
	 { Lê os elementos do conjunto B }
	 writeLn;
	 writeLn( 'Entre com os ', m, ' elementos do conjunto A' );
	 for j := 1 to m do
	   begin
	    write( 'B[', j, '] = ' );
	    readLn( B[j] );
	   end;
   
	 writeLn;
   DetermineConjuntoIntersecao ( n, A, m, B, p, I );
   writeLn;
   for j := 1 to p do
     writeLn( I [p]: );
    
readkey;
end.  

Muito obrigado pela ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Dei uma analisada no seu código e fiz o seguinte teste:

if A[y] = B[k] then
  begin
  p := p + 1;
  I [p] := A [y];               { armazena A[i] no conjunto interseção }
  Achou := true;
  writeln(I[p]); //<---TESTE
  end;

Pelo testes, está armazenado corretamente...

 

Se armazenou corretamente, advinha onde está o erro?
 

   for j:= 1 to p do
     writeLn(I[p]); //<---aqui deve usar o j!

 

Eu acho que é só isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, Simon Viegas disse:

Se armazenou corretamente, advinha onde está o erro?
 


   for j:= 1 to p do
     writeLn(I[p]); //<---aqui deve usar o j!

 

Eu acho que é só isso!

 

E não é que era isso mesmo!!

 

Muito obrigado meu amigo!

  • Curtir 1

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

×