Ir ao conteúdo
  • Cadastre-se

Números repetidos em um vetor


Posts recomendados

Faça um programa em Pascal que leia um vetor A de dez posições contendo números inteiros. Determine e mostre, a seguir, quais elementos de A estão repetidos e quantas vezes cada um se repete. Exemplo: caso, se repitam os valor 5 (2x) e 18 (3x), o programa deverá mostrar ao final as seguintes informações:

"O número 5 aparece duas vezes;

 O número 18 aparece três vezes;"

 

Eu tentei fazer desse jeito:

Program vet ;
var A: array [1..10] of integer;
    i,j,qntd:integer;
Begin
for i:=1 to 10 do
 begin
   writeln ('Digite o valor da posição ',i,' do vetor');
   readln (A);
  end; 
for i:=1 to 10 do
  begin
   qntd:=0;
   for j:=1 to 10 do
    begin
      if (A=A[j]) then
     qntd:=qntd+1;
    end; 
   writeln ('O número ', A,' aparece ', qntd, ' vezes.');
  end;   
readln; 
End. 

 

Só que se eu digito (por exemplo) o vetor [1,2,2,1,3,4,5,6,7,8], ele aparece

"O número 1 aparece 2 vezes

  O número 2 aparece 2 vezes

  O número 2 aparece 2 vezes

  O número 1 aparece 2 vezes

  O número 3 aparece 1 vezes

  ..."

 

Eu sei porque ele faz isso, mas não sei arrumar :/

Agradeço a ajuda desde já!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @gabriellberaldi,

 

1) AJUSTE DO CÓDIGO ORIGINAL

Devido a provavelmente um pequeno erro na postagem, as coordenadas [ i ] sumiram! (a página entende como comando para itálico).

Para evitar esse erro, apenas substitui o "i" por "ii": #FicaDica

Program vet;
var
  A    :array [1..10] of integer;
  ii,j,
  qntd :integer;
BEGIN
for ii:=1 to 10 do
  begin
    writeln('Digite o valor da posição ',ii,' do vetor');
    readln(A[ii]);
   end; 
for ii:=1 to 10 do
  begin
   qntd:=0;
   for j:=1 to 10 do
    begin
      if (A[ii]=A[j]) then
        qntd:=qntd+1;
    end; 
  writeln('O número ', A[ii],' aparece ',qntd,' vezes.');
  end;   
readln; 
END. 

 

Obs.: Ao postar um código, utilize a tag Code, é o botão <>.
 

 

2) LÓGICA A SER APLICADA

Então, você precisa pensar outras formas para calcular... tente por exemplo idealizar uma forma de como efetuar essa verificação de quantidade repetidas no papel ou de cabeça. Como você faria essa verificação?

 

***

 

No aguardo

Link para o comentário
Compartilhar em outros sites

@Simon Viegas Olá

Não sabia da questão do itálico, nem do botão de code, obrigado!

Então, infelizmente o único jeito de fazer que pensei foi esse, lendo todo o vetor primeiro e depois analisando cada um dos valores se eram iguais à outros de outras posições, era como eu faria a mão, meio automático... Provavelmente é uma coisa bem obvia, mas não consigo pensar em mais nada, o meu curso não é voltado pra programação (porém tenho uma matéria semestral disso kk). Ficaria agradecido com sua ajuda!

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @gabriellberaldi,

 

Veja, não é igual ao feito na mão, você não iria exibir o resultado de um número mais de uma vez por exemplo :). Pegue esse algoritmo e faça o passo a passo mentalmente ou no papel, verá que tem algo errado ou faltando. Esse processo de descoberta faz parte... com as experiências, você se adaptará mais fácil para desafios semelhantes e também melhor capacidade para as coisas novas! (que não necessariamente tem a ver com programar).

 

Então, em relação a "não consigo pensa em mais nada", não se assuste, é normal pensar assim no início. Posso até garantir que você ter essa disciplina na grade curricular não deve ter sido à toa. Se esforce mais um pouco que as ideias vão surgindo...

 

 

Se tive uma dificuldade maior sobre como transpor o código, ou sobre limitações da linguagem etc, é só avisar que damos um jeito.

 

 

No aguardo

 

 

 

Link para o comentário
Compartilhar em outros sites


uses
  System.SysUtils;

  var
  name : string;
  A: array [1..10] of integer;
  qntd: integer;
  i : integer;
begin
qntd := 0;
for i:=1 to 10 do
 begin
   writeln ('Digite o valor da posição ',i,' do vetor');
   readln (A[i]);
  end;

for i:=1 to 10 do
  begin
   if (A[i]=5) or (A[i]=18) then
   begin
   qntd:=qntd+1;
   end;
  end;
  writeln('total -> ', IntToStr(qntd));
readln;
end.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @etanois666,

 

Pelo que eu entendi do seu código, você está contanto quantos "5" ou "18" aparecem no vetor... mas não é isso que o enunciado está pedindo...

 

De qualquer sorte, seria mais adequado você comentar algo na suas postagens, e se fosse o caso, postar um código ou trecho... Veja, o objetivo NÃO É DAR uma resposta, mas sim ajudar para que o próprio @gabriellberaldi encontre uma sua (dele).

 

 

Sugiro que tente rever melhor o que está sendo pedido, e a partir daí repassar as suas sugestões e orientações para que usuário encontre uma solução.

 

 

No aguardo.

 

Abraços

 

 

58 minutos atrás, etanois666 disse:


uses
  System.SysUtils;

  var
  name : string;
  A: array [1..10] of integer;
  qntd: integer;
  i : integer;
begin
qntd := 0;
for i:=1 to 10 do
 begin
   writeln ('Digite o valor da posição ',i,' do vetor');
   readln (A[i]);
  end;

for i:=1 to 10 do
  begin
   if (A[i]=5) or (A[i]=18) then
   begin
   qntd:=qntd+1;
   end;
  end;
  writeln('total -> ', IntToStr(qntd));
readln;
end.

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Olá Simon, dei uma reformulada no programa mas ele ainda não está da maneira esperada:

 

Program vet ;
var 
  A: array [1..10] of integer;
  ii,j,qntd:integer;
Begin
for ii:=1 to 10 do
  begin
    witeln ('Digite o valor da posição ',ii,' do vetor');
    readln (A[ii]);
  end;  
for ii:=1 to 10 do
  begin
    qntd:=0;
    for j:=1 to 10 do
      begin
        if (A[ii]=A[j]) then
          qntd:=qntd+1; 		
      end;
  if (qntd>1) then
    begin  
      writeln ('O número ', A[ii],' aparece ', qntd, ' vezes.');
    end; 
  end;   
readln; 
End. 

Se eu digito o vetor [1,2,2,1,3,4,5,6,7,2], por exemplo, aparece:

"O número 1 aparece 2 vezes.

 O número 2 aparece 3 vezes.

 O número 2 aparece 3 vezes.

 O número 1 aparece 2 vezes.

 O número 2 aparece 3 vezes."

Já fiquei muito tempo pensando e sempre chego na ideia de colocar uma qntd2 pra contar quantas vezes aparece a mensagem pra cada número, e um "if qntd2<2" pra ele escrever a mensagem... Mas isso não dá certo porque toda vez que começa o primeiro "for", a qntd2 é zerada (se não for, só aparece o primeiro número que for repetido).

 

Você poderia, por favor, falar como arrumo isso? Ou pelo menos dar uma luz (bem forte kk) pra como resolver? Estou precisando desse exercício pra um trabalho urgentemente!

 

Obrigado.

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

O que você precisa é de uma forma para não calcular números que já calculou...

 

Ex.:

- usar um vetor para armazenar os números que já calculou...

ou

- ordenar o vetor A em ordem crescente.... (mais comum usar o Bubble Sort)

 

...o restante do raciocínio deixo com você.

 

 

No aguardo.

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...