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).