Nmax ~ 1000 0 < n < 4000 n ~ 106

Transkrypt

Nmax ~ 1000 0 < n < 4000 n ~ 106
Z ADANIA Z P ODSTAW P ROGRAMOWANIA (F ORTRAN 90/95)
Zestaw II - na kwiecień 2004
Wskazówka do Zadania 2. Program obliczajacy
˛ średnia˛ arytmetyczna˛ powinien czytać dane
ze standardowego wejścia do wystapienia
˛
znaku końca pliku i zapisywać je w tablicy jed (zadeklarowanym jako stała). Znak końca pliku
nowymiarowej o rozmiarze
wprowadzamy z klawiatury kombinacja˛ klawiszy Ctrl–D, w przypadku użycia potoku (np.
./a.out < mojedane.dat) dane b˛eda˛ czytane po prostu do końca pliku wejściowego. Prosz˛e
zapoznać si˛e ze znaczeniem argumentu iostat przy wywołaniu instrukcji read.
6. Konwersja liczb arabskich na rzymskie (i w druga˛ stron˛e). Do wykonania tego zadania przyda sie znajomość instrukcji typu
write (unit=*, fmt=”(a)”, advance=”no”) “M”
która wypisuje napis (w tym wypadku: “M”) bez przechodzenia do nowej linii, co
pozwala w prosty sposób “skleić” np. liczb˛e MCMLXXXIX z elementów M, CM, LXXX
i IX. Ambitniejsze rozwiazanie
˛
tego problemu (niezb˛edne do przeprowadzenia konwersji w odwrotnym kierunku) wymaga użycia zmiennych napisowych i operacji na
nich. Mile widziana byłaby wersja programu, która sama rozpoznaje, czy na wejście
wprowadzono liczb˛e rzymska˛ (a wi˛ec napis) czy arabska˛ (liczba całkowita) i dokonuje
.
odpowiedniej konwersji. Wymagany zakres liczb:
7. Mnożenie dużych liczb naturalnych. Napisać program wczytujacy
˛ z klawiatury dwie
duże liczby naturalne (jako napisy) i drukujacy
˛ ich iloczyn na ekran. Przez “duże”
rozumiemy liczby przekraczajace
˛ zakres zmiennej typu integer.
8. Sito Erastotenesa. Poszukać informacji na temat algorytmu sita Erastotenesa i napisać
program znajdujacy
˛ wszystkie liczby pierwsze mniejsze od zadanej wartości.
9. Kalendarz. Napisać program wczytujacy
˛ dat˛e w formacie dzień, miesiac,
˛ rok i obliczajacy
˛ dzień tygodnia (pami˛etać o konieczności uwzgl˛ednienia lat przest˛epnych). Można
także dodać opcj˛e wypisywania pełnego kalendarza na zadany miesiac
˛ (w formie znanej
z kalendarzy ściennych).
10. Obliczanie liczby metoda˛ Monte Carlo. Prosz˛e zapoznać si˛e z działaniem instrukcji
random_number(x), służacej
˛ do generacji liczb pseudolosowych. Nast˛epnie wygene
%$ ! ! &' .
rować ciag
˛
punktów należacych do kwadratu "! #!
.
'
Wiedzac,
˛ że prawdopodobieństwo trafienia w koło )(+*,-(
wynosi 0/ wyz
naczyć przybliżona˛ wartość liczby na podstawie ułamka 12/ , gdzie 1 oznacza liczb˛e
trafień we wn˛etrze koła. Na podstawie informacji na temat prób Bernouliego wyznaczyć bład
Przeprowadzić opisane obliczenia dla kilku wartości
4356
87 ˛
89 takiego
6:6:6oszacowania.
: i różnych podstaw generatora (wczytywanych z klawiatury).
11. Całkowanie numeryczne. W tzw. metodzie trapezów przybliżamy wartość całki oznaczonej suma:
˛
* - / * - * :
˛ wartość całki ta˛ metoda.˛ Istotnym elementem jest
Prosz˛e napisać program obliczajacy
).
oszacowanie bł˛edu takiego rachunku (np. poprzez powtórzenie oblicze ń dla
Definicj˛e funkcji można umieścić w osobnym pliku źródłowym (tak aby całość
programu nie musiała być kompilowana za każdym razem), a do kompilacji wykorzystać komend˛e systemowa˛ make (to zagadnienie b˛edzie omówione na jednych z najbliższych zaj˛eć). Warto także napisać wersj˛e programu wykorzystujac
˛ a˛ metod˛e Simpsona
i porównać ich dokładność.
12. Wyznaczanie zer funkcji metoda˛ bisekcji. Ta prosta metoda numeryczna jest opisana
wyczerpujaco
˛ w ksiażce:
˛
K.Rościszewski, R.Wit, Nauka Fortranu 90/95 przez przykłady.
Prosz˛e, podobnie jak w poprzednim zadaniu, umieścić definicj˛e funkcji w osobnym pliku źródłowym.

Podobne dokumenty