Quantas vezes aparecem os elementos de um array pre definido
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.
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
Curtidas 0
Respostas
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
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
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.
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