računari i programiranje predavanje 7

12
1 Univerzitet u Tuzli Mašinski fakultet RAČUNARI I PROGRAMIRANJE Fortran 90, osnove Dr. Salko Ćosić Školska 2014/2015

Upload: kenannuric

Post on 06-Nov-2015

238 views

Category:

Documents


4 download

DESCRIPTION

Sedmo predavanje iz predmeta Mašinskog fakulteta na prvoj godini računari i programiranje

TRANSCRIPT

  • 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