Skip to content

Latest commit

 

History

History
120 lines (97 loc) · 3.18 KB

86.md

File metadata and controls

120 lines (97 loc) · 3.18 KB

Pergunta

86 - Escreve um método chamado Saturate() que recebe dois inteiros e devolve um booleano. O primeiro inteiro deve ser positivo e define um limite inferior e superior dentro do qual o segundo inteiro deve estar. Caso o segundo inteiro esteja dentro dos limites, o método simplesmente retorna false. Caso contrário o método modifica o segundo inteiro, colocando-o dentro dos limites, devolvendo true. A modificação do segundo inteiro deve ser visível fora do método. Alguns exemplos:

int int (original) int (talvez modificado) Valor de retorno
10 23 10 true
15 -20 -15 true
5 -3 -3 false
25 -22 -22 false
12 15 12 true

Testa o método Saturate() com diferentes valores de modo a verificares o seu correto funcionamento. Faz sentido este método ser static? Porquê?

Soluções

Solução 1

using System;

namespace Ex86_03poo
{
    class Program
    {
        static void Main(string[] args)
        {
            int limit;
            int inputValue;

            Console.WriteLine("Insert a limit value");
            limit = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Insert a value to be compared value");
            inputValue = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine($"{Saturate(limit, ref inputValue)} " +
                $"new input: {inputValue}");
        }

        public static bool Saturate(int limit, ref int original)
        {
            int absLimit = Math.Abs(limit);

            if (original > absLimit)
            {
                original = absLimit;
                return true;
            }
            if (original < -absLimit)
            {
                original = -absLimit;
                return true;
            }

            return false;
        }
    }
}

Neste caso faz sentido o método ser estático pois não necessita de mais variáveis para funcionar para além das passadas nos parâmetros.

Solução 2

using System;

class Program
{
    static void Main(string[] args)
    {
        uint x;
        int y;

        for(int i = 0; i < 3; i++)
        {
            Console.WriteLine("Insert positive value for x:");
            x = Convert.ToUInt32(Console.ReadLine());
            Console.WriteLine("Insert value for y:");
            y = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(Saturate(x, ref y));
            Console.WriteLine(y);
        }
    }

    public static bool Saturate(uint x, ref int y)
    {
        if (y > x)
        {
            y = (int)x;
            return true;
        }
        if (y < -x)
        {
            y = (int)-x;
            return true;
        }

        return false;
    }
}

Faz sentido este método ser static, pois nesse caso não precisa que uma exista uma instância da classe para ser chamado e apenas acede a variáveis passadas como parâmetros, sendo que o método é executado apenas com os mesmos.

Nota: Código de teste para este exercício encontra-se neste repositório.

Por Pedro Inácio.