programiranje u fortranu

15
1 Univerzitet u Tuzli Mašinski fakultet RAČUNARI I PROGRAMIRANJE Fortran 90, osnove Dr. Salko Ćosić april 2013

Upload: karbon1

Post on 29-Sep-2015

90 views

Category:

Documents


8 download

DESCRIPTION

Programiranje u fortranu, zadatci i teorija

TRANSCRIPT

  • 1

    Univerzitet u Tuzli Mainski fakultet

    RAUNARI I PROGRAMIRANJE

    Fortran 90, osnove

    Dr. Salko osi

    april 2013

  • 2

    Algoritmi sortiranja nizova

    Matrice, deklaracija, manipulacije, primjeri Algoritmi sortiranja

    Buble sort (broj elementarnih operacija O~ n2)

    Sortiranje umetanjem (insertation sort)

    Shell sort

    Mergesort O~ n log2n

    Quicksort (broj elementarnih operacija O~ n log2n)

  • 3

    Sortiranje umetanjem (insertation sort) Polazi se od drugog lana, isti se uporeuje sa prethodnim pocevsi od prvog i stavlja na mjesto prvog veeg lana, potiskujuci ostale lanove naprijed (desno). Procedura se ponavlja za naredni lan (treci, etvrti... poslednji). --- VIDEO

    Brzi i napredniji od buble sort, primjenjuje se za manje nizove. Zadatak: nacrtati algoritam i napisati program za sortiranje prema ovom algoritmu.

    Sortiranje: Mergesort podjela-spajanje O~ n log2n

  • 4

    Quick sort najbri algoritam 1. Izbor vodeeg lana (sluajni izbor, obino lan iz sredine niza, pivot) 2. Razvrstavanje preostalih lanova na vee i manje (izabrani lan time dobija

    svoju konanu poziciju u nizu. 3. Ponavlja se 1 i 2 za podnizove sa manjim i veim lanovima (Hoare 1962)

    Tea implementacija, unaprijed nepoznate veliine (broj lanova) podnizova VIDEO: Funkcije za rad sa nizovima: maxval, minval, sum... QS broj poreenja=9; BS 15 poreenja

  • 5

    MATRICE: Deklaracija matrice: tip (veliina varijable) ime (format) Real(8) temperatura (8,4) prekoraenje formata = greka Primjer 1: transponovanje zadate matrice

  • 6

    Program transponovanje

    ! ovaj program transponuje datu matricu

    Implicit none

    integer:: i,j;

    Real:: A(3,3), AT(3,3);

    Print*,'unesi clanove matrice A po redovima'

    Do i=1,3

    Read*,A(i,1),A(i,2),A(i,3)

    End do

    ! racunanje transponovane matrice

    Do i=1,3

    Do j=1,3

    AT(i,j)=A(j,i)

    End do

    End do

    Print*,' osnovna i transponovana matrica su'

    Do i=1,3

    write(*,10)A(i,1),A(i,2),A(i,3),AT(i,1),AT(i,2),AT(i,3);

    (1,1) (1,2) (1,3)

    (2,1) (2,2) (2,3)

    (3,1) (3,2) (3,3)

    A A A

    A A A

    A A A

  • 7

    End do

    10 format(6f10.2) ! formatirani ispis,

    ! rFw.d (r=broj ponavljanja, f=real,w-broj mjesta, d=broj mjesta

    ! poslije decimalne tacke

    End program transponovanje

    Program mat_mul

    ! mnozenje matrica

    Implicit none

    Integer:: i,j,k

    REAL:: A(3,3), B(3,3), C(3,3);

    print*,'unesi clanove A(i,j) po redovima'

    do i=1,3

    read(*,*)A(i,1),A(i,2),A(i,3)

    end do

    print*,'unesi clanove B(i,j) po redovima'

    do i=1,3

    read(*,*)B(i,1),B(i,2),B(i,3)

    end do

  • 8

    do i=1,3

    do j=1,3

    do k=1,3

    C(I,J)=C(I,J)+A(I,K)*B(K,J)

    End do

    End do

    End do

    PRINT *,C(1,1),C(1,2),C(1,3)

    PRINT *,C(2,1),C(2,2),C(2,3)

    PRINT *,C(3,1),C(3,2),C(3,3)

    END program mat_mul

    procesiranje po redovima i po kolonama

  • 9

    Primjer: napisati program koji e generisati slijedeu matricu: Funkcije za rad sa matricama: matmul, maxval, a_max =maxval(A) minval, a_min =minval(A) amax_parni =maxval(A,mask=mod(A,2)==0)

  • 10

    suma, transpose...

    ********************************************************************

  • 11

    RAD SA DATOTEKAMA (file-ovima):

    Ispis numerikih podataka ili teksta u file-ove

    itanje podataka iz eksternih file-ova

    Spremanje i vizualizacija podataka, formati: binarni, tekstualni (ASCI) Definicija: OPEN (unit=11, file='ime file-a', status='unknown,new,old') Do i=1,n ! ispis podataka u externi file Write(11,*) t,x(t) End do Do i=1,n ! itanje podataka iz file-a Read(11,*) x(i) End do Close (11)

  • 12

    Primjer: TROUGAO ... program trougao ! ovaj program racuna povrsinu i ispisuje koordinate vrhova u file za proizvoljni trougao zadat preko tri pravca implicit none integer:: i; real:: a(3),b(3),X(3,2),L(3),O,P 10 continue print*,'UNESI VRIJEDNOSTI KOEFICIJENATA PRAVCA ai, i=1,3' do i=1,3 read(*,*)a(i) end do print*,' zadati koeficijenti pravca iznose',a if (a(1).eq.a(2).or.a(1).eq.a(3)) then print*,'unijeti pravci su paralelni,unesi ponovo' go to 10 else if (a(2).eq.a(3))then print*,'unijeti pravci su paralelni,unesi ponovo' go to 10 end if print*,'UNESI VRIJEDNOSTI slobodnih clanova bi, i=1,3' tecplot do i=1,3 read(*,*)b(i) end do print*,'slobodni clanovi (otsjecni na Y osi) iznose',b

  • 13

    ! koordinate presjecnih tacaka X(1,1)=(b(2)-b(1))/(a(1)-a(2)) X(2,1)=(b(3)-b(2))/(a(2)-a(3)) X(3,1)=(b(3)-b(1))/(a(1)-a(3)) do i=1,3 X(i,2)=a(i)*X(i,1)+b(i) end do print*,X(1,1),X(2,1),X(3,1) ! duzine strana trougla L(1) = sqrt((X(2,1)-X(1,1))**2 + (X(2,2)-X(1,2))**2) L(2) = sqrt((X(3,1)-X(1,1))**2 + (X(3,2)-X(1,2))**2) L(3) = sqrt((X(3,1)-X(2,1))**2 + (X(3,2)-X(2,2))**2) print*,'Duzine stranica iznose',L O = 0.5*(L(1)+L(2)+L(3)) print*,'Obim trougla iznosi O=',O ! povrsina trougla P=sqrt(O*(O-L(1))*(O-L(2))*(O-L(3))) print*,'Povrsina trougla iznosi P=',P ! ispis tacaka u file: open(unit=11,file='trougao.dat',status='unknown'); do i=1,3 write(11,*)X(i,1),X(i,2) end do write(11,*)X(1,1),X(1,2) close(11) end program trougao

  • 14

    HOMEWORK:

    1. Napisati program koji elemente matrice u svim redovima sortira po veliini i ispisuje u novu, sortiranu matricu.

    2. Newtonov polinom

    Pomou Newtonovog polinoma odredi jednainu krive (visee ue) koje prolazi kroz tri take ije su koordinate utvrene mjerenjem.

    AX=b

  • 15

    3. Program srednja dubina: data je tekstualna datoteka sa podacima mjerenja dubine dijela od 100 x 100 metara jezera u kvadratnoj mrei 10x10 m. Napisati program koji e uitati navedenu tekstualnu datoteku kao kvadratnu matricu i izraunati srednju dubinu i koliinu vode u tom dijelu jezera.