Laboratorium 4 Zad. 1 Napisać funkcję bariera2(v,x) o takim samym

Transkrypt

Laboratorium 4 Zad. 1 Napisać funkcję bariera2(v,x) o takim samym
Laboratorium 4
Zad. 1
Napisać funkcję bariera2(v,x) o takim samym działaniu jak funkcja bariera(v,x) z laboratorium 3 (Zad.
3) sotującą pętlę for. Porównać poleceniem tic …toc czas działania obu tych funkcji.
Zad. 2
Napisać funkcję MaxPrzek(A), która zwraca wektor liczb będących maksymalnymi wartościami w
przekątnych (idąc od górnych do dolnych przekątnych). Zastosować pętlę for.
Zad. 3
Napisać funkcję Granica(ep), która obliczy pierwszy wyraz ciągu 1/n (oraz jego numer N), oddalony
od granicy ciągu (czyli od liczby 0) o mniej niż ep. Zastosować pętlę while. W przypadku, gdy
argument ep będzie liczbą niedodatnią, funkcja powinna wyświetlić ‘Błąd: Niedodatnia wartość
zmiennej ep = ….!’. W przypadku dobrym, funkcja powinna wyświetlić ‘Pierwszy wyraz ciągu 1/n
mniejszy od ep = ….., to wyraz o numerze N = ….., wynoszący y = …. ’. Funkcja nie powinna nic
zwracać, tylko wyświetlać odpowiednie napisy (w miejsce kropek, oczywiście konkretne liczby!).
Zadanie domowe
(Dwa tygodnie na oddanie)
Zad. 1
Ponownie napisać funkcję Silnia(A), działającą tak samo jak w zad.3 z laboratorium 3. Funkcja tym
razem ma nie korzystać z żadnych pętli, pętli ukrytych, jakichkolwiek rekurencji. Ponadto nie można
stosować funkcji Matlaba factorial i cumprod.
Zad. 2
Sito Eratostenesa to algorytm wyznaczania liczb pierwszych z przedziału [2,n]. Działa on w
następujący sposób: Dla 2 wyrzucamy spośród liczb naturalnych z wektora [3,n] wszystkie krotności
liczby 2, następnie dla 3 wyrzucamy spośród liczb naturalnych [4,n], wszystkie krotności liczby 3, itd.
aż do liczby [sqrt(n)] (część całkowita z pierwiastka z n) wyrzucamy spośród liczb naturalnych
[[sqrt(n)]+1,n], wszystkie krotności liczby [sqrt(n)]. Po takiej operacji z wektora [2,n] pozostaną tylko
liczby pierwsze >=2 i <=n. Napisać funkcję Esito(n), która jest sitem Eratostenesa i zwraca wektor liczb
pierwszych >=2 i <=n. Zastosować pętlę for. Dla sprawdzenia czy napisana funkcja działa dobrze
porównać jej działanie z funkcją Matlaba primes(n).
Zad. 3
Napisać funkcję Esito2(n), korzystającą z funkcji Esito(n) z zad. 2, która zwraca n pierwszych liczb
pierwszych. Zastosować pętlę while.
Zad. 4
Napisać funkcję Esito3(n), działającą tak samo jak funkcja Esito(n) z zad. 2, ale nie korzystającej z
żadnej pętli, pętli ukrytych czy jakichkolwiek rekurencji. Dla sprawdzenia czy napisana funkcja działa
dobrze porównać jej działanie z funkcją Matlaba primes(n).
Zad. 5
Napisać funkcję TPascal(n), która zwraca n-ty wiersz trójkąta Pascala. Przyjmujemy, że pierwszy
wiersz to 1, drugi wiersz to [1, 1], trzeci wiersz to [1, 2, 1] itd. Program ma nie liczyć żadnych silni,
tylko skorzystać z tego że wyrazy kolejnego wiersza w trójkącie Pascala są sumą dwóch wyrazów z
powyższego wiersza (które są nad nim). Można użyć co najwyżej tylko jednej pętli for.
Zad. 6
Napisać funkcję Moneta(p,ep). Funkcja ma działać następująco: Liczba p (zakładamy że jest
podawana z przedziału (0,1)) to prawdopodobieństwo wypadnięcia orła, wtedy taki rzut oznaczamy
wartością 1. Wypadnięcie orła następuje z prawdopodobieństwem p gdy spełniony jest warunek if
rand<p, wtedy funkcja powinna przypisać wartość 1. W przeciwnym wypadku (reszka) funkcja
powinna przypisać rzutowi wartość 0. Po każdym rzucie (począwszy od pierwszego) i przypisaniu jego
wynikowi 0 lub 1 (reszka lub orzeł) funkcja powinna liczyć tzw. średnią liczbę wypadnięcia orłów,
która jest liczbą orłów (sumą liczb 1) wśród n dotychczasowych rzutów podzieloną przez liczbę n-ilość
tych dotychczasowych rzutów. Czyli np. po n=3 rzutach monetą, mamy przykładowy wektor [1,0,1]
(czyli orzeł, reszka, orzeł) i średnia liczba orłów wynosi wtedy (1+0+1)/3=2/3. Funkcja powinna tak
długo rzucać monetą aż średnia liczba orłów będzie różniła się od liczby p o mniej niż ep (zakładamy,
że ep to podawana liczba dodatnia). Funkcja powinna: zwrócić tę średnią liczbę orłów, liczbę p, ich
różnicę bezwzględną (która powinna być < ep), liczbę ep, oraz liczbę ile rzutów zostało wykonanych.
Funkcja powinna też wyświetlić wektor zero-jedynkowy przedstawiający wyniki rzutów. Zastosować
pętlę while. Zauważyć, że w przypadku gdy p=1/2 (czyli moneta „sprawiedliwa”), średnia liczba orłów
powinna (wraz ze wzrostem liczby rzutów monetą) zbliżać się do liczby p=1/2. Innymi słowy, w
przypadku monety „sprawiedliwej”, gdy liczba rzutów monetą rośnie, średnio powinniśmy mieć
połowę wyników orłów (co intuicyjnie powinno być zrozumiałe).