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

smmaua    0

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
smmaua    0
  • Autor do tópico
  • 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
    smmaua    0
  • Autor do tópico
  • 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

    ×