Fórum Quantas vezes aparecem os elementos de um array pre definido #620176
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
Curtir tópico
+ 0Posts
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>";}
Gostei + 0
27/06/2023
Frank Hosaka
<?php for ($i = 0, $palpites = []; $i < 150; $i++) @$palpites[mt_rand(1, 60)]++; arsort($palpites); var_dump($palpites);
Gostei + 0
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)