Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PRISCILA CORREIA SILVA

Algoritmo vetor - visualg

Recommended Posts

Boa Noite, galera precisando de uma ajuda, travei no código.....
A questão é:

Faça um vetor com 50 posições e preencha com valores aleatórios de 0 a 100.
a) O programa deverá pedir um número entre 0 a 100 e o programa deverá informar qual a célula
que apresenta o valor mais próximo (ou igual) ao digitado.
b) Deve ser informado a posição no vetor e o valor desta posição (indicando se é aproximado ou
exato).
*** CONSEGUI FAZER A OPÇÃO A, PORÉM A OPÇÃO B NÃO TENHO A MINIMA IDEIA DE COMO FAZER!!!!
Segue meu código:
var
numeros: vetor[1..50] de inteiro
i, num: inteiro
inicio
para i de 1 ate 50 faca
numeros <- randi(100)
fimpara
//EXIBINDO VETOR
para i de 1 ate 50 faca
escreval("Vetor ", i, " numero: ", numeros)
fimpara
//PRIMEIRA PERGUNTA
escreval("Digite um numero de 0 a 100")
leia(num)
se(((num) < 0) ou ((num) > 100)) entao
escreval("Numero invalido! Digite novamente:")
leia(num)
senao
para i de 1 ate 49 faca
se numeros = num entao
fimse
fimpara
escreval("Na posicao: ",i, " / numero: ",numeros, " Exato!")
fimse
fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fez a A, a B está facil.. Quando achar, guarde a variável do laço 'i' e o valor numeros em outras variáveis fora do escopo do laço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A opção B basicamente fala para você printar para o usuário que o valor que ele digitou está próximo ou igual ao valor de A, ou seja, se eu digitei 50 e o valor mais próximo é 47, então você vai dizer que ele é aproximado e vai mostrar a posição do vetor que contem o valor 47, agora se o valor 50 existir no vetor, então você vai mostrar que é exato e a posição do número 50 no vetor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica é a seguinte, ordene todos os números em ordem crescente, você vai ter algo parecido com uma fita. Quando o cara digitar um número você vai realizar os passos:

 

  1. Esse número é maior que o primeiro número da fita?
  2. Esse número é menor que o último número da fita?
  3. Na metade da fita (ou seja tamanho/2) o número que encontramos é maior ou menor que o do usuário
  4. Se for maior, então isso significa que o número que procuramos está na primeira metade da fila
  5. Se for menor, então está na segunda metade da fila

A partir daí usamos o que é chamado de pesquisa binária, você vai pegar a metade da fila selecionada, digamos que foi a segunda metade (por exemplo, uma fila de 1 a 100 e selecionamos 85, se a metade é 50 então o 80 estará depois do 50, logo na segunda parte).

 

  1. Pegamos essa segunda metade e dividimos em 2, e fazemos novamente os passos 3, 4 e 5 do processo anterior
  2. Fazemos isso repetidamente até que só sobre o mínimo divisor possível, se sua lista for par, sobrarão dois números, se não sobrarão 3
  3. Então destes 3 números você pode verificar: Numero(i) é >, < ou = ao que procuro?
  4. Independente do resultado você pode jogar todos os números em uma variável e iterar pelo resultado perguntando: variável - meunumero = 0? Se for então a variável é igual ao seu número (85 - 85 = 0) Quanto mais próximo de 0 for o seu número obtido, mais próximo do valor original você estará

 

Óbvio que existe uma abordagem mais simples que é basicamente passar por todos os números (ordenados em ordem crescente) e ir utilizando essa troca de variáveis do passo 3 e 4 acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por alexdyna
      Prezados,
      Amigos tenho que fazer um trabalho da faculdade onde o professor me da um arquivo que vou colocar anexo e tenho que fazer um algoritmo que leia o arquivo e monte uma tabela com as informações.
      pelo que vejo ele tem na primeira linha 8 barra e nas demais linha 10 barras
      ate a ultima que seria sua parada onde temos 2 barras seguidas.
       
      ficaria muito grato com a ajuda de todos.
       
      No arquivo anexo esta o texto:
      Nome/telefone/nascimento/Horas Curso/vendas T1/vendas T2/vendas T3/vendas T4/
       Luiz Ranza Neo/99934-5255/05/12/1989/200/107099,072578621/76915,8996218681/100922,271239691/76372,9971916498/
      Richard de Barrissaia/99326-4689/18/03/1990/150/55123,0080621828/68062,2200055909/67233,9928593779/45236,5928531083/
      Rodrigo Abalâminos/99911-7413/09/08/1987/168/71697,3866071191/58063,5644108225/88183,6230762134/48160,3116315664/
      José Gigfrid/99658-7874/15/04/1997/135/48816,199086596/50086,3689415844/52916,3066872779/55232,0663463164/
      Luiza Celly Silva/99659-1214/01/02/2000/90/29208,8223591438/39361,8088384592/45062,056112236/38913,7237126574/
      Maria Kunlun/99686-7845/21/04/1984/182/92076,1053757689/80440,5339844205/87575,0546657182/79220,9398178354/
      //
       
    • Por Mauricio Molina
      Ola pessoal, será que podem me dar uma força?
       
      Preciso fazer um calculo de subtração de valores, onde o administrador seleciona o mes, pego pelo ID, método GET, para edição.
       
      Como normalmente tem vários meses pagos, o script a seguir só esta funcionando no primeiro item da tabela.
       
      Como posso fazer para funcionar em todos os itens da tabela?
       
      Teria que dar um nome diferente no getValor (id no HTML) para cada um, mas como posso fazer isso?
       
      <!-- Calculo Devolucao--> <script type="text/javascript"> function id(valor_campo) { return document.getElementById(valor_campo); } function getValor(valor_campo) { var valor = document.getElementById(valor_campo).value.replace(',', '.'); /*document.write("Valor: " - valor);*/ return parseFloat( valor ) * 1; } function sub() { var total = getValor('v_recebido') - (getValor('v_devolvido')); id('resultadoDev').value = (total * 1) .toFixed(2, "."); } </script> <!-- Calculo Devolucao--> <div class="toggle"> <input name="v_devolvido" type="checkbox" id="foo<?php echo $rows_aluno['id']; ?>" value="<?php echo $rows_aluno['v_recebido']; ?>"> <label for="foo<?php echo $rows_aluno['id']; ?>"></label> </div> <input type="text" id="v_recebido" value="<?php echo $rows_aluno['v_recebido']; ?><?php echo $rows_aluno['v_receb_parc']; ?>" onblur="sub()" > <div class="form-row"> <div class="form-group col-md-6"> <label for="validationCustomUsername">Valor Parcial:</label> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroupPrepend">R$</span> </div> <input name="v_dev_parc" type="text" class="form-control" id="v_devolvido" placeholder="Digite o Valor" aria-describedby="inputGroupPrepend" onblur="sub()"> </div> </div> <input name="id_user" type="hidden" value="<?php echo $rows_aluno['id_user']; ?>"> <input name="id_prof" type="hidden" value="<?php echo $rows_aluno['id_prof']; ?>"> <input name="status" type="hidden" value="Devolvido"> <input name="mes" type="hidden" value="<?php echo $rows_aluno['mes']; ?>"> <input name="v_recebido" type="text" id="resultadoDev"> </div>  
    • Por thiago_tw
      eu to com uma tarefa que preciso de ajuda, já tentei alguns algoritmos que achei por aqui mas nunca dá certo, mandei a imagem do que é para ser feito, agradecido se me ajudarem

    • Por JonasFloripa
      Bom dia pessoal..
      Estou com um problema e apareceu quando migrei o sistema ue tenho do php5 para o php7.
      Essa parte do sistema que está dando o problema seria quando quero adicionar o nome do pessoal em uma escala, mas quando seleciono os nomes partindo de quem começa com  a letra 'R', não envia as infomarções. Isso não acontecia no php5.
      Vou colocar o código abaixo e o que mostra quando seleciono o checkbox.
       
       
      <table width="100%" border="0" cellpadding="1" cellspacing="1"> <tr> <td width="9%" align="center"> <input name="conf[]" type="checkbox" value="<?PHP echo $login; ?>"/> </td> <td width="21%"><input name="login_<?PHP echo $login;?>" type="text" value="<?PHP echo $login; ?>" readonly class="negrito"/></td> <td width="13%"><input name="hora2_<?PHP echo $login;?>" type="text" value="<?PHP echo $hora2; ?>" size="4" readonly class="negrito"/></td> <td width="13%"><input name="somah2_<?PHP echo $login;?>" type="text" value="<?PHP echo $somah2; ?>" size="4"readonly="readonly" class="negrito"/></td> <td width="13%"><input name="quantidade_<?PHP echo $login;?>" type="text" value="<?PHP echo $total2; ?>" size="4"readonly="readonly" class="negrito"/></td> <td width="16%"><input name="data_<?PHP echo $login;?>" type="text" value="<?PHP echo $data; ?>" size="10" readonly class="negrito"/></td> <td width="15%"><input name="idescala_<?PHP echo $login;?>" type="text" value="<?PHP echo $idescala; ?>" size="5" readonly class="negrito"/></td> </tr> </table>  
    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.