Numeričke metode, programiranje i statistika

1.semestar (programiranje u F90/f95)

Literatura:

  1. Fortran 90 Programming, T.M.R. Ellis, Ivor R. Philips, Thomas M. Lahey:Addison-Wesley, 1994,1995,1996., ISBN 0-201-54446-4
  2. Fortran 90/95 Explained, Oxford University Press (2002), ISBN 0-19-850558-2
  3. Numerical Recipees in f90, on-line verzija na Los Alamos National Laboratory
  4. DIGITAL Visual Fortran Programmer's Guide, Michael Etzel and Karen Dickinson, DIGITAL Press, ISBN 1-55558-218-4

  5. Digital Fortran Language Reference Manual (DEC corporation, 1997)

  6. Bilo koja knjiga ili manual koji opisuje F77-F95 programske jezike
  7. Zašto F90 a ne recimo C?

Literatura "on line":

  1. 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.
  2. 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:

  1. 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.
  2. Svi programi i primjeri testirani su s Compaq Visual Fortran prevodiocem, ver. 6.6B i Intelovim prevodiocem
  3. Na Unix platformama na matematičkom odjelu instaliran je F90 prevodilac - vidi upute (npr. man F90)
  4. Intel Fortran90; v. http://developer.intel.com/software/products/compilers/
  5. GNU Fortran95 (besplatni, uz poštivanje GNU licenci) je dosupan na adresi http://www.g95.org/. Tamo se nalazi i pripadna dokumentacija.
  6. FTN95, personal edition vidi: http://www.silverfrost.com/32/ftn95/ftn95_personal_edition.asp
  7. 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:

  1. Prevedete s F90 prevodiocem priloženi simbolički kod
  2. Pročitajte pažljivo upute označene uskličnikom u programu
  3. 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čkearitmetičke operacije, ulazno/izlazne elementarne naredbe i inicijalizacija podataka

Tekstualni podaci, primjeri (1) (2) (3) (4)

Zadaci za vježbu i rješenja:

  1. Napišite program za konverziju Celsiusovih u Fahrenheitove stupnjeve (rješenje).
  2. 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

  1. 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
  2. Subroutine (subroutines), primjeri (razni korijeni)
  3. Moduli (modules), (globalna dostupnost varijabli (1), (2), demonstracija atributa INTENT (što nije u redu?)

Zadaci za vježbu i rješenja:

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

  1. 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!
  2. CASE (godišnja doba, rješavanje kvadratne jednadžbe)
  3. 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:

  1. 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).
  2. 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?
  3. Koristeći CASE konstrukciju, napišite program koji učitava cijeli broj i ispisuje da li je broj pozitivan, negativan ili nula (rješenje)
  4. 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)
  5.  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)
  6. Koje  rezultate daju programi (1), (2)?

 Polja

  1. Polja explicitnog oblika (explicit shape arrays), program za sortiranje imena, sinusi kuteva, polja i moduli (ilustracija naredbe CONTAINS)
  2. Polja pretpostavljenog oblika (assumed shape arrays), primjer
  3. Upotreba unutrašnjih funkcija po elementima (elemental functions), primjer: nalaženje polja koje sadži maksimalni element iz dva polja
  4. Polja odgođenog oblika (deferred shape arrays), primjer: alokacija radnog prostora  (1), (2)
  5. Upotreba funkcija any iall, te naredbereshape; primjer
  6. Polja, vektori i matrice (ilustracija TRANSPOSE i MATMUL unutrašnjih funkcija), primjer
  7. Množenje matrica na klasičan način, bez MATMUL instrukcije
  8. 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:

  1. Kako se ponaša funkcija LEN ako je argument polje  (rješenje)
  2. Napišite program koji provjerava da li je poligon (zadan skupom točaka) konveksan (rješenje)
  3. Test primjer za naredbu RESHAPE
  4. Napišite program koji vraća elemente polja  zadanog retka u suprotnom redoslijedu (rješenje)

 INPUT/OUTPUT

  1. Formatiranje izlaza (polja i ispis); razni primjeri za edit deskriptore (1), (2),(3); input s liste
  2. Multi-record formatting, primjer iz seizmike
  3. 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:

  1. Ispis raznog broja brojeva po liniji, v. primjer
  2. 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).
  3. 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:

  1. Modificirajte RADIOACTIVE.F90 u zadatku (3) tako da se podaci mogu procitatis iz datoteke na magnetskom disku (rješenje)
  2. 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