Numeričke
metode, programiranje i statistika
1.semestar (programiranje u F90/f95)
Literatura:
-
Fortran 90 Programming,
T.M.R. Ellis, Ivor R. Philips, Thomas M. Lahey:Addison-Wesley, 1994,1995,1996.,
ISBN 0-201-54446-4
-
Fortran 90/95 Explained,
Oxford University Press (2002), ISBN 0-19-850558-2
-
Numerical Recipees in f90, on-line verzija na Los
Alamos National Laboratory
-
DIGITAL Visual Fortran Programmer's Guide,
Michael Etzel and Karen Dickinson,
DIGITAL Press, ISBN 1-55558-218-4
-
Digital Fortran Language Reference Manual
(DEC
corporation, 1997)
-
Bilo koja knjiga ili manual koji opisuje F77-F95
programske jezike
-
Zašto F90 a ne recimo C?
Literatura "on line":
-
A F90 Tutorial, 1993., On line-verzija
kratkih uputa (Z. Dodson, Univ. of New Mexico), (u PDF formatu,
kliknite ovdje).
Napomena: pisac ekstenzivno koristi DO - WHILE konstrukciju, koja je u F90
ostavljena samo zbog kompatibilnosti s F77, predlažem zamijeniti s DO - END DO
konstrukcijom.
-
High performance Fortan programming, On
line lekcije (University of Liverpool, UK, 1997.) Komercijalna upotreba je
zabranjena, što explicitno ukuljučuje
zabranu distribucije u smislu kopiranja na papir ili CD medije, te bilo koje
druge elektronske medije, WEB servere i slično, bez eksplicitnog odobrenja
autora. Kliknite ovdje
za početak!
Fortran prevodilac (compiler) i pripadne upute:
-
Možete koristiti i besplatni F95
prevodilac koi postoji na raznim platformama, s nekim ograničenjima na
veličinu programa. (Oprez: nije F77 kompatibilan, kao većina komercijalnih
prevodilaca). Za Windows NT/2000/XP downloadati treba datoteku:
f_win_mingw_031017.zip. Na Linux platformi možete koristiti i
Intel-ov prevodilac
u nekomericijalne svrhe.
-
Svi programi i primjeri testirani su s Compaq
Visual Fortran
prevodiocem, ver. 6.6B
i Intelovim prevodiocem
-
Na Unix platformama na matematičkom
odjelu instaliran je F90
prevodilac - vidi upute (npr. man F90)
-
Intel Fortran90; v.
http://developer.intel.com/software/products/compilers/
-
GNU Fortran95 (besplatni, uz
poštivanje GNU licenci) je dosupan na adresi
http://www.g95.org/. Tamo se nalazi i pripadna dokumentacija.
-
FTN95, personal edition vidi:
http://www.silverfrost.com/32/ftn95/ftn95_personal_edition.asp
-
Niz korisnih informacija o F-prevodiocima potražite na
http://www.fortran.com/
Fiksni F77 format može se prevesti u slobodni (free-form) format tako da:
-
Prevedete s F90 prevodiocem
priloženi simbolički
kod
-
Pročitajte
pažljivo upute označene
uskličnikom
u programu
-
Pokrenete program na datoteci koja sadrži linije Fortranskog koda u F77 stilu
C-kod može se prevesti u F90 kod (zip-komprimirana
datoteka s uputama i software-om)
U programiranju nemojte koristiti GO TO naredbu; razlog je najbolje opisan u:
Go To Statement Considered Harmful (Edsger W. Dijkstra)
Elementarni primjeri s vježbi i predavanja:
Kružnica
kroz tri točke,
aritmetičke
operacije, ulazno/izlazne
elementarne naredbe i inicijalizacija podataka
Tekstualni podaci, primjeri (1)
(2) (3)
(4)
Zadaci za vježbu i rješenja:
-
Napišite program za konverziju Celsiusovih u
Fahrenheitove stupnjeve (rješenje).
-
Farmer ima trokutasto polje koje želi zasijati
pšenicom. Napišite program koji učitava
duljine stranica polja u metrima i gutoću sijanja u gramima po kvadratnom
metru. Ispišite broj vreća pšenice od 10 kg koje farmer mora kupiti da
zasije cijelo polje (rješenje).
Izvedeni tipovi podataka,
primjeri (kompleksni
brojevi, pravci u
ravnini, udaljenost
točaka u prostoru)
Procedure
-
Vanjske funkcije (external
functions), primjeri (kubni
korijen, funkcija
bez parametara, tekstualne funkcije i upotreba * za varijabilne duljine
tekstualnih varijabli; ADJUSTL i
TRIM unutrašnje funkcije (1),
(2) ); vidi takodjer:
popis unutrašnjih
tekstualnih funkcija u F90
-
Subroutine (subroutines), primjeri (razni
korijeni)
-
Moduli (modules), (globalna dostupnost varijabli (1),
(2),
demonstracija atributa INTENT (što nije u redu?)
Zadaci za vježbu i rješenja:
-
Napišite program za kompleksnu aritmetiku, koji
koristi modul u kojem je definiran izvedeni tip complex_number, kojeg koriste
vanjske funkcije za zbrajanje, oduzimanje, množenje i dijeljenje kompleksnih
brojeva (rješenje).
-
U primjeru
pravci u ravnini
definirani su izvedeni tipovi točaka
i pravaca (point and lines) da bi se napisao program koji određuje
pravac kroz dvije točke. Prepišite taj primjer tako da su izvedeni tipovi
pohranjeni u modulu, a pravac određen procedurom spremljen u drugom modulu (rješenje)
Naredbe
za kontrolu toka u programu
-
IF - ENDIF (kubni
korijen iz negativnog broja,
pravci u ravnini (što treba popraviti u programu za ozbiljnu
upotrebu?), rješavanje
kvadratne jednadžbe,
program koji mijenja mala slova u velika i obratno (glavni
program pokazuje upotrebu naredbe
EXIT i
logički
IF, a
function potprogram
ilustrira upotrebu unutrašnjih funkcija ACHAR
i IACHAR).
Vidi popis unutrašnjih
tekstualnih funkcija!
-
CASE
(godišnja
doba,
rješavanje kvadratne jednadžbe)
-
DO - END DO (tablica množenja ,
puna i djelomična;
nađite
najveću,
najmanju i prosječnu
ocjenu na testu ako
su poznate individuallne ocjene studenata). Unutrašnje funkcije
HUGE i TINY
Zadaci
za vježbu i rješenja:
-
Modificirajte
primjer o sijanju pšenice (v. gore), tako da ispišete broj vreća
koji je potreban da se posije trokutasto polje kao cijeli broj,
što će se farmeru sigurno više dopasti (rješenje).
-
Napišite
program koji učitava
jedan karakter i ispisuje njegov prošireni (extended) ASCII kod. Koji se
problemi pojavljuju? Napišite i program koji ispisuje ACHAR(7). Ništa se ne
vidi, ali se nešto čuje - zašto?
-
Koristeći
CASE konstrukciju, napišite program koji učitava
cijeli broj i ispisuje da li je broj pozitivan, negativan ili nula (rješenje)
-
Poduzeće
proizvodi digitalne satove i prodaje ih za 15 funti svakog. Rabat za
višestruke narudžbe je:
Broj satova |
Rabat |
2-4 |
5% |
5-9 |
10% |
10-29 |
15% |
30-99 |
20% |
100-299 |
25% |
300+ |
30% |
Napišite program koji učitava
broj satova i ispisuje ukupnu cijenu, rabat (ako ga ima) i cijenu koju
će
platiti kupac. (rješenje)
-
Modificirajte program
najveća,
najmanja i prosječna
ocjena na testu ,akosupoznatispolovi(M=muško,F=žensko)
studenata koji su pristupili testu, a zahtijevaju se isti podaci, ali po
spolovima (rješenje)
-
Koje
rezultate daju programi (1), (2)?
Polja
-
Polja explicitnog oblika (explicit shape arrays),
program za sortiranje imena, sinusi kuteva,
polja i moduli
(ilustracija naredbe CONTAINS)
-
Polja pretpostavljenog oblika (assumed shape arrays),
primjer
-
Upotreba unutrašnjih funkcija po elementima (elemental functions),
primjer: nalaženje polja koje sadži maksimalni element iz dva polja
-
Polja odgođenog
oblika (deferred shape arrays), primjer: alokacija radnog
prostora (1), (2)
-
Upotreba
funkcija any iall, te naredbereshape;
primjer
-
Polja,
vektori i matrice (ilustracija TRANSPOSE i MATMUL unutrašnjih funkcija),
primjer
-
Množenje matrica na
klasičan način, bez MATMUL instrukcije
-
Binarno pretraživanje (nađi brzo index i za koji je a(i)<=x<a(i) za dano
x), rješenje
Zadaci
za vježbu i rješenja:
-
Kako
se ponaša funkcija LEN ako je argument polje (rješenje)
-
Napišite
program koji provjerava da li je poligon (zadan skupom
točaka)
konveksan (rješenje)
-
Test
primjer za naredbu RESHAPE
-
Napišite program koji vraća elemente polja zadanog retka u suprotnom
redoslijedu (rješenje)
INPUT/OUTPUT
-
Formatiranje izlaza (polja
i ispis);
razni primjeri za edit deskriptore (1),
(2),(3);
input s liste
-
Multi-record formatting,
primjer
iz seizmike
-
Namelist orijentirani ulaz/izlaz v. primjere: (1),(2)
[rad s datotekama], (3)
F90 još podržava primitivne printer kontrole: v.primjer
Zadaci
za vježbu i rješenja:
-
Ispis
raznog broja brojeva po liniji, v. primjer
-
Istraživanje
na uzorku od najviše 1000 ispitanika, zabilježilo je ime, godine, spol,
bračni status, visinu i težinu. Informacija je zabilježena na slijedeći
način:
Ime |
stupci 1-15 |
Prezime |
stupci 21-40 |
Spol |
u stupcu 43 (F-ženski, M-muški) |
Bračni status |
u stupcu 45: |
|
0 = samac |
|
1 = oženjen/udata |
|
2 = udovac/udovica |
|
3 = rastavljen |
|
4 = živi u vanbračnoj zajednici |
|
9 = ne zna se |
Godine starosti |
stupac 47 i 48 |
Visina (cm) |
stupci 51-53 |
Težina (kg) |
stupci 56-62 u obliku: kkk.ggg |
Podaci završavaju linijom koja ima END OF DATA u stupcima 1 do 11. Napišite i
testirajte SUBROUTINE proceduru koja čita te podatke u obliku koji je
podoban za naknadnu analizu, koja će (između ostalog) zahtijevati da visine
budu zapamćene u metrima. Modul Global_Data sadrži podatke za tip osobe
(izvedeni tip: person) (rješenje).
-
Eksperimentalni aparat prati radioaktivni raspad uzorka. U aproksimativno
pravilnim intervalima bilježi vrijeme od početka eksperimenta (u stotinkama
sekunde), broj
a-čestica
koje se emitiraju u promatranom intervalu,
b-čestica,
i količinu
g-radijacije
u istom periodu. Podaci se spremaju kao osmero znamenkasti broj i 3 šestero
znamenkasta broja. Između svakog broja je 5 praznih mjesta. Napišite program
koji učitava te podatke i ispisuje tablicu koja sadrži slijedeću informaciju:
broj svakog intervala, duljinu intervala, tri čitanja koja su dobivena i
prosječnu emisiju
a
i
b
čestica i
g-
zraka u sekundi, za vrijeme trajanja intervala. Nakon 1000 vremenskih intervala
ispišite onaj koji je imao najveću emisiju
g
radijacije (rješenje)
Datoteke
Formatirane datoteke (formatted files). Treba znati
sintaksu i upotrebu naredbi: OPEN, CLOSE, BACKSPACE, REWIND, ENDFILE u
kombinaciji s formatiranim pisanjem (WRITE) i čitanjem (READ).
Zadaci
za vježbu i rješenja:
-
Modificirajte RADIOACTIVE.F90 u zadatku (3) tako da se podaci mogu procitatis
iz datoteke na magnetskom disku (rješenje)
-
Istraživanje služi da bi se napravila statistika o radnim mjestima ljudi u
nekom području. Rezultati istraživanja su u slijedećem formatu:
Stupci 1-20 |
Ime |
Stupac 23 |
Spol (F/M) |
Stupac 25 |
Status posla: = 1 (u izobrazbi kao student i sl.) |
|
= 2 (puno vrijeme zaposlen) |
|
= 3 (zaposlen s pola radnog vremena) |
|
= 4 (privremeno nezaposlen) |
|
= 5 (ne radi ili traži posao) |
Ove podatke slijedi jedan ili više podataka, u ovisnosti o statusu posla:
Status posla=1 |
stupci 28,29 |
starost |
Status posla=2 |
stupci 28-31 |
mjesečna zarada |
Status posla=3 |
stupci 28-31 |
mjesečna zarada |
|
stupci 34-37 |
drugi mjesečni doprinosi |
Status posla=4 |
stupci 28,29 |
starost |
|
stupci 32-34 |
broj mjeseci u statusu nezaposlenosti |
Status posla=5 |
stupci 28,29 |
starost |
|
stupac 31 |
kod = 1 ako čuva djecu |
|
|
= 2 ako čuva druge rođake |
|
|
= 3 bilo koji drugi razlog |
Budući da su podaci u datoteci, nije potreban nikakav specijalni završni slog,
budući da već postoji end-of-file slog (rješenje)
NUMERIČKE
METODE I PROGRAMI
u F90 nalaze se na stranici: http://www.math.hr/~rogina/nmps/F90num.html
Zadnja verzija:
25 September 2008