1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Menor numero em C

Discussão em 'Programação' iniciada por skirk, 8 de Fevereiro de 2007. (Respostas: 32; Visualizações: 7820)

  1. skirk

    skirk Power Member

    Boas to com algumas duvidas de como ek se ve o menor numero positivo de uma sequencia de numero...E para aplicar num programa mais elaborado mas so preciso que me dêm +/- umas dikas de como verificar isso..ate msm um algoritmo serve pa ter uma ideia.
    Thks
     
  2. HecKel

    HecKel The WORM

    com um ciclo fazes isso bem ;)

    Código:
    menor valor em memória <- 0
    Para todos os elementos da lista
      comparar o elemento currente com o menor guardado
      se for menor, o menor guardado passa a ser o currente
    

    Fica aqui um pseudocódigo, assim dá para perceber ;)

    abraços, HecKel
     
  3. QuickFire

    QuickFire What is folding?

    Vou fazer isto em PHP e em 5 minutos por isso nem sei se é o ideal, mais rápido, etc... mas foi o que surgiu :P

    Código:
    <?php
    
    $nums = array("5","100","3","1","55");
    $min = 0;
    for ($i=0; $i<count($nums); $i++) {
      if ($i == 0) { $min = $nums[$i]; }
      if (($nums[$i] > 0) && ($nums[$i] < $min)) { $min = $nums[$i]; }
    }
    echo $min
    ?>
    
     
  4. skirk

    skirk Power Member

    sim mas assim, penso k n da pk é so para numeros positivos, inicialmente temos, float menor=0, ao compararmos com as ocorrências que serão sempre maiores ou iguais a 0 o valor do menor cont sempre a ser 0. Isso assim resulta para o maximo, mas isso ja tinha. Mas valeu a resposta. Thks na mesma.
     
  5. HecKel

    HecKel The WORM

    humm, de facto tens razão, experimenta a meter o maior inteiro possível, ou mete um absurdamente grande ;)

    abraços, HecKel

    EDIT: Olha a solução do QuickFire, é a mais correcta ;)
     
    Última edição: 8 de Fevereiro de 2007
  6. skirk

    skirk Power Member

    Sim isso assim ate é uma boa ideia...não muito correcto mas funciona :-D
     
  7. skirk

    skirk Power Member

    Essa é capaz de ser a melhor soluçao fugindo um poko a ideia do HecKel em dar um valor exageradamente grande :-D, vou tentar resolver apartir dessa ideia. Ty
     
  8. skirk

    skirk Power Member

    Humm...assim de repente nao me esta a resolver o problema :smilliex:

    EDIT: ja ag o k é o echo $min ?
     
    Última edição: 8 de Fevereiro de 2007
  9. QuickFire

    QuickFire What is folding?

    é o mesmo que um print em c :)
     
  10. SoundSurfer

    SoundSurfer Power Member

    Em vez de por o min = 0, coloca-se o min igual ao primeiro elemento do array e começa-se a iteração com i=1
     
  11. skirk

    skirk Power Member

    eheh perfeito ag ja resulta ;), ty pela dika e ty tb ao QuickFire pelo código ;)
     
  12. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    a macro INT_MIN definida no ficheiro 'limits.h' contém o menor valor inteiro possível.

    -------------------------

    o primeiro 'if' não devia estar dentro do ciclo. a condição só vai ser verdadeira uma vez, mas estás a testá-la em todas as iterações...
     
  13. You got a point!:victory: :victory:
    Oh HecKel a parte do número absurdamente grande devias ter levado com um carapau na cara quando tiveste essa ideia!!:lol:
     
  14. Bem, primeiro devias falar se queres o ultimo número positivo inteiro ou real. Se for real seria imposível escreve-lo, devido al fato de a reta real ser infinita.
     
  15. QuickFire

    QuickFire What is folding?

    Porque não ?
    O objectivo é mesmo estar dentro do ciclo, para ele quando o $i == 0, definir o valor mínimo como o primeiro valor do array.
    Basicamente foi o que foi dito atrás mas isto é feito de forma automática ;)
    Vai atrasar um pouco o código mas penso que quem procura algo deste género não vai querer performance extrema :P E como disse acima o código foi feito em 5 minutos.
     
  16. mcog_blaster

    mcog_blaster Power Member

    PHP:
    <?php

    function positive($number)
    {
        return (
    $number >= );
    }

    $numbers = array(-1251, -133323345124, -12326);
    sort($numbers);

    echo 
    current(array_filter($numbers"positive"));

    ?>

    Código:
    int minimum (int numbers[], int size)
    {
          int i,j;
          int index_smallest;
          int smallest;
          
          //Procurar o primeiro numero da lista maior que 0, guarda-mos tb o indice 
          //para nao ter que voltar a percorrer toda a lista novamente
          for (i=1; i < size; i++)
          {
                if(numbers[i] >= 0)
                {
                       index_smallest = i;
                       smallest = number[i];
                       break;
                }
          }
    
          for (j=(index_smallest + 1); j < size; j++)
          {
               if(numbers[j] < smallest && numbers[j] >= 0)
               {
                     smallest = numbers[j];
               }
          }
    
          return smallest;
    }
    
    Nao testei o C.
     
  17. MadOnion

    MadOnion Folding Member

    Tanta confusão para encontrar o menor numero numa lista, é certo que esse programa devolve o indice, mas é pouco prático.
    Basta como o SoundSurfer disse, iniciar uma variável auxiliar com o indice 0 do vector/lista/whatever, e comparar cada numero da lista com a variável auxiliar:
    Código:
    Se lista[i] < auxiliar -> lista[i] é o menor
    senao, incrementa o i e o auxiliar mantém-se intacto
    
     
    Última edição: 16 de Fevereiro de 2007
  18. PJ

    PJ Power Member

    Penso que te enganaste aí MadOnion, será mais do tipo :

    Se lista < auxiliar
    auxiliar = lista ( dado que o que está na lista é o menor )
    senao, incrementa o i e o auxiliar mantém-se intacto

    Em C :

    for(int i = 0; i < lista.length; i++) (mistura de c++, java, director, vbasic, tantas que já nem sei :lol: )
    if (lista < menor)
    menor = lista

    O lista.length é o tamanho do teu array, agora só mesmo no compilador é que saberia fazer isso,
    basicamente é isto
     
    Última edição: 22 de Fevereiro de 2007
  19. MadOnion

    MadOnion Folding Member



    Exacto ja corrigi o meu erro.
    Quanto ao teu, é .length ... e se menor = lista[0] o for pode começar em i = 1.
    Existem n formas de achar o menor numero numa lista, seja usando for, while, do while ou qualquer outro tipo de ciclos.
     
  20. souto

    souto To fold or to FOLD?

    vivam,

    dei uma espreitadela muito a fugir às soluções anteriores. não gostei muito.
    vou deixar aqui um trecho de código meu, mais propriamente uma função que recebe um apontador para uma array de inteiros e devolve o índice do número mais pequeno nessa mesma array.

    Código:
    /**
     * Devolve o índice do menor número numa array.
     * Requer um apontador não nulo para uma array de inteiros não nula e o seu tamanho.
     * Devolve o índice do menor número na array.
     * /
    int minIndex (int *array, int size) {
      int smallestPos = 0;
      int currentPos = 0;
      for (currentPos; currentPos < size; currentPos++)
        if (array[currentPos] < array[smallestPos])
          smallestPos = currentPos;
      return smallestPos;
    }
    
    penso ser qq coisa do género, agradeço feedback.

    cumprimentos.
     

Partilhar esta Página