Ir ao conteúdo

Posts recomendados

Postado

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
  • Membro VIP
Postado

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.

Postado

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;

 

  • 4 semanas depois...
  • Membro VIP
Postado

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

  • Membro VIP
Postado

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.

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!