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:
1º int |
2º int (original) |
2º 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ê?
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.
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.