Monika Dekster

Laboratorium 4. Operacje na tekstach. Tablice.

Zadania

  1. Próba Bernoulliego to eksperyment losowy z dwoma możliwymi wynikami, np. rzut monetą z wynikami 0 (reszka, porażka), 1 (orzeł, sukces). Przyjmujemy, że moneta nie jest symetryczna, tzn. zadajemy, jakie jest prawdopodobieństwo p wyniku 1 (dla monety symetrycznej byłoby równe 0.5). Symulację takiego eksperymentu należy zrealizować stosując biblioteczny generator liczb pseudolosowych.

    Należy przyjąć, że wynik próby jest równy 1 gdy wylosowana z przedziału [0, RAND_MAX] liczba jest mniejsza od p * (RAND_MAX+1).

    Napisz funkcję bernoulli_gen(...), która generuje losowo tablicę n prób bernoulliego. Elementami tej tablicy mają być wyniki prób.

    Definicje: https://en.wikipedia.org/wiki/Bernoulli_sampling

    Wejście: n p
    Wyjście: Wylosowana tablica liczb binarnych.

    Przykład:

    Wejście: 20 0.3
    Wyjście: 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0

  2. Napisz funkcję pmf(...) (probability mass function), która symuluje wykonanie n rzutów dwoma kostkami i zapisuje wartości otrzymanego przybliżonego rozkładu prawdopodobieństwa w tablicy. Losując liczbę oczek jednej kostki -- dla uzyskania powtarzalności wyników -- należy raz wywołać funkcję rand() i jej wynik sprowadzić do przedziału [1,6].

    Napisz również funkcję print_histogram(double v[], int n, int x_start, double y_scale), która w trybie znakowym przedstawia histogram funkcji o n wartościach zapisanych w argumencie v. Należy przyjąć założenia:

    1. Oś zmiennej niezależnej jest pionowa, skierowana w dół. Oś zmiennej zależnej jest pozioma, skierowana w prawo (nie jest rysowana).
    2. Wartości zmiennej niezależnej są kolejnymi liczbami naturalnymi, począwszy od x_start. Są one pisane od pierwszej lewej kolumny, w polu o szerokości 2 znaków z wyrównaniem w prawo.
    3. W trzeciej kolumnie wyprowadzane są znaki '|' tworząc oś x.
    4. Począwszy od 4. kolumny pisane są znaki '*'. Liczba znaków jest przeskalowaną i zaokrągloną wartością funkcji. Parametr y_scale jest wartością zmiennej zależnej odpowiadającej szerokości jednego znaku na wykresie.
    5. Wartości funkcji (liczby nieujemne typu double) są wyprowadzane z dokładnością do 3 cyfr po kropce dziesiętnej w każdym wierszu, po jednej spacji na prawo od ostatniego znaku '*'.

    Definicje: https://en.wikipedia.org/wiki/Probability mass function

    Wejście: m
    Wyjście: Dyskretny rozkład prawdopodobieństwa wyrażający prawdopodobieństwo wyrzucenia każdej z liczb od 2 do 12.

    Przykład:

    Wejście: 1000
    Wyjście:
     2 |***** 0.024
     3 |************** 0.068
     4 |******************* 0.094
     5 |************************ 0.120
     6 |**************************** 0.140
     7 |********************************* 0.165
     8 |************************* 0.125
     9 |******************* 0.096
    10 |***************** 0.083
    11 |********** 0.051
    12 |******* 0.034

  3. Proszę napisać program, który w zależności od podanej opcji (podanej z linii komend) albo:

    1. wczytuje tekst złożony z małych liter alfabetu łacińskiego ('a' do 'z'),
    2. dokonuje kompresji tekstu, zastępując sekwencje tych samych liter ciągiem [nX], gdzie n jest licznikiem powtórzeń znaku X,
    albo:
    1. wczytuje uprzednio skompresowany tekst
    2. dokonuje jego dekompresji
    Przykład (kompresja):
    Wejście: abcccdeeffffg
    Wyjście: ab[3c]d[2e][4f]g