Menor numero em C

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
 
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
 
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
?>
 
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.
 
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:
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
?>
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
 
a macro INT_MIN definida no ficheiro 'limits.h' contém o menor valor inteiro possível.

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

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

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...
 
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

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.
 
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...
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.
 
PHP:
<?php

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

$numbers = array(-12, 5, 1, -13, 33, 23, 345, 1, 2, 4, -1232, 6);
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.
 
PHP:
<?php

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

$numbers = array(-12, 5, 1, -13, 33, 23, 345, 1, 2, 4, -1232, 6);
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.

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:
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 -> auxiliar é o menor
senao, incrementa o i e o auxiliar mantém-se intacto

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:
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.lenght; i++) (mistura de c++, java, director, vbasic, tantas que já nem sei :lol: )
if (lista < menor)
menor = lista

O lista.lenght é o tamanho do teu array, agora só mesmo no compilador é que saberia fazer isso,
basicamente é isto


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.
 
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.
 
Back
Topo