Losowy błąd wykonania

0

Cześć :)
Potrzebuję prościutki program taki, który powoduje bład wykonania, ale tak, aby pojawiał się on losowo. Tzn. Rozkład prawdopodobieństwa nie ma znaczenia, tj. żeby przynajmniej raz na 100 razy się wysypał. Najważniejsze jednak, aby ten błąd uwidaczniał się w postaci crasha "w zależności od pogody", a nie zawsze. Te, które pisałem zawsze się uwidaczniają, albo prawie zawsze.

4

Oczekujesz pomocy czy rozwiązania za Ciebie?

  1. Jeśli pomocy: pokaż kod, staraj się zastosować do Dlaczego nikt nie odpowiada w moim wątku?
  2. Jeśli wykonania za Ciebie: http://4programmers.net/Forum/Og%C5%82oszenia_drobne (jestem w stanie wykonać zadanie za zaledwie 250zł)
0

To nie wystarczy jakieś:

if(rand%10 == 0){
  int * ptr = 0x1234;
  *ptr = 1234;
}

? ;]

0

Nie wiem czy to co niżej wystarczająco dobrze zobrazuje z czym się może wiązać praca programisty i ewentualne losowe albo i nie błędy.

#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;

double pressure(int height, double p0, double temperature)
{
    const double u = 0.0289644;
    const double g = 9.81;
    const double R = 8.3144598;
    return p0 * exp(-(u * g * height) / (R * temperature));
}

bool random_fail(double probability)
{
    double result = rand() / RAND_MAX;

    if (result < probability)
    {
        return true;
    }
    return false;
}

int main()
{
    int height = 4000;
    int speed = 50;
    int parachute_speed = 1;
    double p0 = 1013.25;
    double temp = 293;
    int main_parachute_open_height = 1000;
    int reserve_parachute_open_height = 500;
    bool main_parachute_action = false;
    bool reserve_parachute_action = false;
    bool main_parachute_failed = false;
    bool reserve_parachute_failed = false;
    double main_parachute_fail_probability = 0.1;
    double reserve_parachute_fail_probability = 0.01;
    double landing_die_probability = 0.5;

    while (height > 0)
    {
        cout << "Height: " << height << " m, pressure: " << pressure(height, p0, temp) << " hPa"  << "\n";

        if ((height <= main_parachute_open_height) && (!main_parachute_action))
        {
            try
            {
                if (random_fail(main_parachute_fail_probability))
                {
                    main_parachute_failed = true;
                    throw 1;
                }
                speed = parachute_speed;
                cout << "Main parachute opened successfully :)\n";
            }
            catch (int e)
            {
                cout << "Main parachute opening failed. Using reserve parachute.\n";
            }
            main_parachute_action = true;
        }

        if (main_parachute_failed && (height <= reserve_parachute_open_height) && (!reserve_parachute_action))
        {
            try
            {
                if (random_fail(reserve_parachute_fail_probability))
                {
                    reserve_parachute_failed = true;
                    throw 1;
                }
                speed = parachute_speed;
                cout << "Reserve parachute opened successfully :)\n";
            }
            catch (int e)
            {
                cout << "Reserve parachute opening failed!!!\n";
            }
            reserve_parachute_action = true;
        }

        Sleep(1000);
        height -= speed;
    }

    cout << "Height: " << height << " m, pressure: " << pressure(height, p0, temp) << " hPa"  << "\n";
    if (reserve_parachute_failed)
    {
        if (random_fail(landing_die_probability))
        {
            cout << "Jumper died!!!";
        }
        else
        {
            cout << "Jumper survived :)";
        }
    }

    return 0;
}

Oczywiście jest tu wiele innych opcji. Nie wiem czy te wartości progowe są OK, nie jestem skoczkiem spadochronowym i tylko coś o tym czytałem, więc jakby co poprawcie :-) Ale biada jeśli automat otwierający spadochron zapasowy byłby sterowany jakimś oprogramowaniem, które losowo by się wysypało przez nie wiadomo jaki błąd. To samo z ciśnieniowym pomiarem wysokości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1