Losowanie z prawdopodobieństwem

0

Witam
Poszukuje skryptu w C# , który losuje liczby z prawdopodobieństwem.
Widział ktoś może coś takiego gotowego gdzieś lub napisałby za małą opłatą.
Chodzi mi o to , że mam F3/F4/F5 i F5 ma losowac w 70% , F3 20% i F4 10%.

Najlepiej jakby do tego skrypt nacisnął po zrobieniu losowania wynik czyli np. F3 na klawiaturze.

0

Losowanie z prawdopodobieństwem to w istocie:

n = (pseudo)losowa liczba od 1 do 10, przy rozkładzie jednostajnym

jeśli n >= 1 oraz n <= 7
  wylosowano F5

jeśli n >= 8 oraz n <= 9
  wylosowano F3

w przeciwym razie
  wylosowano F4

Z czym konkretnie masz problem:?

Bo Widział ktoś może coś takiego gotowego gdzieś lub napisałby za małą opłatą. brzmi jak prośba o gotowca, a one przynależą do działu Ogłoszenia drobne.

0

A da rade dodac , zeby skrypt jeszcze nacisnal z klawiatury wylosowana liczba w tym przypadku f4 czy tam f5? W c#

0

Wylosuj sobie liczbę modułem Random z zakresu od 0 do 100.

Na tej podstawie kilkoma ifami określisz, który F ma być wciśnięty. Jeśli losowa liczba <= 70 to F5, else if <= 90 to F3, else F4.

0

Dałem ogłoszonko :

https://4programmers.net/Forum/Og%C5%82oszenia_drobne/311708-zlece_skrypt_losujacy_liczby?p=1495711#id1495711

Jak dla Panów to taka banalna sprawa to może ktoś za niewielką opłatą by się podjął prostego skryptu :)?

Samemu niestety jestem zielony znam podstawy HTML CSS PHP , ale tutaj raczej sobie nie poradze chyba , że ktoś posiada gotowy taki skrypt.

0

To chyba służy do symulowania naciśnięć klawiszy:

https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx

0

public class Program
{
public static void Main()
{
System.Windows.Forms.MessageBox.Show("test");
}
}

Skrypt koniecznie musze osadzic w czyms takim
To ma byc dodatek do macro , ktore udostepnia wstawienie kawalka kodu w C#.
Inaczej nie jestem w stanie tego zrobic niz programowo czyli wyszukac F3 lub F4 i potem to nacisnac.

0

A w jakich sytuacjach ma następować losowanie i wciskanie klawisza? Co jakiś odstęp czasu, czy skrócie klawiszowym? Ten F będzie wciskany dla innej aplikacji?

0

Leci sobie macro.

Macro odpala skrypt c#(bo jest taka opcja)
Skrypt losuje powiedzmy F3 pobiera te F3 i klika je na klawiaturze.
Jak ustawie na sztywno w macro f3 czy f5 to zmienia rozdzielczosc.
Zewnętrzny program odpalony w tle dostaje F3(zmienia rozdzielczośc bo tak ustawiłem hotkey na F3 czy F4) i to tyle.

Chodzi o wylosowanie z prawdopodobieństwem własnie F3 czy F4 i naciśniecie nic wiecej.

0

Ok, postaram się coś później zrobić.

0
static void Perform()
{
    var keyManager = new Dictionary<string, Propability>();
    keyManager.Add("F3", new Propability(0.7));
    keyManager.Add("F4", new Propability(0.2));
    keyManager.Add("F5", new Propability(0.1));

    var rnd = new Random();

    var rndValue = rnd.NextDouble();
    foreach (var key in keyManager.Keys)
    {
        var value = keyManager[key];
        if (value.Ratio > rndValue)
        {
            // wcisnij przycisk
            break;
        }
    }
}
0

Panie Pomidor bardzo dziękuje za odpowiedź i mam pytanie.
On tez klika ?

I pytanko jak to osadzić w takim czymś ?
Jest Pan w stanie pomóc ?

public class Program
{
	public static void Main()
	{
		System.Windows.Forms.MessageBox.Show("test");
	}
}

Macro wymaga takiego formatu zapytania.
Da radę tutaj podstawić ten kod czy to trochę inna bajka?

0
Stranek napisał(a):

Panie Pomidor bardzo dziękuje za odpowiedź i mam pytanie.
On tez klika ?

Nie wiem, sprawdz:

static void Perform()
{
    var keyManager = new Dictionary<string, double>();
    keyManager.Add("F3", 0.7);
    keyManager.Add("F4", 0.2);
    keyManager.Add("F5", 0.1);

    var rnd = new Random();

    var rndValue = rnd.NextDouble();
    foreach (var key in keyManager.Keys)
    {
        var value = keyManager[key];
        if (value > rndValue)
        {
            SendKeys.Send(key);
            break;
        }
    }
}
0
Stranek napisał(a):

Panie Pomidor bardzo dziękuje za odpowiedź i mam pytanie.
On tez klika ?

I pytanko jak to osadzić w takim czymś ?
Jest Pan w stanie pomóc ?

public class Program
{
	public static void Main()
	{
		System.Windows.Forms.MessageBox.Show("test");
	}
}

Macro wymaga takiego formatu zapytania.
Da radę tutaj podstawić ten kod czy to trochę inna bajka?

No to zawartosc metody Perform() wrzuc do metody main

0

Chciałbym powiedzieć , że nie jestem programistą ani na takiego nie aspiruje.
Zrobiłem proste macro , do którego działania potrzebuje właśnie tego kodu , który Pan wysłał za co jeszcze raz dziękuje bo nie spodziewałem się , że ktoś mi go udostępni za darmo na forum.
Staram się pozmieniać jakoś po swojemu , ale mam to co na screenie.

0
Stranek napisał(a):

Chciałbym powiedzieć , że nie jestem programistą ani na takiego nie aspiruje.
Zrobiłem proste macro , do którego działania potrzebuje właśnie tego kodu , który Pan wysłał za co jeszcze raz dziękuje bo nie spodziewałem się , że ktoś mi go udostępni za darmo na forum.
Staram się pozmieniać jakoś po swojemu , ale mam to co na screenie.

Ten blad sugeruje, ze w 22 linijce brakuje znaku }

0
public class Program
{
	public static void Main()
	
		{
    var keyManager = new Dictionary<string, double>();
    keyManager.Add("F3", 0.7);
    keyManager.Add("F4", 0.2);
    keyManager.Add("F5", 0.1);
 
    var rnd = new Random();
 
    var rndValue = rnd.NextDouble();
    foreach (var key in keyManager.Keys)
    {
        var value = keyManager[key];
        if (value > rndValue)
        {
            SendKeys.Send(key);
            break;
        }
    }
}
	}
}

Mam takie coś i teraz to co na screenie nowym na dole.

0
Stranek napisał(a):
public class Program
{
	public static void Main()
	
		{
    var keyManager = new Dictionary<string, double>();
    keyManager.Add("F3", 0.7);
    keyManager.Add("F4", 0.2);
    keyManager.Add("F5", 0.1);
 
    var rnd = new Random();
 
    var rndValue = rnd.NextDouble();
    foreach (var key in keyManager.Keys)
    {
        var value = keyManager[key];
        if (value > rndValue)
        {
            SendKeys.Send(key);
            break;
        }
    }
}
	}
}

Mam takie coś i teraz to co na screenie nowym na dole.

Usun ostatni }

0
public class Program
{
	public static void Main()
	
		{
    var keyManager = new Dictionary<string, double>();
    keyManager.Add("F3", 0.7);
    keyManager.Add("F4", 0.2);
    keyManager.Add("F5", 0.1);
 
    var rnd = new Random();
 
    var rndValue = rnd.NextDouble();
    foreach (var key in keyManager.Keys)
    {
        var value = keyManager[key];
        if (value > rndValue)
        {
            SendKeys.Send(key);
            break;
        }
    }
}
	}

Usunąłem .
Kodzik wygląda następująco , ale dostaje takie coś.

0

Zobacz tak:

public class Program
{
    public static void Main()

    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("F3", 0.7);
        keyManager.Add("F4", 0.2);
        keyManager.Add("F5", 0.1);

        var rnd = new System.Random();

        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
                System.Windows.Forms.SendKeys.Send(key);
                break;
            }
        }
    }
}
0

Juz teraz bez bledow.
Takie cos dostaje , ale nie klika cos

0

A wtedy dzialalo?

0

Nie klikało ani teraz ani wcześniej.
Teraz nie ma błędów jest to co wysłałem w ostatnim poście a okienko wygląda tak od macro jest Run CSHARP(Nie wiem to coś zmienia)

Dzięki za poświęcony czas na odpowiadanie mi :)

0

usun linijke z System.Windows.Forms.SendKeys.Send(key); i zobacz, czy wtedy tez blad wyskakuje.

0

Nie wyskoczył bląd żaden , ale rozumiem , że ta linijka odpowiadała za naciśniecie przycisku ?
Jesli tak i nie da sie tego nacisnac z x powodu to moze da rade skopiowac ctrl+c wynik czyli np. f3 ?

0

Tak, zastap wiec ta linijke tym: System.Windows.Forms.Clipboard.SetText(key);

0

Przecież na stronie dokumentacji, którą podałem są kody dla F'ów....
{F1} {F2} itd. https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx
A Wy ciągle macie wpisane bez klamerek.

0

Kod od Pomidora zadziałał !

Bardzo dziękuje za pomoc.

A co do kliknięcia może ktoś ma jakiś pomysł czemu może nie działać :)?

0

Sprobuj z: System.Windows.Forms.SendKeys.Send("{" + key + "}");

0

Przechodzi , ale nie klika.
Co do tekstu to kopiuje pieknie rozne wyniki :)

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