zadaci za vjezbu

Download Zadaci Za Vjezbu

Post on 25-Nov-2015

24 views

Category:

Documents

4 download

Embed Size (px)

DESCRIPTION

dsssssssssssss

TRANSCRIPT

  • Raunari i Programiranje Zadaci za Vjebu

  • Instalacija Fortran editora i compilera

    Code::Blocks je besplatan editor za fortran i moze se pronaci na sledecoj adresi:

    http://darmar.vgtu.lt/downloads

    Pored editora potreban je i fortran compiler, na adresi http://tdm-gcc.tdragon.net/download

    moguce je pronaci Gfortran comipler, prilikom instalacije potreno je odrati Full Install ili ukljuciti

    Fortran Compiler kod izbora komponenti.

    Ispod je direktan Link za download Fortran Compiler-a za Windows OS:

    http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.8.1-

    3.exe/download

  • Kreiranje novog projekta upotrebom Code::Blocks IDE-a:

    Odabrati: File -> New -> Project iz glavnog menija.

    Zatim u Category, odabrati Fortran i listi ispod odabrati Fortran application.

  • U narednom koraku unijeti ime projekta kao na islici ispod (npr. Test).

    U zadnjem koraku odabrati fortran compiler, npr. GNU Fortran Compiler ili G95 fortran

    compiler. Nakon potvrde bie kreiran novi projekat koji sadri fajl main.f90 sa defaultnim Hello

    World prgramom.

  • Zadatak 1.

    Napisati program za izracunavanje povrsine trougla primjenom Heronovog obrasca ako su

    zadate koordinate vrhova trougla.

    Rjeenje:

    program PovrsinaTrougla ! Onemoguci implicitnu deklaraciju variabli implicit none ! Deklaracija novog tipa podataka type Vektor real x real y end type ! Deklaracija variabli type (Vektor) :: A, B, C ! d1,d2,d3 - duzine stranica trougla ! s - poluobim trougla ! p - povrsina trougla real d1,d2,d3, s, p ! Unos podataka print *, 'Unesi tacku A (x y):' read *, A print *, 'Unesi tacku B (x y):' read *, B print *, 'Unesi tacku C (x y):' read *, C ! Obrada podataka d1 = Udaljenost(A,B) d2 = Udaljenost(B,C) d3 = Udaljenost(C,A) s = (d1+d2+d3) / 2.0 p = sqrt(s*(s-d1)*(s-d2)*(s-d3)); ! Ispis podataka print *, 'Povrsina iznosi:', p pause stop contains ! Funkcija racuna udaljenost od tacke A do tacke B function Udaljenost(A, B) result (d) implicit none type(Vektor) :: A, B ! Deklaracija tipova paramatara funkcije real :: d, dx, dy ! Deklaracija povratnog tipa funkcije dx = B%x - A%x ! A%x A je vektor, x je komponenta vektora dy = A%y - B%y d = sqrt( dx**2 + dy**2) end function end program

    d1

    d2

    d3

    A

    B

    C

    Ax B

    x C

    x

    Ay

    Cy

    By

    = ( 1)( 2)( 3)

    =1 + 2 + 3

    2

    P Povrina trougla

    s poluobim trougla

  • Zadatak 2.

    Uitati niz A od 8 elemenata, nai sumu lanova niza A. Sumu niza A odtampati u glavnom

    programu.

    Rjeenje:

    program suma_niza implicit none real, dimension :: A(8) real :: s integer :: i print *, "Unesi 8 elemenata:" do i = 1, 8 read *, A(i) end do s = 0 ! Postavi vrijednost sume na 0 do i = 1, 8 s = s + A(i) ! Dodaj vrijednost elementa Ai na s end do print *, "Suma niza iznosi:", s end program

  • Zadatak 3.

    Uitati niz B od 6 elemenata, nai proizvod lanova niza B. Proizvod niza B odtampati u

    glavnom programu.

    Rjeenje:

    program Zadatak3 implicit none ! Deklaracija niza B sa 6 elemenata real :: B(6) real :: p ! proizvod integer :: i ! Naredba read podrzava unos nizova, ! umjesto DO petlje mozemo napisati samo read *, ime_niza print *, 'Unesi 6 elemenata:' read *, B ! Postavi p na prvi element niza p = B(1) ! Kreni od drugog do zadnjeg elementa, ubound(B,1) ! funkcija vraca zadnji index niza u 1. dimenziji ! U ovom primjeru ubound(B,1) iznosi 6, jer B ima 6 elemenata od 1 do 6 do i = 2, ubound(B,1) p = p * B(i) end do print '(AF18.3)', 'Proizvod elemenata je:', p end program

  • Zadatak 4.

    Uitati niz A od 10 elemenata, nai proizvod i sumu niza. Proizvod i sumu niza A odtampati u

    glavnom programu.

    Rjeenje:

    program proizvod_i_suma implicit none real, dimension(:) :: A(10) real :: p, s integer :: i print *, "Unesi 10 elemenata:" read *, A ! Suma elemenata s = 0 Do i = 1, 10 s = s + A(i) End Do p = A(1) Do i = 2, 10 p = p * A(i) End Do Print *, "Suma elemenata je:", s Print *, "Proizvod elemenata je:", p end program

  • Zadatak 5.

    Uitati niz A od 20 elemenata, sortirati ih u rastucem redoslijedu te odstampati u glavnom

    programu.

    program sortiranje implicit none real :: A(5) real :: t integer :: i,j,n print *, 'Unesi 5 elemenata niza:' read *, A ! Odredi zadnji element u niz n = ubound(A,1) ! Naredni blok koda implementira "Selection Sort" algoritam do i = 1, n-1 do j = i+1, n ! Ako je element na indeksu i manji od elementa na indekus j ! izvrsi zamjenu if (A(i) < A(j)) then t = A(i) A(i) = A(j) A(j) = t end if end do end do ! Ispis elemenata niza print *,'Elementi niza su:' print '(F8.2)', A end program

  • Zadatak 6.

    Program ucitava N cijelih brojeva i nalazi: najvecu,najmanju i prosjecnu vrijednost.

    program min_max_average implicit none integer :: n, broj, min_val, max_val, suma, i real :: avg_val print *, 'Unesi broj cijelih brojeva:' read *, n ! Postavi vrijednosti na 0 min_val = 0 max_val = 0 avg_val = 0.0 suma = 0 do i = 1, n ! Ovde se koristi format kod unosa sa sledecim znacenjem ! A - tekst za dio "Unesi broj " ! I4 - integer sa maksimalno 4 broja za dio i ! ": " - dodatni string koji ce biti ispisan ! adavnce="no" zadrzava unos u istoj liniji kao i ispis write (*,'(A I4 ": ")', advance="no") , "Unesi broj ", i read *, broj ! Nakon unosa prvog elementa inicijaliziraj min i max vrijednosti if (i == 1) then min_val = broj max_val = broj end if if (min_val > broj) min_val = broj if (max_val < broj) max_val = broj suma = suma + broj end do avg_val = suma / real(n) print *, 'Minimalna vrijednost je:', min_val print *, 'Maksimalna vrijednost je:', max_val print *, 'Prosjecna vrijednost je:', avg_val end program

  • Zadatak 7.

    Program nalazi najveci zajednicki djelilac dva zadana prirodna broja.

    program najveci_djelilac implicit none integer :: a, b, t,r print *, 'Unesi dva cijela broja:' read *, a,b ! Osiguraj da je A vece od B if (a < b) then t = a a = b b = a end if ! Koristi euklidov algoritam za najveci zajednicki djelilac ! 1. Odredi ostatak dijeljenja broja a sa brojem b i snimi u variablu r ! 2. Ako je ostatak razlicit od nule odredi ostatak dijeljenja broja b i r ! 3. Ponavljaj postupak dok ostatak ne bude jednak nuli r = mod(a,b) do while (r /= 0) a = b ! Postavi gornju granicu na donju b = r ! Postavi donju granicu na ostatak dijeljenja broja a sa brojem b r = mod(a,b) ! Odredi novi ostatak end do print *, "Najveci zajednicki djelilac dva cijela broja je:", b end program

  • Zadatak 8.

    Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata na neparnim

    mjestima. Sumu i proizvod odtampati u glavnom programu.

    program nizovi implicit none real :: A(6) , s, p integer :: i print *, 'Unesi 6 elemenata:' do I = 1,6 read *, A(i) end do s = 0 p = A(1) do i = 2, 6 if (mod(i, 2) == 0) then s = s + A(i) else p = p * A(i) end if end do print *, "Suma na parnim mjestima je:", s print *, "Proizvod na ne parnim mjestima je:", p end program

  • Zadatak 9.

    Napisati program u Fortranu koji izraunava prosjenu vrijednost uneenog niza od N

    elemenata ili npr. izraunavanje prosjene vrijednosti za nekoliko unijetih ocjena.

    program prosjek_elemenata implicit none real, allocatable, dimension(:) :: A real :: prosjek integer :: n,i print *, 'Unesi broj elemenata niza:' read *, n ! Alociraj elemente niza allocate(A(n)) print *, 'Unesi elemente niza:' do i = 1, n read *, A(i) end do ! Primjenom sum funkcije odreduje se suma elemenata niza ! Funkcija sum uzima niz kao prvi argument i dimenziju kao drugi argument ! Ukoliko dimenzija nije navedena uzima se prva dimenzija prosjek = sum(A) / n ! Dealociraj niz A ! Svaki element koji se alocira na kraju programa, kada vise nije potreban ! potrebno je dealocirati (osloboditi iz memorije) deallocate(A) print *, "Prosjecna vrijednost je:", prosjek end program

  • Zadatak 10.

    Napisati program koji za zadane vrijednosti duzine predjenog puta, vremena za koje je taj put

    predjen i ukupno potrosenog goriva racuna i stampa prosjecnu brzinu automobila i prosjecnu

    potrosnju goriva.

    program Primjer10 implicit none real L ! duzina predjenog puta real t ! vrijeme za koje je put predjen real pg! potrosnja goriva real v ! srednja brzina real pgL ! potrosnja goriva po jedinici predjenog puta real pgt ! potrosnja goriva po jedinici vremena print *, "Unesi predjenu duzinu puta [km