računari i programiranje predavanje 7
DESCRIPTION
Sedmo predavanje iz predmeta Mašinskog fakulteta na prvoj godini računari i programiranjeTRANSCRIPT
-
1
Univerzitet u Tuzli Mainski fakultet
RAUNARI I PROGRAMIRANJE
Fortran 90, osnove
Dr. Salko osi
kolska 2014/2015
-
2
NIZOVI (vektor, polje, lista, array, matrica-kolona) NIZ je ureeni skup podataka istog tipa koji nose jedno zajedniko ime. Imena nizova su simbolina imena i podlijeu istim pravilima kao i imena varijabli. Ime varijable se odnosi na jedan podatak. Ime niza se odnosi na vie podataka tako da se podatak u nizu sa kojim se radi mora dodatno specificirati svojim indexom (rednim brojem, poloajem).
Manipulisanje s velikim koliinama podataka Indexirane varijable, ai, i=1..n
-
3
DEKLARACIJA NIZA: type, DIMENSION (lower limit:upper limit):: array_name Primjer: broj stanara na svakom spratu devetospratne zgrade: Integer:: q1,q2,q3,q4,q5,q6,q7,q8,q9;
Integer, dimension(9):: q ili integer q(9) REAL, DIMENSION(12):: TEMPERATURA ! ovo je stari nacin REAL:: TEMPERATURA (12), pritisak(19), A(6), B(4); ! moze i ovako, novi nain Real,dimension(-20:20):: ostvareni_bodovi Integer a(-5:5); ! promjena poetka indeksa CHARACTER(len = 20), DIMENSION(20):: PREZIME ! niz prezimena (20x20) INICIJALIZACIJA istovremeno za sve ili pojedinano za svaki lan REAL:: TEMPERATURA (12) TEMPERATURA=0. ! svi lanovi=0 DO i=1,12 TEMPERATURA(i)=0. END DO ! isto kao prethodno
-
4
Primjer: Napisati program koji za dati niz od
max 100 brojeva rauna srednju vrijednost niza i
devijaciju svakog lana
-
5
Program ugao_vektora
! ovaj program racuna ugao izmedju dva vektora primjenom niza
Implicit none
Real:: r1(2), r2(2),r1_mod,r2_mod,alfa;
Integer:: i;
Print*,'unesi komponente vektora r1 i r2';
Read*,r1(1),r1(2),r2(1),r2(2);
r1_mod=sqrt(r1(1)**2 + r1(2)**2)
r2_mod=sqrt(r2(1)**2 + r2(2)**2)
print*,r1_mod,r2_mod
alfa=acos((r1(1)*r2(1)+r1(2)*r2(2))/(r1_mod*r2_mod));
alfa=alfa*180.0/3.14159;
Print*,'ugao izmedju vektora r1 i r2 iznosi',alfa
End program ugao_vektora
Za vjebu: Radijus vektor satelita dat je sa: R(r1,r2,r3) a vektor ugaone brzine sa omega(omega_1,omega_2,omega_3). Napisati program koji rauna trenutnu brzinu satelita.
-
6
Primjena konstruktora kod niza: Integer, parameter:: N=5 Integer A(N); A=(/2,4,6,1,0/); Integer, parameter:: m=10 Integer s(m); s=(/(2,i=1:5),(5,i=1:5)/); (2,2,2,2,2,5,5,5,5,5) Ugraene funkcije:
za sumu lanova niza A: sum(A)
za proizvod lanova niza A: product(A)
maximalni lan niza A: maxval(A)
minimalni lan niza A: minval(A)
lokacija max. lana niza A: maxloc(A)
lokacija min. lana niza A: minloc(A)
skalarni proizvod vektora A i B: dot_product(A,B)
-
7
IZVEDENI TIPOVI PODATAKA (user defined data types)
Kada se u problemu za koji se pie program pojavljuju sloeni tipovi pod. Pojednostavljuju manipulisanje sa sloenim tipovima podataka, uvod u OOP.
Objedninjavanje standardnih tipova pod jednim imenom, generalizacija niza Primjer: type tacka ! definisanje tipa podataka taka real x; ! komponenta 1 real y; ! komponenta 2 end type tacka type (tacka) p1, p2; p1.x=0.25; p1.y=6.25 ! deklaracija, moze i ovako: p1%x=0.25; p1%y=6.25 type mjerno_mjesto real x; real y; real temperatura real pritisak end type mjerno_mjesto type (mjerno_mjesto) M1, M2;
-
8
rastojanje dvije take (geometrija, r.grafika) inicijalizacija: s1.name = 'Cosic S.' s1.group ='energetsko' s1.status =.true. s1.money =150.00; s1.year = 2013
dodjeljivanje vrijednost moe i ovako: konstruktor: istovremena deklaracija i inicijalizacija s1=student('Cosic S.','energetsko',.TRUE.,150.00,2010) ! kompaktniji zapis p1=tacka(0.5,3.25)
-
9
Primjer: napisati program koji rauna skalarni proizvod dva vektora koristei izvedeni type
program skalarni_proizvod ! ovaj program racuna skalarni proizvod i intenzitete dva vektora v1 i v2 koristei type tip podataka za vektore type vektor ! definisanje tipa vektor Real x Real y Real z End type vektor Type (vektor) v1,v2 ! deklaracija v1 i v2 real:: skalar, L1,L2; v1=vektor(1.0,-2.0,3.0); v2=vektor(4.0,2.0,-1.0); ! inicijalizacija pomou konstruktora skalar=v1.x*v2.x + v1.y*v2.y + v1.z*v2.z ! skalarni proizvod L1=sqrt(v1.x**2 + v1.y**2 + v1.z**2); ! intenzitet L2=sqrt(v2.x**2 + v2.y**2 + v2.z**2); Print*,'Skalarni proizvod v1*v2 iznosi',skalar Print*,'Intenzitet (duzina) L1 vektora v1 iznosi',L1 Print*,'Intenzitet (duzina) L2 vektora v2 iznosi',L2 End program skalarni_proizvod
-
10
SORTIRANJA NIZOVA osnovni algoritmi
Buble sort
Sortiranje umetanjem
Shell sort
Mergesort
Quicksort -buble sort video program sortiranje ! sortiranje datog niza prema velicini clanova metoda buble-sort ! Nakon sortiranja, originalni i sortirani niz se ispisuju na ekran implicit none integer:: N,i,j,Niz1(100),Niz1Copy(100),Max; print*,'Unesi broj clanova niza N, N
-
11
do i=1,N print*,'Unesi clan niza',i read(*,*)Niz1(i) end do Niz1Copy=Niz1 ! sacuvati originalni niz do j=1,N-1 do i=1,N-j if (Niz1(i).gt.Niz1(i+1)) then Max=Niz1(i) ! kopija + zamjena mjesta clanova niza Niz1(i)=Niz1(i+1) Niz1(i+1)=Max end if end do ! kraj unutrasnje petlje end do ! kraj vanjske petlje print*,'Originalni i sortirani niz iznose' do i=1,N write(*,100)Niz1Copy(i),Niz1(i) end do 100 format(i5,5x,i5) end program sortiranje
-
12
ZA HOMEWORK 1. Funkcija (zakon) normalne raspodjele data je sa:
Napisati program koji e vrednovati datu funkciju u intervalu -2, 2 sa korakom 0.2 te izraunate vrijednosti smjestiti u tablicu (niz) Normalna_raspodjela. Prikazati rezultat na ekranu, u redovima od po 5 vrijednosti.
2. Napisati program koji rauna povrinu trougla zadatog pomou koordinata tri vrha. Koristiti izvedeni tip podataka tacka za kordinate