programiranje u fortranu
DESCRIPTION
Programiranje u fortranu, zadatci i teorijaTRANSCRIPT
-
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.