Quantas vezes aparecem os elementos de um array pre definido
26/06/2023
0
Preciso fazer um programa que ja tem um array pré-definido: Const Array_Inteiro: Array [1 .. 50] of Integer = ((5, 2, -6, 2, 5... e etc) preciso que traga quantas vezes esses valores dentro do array aparecem.
componentes button e memo.
Fabrício Futagawa
Posts
26/06/2023
Frank Hosaka
<?php $palpites=[]; for($controle=0;$controle<50;$controle++){ $palpites[]=rand(1,60);} // gerando um vetor com números aleatórios sort($palpites); // ordenando os palpites $contagens = array_count_values($palpites); // contar os palpites repetidos foreach($contagens as $palpite => $escolhido){ echo "palpite $palpite => escolhido $escolhido vezes <br>";}
27/06/2023
Frank Hosaka
<?php for ($i = 0, $palpites = []; $i < 150; $i++) @$palpites[mt_rand(1, 60)]++; arsort($palpites); var_dump($palpites);
28/06/2023
Arthur Heinrich
Uma solução que você pode adotar é colocar os elementos do array em ordem. Depois, você varre o array sequencialmente, a partir do segundo elemento comparando-o com o elemento anterior. Se for igual, conta mais um em um contador inicializado por 1, já que começamos pelo segundo elemento. Se for diferente, exibe o valor do array na posição anterior, seguido do contador e volta a inicializar o contador com o valor 1. Depois, avança a para a próxima posição do array. Quando o array acabar, exibe o valor armazenado na última posição do array, com a quantidade indicada pelo contador.
Também dá para utilizar uma solução semelhante aos exemplos anteriores. O Delphi possui um componente chamado TStringList. Ele permite que se crie um array de strings indexado de 0 a n-1, ou que se utilize uma espécie de hash table, onde o índice é um valor do tipo string e o conteúdo outro valor string. Algo do tipo: SL[5]:='ABC'; ou SL.Values['X1']:='ABC';
Para utilizar isto, você utilizará o valor do seu array como índice. Terá que transformá-lo de inteiro para string, para utilizar o valor como índice. Já o conteúdo armazenado seria a quantidade de vezes que o valor aparece. Você precisa checar se o índice existe antes da atualização. Se existir, converte o valor armazenado de string para inteiro, soma 1, reconverte para string e armazena novamente. Se não existe, armazena diretamente o texto '1', para representar que foi a primeira ocorrência. Depois, é só varrer o array SL.NAMES e exibí-los. Mas, já deu para perceber que esse monte de conversão dá trabalho e nos induz a crer que este não é um algoritmo eficiente.
Em um banco de dados, totalizar esse tipo de informação, geralmente requer um SORT ou HASH, para agregar os valores repetidos. Então, ordenar os valores parece o melhor algoritmo.
Clique aqui para fazer login e interagir na Comunidade :)