Ho sempre amato la matematica, mi sono innamorato della programmazione.
Adesso mi diverto a metterle insieme!
Tra le nuove caratteristiche della versione 3.5 del .Net Framework, troverete - namespace System.Linq - i cosiddetti
extension methods, il cui scopo è quello di "pluggare" nuovi metodi ad oggetti già esistenti all'interno del framework
(struct o classi che siano)...
Mmh... penso di essermi fatto prendere la mano, forse ne ho scritti troppi: extenders per numeri, stringhe, oggetti web...
Uno dei più - probabilmente - inutili è quello che ho chiamato GetFibonacci(): funzione overloaded... ^_^;
...che ritorna l'n-esimo (dove n è l'intero "esteso" in oggetto) di una data
Successione di Fibonacci.
Vedi codice sotto:
/// <summary>
/// Gets the n-th (zero-based) number of Fibonacci sequence (0, 1, 1, 2, 3, 5, 8...).
/// </summary>
/// <param name="number">The index of the Fibonacci sequence element.</param>
/// <returns>N-th integer of the sequence.</returns>
public static int GetFibonacci(this int number)
{
return number.GetFibonacci(0, 1);
}
/// <summary>
/// Gets the n-th (zero-based) number of a Fibonacci sequence based on particular seeds.
/// </summary>
/// <param name="number">The index of the Fibonacci sequence element.</param>
/// <param name="seed">Integer at the 0th position in the sequence</param>
/// <param name="seed">Integer at the 1st position in the sequence</param>
/// <returns>N-th integer of the sequence.</returns>
public static int GetFibonacci(this int number, int seed0, int seed1)
{
if (number == 0) return seed0;
if (number == 1) return seed1;
return (number - 1).GetFibonacci(seed0, seed1) + (number - 2).GetFibonacci(seed0, seed1);
}
La parte divertente dove sta? Penso nella maniera in cui ho testato il funzionamento di tali metodi
e nel codice utilizzato per scrivere la TestUnit:
una precisa proprietà di qualsiasi successione di Fibonacci è che la somma di 11 elementi consecutivi (chiamiamoli sottosuccessione S)
è uguale ad 11 volte il settimo elemento di S.
Maniera piuttosto elegante di testare, no?
Tasto destro e "create unit tests"...
...scriviamo il codice necessario...
/// <summary>
///A test for GetFibonacci
///</summary>
[TestMethod()]
public void GetFibonacciTest()
{
int n = 0;
for (int j = 0; j < 10; j++)
{
n += j.GetFibonacci(3, 4);
}
int expected = (6).GetFibonacci(3, 4);
Assert.AreEqual(11 * expected, n);
}
...Il test di matematica è passato! ;)
Take care. Bye.
Feedbacks
no feedbacks yet.