Ir ao conteúdo
  • Cadastre-se
Bruno Gabriel de Andrade

Pascal dois vetores pascal vetorfrequencia

Recommended Posts

Boa noite, estou tendo problemas na impressão e com o valor 1, quais dicas me dao ? 

928912540_ex2.png.793b1481a99a11736347e2c6e91c1470.png

 

Program repetvetorvetor;
Var
Vetor1, vetor2: array [1..100] of integer;
i,j:integer;
Begin
  For i:=1 to 5 do
  Begin
    Writeln ( 'digite o número da posição ' , i );
    Readln (vetor1);
  End;
  For i:= 1 to 5 do
  Begin
    For j:=1 to 5 do
    Begin
      If (vetor1 <> vetor1 [j]) then
      Vetor2[j]:=1
      Else
      Vetor2[j]:= vetor2[j] + 1 ;
    End;
  End;
  For i:= 1 to 5 do
  Begin
    For j:=1 to 5 do
    Begin
      If (vetor1 <> vetor1 [j]) then
      Writeln ( ' o número  de vezes que o numero ',vetor1,' , de posicao ',i,'se repetiu foram ',vetor2);
    end;
  end;
end.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Sugiro que pense você nas estratégias, e nós, colaboradores, tentarmos ajudar a implementar o quê você desenvolveu.

Uma dica inicial você já usa, que seria utilizar um vetor menor para testar.

 

Esqueça que existe uma linguagem de programação computacional. Beleza?

 

Pegue o exemplo de 10 lá da imagem:

928912540_ex2.png.793b1481a99a11736347e2c6e91c1470.png

 

"Quais elementos de A estão repetidos e quantas vezes cada um se repete?"

 

Faça isso no papel!!!. Como você faria?

 

Transcreva aqui como fez!

 

Obs.: esse exemplo da imagem é peculiar, pois TODOS os elementos são repetidos...ou seja, já facilita um pouco.

 

Após conseguir fazer no papel, ajudamos a fazer no Pascal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seriam necessários 3 vetores.

O principal: Vetor1

O secundário: Vetor2

Um para armazenar as somas: Soma

 

Eu faria em duas etapas.

1. Identificar, através de um laço, quais elementos diferentes tem no vetor principal (Vetor1) e  os armazenaria em  outro vetor (vetor2) - que terá tamanho igual ou menor que o principal. No exemplo do problema, seria criado um vetor com os seguintes elementos: vetor2 = [5, 4, 3, 18];

2. Identificado os elementos únicos, varrer o vetor principal (Vetor1) procurando pelos elementos do vetor2 e ir somando +1 a cada elemento encontrado. O resultado seria armazenado no vetor Soma. No exemplo, o resultado seria Soma=[2, 3, 2,3];

 

Obs.: ao interagir com vetores, deve-se fornecer o índice. Então, para ler o vetor de entrada, o correto seria:

For i:=1 to 5 do
  Begin
    Writeln ( 'digite o número da posição ' , i );
    Readln (vetor[i]);
  End;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tópico já um pouco antigo... vou postar uma tentativa:

program FCdH;
uses
  CRT; //necessário em alguns compiladores para reconhecer o ReadKey, ClrScr etc
function valorPorExtenso(num:integer):string;
  const
    unidade:array[1..19] of string = ('uma', 'duas', 'tres', 'quatro', 'cinco',
                             'seis', 'sete', 'oito', 'nove', 'dez', 'onze',
                             'doze', 'treze', 'quatorze', 'quinze', 'dezesseis',
                             'dezessete', 'dezoito', 'dezenove');
    dezena :array[2..9] of string = ('vinte', 'trinta', 'quarenta', 'cinquenta',
                             'sessenta', 'setenta', 'oitenta', 'noventa');
  var
    numStr:string;
    numAux:integer;
    code  :word;
    aux   :string;
  begin
  if num<=19 then
    valorPorExtenso:=unidade[num]
  else
    if num=100 then
      valorPorExtenso:='cem'
    else
      begin
      Str(num,numStr);
      Val(numStr[1],numAux,code);
      aux:=dezena[numAux];
      if numStr[2] <> '0' then
        begin
        Val(numStr[2],numAux,code);
        aux:=aux+' e '+unidade[numAux];
        end;
      valorPorExtenso:=aux;
      end;
  end;
  
var
  vetorA  :array [1..100] of integer; //vetor dos números inteiros (1 a x)
  vetorNum:array [1..100] of integer; //vetor dos números que já ocorreram
  vetorQtd:array [1..100] of integer; //vetor com a quantidade de repetições por número
  i, j,
  contNum :byte;
  igual   :boolean;
  
  qtdPos,
  limite  :byte;
begin
Randomize;
repeat
  repeat
    ClrScr;
    write  ('Quantidade de posições (1 a 100):'); readln(qtdPos);
  until (qtdPos>=0) and (qtdPos<=100);
  repeat
    ClrScr;
    write  ('Limite maximo de (1 a 100): '); readln(limite);
  until (limite>=0) and (limite<=100);

  if limite=0 then exit;  
  contNum:=0;
  for i:=1 to qtdPos do
    begin
    vetorA[i]:=Random(limite)+1;
    vetorQtd[i]:=0;
    end;
  for i:=1 to qtdPos do
    begin
    igual:=false;
    for j:=1 to contNum do
      if vetorA[i] = vetorNum[j] then
        begin
        inc(vetorQtd[j]);
        igual:=true;
        break;
        end;
    if not igual then
      begin
      inc(contNum);
      vetorNum[contNum]:=vetorA[i];
      inc(vetorQtd[contNum]);
      end;
    end;
  for i:=1 to qtdPos do
    begin
    write  (vetorA[i]:6);
    if i mod 10 = 0 then writeln;
    end;
  writeln;
  writeln;
  for i:=1 to contNum do
    writeln('O numero ',vetorNum[i],' aparece (',vetorQtd[i],') ',valorPorExtenso(vetorQtd[i]),' veze(s) ');
  ReadKey;
until limite=0;
end.

 

Não deixei exatamente como solicitado.. apenas para deixar algumas referências.

 

Achando algum erro é só comentarem;

Dúvidas para quem não entendeu alguma parte, é só perguntar também.

 

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Sobre:

21 horas atrás, 0xElfER_R3fl3x0 disse:

Uma estratégia simples é ordenar o vetor, não sendo necessário criar outros vetores. Pode utilizar, como exemplo, o Bubble sort ou o Shell sort. 

 

@0xElfER_R3fl3x0, a dica é interessante. Mas depende. Veja:

 

Em 17/12/2018 às 22:12, Bruno Gabriel de Andrade disse:

928912540_ex2.png.793b1481a99a11736347e2c6e91c1470.png

 

Repare que o resultado NÃO está ordenado, ou seja, o resultado final sairá diferente. Na sua sugestão, teríamos um resultado assim:

O número 3 aparece duas vezes.
O número 4 aparece três vezes.
O número 5 aparece duas vezes.
O número 18 aparece três vezes.

Aí tem que analisar se poderá mudar a ordem do resultado ou não. Eu acredito que não teria problema... mas vale a questão:

  • se a ordem não importa, simplificará bastante. Poderia utilizar qualquer método de ordenação tradicional, como os citados. O bom que a lógica da ordenação está pronta (não precisa reinventar a roda). Faltará só criar uma outra lógica para contar a partir desse vetor ordenado;
  • se "deverá" mostrar na ordem da imagem, ainda continuará simples, mas teria que em vez de ordenar, utilizar um método que agrupe os números seguindo a ordem de ocorrência (ou algo do tipo). Após agrupar, teríamos um vetor assim:
    [5][5][4][4][4][3][3][18][18][18]

O restante é igual, ou seja, de um algoritmo para o outro só muda que um ficará em ordem "crescente" ou "decrescente", e o outro ficará agrupado na "ordem da ocorrência".

 

Eu já fiz a minha tentativa... quem quiser tentar fazer ordenando ou agrupando, fiquem a vontade.

 

Se quiserem um base de código para o Bubble Sort:

type
  t_vet100 = array [1..10] of integer;
  
procedure BubbleSort(var v:t_vet100);
  var
    i, j:byte;
    temp:integer;
  begin
  for i:=1 to 9 do
    for j:=1 to 10-i do
      if v[j] > v[j+1] then
        begin
        temp  :=v[j];
        v[j]  :=v[j+1];
        v[j+1]:=temp;
        end;
  end;

 

 

Dúvidas, críticas ou sugestões e só postarem.

 

No aguardo.

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

×