čtvrtek 9. července 2015

Najdete chybku v rádoby finanční aplikaci?

Opět taková menší hádanka - jistá finanční instituce se rozhodla nabídnout nový produkt. Potenciální klient si určí, jakou částku chce mít v jistém věku na účtu a  dále zadá, v kterém věku chce začít produkt využívat. Následně obdrží přehled, kolik v každém roce musí na účtě mít, aby cílovou částku obdržel a to při pětiprocentním úročení.

Tedy například pokud klient chce mít v 55 letech 3300,- Kč a chce začít užívat produkt ve svých 50ti, bude aplikace vypisovat toto:

The amount you want to have at the end: 3300
Your age at the end: 55
Your age at the beginning: 50

Calculation  (5% p.a.):

At 55 you have to have 3300 on your account
At 54 you have to have 3142 on your account
At 53 you have to have 2992 on your account
At 52 you have to have 2849 on your account
At 51 you have to have 2713 on your account
At 50 you have to have 2583 on your account


Aplikace je ve své podstatě jednoduchá a celou ji lze zjednodušit takto:

static void Main(string[] args)
{
    byte targetAge;
    byte startAge;
    int targetAmount;

    do
    {
        Console.Write("The amount you want to have at the end: ");

    } while (!int.TryParse(Console.ReadLine(), out targetAmount));


    do
    {
        Console.Write("Your age at the end: ");

    } while (!byte.TryParse(Console.ReadLine(), out targetAge));

    do
    {
        Console.Write("Your age at the beginning: ");

    } while (!byte.TryParse(Console.ReadLine(), out startAge));

    Console.WriteLine("\nCalculation  (5% p.a.):\n");
    PrintOverview(targetAge, startAge, targetAmount, 5);
}

static void PrintOverview(byte targetAge, byte startAge, int amount, int interestRate)
{
    for (; targetAge >= startAge; targetAge--)
    {
        Console.WriteLine("At {0} you have to have {1} on your account", targetAge, amount);
        amount = (int)(amount / (1 + (double) interestRate / 100));
    }
}

Samozřejmě, že počítání roční částky pomocí procent není úplně správné, ale to není zase až tak velký problém a chyba - ostatně tenhle kód je jen ilustrativní.

V aplikaci, respektive v části, co generuje roční přehled - tedy metodě PrintOverview, se ale skrývá problém, který, pokud nebude opraven,  uživatelům za jistých okolností ztrpčí život a znemožní aplikaci použít - dokážete jej najít?

3 komentáře:

  1. Když se narodím je mi nula, ne? A předtím 255. Asi reinkarnace :)

    OdpovědětVymazat
  2. To je jednoduche, když bude chtit nasporit třeba 400 mega a plat bude mit 10k mesicne, tak není realny to nasporit. Chybu tedy vidim v neosetreni vstupu.

    OdpovědětVymazat
  3. Rob to už napsal, chyba je v tom, že se nebere do úvahy přetečení signed typu.

    Výše platu se do aplikace nezadává a tedy není co ošetřovat :-)

    OdpovědětVymazat