none
ALGORITMOS C# RRS feed

  • Pergunta

  •  int min= 0;

                    foreach (object item in LISTA.Items)
                    {
                        max = Math.Min(min, Convert.ToInt32(item));
                    }

                    MessageBox.Show("O menor número é :  " + min.ToString());

    MINHA DÚVIDA É : Estou usando esse mesmo código para retornar o maior numero e funcionou perfeitamente ,porém agora para mostrar o menor  ele simplesmente me retorna o zero ,gostaria que mostrasse o erro  para corrigir o algoritmo .Obrigada.

    quarta-feira, 23 de março de 2016 01:12

Respostas

  • Se voce compara sua lista (caso ela tenha somente valores positivos) com zero entao o menor sempre vai ser zero.

    Digamos que sua lista seja 50, 30,1,4, entao veja as etapas

    1- minimo entre 0 e 50? é 0

    2- minimo entre 0 e 30? é 0

    3- minimo entre 0 e 1? é 0

    4- minimo entre 0 e 4? é 0

    Resultado final : 0

    O que voce tem que fazer é inicializar com o maximo (Int32.MaxValue)

    1- minimo entre Int32.MaxValue e 50? é 50

    2- minimo entre 50 e 30? é 30

    3- minimo entre 30 e 1? é 1

    4- minimo entre 1 e 4? é 1

    resultado final: 1

    aqui esta a rotina corrigida:

    int min= int.MaxValue;
    foreach (object item in LISTA.Items)
    {
    	min = Math.Min(min, Convert.ToInt32(item));
    }
    
    MessageBox.Show("O menor número é :  " + min.ToString());

    ps.:havia uma troca de variaveis tambem (max= math.min...), como o cesar mostrou, mas o erro na logica era o mais grave.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 23 de março de 2016 13:37
    Moderador

Todas as Respostas

  • você está atribuindo o valor para a variável max

    int min= 0;
    
    foreach (object item in LISTA.Items)
    {
    	// aqui o valor deve ser atribuido a min
    	min = Math.Min(min, Convert.ToInt32(item));
    }
    
    MessageBox.Show("O menor número é :  " + min.ToString());

    quarta-feira, 23 de março de 2016 01:24
  • Se voce compara sua lista (caso ela tenha somente valores positivos) com zero entao o menor sempre vai ser zero.

    Digamos que sua lista seja 50, 30,1,4, entao veja as etapas

    1- minimo entre 0 e 50? é 0

    2- minimo entre 0 e 30? é 0

    3- minimo entre 0 e 1? é 0

    4- minimo entre 0 e 4? é 0

    Resultado final : 0

    O que voce tem que fazer é inicializar com o maximo (Int32.MaxValue)

    1- minimo entre Int32.MaxValue e 50? é 50

    2- minimo entre 50 e 30? é 30

    3- minimo entre 30 e 1? é 1

    4- minimo entre 1 e 4? é 1

    resultado final: 1

    aqui esta a rotina corrigida:

    int min= int.MaxValue;
    foreach (object item in LISTA.Items)
    {
    	min = Math.Min(min, Convert.ToInt32(item));
    }
    
    MessageBox.Show("O menor número é :  " + min.ToString());

    ps.:havia uma troca de variaveis tambem (max= math.min...), como o cesar mostrou, mas o erro na logica era o mais grave.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 23 de março de 2016 13:37
    Moderador