You are on page 1of 22

Osnove programiranja – zadatci

Vježbe 1
Zadatak 1:
Napišite program koji učitava cijeli broj i ispisuje ga. Obratite pozornost na ishod programa kada umjesto
cijeloga upišete realan broj ili neki tekst.
!
! Program koji ucitava cijeli broj i ispisuje ga
!
! Zaglavlje
!
PROGRAM cijeli_broj
IMPLICIT NONE
!
! Deklaracije
!
INTEGER :: i
!
! Obrada
!
READ(*, *) i
WRITE(*, *) i
!
! Kraj
!
END PROGRAM cijeli_broj

Zadatak 2:
U programu iz prethodne vježbe dodajte poruke (obavijesti) o učitavanju i ispisu rezultata.
PROGRAM cijeli_broj_2
IMPLICIT NONE
INTEGER :: i
WRITE(*, *) "Upisite cijeli broj:"
READ(*, *) i
WRITE(*, *) "Upisali ste cijeli broj: ", i
END PROGRAM cijeli_broj_2

Zadatak 3:
Napišite program koji učitava realan broj i ispisuje ga. Obratite pozornost na ishod programa kada
umjesto realnoga upišete cijeli broj ili neki tekst.
PROGRAM realan_broj
IMPLICIT NONE
REAL :: x
WRITE(*, *) "Upisite realan broj:"
READ(*, *) x
WRITE(*, *) "Upisali ste realan broj: ", x
END PROGRAM realan_broj

1
Osnove programiranja – zadatci

Zadatak 4:
Napišite program koji zbraja, množi i dijeli dva realna broja.
PROGRAM realni
IMPLICIT NONE
REAL :: prvi, drugi
WRITE(*, *) "Upisite dva realna broja:"
READ(*, *) prvi, drugi
WRITE(*, *) "Zbroj: ", prvi+drugi, "Umnozak:", prvi*drugi, "Kvocijent:", prvi/drugi
END PROGRAM realni

Zadatak 5:
Napišite program koji zbraja, množi i dijeli dva cijela broja. Obratite pozornost na rezultat dijeljenja dva
cijela broja koji nisu djeljivi.
PROGRAM cijeli
IMPLICIT NONE
INTEGER :: prvi, drugi
WRITE(*, *) "Upisite dva cijela broja:"
READ(*, *) prvi, drugi
WRITE(*, *) "Zbroj: ", prvi+drugi, " Umnozak:", prvi*drugi, " Kvocijent:", prvi/drugi
END PROGRAM cijeli

Zadatak 6:
Napišite program koji za zadani radijus izračunava opseg i površinu kruga. Vrijednost broja π deklarirajte
kao konstantu (parametar).
PROGRAM krug
IMPLICIT NONE
REAL :: r, povrsina, opseg
REAL, PARAMETER :: pi = 3.14159
WRITE(*, *) "Upisite radijus kruga:"
READ(*, *) r
opseg = 2.*r*pi
povrsina = r**pi
WRITE(*, *) "Opseg: ", opseg, " Povrsina:", povrsina
END PROGRAM krug

Zadatak 7:
U kutiju stane 50 loptica. Napišite program koji za zadani broj loptica izračunava broj punih kutija i broj
preostalih (nerazmještenih) loptica.
PROGRAM kutije
IMPLICIT NONE
INTEGER :: kuglice, pune, ostatak
INTEGER, PARAMETER :: koliko = 50
WRITE(*, *) "Upisite broj kuglica:"
READ(*, *) kuglice
pune = kuglice / koliko
ostatak = kuglice - pune * koliko
WRITE(*, *) "Punih kutija: ", pune, " Broj preostalih kuglica:", ostatak
END PROGRAM kutije

2
Osnove programiranja – zadatci

Vježbe 2
Zadatak 0:
Razmotrite kakva se vrijednost ispisuje u sljedećem programskom isječku ovisno o tome jesu li varijable
A, B i C deklarirane kao realne ili kao cjelobrojne varijable
PROGRAM tipovi_podataka
IMPLICIT NONE
INTEGER :: A, B ! Zamijenite ovu deklaraciju s REAL
INTEGER :: C ! Zamijenite ovu deklaraciju s REAL
A=3
B=2
C=A/B
WRITE(*, *) C
END PROGRAM tipovi_podataka

Zadatak 1:
Napišite program koji za učitani cijeli broj n ispisuje vrijednosti sljedećih izraza:
1
n+
2 , n + 1 , n + 0.5 , n + 0.125 .
4 4 8 4 4
PROGRAM racunanje
IMPLICIT NONE
INTEGER :: n
READ(*, *) n
WRITE(*, *) (n + 1/2)/4, n/4 + 1/8, (n + 0.5)/4, n/4 + 0.125
END PROGRAM racunanje

Zadatak 2:
Napišite program koji za učitani cijeli broj n izračunava i ispisuje vrijednost realne varijable x:
n n
1+ 1+
1 n
2 , x= + , x= 2 , x= 1 + n
x=
2 2 4 2. 2. 4.
PROGRAM racunanje2
IMPLICIT NONE
INTEGER :: n
REAL :: x
READ(*, *) n
x = (1 + n/2)/2
WRITE(*, *) x
x = 1/2 + n/4
WRITE(*, *) x
x = (1 + n/2)/2.
WRITE(*, *) x
x = 1/2. + n/4.
WRITE(*, *) x
END PROGRAM racunanje2

3
Osnove programiranja – zadatci

Zadatak 3:
Napišite program koji, ako je učitani cijeli broj n veći ili jednak nuli, ispisuje "Broj je veci ili jednak nuli",
te ako je paran ispisuje (zasebno) "Broj je paran".
PROGRAM if_oblik_1
IMPLICIT NONE
INTEGER :: n
WRITE(*, *) "Upisite cijeli broj"
READ(*, *) n
IF (n >= 0) WRITE(*, *) "Broj je veci ili jednak nuli"
IF (n/2*2 == n) WRITE(*, *) "Broj je paran"
END PROGRAM if_oblik_1

Zadatak 4:
Napišite program koji, ako je učitani cijeli broj n veći ili jednak nuli i paran, ispisuje poruku (u protivnom
ne ispisuje ništa.
PROGRAM if_oblik_1b
IMPLICIT NONE
INTEGER :: n
WRITE(*, *) "Upisite cijeli broj"
READ(*, *) n
IF ((n >= 0) .AND (n/2*2 == n)) WRITE(*, *) "Broj je paran i veci ili jednak nuli"
END PROGRAM if_oblik_1b

Zadatak 5:
Napišite program koji ispisuje je li učitani cijeli broj n nenegativan (veći ili jednak nuli) ili je negativan.
PROGRAM if_oblik_2
IMPLICIT NONE
INTEGER :: n
WRITE(*, *) "Upisite cijeli broj"
READ(*, *) n
IF (n >= 0) THEN
WRITE(*, *) "Broj je nenegativan"
ELSE
WRITE(*, *) "Broj je negativan"
END IF
END PROGRAM if_oblik_2

Zadatak 6:
Napišite program koji za učitani broj bodova ispisuje ocjenu kako slijedi: <50 bodova „Nedovoljan“, 50–
59 bodova „Dovoljan“, 60–89 bodova „Vrlo dobar“ i 90–100 bodova „Izvrstan“. Razmotrite kako se
program ponaša kada se kao ulazni podatak upiše broj manji od 1 ili veći od 100.
PROGRAM ocjene
IMPLICIT NONE
INTEGER :: bodovi
READ(*, *) bodovi
IF(bodovi < 50) WRITE(*, *) "Nedovoljan"
IF(bodovi >= 50 .AND. bodovi < 60) WRITE(*, *) "Dovoljan"
IF(bodovi >= 60 .AND. bodovi < 90) WRITE(*, *) "Vrlo dobar"
IF(bodovi >= 90 .AND. bodovi <= 100) WRITE(*, *) "Izvrstan"
END PROGRAM ocjene

4
Osnove programiranja – zadatci

Zadatak 7a:
Napišite program koji ispisuje vrijednost najvećeg od tri učitana cijela broja.
PROGRAM najveci
IMPLICIT NONE
INTEGER :: prvi, drugi, treci
READ(*, *) prvi, drugi, treci
IF((prvi >= drugi) .AND. (prvi >= treci)) WRITE(*, *) "Najveci je: ", prvi
IF((drugi >= prvi) .AND. (drugi >= treci)) WRITE(*, *) "Najveci je: ", drugi
IF((treci >= drugi) .AND. (treci >= prvi)) WRITE(*, *) "Najveci je: ", treci
END PROGRAM najveci

Zadatak 7b:
Riješite zadatak 7a korištenjem scoreboarda u koji ćete redom pohraniti "trenutnu" najveću vrijednost.
PROGRAM najveci3
IMPLICIT NONE
INTEGER :: prvi, drugi, treci, najveci
READ(*, *) prvi, drugi, treci
najveci = prvi
IF(drugi > najveci) najveci = drugi
IF(treci > najveci) najveci = treci
WRITE(*, *) "Najveci je: ", najveci
END PROGRAM najveci3

Zadatak 7c:
Riješite zadatak 7b korištenjem dva scoreboarda u koje ćete redom pohraniti "trenutnu" najveću
vrijednost i mjesto na kojem je ta vrijednost postignuta.
PROGRAM najveci4
IMPLICIT NONE
INTEGER :: prvi, drugi, treci, najveci, gdje
READ(*, *) prvi, drugi, treci
najveci = prvi
gdje = 1
IF(drugi > najveci) THEN
najveci = drugi
gdje = 2
END IF
IF(treci > najveci) THEN
najveci = treci
gdje = 3
END IF
WRITE(*, *) "Najveci je: ", najveci, " i nalazi se na ", gdje, ". mjestu"
END PROGRAM najveci4

5
Osnove programiranja – zadatci

Vježbe 3
Zadatak 1:
Napišite program koji učitava cijeli broj i ispisuje poruku o tome radi li se o broju 1, 2 ili 3. Primijenite
naredbu SELECT CASE. Izvedite program tako da upišete broj unutar obrađenih slučajeva i broj izvan
obrađenih slučajeva.
!
! Program koji ucitava cijeli broj i ispisuje radi li se o broju 1, 2 ili 3
!
PROGRAM opcije_1
IMPLICIT NONE
INTEGER :: selektor
READ(*, *) selektor
SELECT CASE (selektor)
CASE (1)
WRITE(*, *) "Vrijednost selektora je 1"
CASE (2)
WRITE(*, *) "Vrijednost selektora je 2"
CASE (3)
WRITE(*, *) "Vrijednost selektora je 3"
END SELECT
END PROGRAM opcije_1

Zadatak 2:
Dopunite prethodni program tako da dodate poruku ako se radi o broju izvan raspona od 1 do 3.
Izvedite program tako da upišete broj unutar obrađenih slučajeva i broj izvan obrađenih slučajeva.
!
! Program koji ucitava cijeli broj i ispisuje radi li se o broju 1, 2 ili 3 ili izvan toga raspona
!
PROGRAM opcije_2
IMPLICIT NONE
INTEGER :: selektor
READ(*, *) selektor
SELECT CASE (selektor)
CASE (1)
WRITE(*, *) "Vrijednost selektora je 1"
CASE (2)
WRITE(*, *) "Vrijednost selektora je 2"
CASE (3)
WRITE(*, *) "Vrijednost selektora je 3"
CASE DEFAULT
WRITE(*, *) "Vrijednost selektora je izvan intervala od 1 do 3"
END SELECT
END PROGRAM opcije_2

6
Osnove programiranja – zadatci

Zadatak 3:
Napišite program koji učitava cijeli broj i ispisuje poruku o tome radi li se o broju koji je manji ili jednak
1, o broju koji je veći ili jednak 10 ili o broju koji je veći ili jednak od 3 i manji ili jednak od 6. Primijenite
naredbu SELECT CASE. Izvedite program tako da upišete broj unutar obrađenih slučajeva i broj izvan
obrađenih slučajeva.
!
! Program koji ucitava cijeli broj i ispisuje je li <= 1, >= 10 ili 3 <= n <= 6
!
PROGRAM opcije_3
IMPLICIT NONE
INTEGER :: selektor
READ(*, *) selektor
SELECT CASE (selektor)
CASE ( :1)
WRITE(*, *) "Manji ili jednak 1"
CASE (10: )
WRITE(*, *) "Veci ili jednak 10"
CASE (3 : 6)
WRITE(*, *) "Veci ili jednak 3, manji ili jednak 6"
END SELECT
END PROGRAM opcije_3

Zadatak 4:
Dopunite prethodni program tako da dodate poruku ako se radi o broju izvan tri obuhvaćena raspona.
Izvedite program tako da upišete broj unutar obrađenih slučajeva i broj izvan obrađenih slučajeva.
!
! Program koji ucitava cijeli broj i ispisuje je li <= 1, >= 10, 3 <= n <= 6 ili izvan ovih raspona
!
PROGRAM opcije_4
IMPLICIT NONE
INTEGER :: selektor
READ(*, *) selektor
SELECT CASE (selektor)
CASE ( :1)
WRITE(*, *) "Manji ili jednak 1"
CASE (10: )
WRITE(*, *) "Veci ili jednak 10"
CASE (3 : 6)
WRITE(*, *) "Veci ili jednak 3, manji ili jednak 6"
CASE DEFAULT
WRITE(*, *) "Vrijednost selektora je izvan obradjenih raspona"
END SELECT
END PROGRAM opcije_4

7
Osnove programiranja – zadatci

Zadatak 5:
Napišite program koji ispisuje brojeve od 1 do 10. Upotrijebite DO petlju.
! Program koji ispisuje brojeve od 1 do 10
PROGRAM petlja1
IMPLICIT NONE
INTEGER :: i
DO i = 1, 10
WRITE(*, *) i
END DO
END PROGRAM petlja1

Zadatak 6:
Prepravite prethodni program tako da ispisuje brojeve unatrag, tj. od 10 do 1.
! Program koji ispisuje brojeve od 10 do 1
PROGRAM petlja2
IMPLICIT NONE
INTEGER :: i
DO i = 10, 1, –1
WRITE(*, *) i
END DO
END PROGRAM petlja2

Zadatak 7:
Prepravite prethodni program tako da ispisuje unatrag parne brojeve od 20 do 2.
! Program koji ispisuje parne brojeve od 20 do 2
PROGRAM petlja3
IMPLICIT NONE
INTEGER :: i
DO i = 20, 2, -2
WRITE(*, *) i
END DO
END PROGRAM petlja3

Zadatak 8:
Napišite program koji učitava n brojeva te ispisuje najvećeg.
! Program koji ucitava n brojeva te ispisuje najveceg
PROGRAM petlja4
IMPLICIT NONE
INTEGER :: n, i, broj, najveci
WRITE(*, *) "Koliko brojeva?"
READ(*, *) n
READ(*, *) broj
najveci = broj
DO i = 2, n
READ(*, *) broj
IF(broj .GT. najveci) najveci = broj
END DO
WRITE(*, *) "Najveci ucitani broj je: ", najveci
END PROGRAM petlja4

8
Osnove programiranja – zadatci

Zadatak 9:
Napišite program koji učitava n brojeva te ispisuje koliki je broj i koliki je zbroj pozitivnih brojeva.
! Program koji ucitava n brojeva te ispisuje broj i zbroj pozitivnih
!
PROGRAM petlja5
IMPLICIT NONE
INTEGER :: n, i, broj, zbroj_p = 0, broj_p = 0
WRITE(*, *) "Koliko brojeva?"
READ(*, *) n
DO i = 1, n
READ(*, *) broj
IF(broj .GT. 0) THEN
broj_p = broj_p + 1
zbroj_p = zbroj_p + broj
END IF
END DO
WRITE(*, *) "Broj pozitivnih je: ", broj_p
WRITE(*, *) "Zbroj pozitivnih je: ", zbroj_p
END PROGRAM petlja5

Zadatak 10:
Napišite program koji učitava brojeve dok se ne upiše broj 999 i ispisuje zbroj učitanih brojeva.
Upotrijebite beskonačnu DO petlju i EXIT naredbu za završetak izvođenja petlje kada se upiše broj 999.
! Program koji zbraja ucitane brojeve do ucitavanja 999
!
PROGRAM petlja6
IMPLICIT NONE
INTEGER :: broj, zbroj = 0
DO
WRITE(*, *)"Upisite broj (999 = kraj)"
READ(*, *) broj
IF(broj == 999) EXIT
zbroj = zbroj + broj
END DO
WRITE(*, *) "Zbroj upisanih brojeva je: ",zbroj
END PROGRAM petlja6

Zadatak 11:
Napišite program koji za učitani broj n izračunava n!
! Program koji za ucitani n racuna n!
!
PROGRAM petlja7
IMPLICIT NONE
INTEGER :: i, broj, n_fakt = 1
READ(*, *) broj
DO i = 2, broj
n_fakt = n_fakt * i
END DO
WRITE(*, *) "n! je: ", n_fakt
END PROGRAM petlja7

9
Osnove programiranja – zadatci

Vježbe 4
Zadatak 1:
Napišite program koji, korištenjem ugniježđenih petlji, ispisuje:
a) varijacije s ponavljanjem drugog reda od četiri elementa (uređene parove (i, j), i, j = 1…4);
b) varijacije bez ponavljanja drugog reda od četiri elementa (uređene parove (i, j), i, j = 1…4, i ≠ j);
c) kombinacije s ponavljanjem drugog reda od četiri elementa (multiskupove {i, j}, i, j = 1 … 4);
d) kombinacije s ponavljanjem drugog reda od četiri elementa (multiskupove {i, j}, i, j = 1 … 4, i ≠ j).

PROGRAM varijacije_sa
IMPLICIT NONE
INTEGER :: i, j
DO i = 1, 4
DO j = 1, 4
WRITE(*, *) i, j
END DO
END DO
END PROGRAM varijacije_sa

PROGRAM varijacije_bez
IMPLICIT NONE
INTEGER :: i, j
DO i = 1, 4
DO j = 1, 4
IF (i <> j) WRITE(*, *) i, j
END DO
END DO
END PROGRAM varijacije_bez

PROGRAM kombinacije_sa
IMPLICIT NONE
INTEGER :: i, j
DO i = 1, 4
DO j = i, 4
WRITE(*, *) i, j
END DO
END DO
END PROGRAM kombinacije_sa

PROGRAM kombinacije_bez
IMPLICIT NONE
INTEGER :: i, j
DO i = 1, 4
DO j = i + 1, 4
WRITE(*, *) i, j
END DO
END DO
END PROGRAM kombinacije_bez

10
Osnove programiranja – zadatci

Zadatak 2:
Napišite redom programe koji će premašiti granice vrijednosti cjelobrojne varijable
a) pohranjene u 1 byte (INTEGER*1, raspon – 128 do 127);
b) pohranjene u 2 bytea (INTEGER*2, raspon –32,768 do 32,767);
c) pohranjene u 4 bytea (INTEGER*4, raspon (– 2,147,483,648 do 2,147,483,647).

PROGRAM limit_a1 PROGRAM limit_a2


IMPLICIT NONE IMPLICIT NONE
INTEGER*1 :: i = –120 INTEGER*1 :: i = 120
DO DO
WRITE(*, *) i WRITE(*, *) i
i=i–1 i=i+1
END DO END DO
END PROGRAM limit_a1 END PROGRAM limit_a2

PROGRAM limit_b1 PROGRAM limit_b2


IMPLICIT NONE IMPLICIT NONE
INTEGER*2 :: i = –32760 INTEGER*2 :: i = 32760
DO DO
WRITE(*, *) i WRITE(*, *) i
i=i-1 i=i+1
END DO END DO
END PROGRAM limit_b1 END PROGRAM limit_b2

PROGRAM limit_c1 PROGRAM limit_c2


IMPLICIT NONE IMPLICIT NONE
INTEGER*4 :: i = –2147483640 INTEGER*4 :: i = 2147483640
DO DO
WRITE(*, *) i WRITE(*, *) i
i=i–1 i=i+1
END DO END DO
END PROGRAM limit_c1 END PROGRAM limit_c2

Zadatak 3:
Napišite program koji će, počevši od nule, u beskonačnoj petlji pribrajati varijabli X broj 0.1. Uočite
pojavu pogreške u zbroju.
Najprije izvedite program deklarirajući X kao REAL*4, potom kao REAL*8.
Program ćete zaustaviti (prekinuti beskonačnu petlju) kombinacijom Ctrl/C na tipkovnici.

PROGRAM nulajedan_4 PROGRAM nulajedan_8


IMPLICIT NONE IMPLICIT NONE
REAL*4 :: X = 0. REAL*8 :: X = 0.
DO DO
WRITE(*, *) X WRITE(*, *) X
X = X + 0.1 X = X + 0.1
END DO END DO
END PROGRAM nulajedan_4 END PROGRAM nulajedan_8

11
Osnove programiranja – zadatci

Zadatak 4:
Napišite program koji najprije učitava po jednu varijablu tipa REAL*4 i REAL*8 i ispisuje njihove
vrijednosti, potom u svakoj od ovih varijabli izračunava korijen iz 3 i ispisuje izračunate vrijednosti.
Kao vrijednost pri učitavanju obiju varijabli upišite broj 1.23456789012345.
! Program koji razmatra ponasanje single i double precision varijabli
!
PROGRAM realni_brojevi
IMPLICIT NONE
REAL*4 :: x_single
REAL*8 :: x_double
READ(*, *) x_single, x_double
WRITE(*, *) x_single, x_double
x_single = sqrt(3.)
x_double = sqrt(3.)
WRITE(*, *) x_single, x_double
END PROGRAM realni_brojevi

Zadatak 5:
Napišite program koji učitava koeficijente kvadratne jednadžbe a, b i c, potom izračunava vrijednost
diskriminante (po formuli disk = b2 – 4.*a*c) te ispisuje diskriminantu i poruku je li diskriminanta jednaka
nuli.
Testirajte ponašanje programa za vrijednosti a = 5, b = 10.1, c = 5.1005, potom izračunajte vrijednost
diskriminante za ove brojeve s pomoću Windows Calculatora. Provjerite mijenja li se ponašanje
programa za ove podatke ako deklarirate varijable kao tip REAL*8 (dakle, s dvostrukom preciznošću).
Konačno, prepravite program tako da proglasi nulom svaku diskriminantu manju od neke granične
vrijednosti.

! Program koji testira je li diskriminanta nula ! Program koji testira je li diskriminanta nula
! Ovaj nacin NIJE DOBAR! ! Ovaj nacin JE DOBAR!
! Zbog greske zaokruzivanja "ne vidi" nulu ! Umjesto izjednacavanja s nulom, gledamo
! ! je li diskriminanta manja od zadane granice ε.
! !
PROGRAM diskrim PROGRAM diskrim2
IMPLICIT NONE IMPLICIT NONE
REAL*4 :: a, b, c, disk REAL*4 :: a, b, c, disk, eps = 0.0001
DO DO
READ(*, *) a, b, c READ(*, *) a, b, c
IF(a == 999) EXIT IF(a == 999) EXIT
disk = b*b - 4.*a*c disk = b*b - 4.*a*c
IF(disk == 0) THEN IF(ABS(disk) < eps) THEN
WRITE(*, *) "Diskriminanta je nula", disk WRITE(*, *) "Diskriminanta je nula", disk
ELSE ELSE
WRITE(*, *) "Diskriminanta nije nula", disk WRITE(*, *) "Diskriminanta nije nula", disk
END IF END IF
END DO END DO
END PROGRAM diskrim END PROGRAM diskrim2

12
Osnove programiranja – zadatci

Vježbe 5
Zadatak 1:
Napišite program koji ispisuje tablicu (uključujući i prvi redak s brojevima) kvadrata i korijena brojeva od
0.1, 0.2, …, 1.0.
U programu za pozicioniranje elemenata najprije koristite T, potom X format.

123456789012345678901234567890
x x**2 SQRT(x)
------- ------- ----------
0.1 0.01 0.31623
! Program koji tablicno ispisuje vrijednosti kvadrata i korijena – T-format
!
PROGRAM tablica
IMPLICIT NONE
INTEGER :: i
REAL :: x
WRITE(*, 1)"123456789012345678901234567890"
1 FORMAT(A)
WRITE(*, 2)"x", "x**2", "SQRT(x)"
2 FORMAT(T4, A, T13, A, T23, A)
WRITE(*, 3)"-------", "-------", "----------"
3 FORMAT(A, T11, A, T21, A)
x = 0.1
DO i = 1, 10
WRITE(*, 4) x, x**2, SQRT(x)
4 FORMAT(F5.1, T11, F6.2, T21, F9.5)
x = x + 0.1
END DO
END PROGRAM tablica

! Program koji tablicno ispisuje vrijednosti kvadrata i korijena – X-format


!
PROGRAM tablica2
IMPLICIT NONE
INTEGER :: i
REAL :: x
WRITE(*, 1)"123456789012345678901234567890"
1 FORMAT(A)
WRITE(*, 2)"x", "x**2", "SQRT(x)"
2 FORMAT(3X, A, 8X, A, 6X, A)
WRITE(*, 3)"-------", "-------", "----------"
3 FORMAT(A, 3X, A, 3X, A)
x = 0.1
DO i = 1, 10
WRITE(*, 4) x, x**2, SQRT(x)
4 FORMAT(F5.1, 5X, F6.2, 4X, F9.5)
x = x + 0.1
END DO
END PROGRAM tablica2

13
Osnove programiranja – zadatci

Zadatak 2:
Napišite program koji ispisuje tablicu (uključujući i prvi redak s brojevima) svih djelitelja učitanoga
prirodnog broja, kao u tablici (tablica prikazuje primjer za broj 15:
123456789012345678901234567890
Trazimo djelitelje broja: 15
Djelitelj Kvocijent
--------- ---------
1 15
3 5
5 3
15 1
PROGRAM djelitelji
IMPLICIT NONE
INTEGER :: i, n
WRITE(*, *)"Ucitajte prirodan broj"
READ(*, *) n
WRITE(*, 1)"123456789012345678901234567890"
1 FORMAT(A)
WRITE(*, 2)"Trazimo djelitelje broja:", n
2 FORMAT(A, I5)
WRITE(*, 3)"Djelitelj", "Kvocijent"
3 FORMAT(A, T13, A)
WRITE(*, 4)"---------", "---------"
4 FORMAT(A, T13, A)
DO i = 1, n
IF(MOD(n, i) == 0) WRITE(*, 5) i, n/i
5 FORMAT(I6, T13, I6)
END DO
END PROGRAM djelitelji

Zadatak 3:
Prepravite prethodni zadatak tako da u svakom redu tablice prikaže par djelitelja učitanoga broja. Uočite
promijenjenu gornju granicu u DO-petlji i funkciju FLOAT koja cijeli broj pretvara u realan:
123456789012345678901234567890
Trazimo djelitelje broja: 15
Djelitelj1 Djelitelj2
---------- ----------
1 15
3 5
PROGRAM djelitelji2
IMPLICIT NONE
INTEGER :: i, n
READ(*, *) n
WRITE(*, 3)"Djelitelj1", "Djelitelj2"
3 FORMAT(A, T14, A)
WRITE(*, 4)"----------", "----------"
4 FORMAT(A, T14, A)
DO i = 1, SQRT(FLOAT(n))
IF(MOD(n, i) == 0) WRITE(*, 5) i, n/i
5 FORMAT(I6, T14, I6)
END DO
END PROGRAM djelitelji2
14
Osnove programiranja – zadatci

Zadatak 4:
Prepravite zadatke 1 i 2 tako da rezultate zapisuju u tekst-datoteku TABLICA.TXT.
! Program koji u datoteku tablicno ispisuje vrijednosti kvadrata i korijena
!
PROGRAM datoteka
IMPLICIT NONE
INTEGER :: i
REAL :: x
OPEN(UNIT = 5, FILE = "tablica.txt")
WRITE(5, 1)"123456789012345678901234567890"
1 FORMAT(A)
WRITE(5, 2)"x", "x**2", "SQRT(x)"
2 FORMAT(T4, A, T13, A, T23, A)
WRITE(5, 3)"-------", "-------", "----------"
3 FORMAT(A, T11, A, T21, A)
x = 0.1
DO i = 1, 10
WRITE(5, 4) x, x**2, SQRT(x)
4 FORMAT(F5.1, T11, F6.2, T21, F9.5)
x = x + 0.1
END DO
CLOSE(5)
END PROGRAM datoteka

! Program koji u datoteku ispisuje djelitelje ucitanoga broja


!
PROGRAM datoteka2
IMPLICIT NONE
INTEGER :: i, n
WRITE(*, *)"Ucitajte prirodan broj"
READ(*, *) n
OPEN(UNIT = 5, FILE = "tablica.txt")
WRITE(5, 1)"123456789012345678901234567890"
1 FORMAT(A)
WRITE(5, 2)"Trazimo djelitelje broja:", n
2 FORMAT(A, I5)
WRITE(5, 3)"Djelitelj", "Kvocijent"
3 FORMAT(A, T13, A)
WRITE(5, 4)"---------", "---------"
4 FORMAT(A, T13, A)
DO i = 1, n
IF(MOD(n, i) == 0) WRITE(5, 5) i, n/i
5 FORMAT(I6, T13, I6)
END DO
END PROGRAM datoteka2

15
Osnove programiranja – zadatci

Zadatak 5:
Studenti su za ispit podijeljeni u n grupa (s nejednakim brojem članova). Napišite program koji će za
svaku grupu ispisati prosječnu ocjenu te ispisati redni broj grupe s najvećom prosječnom ocjenom.
Ulazni podatci su: n – broj grupa; za svaku grupu: mi – broj članova; oj, j = 1, …, mi – ocjene članova
Preuredite program tako da učitava podatke iz tekst-datoteke ULAZ.TXT.
PROGRAM ispit
IMPLICIT NONE
INTEGER :: i, j, n, m, ocjena, grupa = 0
REAL :: max_prosjek = 0., grup_prosjek
WRITE(*, *) "Upisite broj grupa"
READ(*, *) n
DO i = 1, n
grup_prosjek = 0.
WRITE(*, *) "Upisite broj studenata u grupi"
READ(*, *) m
WRITE(*, *) "Upisite ocjene studenata u grupi"
DO j = 1, m
READ(*, *) ocjena
grup_prosjek = grup_prosjek + ocjena
END DO
grup_prosjek = grup_prosjek/m
IF(grup_prosjek > max_prosjek) THEN
max_prosjek = grup_prosjek
grupa = i
END IF
END DO
WRITE(*, *) "Najveci prosjek: ", max_prosjek, "Najbolja grupa: ", grupa
END PROGRAM ispit

PROGRAM ispit2
IMPLICIT NONE
INTEGER :: i, j, n, m, ocjena, grupa = 0
REAL :: max_prosjek = 0., grup_prosjek
OPEN(UNIT = 5, FILE = "ulaz.txt")
READ(5, *) n
DO i = 1, n
grup_prosjek = 0.
READ(5, *) m
DO j = 1, m
READ(5, *) ocjena
grup_prosjek = grup_prosjek + ocjena
END DO
grup_prosjek = grup_prosjek/m
IF(grup_prosjek > max_prosjek) THEN
max_prosjek = grup_prosjek
grupa = i
END IF
END DO
WRITE(*, *) "Najveci prosjek: ", max_prosjek, "Najbolja grupa: ", grupa
CLOSE(5)
END PROGRAM ispit2
16
Osnove programiranja – zadatci

Radionica – priprema za prvi kolokvij


Zadatak 1.
Napišite program koji učitava dva prirodna broja i, ovisno o njihovim vrijednostima, ispisuje jednu od
sljedeće dvije poruke:
KVADRAT, DULJINA STRANICE: *****, POVRSINA: *****
PRAVOKUTNIK, DULJINE STRANICA: *****, *****, OPSEG: *****

Zadatak 2.
Napišite program koji učitava prirodan broj n i ispisuje umnožak prvih n neparnih brojeva (na primjer, za
upisani broj 5, program mora ispisati 945 kao rezultat množenja 1 ⋅ 3 ⋅ 5 ⋅ 7 ⋅ 9 . Program mora raditi za n =
15.

Zadatak 3.
Napišite program koji učitava deset cijelih brojeva i za svakoga od njih ispisuje tri retka oblika:
UCITANI BROJ: *****
BROJ JE DJELJIV SA 2 (odnosno – ako nije djeljiv, BROJ NIJE DJELJIV SA 2)
BROJ JE DJELJIV SA 3 (odnosno – ako nije djeljiv, BROJ NIJE DJELJIV SA 3)

Zadatak 4.
Prepravite prethodni program tako da rezultate zapisuje u datoteku Djeljivost.txt.

Zadatak 5.
Napišite program koji učitava deset cijelih brojeva ispisuje vrijednost najvećega neparnog učitanog.

Zadatak 6.
Napišite program koji učitava deset cijelih brojeva ispisuje koliko je učitanih brojeva neparno.

Zadatak 7.
Kriterij ocjenjivanja pismenog ispita je kako slijedi:
Bodovi Ocjena
0–44 Nedovoljan (1)
45–59 Dovoljan (2)
60–79 Dobar (3)
80–89 Vrlo dobar (4)
90–100 Izvrstan (5)

Napišite program koji učitava broj bodova za 20 studenata i ispisuje broj pojedinih ocjena, tj. tekst
oblika:
JEDINICA: *****
DVOJKI: *****
TROJKI: *****
ČETVORKI: *****
PETICA: *****

17
Osnove programiranja – zadatci

Zadatak 8.
Prepravite prethodni program tako da rezultate učitava iz datoteke Bodovi.txt, a zapisuje u datoteku
Ocjene.txt.

Zadatak 9.
Napišite program koji učitava n i ispisuje prvih n članova niza zadanog rekurzivno: a1 = 3, ak = 2 ⋅ ak −1 − k .

Zadatak 10.
π
Napišite program koji tablično ispisuje vrijednosti funkcije sin x na intervalu [ 0, 2π ] s korakom .
10

Primjer prvoga parcijalnog ispita

1. Napišite program koji učitava koordinate dviju točaka u ravnini (realni brojevi) i ispisuje njihovu
( x2 − x1 ) + ( y2 − y1 )
2 2
udaljenost. Formula za udaljenost je . Korijen izračunava funkcija SQRT.

2. Napišite program koji ispisuje tablicu (uključujući i prvi redak s brojevima) kubova i sinusa brojeva
od 0.1, 0.2, …, 1.0. Obvezno koristiti petlju!

123456789012345678901234567890
x x**3 SIN(x)
-------- ------- ----------
0.1 0.001 0.09983
3. Napišite program koji učitava deset cijelih brojeva iz datoteke ULAZ.TXT i ispisuje (na ekran)
najmanji od tih brojeva te koliko je od tih brojeva djeljivo sa 2, a koliko djeljivo sa 3. Ako nema
djeljivih sa 2 ili sa 3, program treba ispisati poruku "Nema djeljivih sa 2", odnosno "Nema djeljivih sa
3".

18
Osnove programiranja – zadatci

Vježbe 6
Zadatak 1:
Napišite program koji učitava elemente cjelobrojnog polja dimenzije n ≤ 10 kako slijedi:
 Polje1: upisom svakoga broja u zasebnom retku (DO-petlja);
 Polje2: učitavanjem n i elemenata polja implicitnom DO-petljom;
 Polje3: učitavanjem elemenata polja implicitnom DO-petljom, po tri elementa u jednom retku.
Ispišite sve elemente polja kako slijedi:
 Polje1: ispisom u DO-petlji;
 Polje2: ispisom u implicitnoj DO-petlji;
 Polje3: formatiziranim ispisom implicitnoj DO-petlji, po tri elementa u jednom retku.
Ispišite odabrane elemente polja ispisom u implicitnoj DO-petlji kako slijedi:
 sve elemente s neparnim indeksom;
 sve elemente s parnim indeksom;
PROGRAM Polje1
IMPLICIT NONE
INTEGER, DIMENSION(10) :: polje
INTEGER :: i, n
READ(*, *) n
DO i = 1, n
READ(*, *) polje(i)
END DO
DO i = 1, n
WRITE(*, *) polje(i)
END DO
END PROGRAM Polje1

PROGRAM Polje2
IMPLICIT NONE
INTEGER, DIMENSION(10) :: polje
INTEGER :: i, n
READ(*, *) n, (polje(i), i = 1, n)
WRITE(*, *) (polje(i), i = 1, n)
END PROGRAM Polje2

PROGRAM Polje3
IMPLICIT NONE
INTEGER, DIMENSION(10) :: polje
INTEGER :: i, n
READ(*, *) n
READ(*, 1) (polje(i), i = 1, n)
1 FORMAT(3I5)
WRITE(*, 3) (polje(i), i = 1, n)
END PROGRAM Polje3

PROGRAM Polje4
INTEGER, DIMENSION(10) :: polje
INTEGER :: i, n
READ(*, *) n, (polje(i), i = 1, n)
WRITE(*, *) (polje(i), i = 1, n, 2)
WRITE(*, *) (polje(i), i = 2, n, 2)
END PROGRAM Polje4
19
Osnove programiranja – zadatci

Zadatak 2:
Napišite program koji priprema i ispisuje kvadratnu matricu reda 4 kako slijedi:
 nul-matricu;
 jediničnu matricu;
 s jedinicama u četvrtom retku i nulama na ostalim mjestima;
 s jedinicama u drugom stupcu i nulama na ostalim mjestima;
 s jedinicama ispod dijagonale, nulama na dijagonali i iznad dijagonale;
 s jedinicama iznad dijagonale, nulama na dijagonali i ispod dijagonale.

PROGRAM Matrice1 PROGRAM Matrice2


IMPLICIT NONE IMPLICIT NONE
INTEGER, DIMENSION(4, 4) :: Matrica INTEGER, DIMENSION(4, 4) :: Matrica
INTEGER :: i, j INTEGER :: i, j
Matrica=0 Matrica=0
DO i = 1, 4 DO i = 1, 4
WRITE(*,*) (Matrica(i, j), j = 1, 4) Matrica(i, i) = 1
END DO END DO
END PROGRAM Matrice1 DO i = 1, 4
WRITE(*,*) (Matrica(i, j), j = 1, 4)
END DO
END PROGRAM Matrice2

PROGRAM Matrice3 PROGRAM Matrice4


IMPLICIT NONE IMPLICIT NONE
INTEGER, DIMENSION(4, 4) :: Matrica INTEGER, DIMENSION(4, 4) :: Matrica
INTEGER :: i, j INTEGER :: i, j
Matrica=0 Matrica=0
DO j = 1, 4 DO i = 1, 4
Matrica(4, j) = 1 Matrica(i, 2) = 1
END DO END DO
DO i = 1, 4 DO i = 1, 4
WRITE(*,*) (Matrica(i, j), j = 1, 4) WRITE(*,*) (Matrica(i, j), j = 1, 4)
END DO END DO
END PROGRAM Matrice3 END PROGRAM Matrice4

PROGRAM Matrice5 PROGRAM Matrice6


IMPLICIT NONE IMPLICIT NONE
INTEGER, DIMENSION(4, 4) :: Matrica INTEGER, DIMENSION(4, 4) :: Matrica
INTEGER :: i, j INTEGER :: i, j
Matrica=0 Matrica=0
DO i = 1, 4 DO i = 1, 4
DO j = 1, i – 1 DO j = i + 1, 4
Matrica(i, j) = 1 Matrica(i, j) = 1
END DO END DO
END DO END DO
DO i = 1, 4 DO i = 1, 4
WRITE(*,*) (Matrica(i, j), j = 1, 4) WRITE(*,*) (Matrica(i, j), j = 1, 4)
END DO END DO
END PROGRAM Matrice5 END PROGRAM Matrice6

20
Osnove programiranja – zadatci

Zadatak 3:
Napišite program koji učitava dimenziju n ≤ 5 dva realna vektora, učitava njihove elemente, i potom
koristeći odgovarajuće vektorske funkcije izračunava njihov skalarni umnožak te najmanji i najveći
element prvog vektora. Što se događa kad kao dimenziju unesete broj manji od 5?
PROGRAM Skalarni1
IMPLICIT NONE
REAL, DIMENSION(5) :: Vektor1, Vektor2
INTEGER :: n, i
REAL :: skalp
WRITE(*, *) "Upisite dimenziju vektora"
READ(*, *) n
WRITE(*, *) "Upisite elemente prvog vektora"
READ(*, *) (Vektor1(i), i = 1, n)
WRITE(*, *) "Upisite elemente drugog vektora"
READ(*, *) (Vektor2(i), i = 1, n)
skalp = SUM(Vektor1 * Vektor2)
WRITE(*, *) "Skalarni umnozak je: ", skalp
WRITE(*, *) "Najveci element prvog je: ", MAXVAL(Vektor1)
WRITE(*, *) "Najmanji element prvog je: ", MINVAL(Vektor1)
END PROGRAM Skalarni

Zadatak 4:
Napišite program koji učitava dimenziju cjelobrojnog vektora, alocira vektor, učitava njegove elemente i
ispisuje njegov najveći element, najmanji element, zbroj elemenata, umnožak elemenata te korištenjem
WHERE-bloka izračunava broj i zbroj pozitivnih elemenata.
PROGRAM Vekt_funkcije
IMPLICIT NONE
INTEGER, ALLOCATABLE, DIMENSION(:) :: Vektor, Vektor2
INTEGER :: i, n
READ(*, *) n
ALLOCATE(Vektor(n), Vektor2(n))
READ(*,*) (Vektor(i), i = 1, n)
WRITE(*, 1) "Najveci element: ", MAXVAL(Vektor)
WRITE(*, 1) "Najmanji element: ", MINVAL(Vektor)
WRITE(*, 1) "Zbroj elemenata: ", SUM(Vektor)
WRITE(*, 1) "Umnozak elemenata: ", PRODUCT(Vektor)
1 FORMAT(A, T19, I6)
Vektor2 = 0
WHERE(Vektor > 0)
Vektor2 = 1
END WHERE
WRITE(*, 1) "Broj pozitivnih: ", SUM(Vektor2)

Vektor2 = 0
WHERE(Vektor > 0)
Vektor2 = Vektor
END WHERE
WRITE(*, 1) "Zbroj pozitivnih: ", SUM(Vektor2)
DEALLOCATE(Vektor, Vektor2)
END PROGRAM Vekt_funkcije

21
Osnove programiranja – zadatci

Zadatak 5:
Napišite program koji učitava dimenziju dva realna vektora, alocira vektore, učitava njihove elemente,
izračunava njihov skalarni umnožak te normu svakoga od njih, a = x12 + ... + xn2 .
PROGRAM Skalarni2
IMPLICIT NONE
REAL, ALLOCATABLE, DIMENSION(:) :: Vektor1, Vektor2
INTEGER :: n, i
REAL :: skalp, dulj1, dulj2
WRITE(*, *) "Upisite dimenziju vektora"
READ(*, *) n
ALLOCATE(Vektor1(n), Vektor2(n))
WRITE(*, *) "Upisite elemente prvog vektora"
READ(*, *) (Vektor1(i), i = 1, n)
WRITE(*, *) "Upisite elemente drugog vektora"
READ(*, *) (Vektor2(i), i = 1, n)
skalp = SUM(Vektor1 * Vektor2)
WRITE(*, *) "Skalarni umnozak je: ", skalp
dulj1 = SQRT(SUM(Vektor1 * Vektor1))
dulj2 = SQRT(SUM(Vektor2 * Vektor2))
WRITE(*, *) "Norma prvoga je: ", dulj1
WRITE(*, *) "Norma drugoga je: ", dulj2
DEALLOCATE(Vektor1, Vektor2)
END PROGRAM Skalarni2

Zadatak 6:
Napišite program koji učitava red cjelobrojne kvadratne matrice, alocira matricu i učitava njene
elemente, potom ispisuje njen najveći element te zbroj i umnožak elemenata.
PROGRAM Mat_funkcije
IMPLICIT NONE
INTEGER, ALLOCATABLE, DIMENSION(:, :) :: Matrica
INTEGER :: i, j, n
READ(*, *) n
ALLOCATE(Matrica(n, n))
READ(*,*) ((Matrica(i, j), j=1, n), i=1, n)
DO i = 1, n
WRITE(*, *) (Matrica(i, j), j=1, n)
END DO
WRITE(*,1) "Najveci element: ", MAXVAL(Matrica)
WRITE(*,1) "Najmanji element: ", MINVAL(Matrica)
WRITE(*,1) "Zbroj elemenata: ", SUM(Matrica)
WRITE(*,1) "Umnozak elemenata: ", PRODUCT(Matrica)
1 FORMAT(A, T19, I6)
DEALLOCATE(Matrica)
END PROGRAM Mat_funkcije

22

You might also like