Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
smmaua

Conjunto Interseção Vetores

Recommended Posts

Olá, pessoal!

Estou tentando fazer um programa que leia de um arquivo 2 vetores 9cada um com 10 elementos inteiros) e mostre na tela os números que ambos possuem, ou seja, o conjunto interseção.

A lógica que pensei foi: escrever 20 linhas no arquivo, ler as 10 primeiras e guardar, ler as outras 10 e, para cada item, ver se b(2° vetor) é igual a a(1° vetor), caso seja, colocá-lo em c (o vetor interseção).

Mas não consegui montar desta maneira... então pensei em colocá-los em uma matriz e o código ficou assim:




var
mat: array[1..10,1..2] of integer;
c: array[1..10] of integer;
arq:text;
i,j:integer;



Begin

assign(arq, 'arquivo2.txt');
reset(arq);


for i:= 1 to 2 do
begin
for j:= 1 to 10 do
begin
read(arq, mat[i,1]);
end;
for j:= 1 to 10 do
begin
read(arq,mat[i,2]);
if mat[j,2] = mat[i,1]
then c[i]:= mat[j,2];
end;

end;

writeln(c[i]);


End.
Program Pzim ;

Eu entendo que está errado, pois supostamente o programa iria ler e escrever apenas os que são iguais...

Enfim, não consigo achar a lógica correta... Alguém poderia me dar uma luz?

Muito obrigada! :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também tentei fazer desta forma, mas o programa está retornando sempre 0:




var
A, B, C: array[1..10] of integer;
arq: text;
i, j, k: integer;

soma, soma1, soma2, somaOK1, somaOK2:integer;


Begin

assign(arq, 'arquivo2.txt');
reset(arq);


for i:=1 to 10 do
begin

for j:= 1 to 10 do
begin
read(arq, A[i],B[j]);
if (A[i] = B[j]) then
C[j]:=B[j]
end;
end;

for j:= 1 to 10 do
writeln(c[j]);

End.
Program Pzim ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui! ;D

Program Q5;
uses crt;
const n = 10;
var a, b, c: array[1..n] of integer;
i, j, k: integer;
achou: boolean;
arq:text;
begin


assign(arq,'arquivo1.txt');
reset(arq);

while not eof(arq) do begin

while not eoln(arq) do
begin
for i:=1 to n do
begin
read(arq,a[i]);;
end;
end;

for i:=1 to n do
begin
read(arq,b[i]);
end;
end;

k := 1; {posicao para os elementos da intersecao}
for i:=1 to n do
begin
achou := false;
for j:=1 to n do
begin
if (a[i] = b[j])
then achou := true;
end;

if (achou = true)
then begin
c[k] := a[i];
k := k + 1;
end;
end;


for i:=1 to n do

begin
if (i < k)
then
write(c[i]:4);
writeln;
end;


end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui! ;D


uses crt;
const n = 10;
var a, b, c: array[1..n] of integer;
i, j, k: integer;
achou: boolean;
arq:text;
begin


assign(arq,'arquivo1.txt');
reset(arq);

while not eof(arq) do begin

while not eoln(arq) do
begin
for i:=1 to n do
begin
read(arq,a[i]);;
end;
end;

for i:=1 to n do
begin
read(arq,b[i]);
end;
end;

k := 1; {posicao para os elementos da intersecao}
for i:=1 to n do
begin
achou := false;
for j:=1 to n do
begin
if (a[i] = b[j])
then achou := true;
end;

if (achou = true)
then begin
c[k] := a[i];
k := k + 1;
end;
end;


for i:=1 to n do

begin
if (i < k)
then
write(c[i]:4);
writeln;
end;


end.
Program Q5;

Olá,

smmaua, testei aqui e não funcionou muito bem. De qualquer forma tem algumas coisas que precisão ser revisadas.

  • Precisa verificar se chegou ao fim do arquivo para cada leitura
  • Não precisa verificar se chegou até o fim da linha no arquivo
  • Ao achar que existe elementos iguais, não precisa continuar verificando o mesmo número.
  • É mais prático "k" começar com "0", e incrementar em "1" antes de cada novo.
  • Não precisou do "achou", já que o "for" é interrompido (assim não replica o mesmo número toda vez que acharia)
  • A exibição de "c" vai de "1" a "K"... (ou "K-1", se começar com 1), pode fazer direto no "for".

No mais...

Dê uma olhada como deixei... já corrigir os detalhes supracitados.

[color=#0000ff]Program[/color] Q5[color=#000000];[/color]
[color=#0000ff]uses[/color]
CRT[color=#000000];[/color]
[color=#0000ff]const[/color]
n [color=#000000]=[/color] [color=#000000]10[/color][color=#000000];[/color]
[color=#0000ff]var[/color]
a[color=#000000],[/color] b[color=#000000],[/color] c [color=#000000]:[/color][color=#0000ff]array[/color][color=#000000][[/color][color=#000000]1[/color][color=#000000]..[/color]n[color=#000000]][/color] [color=#0000ff]of[/color] [color=#0000ff]integer[/color][color=#000000];[/color]
i[color=#000000],[/color] j[color=#000000],[/color] k [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]
arq [color=#000000]:[/color][color=#0000ff]text[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]TextColor[/color][color=#000000]([/color][color=#000000]15[/color][color=#000000]);[/color] [color=#008000]{cor do texto branca}[/color]
ClrScr[color=#000000];[/color] [color=#008000]{limpa a tela}[/color]
[color=#000000]assign[/color][color=#000000]([/color]arq[color=#000000],[/color][color=#a31515]'arquivo1.txt'[/color][color=#000000]);[/color]
[color=#000000]reset[/color][color=#000000]([/color]arq[color=#000000]);[/color]
i[color=#000000]:=[/color][color=#000000]0[/color][color=#000000];[/color]
[color=#2b91af]while[/color] [color=#000000]([/color][color=#0000ff]not[/color] [color=#000000]eof[/color][color=#000000]([/color]arq[color=#000000]))[/color] [color=#0000ff]and[/color] [color=#000000]([/color]i[color=#000000]<[/color][color=#000000]10[/color][color=#000000])[/color] [color=#2b91af]do[/color]
[color=#0000ff]begin[/color]
[color=#000000]inc[/color][color=#000000]([/color]i[color=#000000]);[/color] [color=#008000]{O MESMO QUE I:=I+1;}[/color]
[color=#000000]read[/color][color=#000000]([/color]arq[color=#000000],[/color]a[color=#000000][[/color]i[color=#000000]]);[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
i[color=#000000]:=[/color][color=#000000]0[/color][color=#000000];[/color]
[color=#2b91af]while[/color] [color=#000000]([/color][color=#0000ff]not[/color] [color=#000000]eof[/color][color=#000000]([/color]arq[color=#000000]))[/color] [color=#0000ff]and[/color] [color=#000000]([/color]i[color=#000000]<[/color][color=#000000]10[/color][color=#000000])[/color] [color=#2b91af]do[/color]
[color=#0000ff]begin[/color]
[color=#000000]inc[/color][color=#000000]([/color]i[color=#000000]);[/color]
[color=#000000]read[/color][color=#000000]([/color]arq[color=#000000],[/color]b[color=#000000][[/color]i[color=#000000]]);[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
k[color=#000000]:=[/color][color=#000000]0[/color][color=#000000];[/color]
[color=#2b91af]for[/color] i[color=#000000]:=[/color][color=#000000]1[/color] [color=#2b91af]to[/color] n [color=#2b91af]do[/color]
[color=#0000ff]begin[/color]
[color=#2b91af]for[/color] j[color=#000000]:=[/color][color=#000000]1[/color] [color=#2b91af]to[/color] n [color=#2b91af]do[/color]
[color=#0000ff]begin[/color]
[color=#2b91af]if[/color] [color=#000000]([/color]a[color=#000000][[/color]i[color=#000000]]=[/color]b[color=#000000][[/color]j[color=#000000]])[/color] [color=#2b91af]then[/color]
[color=#0000ff]begin[/color]
[color=#000000]inc[/color][color=#000000]([/color]k[color=#000000]);[/color] [color=#008000]{INVERTI, POIS ACHO MELHOR COMEÇAR COM "0"}[/color]
c[color=#000000][[/color]k[color=#000000]]:=[/color]a[color=#000000][[/color]i[color=#000000]];[/color]
break[color=#000000];[/color] [color=#008000]{interrompe o FOR}[/color] [color=#008000]{NÃO PRECISA MAIS PROCURAR!!!}[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
writeln[color=#000000];[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'a ['[/color][color=#000000]);[/color]
[color=#2b91af]for[/color] i[color=#000000]:=[/color][color=#000000]1[/color] [color=#2b91af]to[/color] n[color=#000000]-[/color][color=#000000]1[/color] [color=#2b91af]do[/color]
[color=#000000]write[/color][color=#000000]([/color]a[color=#000000][[/color]i[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]','[/color][color=#000000]);[/color]
[color=#000000]writeln[/color][color=#000000]([/color]a[color=#000000][[/color]k[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]']'[/color][color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'b ['[/color][color=#000000]);[/color]
[color=#2b91af]for[/color] i[color=#000000]:=[/color][color=#000000]1[/color] [color=#2b91af]to[/color] n[color=#000000]-[/color][color=#000000]1[/color] [color=#2b91af]do[/color]
[color=#000000]write[/color][color=#000000]([/color]b[color=#000000][[/color]i[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]','[/color][color=#000000]);[/color]
[color=#000000]writeln[/color][color=#000000]([/color]b[color=#000000][[/color]k[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]']'[/color][color=#000000]);[/color]
writeln[color=#000000];[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'c ['[/color][color=#000000]);[/color]
[color=#2b91af]for[/color] i[color=#000000]:=[/color][color=#000000]1[/color] [color=#2b91af]to[/color] k[color=#000000]-[/color][color=#000000]1[/color] [color=#2b91af]do[/color]
[color=#000000]write[/color][color=#000000]([/color]c[color=#000000][[/color]i[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]','[/color][color=#000000]);[/color]
[color=#000000]writeln[/color][color=#000000]([/color]c[color=#000000][[/color]k[color=#000000]]:[/color][color=#000000]4[/color][color=#000000],[/color][color=#a31515]']'[/color][color=#000000]);[/color]
ReadKey[color=#000000];[/color] [color=#008000]{pause}[/color]
[color=#0000ff]end[/color][color=#000000].[/color]

Falta um detalhe:

Pode ter número repetidos na lista??? Isso não implementei...

Qualquer coisa é só postar...

No aguardo

Abraços

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






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

×