Professional Documents
Culture Documents
Orca Share Media1521443141612 PDF
Orca Share Media1521443141612 PDF
GRAĐEVINSKI FAKULTET
viši asistent
mr. Rašid Hadžović, dipl.inž.građ.
MOSTAR, 2007.
UNIVERZITET „DŽEMAL BIJEDIĆ“ U MOSTARU
GRAĐEVINSKI FAKULTET
A
viši asistent
mr. Rašid Hadžović, dipl.inž.građ.
PT
mr. Rašid Hadžović, dipl.inž.građ.
ZBIRKA RIJEŠENIH ZADATAKA
RI
PROGRAMIRANJE U FORTRANU
SKRIPTA
SK
MOSTAR, 2007.
Univerzitet «Džemal Bijedić» u Mostaru
Građevinski fakultet
Programiranje i numeričke metode viši asistent mr. Rašid Hadžović, dipl.inž.građ.
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
SADRŽAJ:
1. Programiranje u Fortran-u 02
2. Riješeni zadaci 22
3. Problemi za vježbanje 55
4. Neki od dosadašnjih ispitnih zadataka 62
RI
5. Zadaci za seminarski rad 66
6. Literatura 73
SK
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
PROGRAMIRANJE U FORTRANU
RI
SK
UVOD
Svaki program se sastoji od pet osnovnih koraka. Prvi korak START odnosno početak,
drugi korak je UČITAVANJE PODATAKA sa kojima će se raditi u programu, treći korak je
OPERACIJA, odnosno faza programa gdje se unešeni podaci obrađuju tj. vrši se rad sa
podacima u zavisnosti od zadatka. U četvrtom koraku se ŠTAMPAJU rezultati programa,
dok se u petom koraku program završava (STOP i END).
A
DIJAGRAM TOKA PROGRAMA
Definicija
Dijagrami toka se koriste za grafičko predstavljanje redosljeda svih radnji, koje su sastavni
PT
dio nekog programa: početka, učitavanja podataka, operacija, poređenja, štampanja
rezultata, pozivanja potprograma i završetka.
Štampanje podataka i
rezultata na ekranu ili na WRITE, PRINT
ili štampaču
SK
Poređenje – ispunjenje
IF
uslova
Povratak iz potprograma
RETURN
u glavni program
Dijagram
Objašnjenje
toka
Potrebne podatke unosimo sa tastature ili iz nekog poznatog FILE-a. U
Učitavanje
Fortranu koristimo naredbu READ(*,*) ili READ(5,*). U slučaju da se podaci
podataka
unose u program iz nekog FILE-a onda se koristi naredba OPEN.
U ovu grupu spadaju sve komande, koje obavljaju neku vrstu operacije u
Operacija
zavisnosti od onog što se traži u zadatku.
Ispis podataka i rezultata na ekranu ili na štampaču. Vrši se pomoću
Štampanje naredbe WRITE(*,*) ili WRITE(6,*). Oznaka * ili 6 znači da se podaci i
A
podataka rezultati ispisuju na ekranu. Oznaka * poslije zareza znači da je naredba
unešena u slobodnom formatu.
Najčešće korištena funkcija je IF (ako – u prevodu sa engleskog jezika) koja
Poređenje –
nam služi da bi postavili pitanje neke operacije i da bi na to pitanje imali dva
ispunjenje
moguća odgovora DA i NE. Kasnije će biti više riječi o funkciji IF.
uslova
PT
START, Komande koje se stavljaju u dijagram toka da bi se označio početak i kraj
STOP i END programa.
Pozivanje Znak koji nam služi za pozivanje potprograma. Razlikujemo 2 potprograma:
VARIJABLE
Znak = u FORTRAN-u nema isto značenje kao matematički znak = već znači: prebaci sa
desne strane jednačine na lijevu stranu.
OPERACIJE U FORTRANU
A
Redoslijed korištenja aritmetičkih operacija:
PT
3. množenje i dijeljenje *,/
4. sabiranje i oduzimanje +,-
Zavisne operacije
READ
Naredba za učitavanje podataka u program.
Oznaka * ili 5 znači da se podaci unose sa tastature. Oznaka * poslije zareza znači da je
A
naredba unešena u slobodnom formatu. Oznaka n predstavlja ime FORMATA, a
označava se proizvoljnim brojem i upućuje na broj kojim je predstavljena naredba Format.
Primjer:
READ(5,10)N
10 FORMAT (I2)
PT
WRITE
Naredba za štampanje ili ispis podataka i rezultata na ekranu ili na štampaču.
Oznaka * ili 6 znači da je ispis prikazan na ekranu. Oznaka * poslije zareza znači da je
naredba unešena u slobodnom formatu. Oznaka n predstavlja ime FORMATA, a
označava se proizvoljnim brojem i upućuje na broj kojim je predstavljena naredba Format.
Primjer:
RI
WRITE(6,10)N
10 FORMAT(I2)
FORMAT
Naredba pomoću koje, u programu, definišemo ulaz i izlaz podataka tj. prema vrsti
podataka se određuje format u kojem će biti unešeni (razlikujemo cjelobrojne i realne
varijable), kao i uređenje ekrana ili štampane stranice.
Promjenljiva
Fortranu u kojoj se koristi
Cijeli broj In READ/WRITE
Realan broj maksimalno do 7 decimala Fn.m READ/WRITE
Realan broj maksimalno do 7 decimala En.m READ/WRITE
Realan broj (do 7 decimala ) –
Gn.m READ/WRITE
decimalan i eksponencijalan
Realan broj (do 16 decimala) Dn.m READ/WRITE
Alfanumerički broj An READ/WRITE
Logički broj Ln READ/WRITE
Početna tačka za broj kolone Tn WRITE
Preskakanje n kolona nX READ
Broj preskočenih redova n/ WRITE
Broj preskočenih kolona 1X WRITE
Samo neki od Format-a će biti obrađeni u ovoj skripti.
Primjer:
READ(5,10)N
10 FORMAT (I3)
Ili
A
WRITE(6,10)N
10 FORMAT(I3)
U ovim primjerima moguće je unijeti samo trocifrene pozitivne dok je nemoguć unos
neativnih brojeva ili ispisati trocifrene pozitivne dvocifrene negativne brojeve.
PT
Grafički prikaz formata I4:
±
Primjer:
READ(5,10)N
10 FORMAT (F8.2)
Ili
WRITE(6,10)N
10 FORMAT(F8.3)
± .
Grafički prikaz formata F8.3
n =A+ B + C + D
A – broj mjesta za predznak
B – broj mjesta za broj cifara broja koji će biti unešen ili ispisan
C – broj mjesta za decimalnu tačku
D – broj mjesta koji je ostavljen za broj decimalnih brojeva
A
Isto važi i za Format En.m osim što nije predviđen broj mjesta za predznak, jer se Format
En.m ne koristi za negativne brojeve.
PT
0.34567 .346E+00 0.346
435.67 .436E+03 435.670
Primjer:
WRITE(6,10)N
10 FORMAT(T20,I2)
Značenje u Formatu:
RI
U prvom redu i u 20–toj koloni (T20) će početi ispis rezultata.
nX – oznaka za broj kolona koje će se preskočiti prilikom unošenja ili ispisa podataka
ili rezultata. Koristi se u naredbama READ i WRITE.
Primjer:
READ(5,10)R
10 FORMAT(10X,F8.2)
SK
Značenje u Formatu:
10X – preskočeno deset kolona
Znak / - oznaka za preskakanje određenog broja redova pri unosu ili ispisu podataka
ili rezultata. Koristi se u naredbama READ i WRITE.
Primjer:
WRITE(6,*)’UNESITE NEKI REALAN BROJ’
READ(5,10)R
10 FORMAT(F8.2)
WRITE(6,11)R
11 FORMAT(///,10X,’REALAN BROJ JE:’,F8.2)
STOP
END
Značenje u Formatu:
/// – preskočena tri reda i 10X – preskočeno deset kolona tj. ispis REALAN BROJ JE: će
početi u četvrtom redu i u 11-toj koloni.
A
1) Bezuslovni GOTO
Naredba koja usmjerava program direktno na broj nekog reda bez ikakvog uslova.
2) IF
a) LOGIČKI “IF”
b) ARITMETIČKI “IF”
PT
c) BLOK “IF”
a) LOGIČKI “IF”
.EQ.
RI
.NE.
.NOT. .GT.
<Logički izraz> = <Izraz> .GE. <Izraz> .AND. <Izraz>
.LT. .OR.
.LE.
promjenljiv
<Izraz> : nepromjenljiv
Aritmetički izraz
SK
<izraz u FORTRAN – u >: Ako je rezultat aritmetičkog izraza TAČAN onda program <izraz
u FORTRAN – u > naredbu slijedi, u suprotnom program nastavlja sa svojim tokom (u
slučaju odgovora NE).
Primjer: NE DA
K=5 K=5
IF(K.EQ.5)WRITE(*,*) ‘USLOV TACAN’
WRITE(*,9)’USLOV POGRESAN’
STOP
END
b) ARITMETIČKI “IF”
Koristi se za poređenje i za ispunjavanje jednog uslova koji ima tri različita odgovora.
A
N1: <Arit. Izraz> Ako je rezultat <0 (manji od nule) → broj reda
S1: <Arit. Izraz> Ako je rezultat =0 (jednak nuli) → broj reda
P1: <Arit. Izraz> Ako je rezultat >0 (veći od nule) → broj reda
<0 >0
Rezultat
PT
mr. Rašid Hadžović, dipl.inž.građ.
=0
Primjer: Unijeti cijele negativne i pozitivne brojeve i naći pojedinačno zbir pozitivnih i zbir
negativnih. Program se zaustavlja unošenjem nule u program.
Rješenje:
Prikaz na ekranu će biti, ako unesemo sljedeće brojeve 3, 5, -8, -7, 10, 0.
A
c) BLOK “IF”
PT
ELSE
-----------------------
-----------------------
Možemo raditi i sa više uslova i sa više blokova, ali samo se jedno ENDIF koristi.
Ako se naredba ELSE ne koristi, onda je uslov tačan i program nastavlja sa radom dok ne
dođe do naredbe ENDIF, osim u slučaju ako u bloku IF ne postoji naredba GOTO koja bi
RI
preusmjerila tok programa.
Primjer:
K=5
IF(K.EQ.5) THEN
WRITE(6,*)’TACNO’
WRITE(6,*)’KRAJ PROGRAMA’
5 GOTO 50
SK
ENDIF
10 WRITE(6,*)’NETACNO’
50 STOP
END
U ovom slučaju, ako je uslov K=5 tačan onda se koristi naredba GOTO da bi se
preusmjerio tok programa na kraj programa, u suprotnom program ispisuje na ekranu
NETACNO i zaustavlja se.
Ako se naredba ELSE koristi u bloku IF i ako je uslov tačan onda program ide onim tokom
kako ga usmjeravaju naredbe THEN i ELSE, osim u slučaju ako u bloku IF ne postoji
naredba GOTO koja bi preusmjerila tok programa.
Primjer:
K=5
IF(K.EQ.5) THEN
WRITE(6,*)’TACNO’
WRITE(6,*)’ISHOD POZITIVAN’
ELSE
WRITE(6,*)’NETACNO’
WRITE(6,*)’ISHOD NEGATIVAN’
A
ENDIF
STOP
END
Pomoću ELSE programu dajemo mogućnost da odabere tačan odgovor, odnosno ako je
uslov tačan na ekranu biće ispisano:
PT
TACNO
ISHOD POZITIVAN
dok će u suprotnom biti:
------- BLOK Z
-------
ELSE
-------
------- BLOK W
-------
ENDIF
A
ELSE IF [<Uslov 2>] THEN
-------
------- BLOK C
ELSE
-------
------- BLOK C1
PT
ENDIF
ENDIF
-------
c) svaki blok koji počne mora se i završiti. Iz jednog IF bloka se ne može prebacivati
neka informacija u drugi.
SK
Tačan blok IF
IF (<Uslov>) THEN
-------
-------
-------
-------
ELSE
-------
-------
-------
-------
-------
-------
ENDIF
Zbirka riješenih zadataka 13
Programiranje i numeričke metode - FORTRAN
Univerzitet «Džemal Bijedić» u Mostaru
Građevinski fakultet
Programiranje i numeričke metode viši asistent mr. Rašid Hadžović, dipl.inž.građ.
Netačan blok IF
IF (<Uslov>) THEN
-------
-------
-------
-------
ELSE
A
-------
-------
-------
-------
ENDIF
PT
3) DO – CONTINUE petlja
nepromjenljivi
aritmetički izraz
broj – funkcija.
<Sn> : broj reda koji završava petlju i kome se pridružuje naredba CONTINUE. Mora biti
cijeli broj.
Pravila:
1. Naredba DO se uvijek mora koristiti zajedno sa naredbom CONTINUE.
2. Petlja počinje sa naredbom DO i uzima vrijednost <prva> i nastavlja sa
radom sve do naredbe CONTINUE.
3. Naredba CONTINUE prilikom svakog okretanja petlje povećava vrijednost
<prva> za vrijednost <korak rasta> dok ne dođe do zadnje vrijednosti
<kraj>. Poslije toga program dalje nastavlja sa radom.
4. Ako se vrijednost <korak rasta> ne napiše onda se uzima da je 1.
Zbirka riješenih zadataka 14
Programiranje i numeričke metode - FORTRAN
Univerzitet «Džemal Bijedić» u Mostaru
Građevinski fakultet
Programiranje i numeričke metode viši asistent mr. Rašid Hadžović, dipl.inž.građ.
Primjer:
WRITE(6,10)
10 FORMAT(1X,24(/))
DO 20 I = 1,5
A
WRITE(6,25) I
25 FORMAT(1X,I2,’.PUTA RADIO’)
20 CONTINUE
STOP
END
PT
6. Ako je ispunjen uslov onda će se DO – CONTINUE petlja okrenuti barem
jednom.
Prikaz na ekranu:
5. PUTA RADIO
tj. ako je vrijednost <prva> veća od vrijednosti <kraj> onda će se petlja jedan put okrenuti.
7. Ako je vrijednost <korak rasta> negativna onda vrijednost <prva> mora biti
SK
Primjer:
WRITE(6,10)
11 FORMAT(1X,24(/))
DO 20 I = 5,1,-1
WRITE(6,25) I
25 FORMAT(1X,’I=’,I2)
20 CONTINUE
STOP
END
Prikaz na ekranu:
I=5
I=4
I=3
I=2
I=1
A
prije dolaska do naredbe DO tj. prije petlje mora im se prethodno zadati neka
vrijednost.
----------
----------
5 DO 10 I = N,M
----------
PT
----------
10 CONTINUE
----------
Primjer:
RI
WRITE(6,10)
10 FORMAT(1X,24(/))
DO 20 I = 1,5
WRITE(6,25) I
25 FORMAT(1X,I2,’.PUTA RADIO’)
50 I=6
20 CONTINUE
STOP
END
SK
Prikaz na ekranu:
PUTA RADIO
1. PUTA RADIO
2. PUTA RADIO
3. PUTA RADIO
4. PUTA RADIO
5. PUTA RADIO
Primjer:
INTEGER ZBIR
ZBIR=0
WRITE(6,10)
A
10 FORMAT(1X,24(/))
DO 20 I = 1,100
ZBIR=ZBIR + I
20 CONTINUE
WRITE(6,25)ZBIR
PT
25 FORMAT(1X,’ZBIR BROJEVA:’,I5)
STOP
END
MOGUĆE DO ...................
GOTO ili IF
...................
CONTINUE
RI
NEMOGUĆE DO..................
....................
....................
CONTINUE
GOTO ili IF
SK
12. U slučaju da imamo više od jedne petlje pravilo rješavanja petlji je iznutra
prema vani.
MOGUĆE
NEMOGUĆE
DO 10
DO 20
DO 30
....................
....................
A
....................
30 CONTINUE
10 CONTINUE
20 CONTINUE
PT
13. Za više petlji možemo da koristimo samo jedan CONTINUE.
DO 10 K
10 CONTINUE
Naredba koja određuje (rezerviše) prostor za varijable i promjenljive koje će biti unešene
prilikom korištenja programa.
DIMENSION serija – ime (a1, a2, ...) [serija – ime 1 (b1, b2,...)]
Primjer:
SK
Pravila:
POTPROGRAMI
Prilikom programiranja mnogo puta se desi da se dijelovi programa ponavljaju. Da ih
ne bi ponovo pisali na različitim mjestima, koristimo se potprogramima za obavljanje te
funkcije. Znači, program koji može da radi sam za sebe, a koji je dio glavnog programa
zovemo POTPROGRAM.
A
1) Otvoreni potprogram: FUNCTION (funkcijski) potprogram
2) Zatvoreni potprogram: CALL SUBROUTINE (opšti) potprogram
PT
RETURN: Naredba za povratak iz potprograma u glavni program.
Opšti oblik:
INTEGER
REAL
DOUBLE PRECISION FUNCTION <ime> (par1(,par2)...)
COMPLEX --------
LOGICAL --------
SK
CHARACTER --------
--------
RETURN
END
Pravila:
A
u tom potprogramu.
Primjer:
←
S = F(A,B)
PT
↑↓↓
↑↓↓
Objašnjenje:
2) OPŠTI POTPROGRAM
SK
Pravila:
Primjer:
A
-------
CALL PRIMJER (A,B,C,N,...)
------- ↑↑ ↓ ↓
------- ↑↑↓↓
SUBROUTINE PRIMJER (D,E,F,M...)
-------
PT
-------
RETURN
Objašnjenje:
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RIJEŠENI ZADACI
RI
SK
Dijagram toka
START
A
A
PT
B
STOP
END
RI
Fortran
STOP
END
Ispis na ekranu
INTEGER ZBI
A
A
ZBI
PT
S=(A+ZBI)*B
STOP
END
RI
Fortran
2 FORMAT(F8.2)
WRITE(6,*)'UNESITE ZADNJI BROJ INDEKSA'
READ(5,3)ZBI
3 FORMAT(I2)
S=(A+ZBI)*B
WRITE(6,4)S
4 FORMAT(/,5X,'VRIJEDNOST S=',F10.2)
STOP
END
Ispis na ekranu
Dijagram toka
START
A
A
DA NE
A>B
PT
A B
END
Fortran
RI
C UCITATI VARIJABLE A i B I ODSTAMPATI VECU
C UCITAVANJE VARIJABLI A i B
WRITE(*,*)'UNESITE VARIJABLE A i B'
READ(5,10)A,B
10 FORMAT(F8.2)
C STAMPANJE VARIJABLI A i B
IF(A.GT.B)GOTO 15
WRITE(6,2)
2 FORMAT(10X,///,'VARIJABLA B JE VECA=',F8.2)
WRITE(6,20)B
20 FORMAT(10X,///,'VARIJABLA B=',F8.2)
SK
GOTO 100
15 WRITE(6,3)
3 FORMAT(10X,///,'VARIJABLA A JE VECA=',F8.2)
WRITE(6,25)A
25 FORMAT(10X,///,'VARIJABLA A=',F8.2)
100 STOP
END
Ispis na ekranu
Dijagram toka
START
A
A
SUMA=A+B
PT
PROIZVOD=A*B
STOP
END
RI
Fortran
C=A+B
P=A*B
WRITE(6,3)C
3 FORMAT(10X,///,'SUMA=',1X,F7.2)
WRITE(6,4)P
4 FORMAT(10X,////,'PROIZVOD=',1X,F10.2)
STOP
END
Ispis na ekranu
5) Učitati varijable A i B, naći sumu i proizvod istih i odštampati veću od njih u glavnom
programu.
Rješenje:
Dijagram toka
START
A
A
PT
S=A+B
DA NE
S>P
S P
RI
STOP
END
Fortran
READ(5,2)B
2 FORMAT(F 6.1)
S=A+B
P=A*B
IF(S.GT.P)THEN
WRITE(*,5)
5 FORMAT(/,'SUMA JE VECA OD PROIZVODA')
WRITE(6,3)S
3 FORMAT(/,'SUMA JE',1X,F 7.2)
ELSE
WRITE(*,6)
6 FORMAT(/,'PROIZVOD JE VECI OD SUME')
WRITE(6,4)P
4 FORMAT(/,'PROIZVOD JE',1X,F 10.2)
ENDIF
STOP
END
Ispis na ekranu
A
6) Učitati varijable A i B, naći količnik istih i odštampati ga u glavnom programu.
Rješenje:
Dijagram toka
PT
START
DA
B=0
RI
C=A/B
STOP
END
SK
Fortran
C KALKULACIJA KOLICNIKA
WRITE(*,*)'UNESITE VARIJABLU A'
READ(5,1)A
1 FORMAT(F 6.2)
5 WRITE(*,*)'UNESITE VARIJABLU B'
READ(5,2)B
2 FORMAT(F 6.2)
IF(B.EQ.0)GOTO 5
C=A/B
WRITE(6,3)C
3 FORMAT(/,'KOLICNIK JE',F10.2)
STOP
END
A
7) Napraviti program za rješavanje kvadratne jednačine: ax2 + bx + c = 0.
Rješenje:
−b ± b 2 − 4ac
PT
x1,2 =
2a
DA
A=0
D = B2 − 4 * A * C
SK
−B − D
−B X1 =
X1 = 2* A
IMAM 2* A
KOMPLEKSNA
RJESENJA −B + D
IMAM DVOSTRUKO X1 =
RJESENJE, X= 2* A
END
Fortran
A
READ(5,1)B
WRITE(6,*)'UNESITE VRIJEDNOST C'
READ(5,1)C
WRITE(6,*)'UNESITE VRIJEDNOST A'
10 READ(5,1)A
1 FORMAT(F8.2)
IF(A.EQ.0)GOTO 10
PT
D=B**2-4*A*C
IF(D)20,30,40
20 WRITE(6,2)
Ispis na ekranu
SK
Dijagram toka
START
A
DIMENSION A (100)
UNESITE BROJ
ELEMENATA
NIZA
PT
UČITAJTE
ELEMENTE
NIZA A
A (I)
10
ELEMENTI
NIZA A SU:
RI
DO 20 I = 1,N
A (I)
20
STOP
SK
END
Fortran
A
Ispis na ekranu
PT
mr. Rašid Hadžović, dipl.inž.građ.
9) Učitati niz od 20 elemenata i naći sumu članova na parnim i proizvod elemenata na
neparnim mjestima. Sumu i proizvod odštampati u glavnom programu.
Rješenje: START
A(I)
10
P=1
S=0
SK
DO 20 I=1,10
S=S+A (2*I)
P=P*A (2*I-1)
20
S,P
STOP
END
Fortran
A
DO 1 I=1,10
READ(5,10)A(I)
10 FORMAT(F8.2)
1 CONTINUE
C OPERACIJA SA ELEMENTIMA NIZA A
P=1
S=0
PT
DO 2 I=1,5
S=S+A(2*I)
P=P*A(2*I-1)
Ispis na ekranu
RI
SK
10) Učitati niz od 10 elemenata, onda formirati drugi niz B, tako da se sastoji samo od
različitih elemenata niza A. Zatim naći minimalni i maksimalni elemenat niza B. Odštampati
elemente niza A i niza B i minimalni i maksimalni elemenat u glavnom programu.
Rješenje:
Dijagram toka
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RI
Fortran
A
WRITE(*,2)B(K)
2 FORMAT(/,'NOVI ELEMENAT NIZA B JE:',F8.2)
15 CONTINUE
WRITE(*,6)K
6 FORMAT(/,5X,'BROJ ELEMENATA NIZA B JE:',I3)
C ODREDJIVANJE MAX. I MIN. ELEMENTA NIZA B
PMAX=B(1)
PT
PMIN=B(1)
DO 30 I=1,K
IF(PMAX.LT.B(I))THEN
Dijagram toka
START
DIMENSION A(20)
A
DO 10 I=1,20
A(D)
PT
10
DO 15 J=I+1,20
DA
A(I)<A(J)
NE
C=A(I)
RI
A(I)=A(J)
A(J)=C
15
20
SK
A(J)
STOP
END
Fortran
C UCITATI NIZ A OD 20 ELEMENATA, NAPISATI
C PROGRAM ZA SORTIRANJE U RASTUCEM REDOSLJEDU
DIMENSION A(20)
WRITE(*,*)'PROGRAM ZA SORTIRANJE EL. NIZA A U RASTUCEM REDOSLJEDU'
WRITE(*,*)'UNESITE 20 ELEMENATA NIZA A'
DO 10 I=1,20
READ(5,1)A(I)
1 FORMAT(F8.2)
10 CONTINUE
C SORTIRANJE ELEMENATA
DO 20 I=1,19
DO 15 J=I+1,20
IF(A(I).LT.A(J))GOTO 15
C=A(I)
A(I)=A(J)
A
A(J)=C
15 CONTINUE
20 CONTINUE
WRITE(*,*)'SORTIRANI ELEMENTI NIZA A SU:'
DO 30 J=1,20
WRITE(6,3)A(J)
3 FORMAT(F8.2)
PT
30 CONTINUE
STOP
B(1)<B(2)>B(3)<B(4)>B(5)<B(6)>B(7)<B(8)>B(9)<B(10)
Rješenje:
Dijagram toka:
START
DIMENSION A(10),B(10)
A
DO 10 I=1,10
A(10)
PT
10
DO 30 J=I + 1,10
DA
A(I)>A(J)
C =A(I)
NE
A (I) = A (J)
RI
A(J) = C
30
20
DO 40 I=1,5
B(2*I-1) = A( I )
SK
B(2*I) =A ( I + 5 )
40
DO 50 I=1,10
B(I)
50
STOP
END
Fortran
A
READ(5,1)A(I)
1 FORMAT(F8.2)
10 CONTINUE
DO 20 I=1,9
DO 20 J=I+1,10
IF(A(I).GT.A(J))THEN
C=A(I)
PT
A(I)=A(J)
A(J)=C
ELSE
Ispis na ekranu
SK
13) Učitati matricu A(4×4) i matricu B(4×4), onda naći matricu C kao proizvod matrica A i B.
C i , j = Ai , k ⋅ B k , j
Rješenje:
Dijagram toka:
START
A
DIMENSION A(4,4), B(4,4), C(4,4)
DO 10 I=1,4
DO 10 I=1,4
PT
A (I)
DO 20 I=1,4
DO 20 J=1,4
B(I)
RI
20
DO 50 I=1,4
DO 30 J=1,4
C(I,J) =0
DO 40 K=1,4
SK
40
30
50
C(I,J)
STOP
END
Fortran
Zbirka riješenih zadataka 40
Programiranje i numeričke metode - FORTRAN
Univerzitet «Džemal Bijedić» u Mostaru
Građevinski fakultet
Programiranje i numeričke metode viši asistent mr. Rašid Hadžović, dipl.inž.građ.
A
READ(5,1)A(I,J)
1 FORMAT(F8.2,F8.2)
10 CONTINUE
WRITE(*,*)'UNESITE ELEMENTE MATRICE B(4×4)'
DO 20 I=1,4
DO 20 J=1,4
WRITE(6,6)I,J
PT
6 FORMAT('B(',I1,',',I1,')')
READ(5,2)B(I,J)
2 FORMAT(F8.2,F8.2)
Rješenje:
Dijagram toka:
START
A
DIMENSION A(4,4)
DO 10 I=1,4
DO 10 J=1,4
A(I)
PT
10
DO 20 I=1,4
TRAG=TRAG+ A(I,I)
20
TRAG
RI
STOP
END
Fortran
WRITE(*,*)' '
WRITE(*,*)'UNESITE ELEMENTE MATRICE A(4x4)'
DO 10 I=1,4
DO 10 J=1,4
WRITE(6,5)I,J
5 FORMAT('A(',I1,',',I1,')')
READ(5,1)A(I,J)
1 FORMAT(F8.2,F8.2)
10 CONTINUE
TRAG=0
DO 20 I=1,4
TRAG=TRAG+A(I,I)
20 CONTINUE
WRITE(6,2)TRAG
2 FORMAT('TRAG MATRICE JE:',F10.2)
STOP
END
Ispis na ekranu
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RI
15) U glavnom programu učitati varijable A i B i pozivom funkcijskog potprograma izračunati
sumu tih varijabli.
Rješenje:
Dijagram toka:
START
SK
P. P.
A
FUNCTION F(A,B)
B
F= A+B
SUMA = F(A,B)
RETURN
SUMA
END
STOP
END
Fortran
C FUNKCIJSKI POTPROGRAM
WRITE(*,*)'PROGRAM ZA SABIRANJE VARIJABLI POMOCU'
WRITE(*,*)'FUNKCIJSKOG POTPROGRAMA'
WRITE(*,*)' '
WRITE(*,*)'UNESITE VARIJABLU A'
READ(5,1)A
1 FORMAT(F8.2)
WRITE(*,*)'UNESITE VARIJABLU B'
A
READ(5,2)B
2 FORMAT(F8.2)
SUMA=F(A,B)
WRITE(6,3)SUMA
3 FORMAT('SUMA VARIJABLI JE:',F10.2)
STOP
END
PT
FUNCTION F(A,B)
F=A+B
RETURN
Ispis na ekranu
RI
16) U glavnom programu učitati varijablu X, te pomoću funkcijskog potprograma odrediti
X2 ako je X>5
f(X)= X2+2 ako je X=5
5X ako je X<5
Rješenje:
P.P.
Dijagram toka:
FUNCTION F(X)
SK
DA
X>5
START
DA
F=X2
X=5
UNESITE NEPOZNATU X
DA
F=X2+2
Y=F(X) X<5
F=5X
Y NE
STOP
END RETURN
END
A
WRITE(6,1)Y
1 FORMAT(1X,'SUMA:',F7.2)
STOP
END
FUNCTION F(X)
IF(X.GT.5)F=X**2
IF(X.EQ.5)F=X**2+2
PT
IF(X.LT.5)F=5*X
RETURN
END
C ODREDITI FUNKCIJU
C X**2 X>5
C f(X)= X**2+2 X=5
C 5X X<5
WRITE(*,*)'UNESITE NEPOZNATU X'
READ(5,2)X
2 FORMAT(2F8.2)
Y=F(X)
WRITE(6,1)Y
1 FORMAT(1X,'F(X)=',F7.2)
STOP
END
FUNCTION F(X)
IF(X.GT.5)THEN
F=X**2
WRITE(6,*)'POSTO JE X>5 VRIJEDNOST FUNKCIJE JE F(X)=X**2'
ELSE
A
IF(X.EQ.5)THEN
F=X**2+2
WRITE(6,*)'POSTO JE X=5 VRIJEDNOST FUNKCIJE JE F(X)=X**2+2'
ELSE
ENDIF
IF(X.LT.5)THEN
F=5*X
PT
WRITE(6,*)'POSTO JE X<5 VRIJEDNOST FUNKCIJE JE F(X)=5*X'
ENDIF
ENDIF
17) U glavnom programu učitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog
I!
potprograma izračunati kombinaciju: K =
J ! ( I − J )!
Rješenje:
Dijagram toka:
START
P.P
INTEGER A,B,C,FAKTI
INTEGER FUNCTION FAKT (L)
I,J
FAKT = 1
A
B = FAKT (J) FAKT = FAKT*N
C = FAKT (I-J)
10
K = A/ (B*C)
F,J,K RETURN
PT
END
STOP
Fortran
3 FORMAT(1X,'1.BROJ:',I3,//,1X,'2.BROJ:',I3,//,1X,
+'BROJ KOMBINACIJA:',I4)
STOP
END
INTEGER FUNCTION FAKT(L)
FAKT=1
DO 10 N=1,L
FAKT=FAKT*N
10 CONTINUE
RETURN
END
Ispis na ekranu
18) Učitati x,y koordinate 10 tačaka. Napisati funkcijski potprogram koji će da računa rastojanja
datih tačaka sa kordinatom XA = 0.5 i YA = 1.0, te naći najveću i najmanju dužinu u glavnom
programu.
Dijagram toka:
START
P.P.
A
DIMENSION X(10),Y(10),D(10)
PT
10
RETURN
XA =0,5
DO 20 I = 1,10
20
DMAX=D(1)
RI
DMIN=D(1)
DO 30 I = 1,10
DA
DMAX<D(1)
DMAX = D(1)
NE
NE
SK
DMIN>D(1)
DMIN = D (1)
30
DMAX,DMIN
STOP
END
Fortran
A
WRITE(*,*)'UNESITE KOORDINATE 10 TACAKA A(X,Y)'
DO 10 I=1,10
WRITE(6,3)I
3 FORMAT('TACKA BROJ',I2,' JE: ')
READ(5,1)X(I),Y(I)
1 FORMAT(2F8.2)
10 CONTINUE
PT
XA=0.5
YA=1.0
DO 20 I=1,10
Ispis na ekranu
SK
19) Učitati matricu A(4×4). Naći sumu elemenata iznad glavne dijagonale. Zatim naći maksimalni
elemenat (vrijednost) i njegove indekse. Sve to obraditi pomoću opšteg potprograma.
Rješenje:
Dijagram toka:
START
P.P
A
DIMENSION A (4,4)
SUBROUTINE RACUN (B,S,M,N,PMAX)
DO 10 I = 1,10
DIMENSION B (4,4)
DO 10 I = 1,10
S=0
PT
A (I, J) DO 20 I = 1,4
20
SUMA,PMAX,
PMIN PMAX=B(1,1)
M=1
RI
STOP
N=1
END DO 30 I = 1,4
DO 30 J=1,4
PMAX<
B(I,J)
PMAX=B(I,J)
M=I
N=J
SK
30
RETURN
END
Fortran
5 FORMAT('A(',I1,',',I1,')')
READ(5,1)A(I,J)
1 FORMAT(F8.2,F8.2)
10 CONTINUE
CALL RACUN(A,SUMA,M,N,PMAX)
WRITE(6,2)SUMA,PMAX,M,N
2 FORMAT('SUMA ELEMENATA IZNAD GLAVNE DIJAGONALE JE:',F10.2,/,
+'MAKSIMALNI ELEMENAT:',F8.2,/,'MJESTO MAKSIMALNOG ELEMENTA JE: A('
+,I1,',',I1,')')
STOP
A
END
SUBROUTINE RACUN(B,S,M,N,PMAX)
DIMENSION B(4,4)
S=0
DO 20 I=1,4
DO 20 J=1,4
IF(I.LT.J)THEN
PT
S=S+B(I,J)
ENDIF
20 CONTINUE
Ispis na ekranu
SK
20) Učitati matricu A(4×4). Naći sumu elemenata ispod glavne dijagonale. Sve to obraditi
pomoću opšteg potprograma.
Rješenje:
Dijagram toka:
START P.P
A
SUBROUTINE RACUN (B,S)
DIMENSION A(4,4)
DIMESION B(4,4)
DO 10 I=1,4
S=0
DO 10 J=1,4
PT
DO 20 I=1,4
A (I,J)
DO 20 J=1,4
SUMA
S= S+B (I,J)
STOP
20
RI
END
RETURN
END
Fortran
DO 20 I=1,4
DO 20 J=1,4
IF(I.GT.J)THEN
S=S+B(I,J)
ENDIF
20 CONTINUE
RETURN
END
Ispis na ekranu
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RI
21) Napraviti program za proračun reakcija, momenata savijanja i transverzalnih sila na
desetinama raspona proste grede opterećene ravnomjernim kontinuiranim opterećenjem.
Rješenje:
Dijagram toka:
DO 20 K=0,10
SK
DO 10 I=0,10
START
I *L
REAL M,T,Q,L 2 T = R −Q*
⎛ I *L ⎞ 10
I *L ⎜ 10 ⎟
M = R* −Q* ⎝ ⎠
L 10 2 T
Q M
20
R=Q*L/2
10
STOP
R
END
Fortran
REAL M,T,Q,L
WRITE(6,*)'PROGRAM ZA PRORACUN M I T SILA PROSTE GREDE'
WRITE(6,*)'ZA RAVNOMJERNO KONTINUIRANO OPTERECENJE'
WRITE(6,*)'NA DESETINI RASPONA GREDE'
WRITE(6,*)' '
WRITE(6,*)'UNESITE STATICKI RASPON GREDE KAO REALAN BROJ'
WRITE(6,*)'STATICKI RASPON GREDE L='
READ(5,1)L
A
1 FORMAT(F 6.2)
WRITE(6,*)'UNESITE VRIJEDNOST OPTERECENJA KAO REALAN BROJ'
WRITE(6,*)'VRIJEDNOST OPTERECENJA Q='
READ(5,2)Q
2 FORMAT(F 6.2)
R=Q*L/2
WRITE(6,3)R
PT
3 FORMAT(/,1X,'REAKCIJE',/,10X,'Av=Bv=',F 8.2,' kN')
WRITE(6,*)'MOMENTI SAVIJANJA NA DESETINAMA RASPONA'
DO 10 I=0,10
Ispis na ekranu
SK
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
PROBLEMI ZA VJEŽBU
RI
SK
PROBLEMI ZA VJEŽBU
INTEGER A,B,C,D
A=3
B=2
C=4
A
D=1
CALL DENE(A,B,C,D)
WRITE(*,10)A,B,C,D
10 FORMAT(/,4(I5,3X))
STOP
END
SUBROUTINE DENE(C,D,B,A)
PT
INTEGER A,B,C,D
I=A+B+C+D
K=A*B
SUBROUTINE DENE(C,D,B,A)
INTEGER A,B,C,D
I=A+B+C+D
K=A*B
WRITE(*,10)A,B,C,D,I,K
10 FORMAT(/,4(I5,3X))
CALL ALT(I,K,A,B)
RETURN
END
SUBROUTINE ALT(I,K,A,D)
INTEGER A,D
J=K+A+D
I=J
D=I*J
WRITE(*,10)I,J,K,A,D
10 FORMAT(/,3(I5,3X))
RETURN
END
INTEGER X1,X2
X1=4
X4=6
WRITE(*,10)X1,X2
10 FORMAT (1X,I4)
A
CALL ALT (X1,X2)
WRITE(*,10)X1,X2
STOP
END
SUBROUTINE ALT(A,B)
INTEGER A,B
X1=A+B
PT
X2=A*B
A=A*B
B=A+5
END
SUBROUTINE ALT(A,B)
INTEGER A,B
X1=A+B
X2=A*B
A=A*B
B=A+5
WRITE(*,10)A,B
10 FORMAT (1X,I4)
WRITE(*,15)X1,X2
15 FORMAT (1X,F7.2)
RETURN
END
C
C PROGRAM ZA KORISTENJE FUNKCIJA POMOCU POTPROGRAMA
C
EXTERNAL SIN1,COS1,TAN1
WRITE(*,5)
5 FORMAT (1X,'UGAO',T17,'SINUS',T31,'KOSINUS',T46,'TANGENS',/,1X,
+ '----',T17,'-----',T31,'-------',T46,'-------')
A
DO 10 I=1,90
X=FLOAT(I)*1.745329E-2
CALL PRORACUN(SIN1,X,S)
CALL PRORACUN(COS1,X,C)
CALL PRORACUN(TAN1,X,T)
WRITE(*,20)I,S,C,T
20 FORMAT(1X,I3,T15,F7.3,T30,F7.3,T45,F7.3)
10 CONTINUE
PT
STOP
END
FUNCTION COS1(X)
COS1=COS(X)
RI
RETURN
END
FUNCTION TAN1(X)
TAN1=TAN(X)
RETURN
END
Ispis na ekranu
SK
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RI
SK
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
RI
SK
A
C=ACOS(X)
T=ATAN(X)
WRITE(*,15)I,S,C,T
15 FORMAT(1X,T10,I3,T19,F10.7,T35,F10.7,T50,F10.7)
20 CONTINUE
STOP
END
PT
Ispis na ekranu
Fortran
INTEGER BROJ(5,5),ZBI
WRITE(*,*)'RJESENJE ZADAATKA'
WRITE(*,*)'UNESITE ZBI'
READ(5,1)ZBI
1 FORMAT(I3)
DO 10 I=1,5
DO 10 J=1,5
BROJ(I,J)=0
IF(I.EQ.J)BROJ(I,J)=ZBI
10 CONTINUE
WRITE(*,30)((BROJ(I,J),J=1,5),I=1,5)
30 FORMAT(/,5(I2,4X),/)
STOP
END
A
PT
mr. Rašid Hadžović, dipl.inž.građ.
LITERATURA: