Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

1 Drugi blok

1.1 Ciklusi
1. Napisati program koji stampa prvih deset prirodnih brojeva.

Program: program prvih10


implicit none

integer :: i

print*, ’Prvih 10 prirodnih brojeva:’


do i = 1, 10
print*, i
enddo

print*, ’Neparni:’
do i = 1, 10, 2
print*, i
enddo

print*, ’Parni:’
do i = 2, 10, 2
print*, i
enddo

print*, ’Unazad’
do i = 10, 1, -1
print*, i
enddo

end program prvih10


2. Napisati program koji stampa brojeve od 1 do 77 sa korakom 7.

Program: program svaki_sedmi


implicit none

integer :: i

print*, ’Svaki sedmi broj pocev od 1:’


do i = 1, 77, 7
print*, i
enddo

end program svaki_sedmi


3. Napisati program koji izracunava faktorijel prirodnog broja n.

1
Program: program faktorijel
implicit none

integer :: n, rezultat
integer :: i ! Brojac u petljama

print*, ’n=?’
read*, n

if(n < 0) stop ’Broj ciji se faktorijel racuna mora biti nenegativan’

! VAZNO proizvod se inicijalizuje na 1.


rezultat = 1
do i = 1, n
rezultat = rezultat * i
enddo

print*, n, ’ != ’, rezultat

end program faktorijel


4. Napisati program koji omogucava unos 5 brojeva i sumira sve nenegativne.

Program: ! Program ilustruje upotrebu cycle naredbe.


program suma1
implicit none

integer :: x
integer :: suma = 0 ! VAZNO, suma se inicijalizuje na 0.
integer :: i

do i = 1, 5
print*, ’x = ?’
read*, x

if(x < 0) cycle

suma = suma + x
enddo
print*, ’Suma unetih nenegativnih brojeva je:’, suma

end program suma1


1
5. Izracunati sve vrednosti x+1 gde x polazi od 0 do 99 sa korakom 10 i sacuvati rezultate u
nekom fajlu.

2
Program: program formatizovan_izlaz
implicit none

integer :: x
real :: S

open(unit = 1, file = ’izlaz.dat’)

do x = 0, 99, 10
S = 1.0/(x + 1)
write (1, *) S
enddo

close(1)

end program formatizovan_izlaz


6. Pocevsi treniranje takmicar je prve nedelje pretrcao A kolimetara, a kasnije svake nedelje je
razdaljinu povecavao za 10%. Odrediti nedelju u kojoj je pretrcao distancu jednaku duzini
maratona (42.195 km).

Program: program maraton


implicit none

real :: A
integer :: nedelja = 1
real, parameter :: DUZINA_MARATONA = 42.195

print*, ’Unesite duzinu kojom je takmicar poceo treninge, u kilometrima’


read*, A
do while (A < DUZINA_MARATONA)
A = 1.1 * A
nedelja = nedelja + 1
enddo

print*, ’U ’, nedelja, ’ nedelji, takmicar je pretrcao: ’, A, ’ km’

end program maraton

3
1.2 Nizovi
7. Program demonstrira osnovne operacije sa nizovima:

Program: program nizovi_uvod


implicit none

! Deklaracija niza celih brojeva duzine 10


integer, dimension(10) :: a

! Niz duzine 3 inicijalizovan vrednostima 1, 2, 3


integer, dimension(3) :: b = (/1, 2, 3/)

a = 0 ! SVIM elementima niza a se dodeljuje vrednost 0.

print*, a ! Stampaju se SVI elementi niza a.

! Promeni se par elemenata


a(1) = 1
a(2) = -2
a(3) = 3

! Ispisuje se podniz datog niza.


print*, a(1:3)

print*, b

end program nizovi_uvod


8. Napisati program koji izracunava srednju vrednost niza maksimalne duzine 50.

4
Program: program srednja_vrednost_niza
implicit none

integer, parameter :: MAX_DUZINA_NIZA = 50


real, dimension(MAX_DUZINA_NIZA) :: a
integer :: n, i
real :: suma = 0.0

print*, ’Broj elemenata niza? ’


read*, n

print*, ’Elementi niza? ’


read*, (A(i), i = 1,n)

do i = 1, n
suma = suma + A(i)
end do

print*, ’Srednja vrednost: ’, suma / n

end program srednja_vrednost_niza


9. Napisati program koji sortira niz iz prethodnog primera rastuce (Selection sort).

5
Program: program selection_sort
implicit none

integer, parameter :: MAX_DUZINA_NIZA = 50


real, dimension(MAX_DUZINA_NIZA) :: a
integer :: n, i, j, temp

print*, ’Duzina niza?’


read*, n

print*, ’Elementi niza?’


read*, (a(i), i = 1, n)

print*, ’Pre sortiranja: ’, (a(i), i = 1, n)


do i = 1, n - 1
do j = i + 1, n
if(a(i) > a(j)) then
temp = a(i)
a(i) = a(j)
a(j) = temp
endif
enddo
enddo

print*, ’Posle sortiranja: ’, (a(i), i = 1, n)

end program selection_sort


10. Napisati program koji racuna skalarni proizvod vektora u n - dimenzionom prostoru.

6
Program: program skalarni_proizvod
implicit none

! Min i max dimenzija prostora


integer, parameter :: MIN_DIMENZIJA = 2
integer, parameter :: MAX_DIMENZIJA = 50

real, dimension(MAX_DIMENZIJA) :: v1, v2 ! Vektori


real :: skalarniProizvod = 0.0
! Vrednost skalarnog proizvoda
integer :: n
! Stvarna dimenzija problema
integer :: i
! Brojac u petljama

! Ucitava se dimenzija problema i proverava se korektnost unosa.


write(*,*) ’Dimenzija prostora [2, 50]’
read(*, *) n

if(n < MIN_DIMENZIJA .or. n > MAX_DIMENZIJA) stop ’Greska...’

! Ucitavaju se koordinate vektora.


write(*, *) ’Prvi vektor?’
read(*, *) (v1(i), i = 1, n)

write(*, *) ’Drugi vektor?’


read(*, *) (v2(i), i = 1, n)

! Izracunava se skalarni proizvod unetih vektora.


do i = 1, n
skalarniProizvod = skalarniProizvod + v1(i) * v2(i)
enddo

write(*, *) ’Skalarni proizvod vektora ’, (v1(i), i = 1, n), ’ i ’


write(*, *) (v2(i), i = 1, n), ’ je: ’, skalarniProizvod

end program skalarni_proizvod


11. Na Svetskom takmicenju u trcanju za muskarce na 100m, nizom duzine n <= 10 su pred-
stavljeni rezultati trcanja. Prikazati rezultate sortirano rastuce po vremenu trcanja. Ako je
poznato da je na prethodnom takmicenju oboren svetski rekord vremenom 9.58sec, ispitati
da li je na ovom takmicenju postavljen novi.

7
Program: program atletika
implicit none

integer, parameter :: BROJ_TAKMICARA = 10


real, dimension(BROJ_TAKMICARA) :: vremena
! rezultati takmicara
integer :: n
! stvaran broj takmicara
real :: pom
! pomocna promenljiva
integer :: i, j
! brojaci u petljama

real, parameter :: SVETSKI_REKORD = 9.58


! Svetski rekord

write(*, *) ’Koliko takmicara je ucestvovalo u trci?’


read(*, *) n

write(*, *) ’Rezultati?’
read(*, *) (vremena(i), i = 1, n)

! Sortira se niz vremena rastuce i prikazuje rezultat


do i = 1, n - 1
do j = i + 1, n
if(vremena(i) > vremena(j)) then
pom = vremena(i)
vremena(i) = vremena(j)
vremena(j) = pom
endif
enddo
enddo

write(*, *) ’Rezultati: ’, (vremena(i), i = 1, n)

! Ispituje se da li je postavljen novi svetski rekord.


if(vremena(1) < SVETSKI_REKORD) then
write(*, *) ’Novi svetski rekord: ’, vremena(1), ’sec’
else
write(*, *) ’Vreme: ’, vremena(1), ’ nije bilo dovoljno za obaranje rekorda.’
endif

end program atletika


12. Program izracunava vrednost polinoma stepena ne veceg od 20 ciji su koeficijenti realni
brojevi zadati nizom, u nekoj tacki x.

8
Program: program vrednost_polinoma
implicit none

integer, parameter :: MAX_STEPEN = 20


! Maksimalan stepen polinoma
real, dimension(MAX_STEPEN + 1) :: polinom
! Koeficijenti polinoma
integer :: stepen
! Stvarni stepen polinoma
real :: x, vrednost = 0.0
! tacka u kojoj se vrednost racuna i vrednost
integer :: i ! Brojac u petljama

write(*, *) ’Stepen polinoma?’


read(*, *) stepen

write(*, *) "Koeficijenti polinoma, pocev od ’najstarijeg’?"


read(*, *) (polinom(i), i = 1, stepen + 1)

write(*, *) ’x = ?’
read(*, *) x

do i = stepen + 1, 1, -1
vrednost = vrednost * x
vrednost = vrednost + polinom(i)
enddo

write(*, *) ’Vrednost polinoma za x = ’, x, ’ je: ’, vrednost

end program vrednost_polinoma

You might also like