Quantas vezes aparecem os elementos de um array pre definido

Delphi

26/06/2023

Bom dia, precisava de uma ajuda em um exercício que estou fazendo.
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

Fabrício Futagawa

Curtidas 0

Respostas

Frank Hosaka

Frank Hosaka

26/06/2023

Pode ser PHP?

<?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
Frank Hosaka

Frank Hosaka

26/06/2023

Esse é um algoritimo bem da hora, encontrei no Laracasts, ele só tem 3 linhas e funciona
<?php
for ($i = 0, $palpites = []; $i < 150; $i++) @$palpites[mt_rand(1, 60)]++;
arsort($palpites);
var_dump($palpites);
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

26/06/2023

Existem várias maneiras de fazer isso. O exercício é justamente para pensar e aprender lógica de programação.

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
POSTAR