FORTRAN
Transcript of FORTRAN
![Page 1: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/1.jpg)
FORTRAN
Naziv potiče od reči FORmula TRANslator odnosno prevodilac formula. FORTRAN je bio jedan od prvih jezika koji je omogućio programerima normalnu primenu matematičkih formula i njihovo izračunavanje. Sada FORTRAN predstavlja jedan od najrasprostranjenijih programskih jezika uopšte dok u inženjerskim oblastima ima posebno veliki značaj jer predstavlja kako osnovu za proučavanje numeričkih problema tako i alat za sračunavanje veoma komplikovanih numeričkih problema.
FORTRAN je takodje jedan od prvih programskih jezika koji može da radi na svim platformama odnosno na različitim vrstama računara.
Imajući u vidu potrebu i značaj korišćenja FORTRAN‐a za kako za studente mašunstva tako i za mašinske inženjere, ovde je dat kompletan prikaz programiranja, komande, mogućnosti, prednosti i primere njegove upotrebe kroz sve oblasti studija na mašinskom fakultetu.
Takodje je dat i prikaz nekoliko aplikativnih softvera koji su korišćenjem FORTRAN‐a radjeni na Mašinskom fakultetu i koji predstavljaju rešenje pojedinih veoma složenih problema
![Page 2: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/2.jpg)
Osnovne programske strukture
U tekstu koji sledi objasnićemo korišćenje osnovnih naredbi programskog
jezika FORTRAN. Pri tome nećemo izlagati sve njihove mogućnosti navedenih naredbi već samo najneophodnije elemente njihove sintakse.
Prazna naredba
Ova naredba je definisana programskom linijom u kojoj je ispisana službena reč "CONTINUE". Posle njenog izvršavanja se praktično ništa ne događa. Koristi se u slučajevima kada je potrebno da jedna programska linija treba da bude nosilac obeležja (obeležje ili labela naredbe je broj koji se ispisuje u drugom, trećem, četvrtom i (ili) petom polju programske linije), najčešće kao kraj programskog ciklusa.
![Page 3: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/3.jpg)
Naredba za prikazivanje izlaznih rezultata na ekranu
Ova naredba se sastoji od službene reči "PRINT", znaka "*," koji označava da su vrednosti izlaznih promenjlivih u standardnom formatu i liste izlaznih promenljivih. Imena izlaznih promenljivih se odvajaju znakom ",". Pored toga ovom naredbom se može štampati i tekst koji se nalazi između znakova " ' ". U programskom jeziku FORTRAN postoje i mnoge druge mogućnosti zapisivanja izlaznih podataka i njihovo štampanje u standardnim i nestandardnim formatima. Sa nekim od njih, koji koriste naredbu WRITE upoznaćemo se kasnije. Posle izvršenja naredbe PRINT*,M na ekranu će biti prikazana vrednost promenljive M , a posle izvršenja naredbe PRINT*,"M" na ekranu će biti odštampano slovo M. Posle izvršenja naredbe PRINT*,'X=',X na ekranu će biti odštampano "X=" i biće prikazana vrednost promenljive X, a posle izvršenja naredbe PRINT*,A,B,C na ekranu će biti prikazane vrednosti promenljivih A,B i C.
![Page 4: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/4.jpg)
Naredba za unos ulaznih podataka
Ova naredba se sastoji od službene reči "READ", znaka "*," koji označava da su vrednosti izlaznih promenjlivih u standardnom formatu i liste ulaznih promenjlivih. Imena ulaznih promenljivih se odvajaju znakom ",". U programskom jeziku FORTRAN postoje i mnoge druge mogućnosti upotrebe ove naredbe. Sa nekima od njih upoznaćemo se kasnije.
Posle izvršenja naredbe READ*,A,B,C
promenljivima označenim sa A,B i C će biti dodeljene ulazne vrednosti.
Naredba za dodeljivanje vrednosti
Ova naredba se sastoji od imena promenljive kojoj dodeljujemo vrednost, znaka "=" i izraza koji je istog tipa kao i promenljiva kojoj se dodeljuje vrednost. Svim promenljivim i konstantama koje učestvuju u izrazu, vrednosti moraju biti dodeljene pre izvršavanja ove naredbe. Promenljiva kojoj se dodeljuje vrednost takođe može da učestvuje u izrazu. Ovom naredbom se izračunava vrednost izraza sa desne strane znaka "=" i izračunata vrednost se dodeljuje promenljivoj koja se nalazi sa leve strane znaka "=". Promenljiva ne mora biti istog tipa kao i izraz ako se radi o celobrojnom i realnom tipu.
![Page 5: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/5.jpg)
Ukoliko je izraz celobrojnog tipa a promenljiva realnog izvršiće se direktna
konverzija vrednosti izraza u realni tip. U obratnom slučaju ako je izraz realnog tipa a promenljiva celobrojnog onda se konverzija vrši tako što se od rezultat odbijajaju decimalne cifre (na isti način kao kod deljenja celih brojeva). Na primer:
posle izvršavanja naredbe A = B + C
vrednost promenljive A postaće jednaka zbiru vrednosti promenljivih B i C; posle izvršavanja naredbe
B = B + C vrednost promenljive B postaće jednaka zbiru predhodne vrednosti
promenljive B i vrednosti promenljive A; posle izvršavanja naredbe
A = 2 * I ako je I bilo jednako "2" vrednost promenljive A postaće 4.0 (naravno ako
prethodno A nije delarisana kao celobrojna promenljiva naredbom "INTEGER A" u tom slučaju vrednost promenljive A postaće 4);
‐posle izvršavanja naredbe I=2*A ako je A bilo jednako "‐2.3" vrednost promenljive I postaće ‐4.
![Page 6: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/6.jpg)
Naredba za upravljanje tokom programa
Ovo naredba ima više oblika koji su nastali u različitim verzijama programskog jezika FORTRAN. Mi ćemo ovde objasniti primenu tri najosnovnija oblika ove naredbe.
Logička IF naredba. Ova naredba se sastoji od službene reči "IF", iskaza napisanog između zagrada i izvršne naredbe. Ako iskaz ima vrednost ".FALSE." onda se prelazi na prvu sledeću izvršnu naredbu, a ako ima vrednost ".TRUE." onda se prvo izvrši naredba napisana iza logičkog iskaza pa se prelazi na prvu sledeću izvršnu naredbu. Na primer posle izvršenja naredbe: IF(P.LE.2) P=P+1
ukoliko je vrednost promenljive P bila manja od, ona će se povećati za 1, a u suprotnom slučaju neće se ništa dogoditi.
Ukoliko postoji potreba da se u slučaju tačnosti iskaza izvrši više od jedne naredbe, i da se te naredbe preskaču ukoliko je iskaz netačan onda će mo koristiti sledeći oblik ove naredbe.
![Page 7: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/7.jpg)
Blokovska IF – naredba. Ovo je prvi naš primer naredbe koja se ispisuje u više programskih linija. Njen prvi rad se sastoji od službene reči "IF", iskaza napisanog između zagrada i službene reči "THEN". U narednim redovima se ispisuje grupa izvršnih naredbi, a u poslednjem redu službena reč "ENDIF". Ako iskaz ima vrednost ".FALSE." onda se prelazi na prvu sledeću izvršnu naredbu, a ako ima vrednost ".TRUE." onda se prvo izvrši grupa naredbi napisana izmeđ "THEN" i "ENDIF" pa se prelazi na prvu sledeću izvršnu naredbu. Na primer posle izvršenja grupe naredbi: IF(P.LE.2) THEN P=P**2 PRINT*,P ENDIF ukoliko je vrednost promenljive P bila manja od 2, promenljivoj P biće dodeljena vrednost jednaka kvadratu prethodne vrednosti promenljive P i njena nova vrednost će biti odštampana na ekranu, a u suprotnom slučaju neće se ništa dogoditi.
Ukoliko postoji potreba da se u slučaju tačnosti iskaza izvrši jedna ili više naredbi, a da ukoliko je iskaz netačan izvršava druga grupa naredbi onda će mo koristiti sledeći oblik ove naredbe.
![Page 8: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/8.jpg)
Razgranata IF – naredba. Njen prvi red se sastoji od službene reči "IF", iskaza napisanog između zagrada i službene reči "THEN" (kao i u prethodnom slučaju). U narednim redovima se ispisuje grupa izvršnih naredbe, u programsku liniji iza njih se unosi službena reč "ELSE" iza koje se ispisuje druga grupa naredbi. Poslednjem red ove naredbe se satoji od službene reči "ENDIF". Ako iskaz ima vrednost ".TRUE." onda se izvršava grupa naredbi napisana izmeđ "THEN" i "ELSE", a u suprotnom grupa naredbi napisana između "ELSE" i "ENDIF" pa se prelazi na prvu sledeću izvršnu naredbu. Na primer posle izvršenja grupe naredbi:
IF(P.LE.2) THEN P=P**2 PRINT*,P ELSE P=P+1 ENDIF
ukoliko je vrednost promenljive P bila manja od 2, promenljivoj P biće dodeljena vrednost jednaka kvadratu prethodne vrednosti promenljive P i njena nova vrednost će biti odštampana na ekranu, a u suprotnom slučaju vrednost promenljive P biće povećana za 1.
![Page 9: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/9.jpg)
Naredba za formiranje ciklusa
Ova naredba se satoji od službene reči "DO", obeležja jedne od izvršnih naredbi koje se nalaze u narednim redovima, imena kontrolne promenljive (kontrolna promenljiva mora biti celobrojnog tipa) i tri celobrojna izraza napisana u zagradama i odvojena zapetama od kojih treći nije obavezan.
Ukoliko su celobrojni izrazi konstante ili promenljive, zagrade ne moraju da se pišu. Pri tome je prvi od celobrojnih izraza početna vrednost celobrojne promenljive, a drugi njeno ograničenje.
Grupa naredbi koja počinje sa "DO" naredbom a završava se sa obeleženom izvršnom naredbom čije obeležje navodi u "DO" naredbi naziva se ciklus.
Da bi se izbegle neke od mogućih nedoumica kao poslednja naredba ciklusa se obično uzima prazna naredba "CONTINUE", što ćemo prihvatiti kao standard.
Ukoliko je treći izraz, koji nazivamo korak brojačke promenljive, izostavljen podrazumeva se da je on jednak jedinici. U izvršnim naredbama ciklusa može se koristiti kontrolna promenljiva ali joj se ne sme menjati vrednost.
![Page 10: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/10.jpg)
Naredbe ciklusa se izvršavaju na sledeći način:
dodele se vrednosti početnoj vrednosti, ograničenju i koraku brojačke promenljive;
utvrdi se da li je početna vrednost manja od ograničenja ukoliko je korak pozitivan, odnosno da li je ograničenje manje od početne vrednosti ukoliko je korak negativan. Ukoliko taj uslov nije ispunjen onda se prelazi na prvu izvršnu naredbu posle ciklusa;
ukoliko je prethodni uslov ispunjen kontrolnoj promenljivoj se dodeli početna vrednost;
izvrše se sve naredbe ciklusa; zatim se vrednost kontrolne promenljive uveća za vrednost koraka; ukoliko je nova vrednost kontrolne promenljive između početne vrednosti i ograničenja opet se prelazi na korak 4). U suprotnom slučaju se prelazi na prvu izvršnu naredbu posle ciklusa.
![Page 11: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/11.jpg)
Naredba bezuslovnog prelaska
Dosad smo videli da se izvršne naredbe programa izvršavaju u redosledu kojim su napisane (odozgo nadole) osim ako nije primenjena neka od naredbi za upravljanjem tokom programa ili naredba za formiranje ciklusa.
Treća mogućnost za izmenu redosleda izvršavanja naredbi je naredba bezuslovnog prelaska koja se satoji od službene reči "GOTO" i obeležja naredbe na koju se prelazi posle naredbe bezuslovnog prelaska.
Napominjemo da se praktično u svakom od programa DO, blokovska i razgranata IF naredba, mogu uspešno realizovati korišćenjem sledeće strukture koje se sastoji od sledeće tri naredbe:
logičkog IF, naredbe dodele vrednosti i naredbe bezuslovnog prelaska.
Međutim praksa je pokazala da česta upotreba naredbe bezuslovnog prelaska dovodi do nepreglednih programa u kojima je jako teško vršiti ispravke. Mi se nećemo sasvim odreći primene ove naredbe, jer u FORTRANu postoje oblici tokova programa koji se bez nje ne mogu realizovati, ali ćemo voditi računa o njenom disciplinovanom korišćenju
![Page 12: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/12.jpg)
Naredba za dodelu vrednosti konstantama
Ukoliko želimo da nekoj konstanti dodelimo ime koje će se koristiti u programu (to se obično radi ako konstanta ima veći broj cifara), možemo primeniti naredbu za dodelu vrednosti konstantama. Vrednosti dodeljene ovom naredbom se ne smeju menjati u toku izvršavanja programa.
Ova naredba se sastoji od službene reči PARAMETER i spiska definicija konstanti napisanog između zagrada.
Definicija konstante je izraz koji se sastoji od imena konstante (koje mora biti u skladu sa konvencijom o celobrojnim i realnim slovima), znaka "=" i vrednosti koja se dodeljuje konstanti. Ukoliko spisak ima više od jedne definicije, one se razdvajaju zapetama.
Na primer, naredbom PARAMETER (PI=3.1415) konstanti PI će biti dodeljena vrednost 3.1415, a naredbom PARAMETER (I=2,J=3,K=4) će biti dodeljene vrednosti konstantama I, J i K.
![Page 13: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/13.jpg)
Standarne fukcije
Sada ćemo dati pregled najvažnijih standardnih funkcija implementiranih u programski jezik FORTRAN. Pri tome naglašavamo da naš spisak standardnih funkcija nije kompletan. Ovde nećemo izlagati sve mogućnosti navedenih naredbi, već samo najneophodnije elemente njihove sintakse.
Ako je F standardna funkcija programskog jezika FORTRAN i X promenljiva ili izraz odgovarajućeg tipa onda simbolom F(X) zadaje fortranskom prevodiocu da izračuna vrednost koju ima funkcija F za argument koji je jednak vrednosti promenljive (izraza) X.
Osnovne standardne funkcije su:
ABS apsolutna vrednost realnog broja; IABS apsolutna vrednost celog broja; DABS apsolutna vrednost realnog broja dvostruke tačnosti; CABS moduo kompleksnog broja; SQRT kvadratni koren iz realnog ili celog broja; DSQRT kvadratni koren iz realnog broja dvostruke tačnosti; CSQRT kvadratni koren iz kompleksnog broja;
![Page 14: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/14.jpg)
EXP eX, gde je X realni ili celi broj; DEXP eX, gde je X realni broj dvostruke tačnosti; CEXP e^X, gde je X kompleksni broj; ALOG ln(X), gde je X realni broj dvostruke tačnosti; DLOG ln(X), gde je X realni broj dvostruke tačnosti; CLOG ln(X), gde je X kompleksni broj; ALOG10 log10(X), gde je X realni ili celi broj; DLOG10 log10(X), gde je X realni broj dvostruke tačnosti; SIN sin (X), gde je X realni ili celi broj; DSIN sin (X), gde je X realni broj dvostruke tačnosti; CSIN sin (X), gde je X kompleksni broj; COS cos (X), gde je X realni ili celi broj; DCOS cos (X), gde je X realni broj dvostruke tačnosti; CCOS cos (X), gde je X kompleksni broj; TAN tg (X), gde je X realni ili celi broj; DTAN tg (X), gde je X realni broj dvostruke tačnosti;
![Page 15: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/15.jpg)
ASIN arcsin (X), gde je X realni ili celi broj; DASIN arcsin (X), gde je X realni broj dvostruke tačnosti; ACOS arccos (X), gde je X realni ili celi broj; ACOS arccos (X), gde je X realni broj dvostruke tačnosti; ATAN arctg(X), gde je X realni ili celi broj; DATAN arctg (X), gde je X realni broj dvostruke tačnosti; SINH sinus hiperbolijski sh(X) = (eX e X) / 2, gde je X realni ili celi broj; DSINH sinus hiperbolijski, gde je X realni broj dvostruke tačnosti; COSH cosinus hiperbolijski ch(X) = (eX + e X) / 2, gde je X realni ili celi broj;
DCOSH cosinus hiperbolijski, gde je X realni broj dvostruke tačnosti; TANH tanges hiperbolijski tgh(X) = (eX e X) / (eX+e X) gde je X realni ili celi broj. DTANH tanges hiperbolijski, gde je X realni broj dvostruke tačnosti; AIMAG imaginarni deo kompleksnog broja. REAL realni deo kompleksnog broja. CONJG konjugovana vrednost datog kompleksnog broja.
![Page 16: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/16.jpg)
Funkcijske naredbe
Naravno ovim ni mnogo dužim spiskom standardnih funkcija ne bismo mogli da obuhvatimo sve matematičke funkcije koje nam mogu zatrebati prilikom pisanja programa. Zato je ostavljeno više mogućnosti korisniku da sam definiše funkcije koje nisu obuhvaćene ovim spiskom.
Najednostavnija od njih, je definisanje funkcije, funkcijskom naredbom, koju ćemo razmotriti u ovom odeljku. Ona se može koristiti za definisanje funkcija koje se mogu predstaviti jednim izrazom.
Sa mogućnostima definicije ostalih funkcija upoznaćemo se u odeljku koji je posvećen podprogramima.
Dejstvo funkcijske naredbe je lokalno, to jest oznaka za funkciju definisanu funkcijskom naredbom, važi samo u okviru programske jedinice u kome je uvedena. Funkcijska naredba se piše posle svih naredbi deklaracija promenjljivih a pre prve izvršne naredbe u programu.
Ona počinje imenom nove funkcije, zatim se između zagradi ispisuje lista argumenata (ako funkcija ima više od jednog argumenta, njihove oznake se odvajaju zapetama), posle čega se piše znak "=" i izraz kojim je definisana funkcija.
Sve promenljive koje učestvuju u tom izrazu, moraju biti deklarisane u listi argumenata.
![Page 17: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/17.jpg)
Na primer funkcijskom naredbom:
CTG(X)=1/TAN(X) definisana je funkcija ctg(X), koja se na dalje (u okviru programske jedinice u kojoj je uvedena) koristi kao standardna funkcija.
Prilikom korišćenja u programu argument funkcijske naredbe ne mora biti označen isto kao i u njenoj deklaraciji.
Na primer: Y=CTG(P+Q)*CTG(2*Y)+CTG(P) je sintaksno ispravna programska linija.
Funkcijsku naredbu koja definiše aritmetičku sredinu tri realna broja, možemo definisati sa: AS(P,Q,R)=(P+Q+R)/3
![Page 18: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/18.jpg)
Indeksirane promenljive
U programskom jeziku FORTRAN postoji mogućnost da se grupi podataka istog tipa da zajedničko ime. To je realizovano uvođenjem indeksiranih promenljivih.
One takođe mogu biti celobrojnog, realnog, kompleksnog, logičkog ili znakovnog tipa i imena dobijaju po istim pravilima kao i promenjljive.
Podatak iz grupe koja obrazuje indeksiranu promenljivu je određen imenom promenjljive (koje je zajedničko za sve podatke) i sa jednim ili više indeksa koji su napisani između zagrada.
Indeks je pozitivan ceo broj. Ukoliko ima više indeksa oni su razdvojeni zapetama. Maksimalan dopušten broj indeksa je sedam.
Promenljive koje imaju jedan indeks nazivaju se nizovi (ili vektori), a promenljive sa dva indeksa matrice. Elementi indeksirane promenljive se zapisuju u susednim memorijskim registrima. Zbog toga je neophodno da se fortranskom prevodiocu saopšti maksimaln broj članova i struktura indeksirane promenjljive, da bi rezervisao neophodan memorijski prostor za njihovo smeštanje. To se realizuje naredbom deklaracije indeksirane promenjljive, koja se piše pre prve funkcijske naredbe, ili pre prve izvršne naredbe ukoliko programska jedinica ne sadrži funkcijske naredbe.
![Page 19: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/19.jpg)
Na primer ako hoćemo da rezervišemo prostor za niz realnih brojeva A koji ima
najviše 50 članova to možemo postići naredbom: DIMENSION A(50) ili naredbom REAL A(50)
Ovim naredbama se zadaje fortranskom prevodiocu da za članove niza A rezerviše 50 susednih memorijkih registara i spremi ih za zapisivanje realnih brojeva.
Ako hoćemo da rezervišemo prostor za niz realnih brojeva LM koji ima najviše 150 članova, onda moramo da deklarišemo i da su članovi niza realni (a ne celi brojevi).
To možemo postići naredbom: REAL LM(150) ili grupom naredbi REAL LM DIMENSION LM(150)
U drugom slučaju prva naredba obaveštava fortranski prevodilac da je promenjljiva LM realna a druga da je to niz koji će imati najviše 150 članova.
![Page 20: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/20.jpg)
Ako hoćemo da rezervišemo prostor za niz celih brojeva L koji ima najviše 50
članova to možemo postići naredbom: DIMENSION L(50) ili naredbom INTEGER L(50)
Ovim naredbama se zadaje fortranskom prevodiocu da za članove niza L rezerviše 50 susednih memorijkih registara i spremi ih za zapisivanje celih brojeva.
Ako hoćemo da rezervišemo prostor za niz celih brojeva A koji ima najviše 150
članova, onda moramo da deklarišemo i da su članovi niza celi (a ne realni brojevi). To postižemo postići naredbom:
INTEGER A(150) ili grupom naredbi INTEGER A DIMENSION A(150)
U drugom slučaju prva naredba obaveštava fortranski prevodilac da je promenljiva A celobrojna a druga da je to niz koji će imati najviše 150 članova.
![Page 21: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/21.jpg)
Ako hoćemo da rezervišemo prostor za matricu realnih brojeva A koji ima
najviše 50 vrsta i 20 kolona to možemo postići naredbom: DIMENSION A(50,20) ili naredbom REAL A(50,20)
Ako hoćemo da rezervišemo prostor za matricu realnih brojeva KM koja ima najviše 150 vrsta i 100 kolona, onda moramo da deklarišemo i da su elementi matrice realni (a ne celi brojevi). To možemo postići naredbom: REAL KM(150,100) ili grupom naredbi REAL KM DIMENSION KM(150,150)
Ako hoćemo da rezervišemo prostor za matricu celih brojeva L koja ima najviše 50 vrsta i 20 kolona to možemo postići naredbom: DIMENSION L(50,20) ili naredbom INTEGER L(50,20)
![Page 22: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/22.jpg)
Ako hoćemo da rezervišemo prostor za matricu celih brojeva A koji ima najviše
150 vrsta i 100 kolona, onda moramo da deklarišemo i da su članovi matrice celi (a ne realni brojevi).
To možemo postići naredbom: INTEGER A(150,100) ili grupom naredbi INTEGER A DIMENSION A(150,100)
Na sličan način se mogu deklarisati i indeksirane promenljive realnog tipa
dvostruke tačnosti, kompleksnog, logičkog ili znakovnog tipa. Naredbom DOUBLE PRECISION F(50,20) rezervišemo prostor za matricu F koja ima najviše 50 vrsta i 20 kolona, čiji elementi su realni brojevi dvostruke tačnosti.
Isto se može postići grupom naredbi: DOUBLE PRECISION F DIMENSION F(50,20)
![Page 23: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/23.jpg)
Naredbom COMPLEX Z(50,20) rezervišemo prostor za matricu Z koja ima najviše 50 vrsta i 20 kolona, čiji elementi su kompleksni brojevi. Isto se može postići grupom naredbi: COMPLEX Z DIMENSION Z(50,20) Naredbom LOGICAL B(50,20) rezervišemo prostor za matricu B koja ima najviše 50 vrsta i 20 kolona, čiji elementi su logičkog tipa. Isto se može postići grupom naredbi: LOGICAL B(50,20) DIMENSION B(50,20) Naredbom CHARACTER*3 C(150) rezervišemo prostor za niz C koja ima najviše 150 članova, čiji elementi su nizovi koji se sastoje od tri simbola. Isto se može postići grupom naredbi: CHARACTER*3 C DIMENSION C(150)
![Page 24: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/24.jpg)
Učitavanje indeksiranih promenljivih
Učitavanje indeksiranih promenljivih se može izvršiti na isti način kao i učitavanje običnih promenljivih, pri čemu se za element indeksirane promenjljive, koji želimo da učitamo, navodi ime i celobrojni izrazi kojima su definisani njegovi indeksi. Naredbe: READ*,A(2,3) READ*,A(I,J) READ*,A(I+1,3) su sintaksno ispravno zapisane.
Pored toga možemo organizovati unos svih članova indeksirane promenjljive jednom naredbom. Na primer, ako želimo da učitamo članove niza A koji ima N elemenata to možemo uraditi naredbom READ*,(A(I),I=1,N)
koja ima isto dejstvo kao grupa naredbi DO 5 I=1,N READ A(I) 5 CONTINUE
![Page 25: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/25.jpg)
Ako želimo da unesemo matricu A koja ima M vrsta i N kolona to možemo
postići naredbom READ*,((A(I,J),J=1,N),I=1,M) kojom se organizuje unos po vrstama, ili naredbom READ*,((A(I,J),I=1,M),J=1,N) kojom se organizuje unos po kolonama.
Prikazivanje vrednosti indeksiranih promenljivih
Prikazivanje vrednosti indeksiranih promenljivih se može izvršiti na isti način kao i prikazivanje vrednosti običnih promenljivih, pri čemu se za element indeksirane promenjljive, koji želimo da prikazemo, navodi ime i celobrojni izrazi kojima su definisani njegovi indeksi.
![Page 26: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/26.jpg)
Naredbe: PRINT*,A(2,3) PRINT*,A(I,J) PRINT*,A(I+1,3)
su sintaksno ispravno zapisane. Pored toga možemo organizovati ispisivane svih članova indeksirane
promenljive jednom naredbom. Na primer, ako želimo da prikažemo članove niza A koji ima N elemenata to
možemo uraditi naredbom PRINT*,(A(I),I=1,N) koja ima isto dejstvo kao grupa naredbi DO 45 I=1,N PRINT A(I) 45 CONTINUE
Ako želimo da prikažemo matricu A koja ima M vrsta i N kolona to možemo postići naredbom PRINT*,((A(I,J),J=1,N),I=1,M)
![Page 27: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/27.jpg)
Datoteke
U predhodnim odeljcima je objašnjen unos ulaznih podataka preko tastature. To može biti jako veliki posao u slučaju kada je broj podataka veliki (na primer unošenje niza koji se sastoji od 10000 realnih brojeva). U takvim situacijama je korisno osloboditi operatera koji nadgleda izvršavanje programa od obaveze da unosi podatke, i taj posao (koji se svodi na poznavanje daktilografije) prebaciti na manje kvalifikovanu radnu snagu. Podaci koji se unose u računar nezavisno od izvršavanja programa, smeštaju se u posebne adresabilne memorijske jedinice koje se nazivaju datoteke. Imenu datoteke koje dajemo u skladu sa ograničenjima operativnog sistema, obično se pridružuje ekstenzija ".DAT". U tekstu koji sledi upoznaćemo se samo sa tekstualnim datotekama, u koje se podaci unose kao nizovi znakova, a čitaju se prema redosledu unošenja, bez ikavikh mogućnosti direktnog pretraživanja. Datoteke se mogu takođe koristiti i za zapisivanje izlaznih podataka iz programa.
Pre upotrebe neke datoteke u programu, moramo da najavimo fortranskom prevodiocu da ćemo je koristiti. To se realizuje naredbom "otvaranja" datoteke koja započinje službenom reči "OPEN", zatim se između zagrada navode razdvojeni zapetama oznaka datoteke (ceo broj), ime i status datoteke. Status može da bude "NEW" ukoliko se datoteka formira prilikom izvršavanja programa ili "OLD" ukoliko se radi o datoteci koja je postojala pre početka izvršavanja programa.
![Page 28: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/28.jpg)
Na primer, ukoliko želimo da prilkom izvršavanja programa formiramo novu
datoteku koju želimo da nazovemo "A.DAT" i da je označimo brojem "3", to postižemo naredbom: OPEN(UNIT=3,FILE='A.DAT',STATUS='NEW') Napominjemo da bi neki od novijih prevodilaca podržali i slobodniju strukturu naredbe: OPEN(3,FILE='A.DAT')
Ukoliko želimo da prilkom izvršavanja programa koristimo postojeću datoteku koja je nazvana "B.DAT" i da je označimo brojem "12", to postižemo naredbom: OPEN(UNIT=12,FILE='B.DAT',STATUS='OLD') Napominjemo da bi neki od novijih prevodilaca podržali i slobodniju strukturu naredbe: OPEN(12,FILE='B.DAT')
Preporučljivo je (iako ne i obavezno) da se datoteke otvorene u toku izvršavanja programa "zatvore" pre njegovog kraja. To se postiže naredbom koja se sastoji od službene reči CLOSE i oznake datoteke navedene u zagradi. Na primer datoteku "B.DAT" otvorenu u prethodnom tekstu, ćemo zatvoriti naredbom CLOSE(12)
![Page 29: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/29.jpg)
Naredba za unos podataka iz datoteke se sastoji od službene reči "READ",
otvorene zagrade, oznake datoteke, zapete, znaka "*," koji označava da su vrednosti izlaznih promenljivih u standardnom formatu, zatvorene zagrade i liste ulaznih promenjlivih, koja se formira po istim pravilima kao i kod prethodno razmatranog oblika naredbe "READ".
Na primer naredba READ(12,*) (X(I),I=1,N) zadaje fortranskom prevodiocu da iz datoteke označene brojem 12 učita prvih N članova niza X.
Naredba za zapisivanje podataka u datoteku se sastoji od službene reči "WRITE", otvorene zagrade, oznake datoteke, zapete, znaka "*," koji označava da su vrednosti izlaznih promenjlivih u standardnom formatu, zatvorene zagrade i liste izlaznih promenjlivih, koja se formira po istim pravilima kao i kod prethodno razmatrane naredbe "PRINT".
Na primer naredba WRITE(12,*) (X(I),I=1,N) zadaje fortranskom prevodiocu da u datoteku označenu brojem 12 unese vrednosti prvih N članova niza X.
![Page 30: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/30.jpg)
Podprogrami
Jedna od osnovnih metoda za rešavanje jednog složenog problema, se sastoji u tome da se početni problem razloži na jednostavnije probleme, koji mogu da se parcijalno rešavaju, i da se na kraju dobijena parcijalna rešenja sastave u rešenje početnog problema.
Sledeći tu ideju u programskom jeziku FORTRAN je realizovana mogućnost da se postupci za rešavanje parcijalnih problema isprogramiraju u posebne programske jedinice ‐ podprograme.
Pri tome se jednom napisan podprogram može koristiti u različitim programima i podprogramima.
U FORTRANu postoje tri vrste podprograma: funkcijske naredbe, funkcijski podprogrami i opšti podprogrami.
Način deklarisanja i korišćenja funkcijskih naredbi smo objasnili u II.4. Podsetićemo se samo da je dejstvo funkcijske naredbe lokalno, to jest oznaka za funkciju definisanu funkcijskom naredbom, važi samo u okviru programske jedinice u kome je uvedena.
![Page 31: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/31.jpg)
Funkcijski podprogrami
Funkcijski podprogrami su uvedeni u FORTRAN, da bi se ostavila mogućnost
korisniku, da sam uvede nove funkcije i koristi ih kao standardne. To nije uvek moguće uraditi korišćenjem funkcijske naredbe, kojom se mogu definisati samo funkcije koje se izražavaju jednim izrazom. Njima se mogu realizovati algoritmi koji imaju tačno jedan izlazni podatak.
Funkcijski podprogram počinje službenom reči FUNCTION iza koje sledi ime funkcijskog podprograma i lista ulaznih argumenata, odvojenih zapetama koja se ispisuje između zagrada. Posle toga se naredbe ispisuju prema pravilima koja važe za pisanje programa. Naredba koja se poslednja izvršava u funkcijskom podprogramu je "RETURN". Ona obaveštava fortranski prevodilac da može da preuzme vrednost izlazne promenljive. Funkcijski podprogram se završava naredbom "END".
U toku izvršavanja funkcijskog podprograma mora se bar jednom dodeliti vrednost promenjljivoj koja nosi isto ime kao i podprogram. To je jedina izlazna veličina iz funkcijskog programa.
Nije preporučljivo da se u funkcijskom podprogramu koriste naredbe za unos podataka i izdavanje rezultata. Vrednost izlaznog rezultata je dostupna preko imena podprograma a vrednosti ulaznih argumenata preko liste formalnih parametara.
![Page 32: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/32.jpg)
Na primer ako želimo da u funkcijskom podprogramu nazvanom G koristimo tri
ulazne realne promenljive, ako nema drugih ulaznih promenjljivih, dovoljno je da ispišemo prvu naredbu podprograma FUNCTION G(A,B,C) i funkcijski podprogram će preuzeti njihove vrednosti kada mu to zada programska jedinica koja ga koristi.
Ukoliko su ulazne veličine u funkcijski podprogram "C" realna kvadrana matrica A i njen red N (N ≤ 50) onda, ako nema drugih ulaznih promenjljivih, možemo podprogram započeti sa:
FUNCTION C(N,A) REAL A(50,50)
gde u prvoj naredbi saopštavamo prevodiocu da su ulazne promenljive označene sa "A" i "N", a u drugoj deklarišemo da je "A" matrica koja nema više od 50 vrsta i 50 kolona.
Funkcijski podprogram se u okviru drugih programskih jedinica poziva kao i funkcijska naredba ‐ navođenjem imena i liste stvarnih parametara. Tada stvarni parametri moraju biti u istom redosledu i istog tipa, kao i formalni parametri u prvoj naredbi funkcijskog podprograma (ali mogu da imaju različita imena).
![Page 33: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/33.jpg)
Opšti podprogrami
U slučajevima kada je potrebno da podprogram ima više od jedne izlazne
veličine koriste se opšti podprogrami. Opšti podprogram počinje službenom reči SUBROUTINE iza koje sledi ime
funkcijskog podprograma i lista ulaznih i izlaznih argumenata, odvojenih zapetama koje se ispisuje između zagrada. Posle toga se naredbe ispisuju prema pravilima koja važe za pisanje programa.
Naredba koja se poslednja izvršava u opštem podprogramu je "RETURN". Ona obaveštava fortranski prevodilac da može da preuzme vrednost izlazne promenljive. Opšti podprogram se završava naredbom "END".
Pravila za unos ulaznih podataka su ista kao i kod fukcijskih podprograma. Izlaznim promenjljivim se dodeljuju vrednosti u toku izvršavanja podprograma.
Opšti podprogram se u okviru drugih programskih jedinica poziva službenom reči "CALL", iza koje se navodi njegovo ime i liste stvarnih parametara. Tada stvarni parametri moraju biti u istom redosledu i istog tipa, kao i formalni parametri u prvoj naredbi opšteg podprograma (ali mogu da imaju različita imena).
![Page 34: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/34.jpg)
Zamena vrednosti realnih promenljivih
Sastaviti program koji zamenjuje vrednosti realnim promenljivim A i B, koje se
učitavaju sa tastature. PROGRAM ZAMENA READ*,A,B C=A A=B B=C PRINT*,A,B END
![Page 35: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/35.jpg)
Zamena vrednosti celobrojnih promenljivih
Sastaviti program koji zamenjuje vrednosti celobrojnih promenljivih A i B, koje se učitavaju sa tastature.
PROGRAM ZAMENA INTEGER A,B READ*,A,B C=A A=B B=C PRINT*,A,B END
![Page 36: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/36.jpg)
Izračunavanje faktorijela
Dat je prirodni broj N. Sastaviti program koji izračunava N! Broj N uneti preko tastature.
PROGRAM FAKTOR READ*,N NF=1 DO 5 I=2,N NF=NF*I
5 CONTINUE PRINT*,NF END
![Page 37: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/37.jpg)
Izračunavanje binomnih koeficijenata
Dati su prirodni brojevi N i K (N ≥ K). Sastaviti program koji izračunava binomni koeficijenat $\dsize{\binom n k}$. Brojeve N i K uneti preko tastature.
PROGRAM BINOMK READ*,N,K L1=1 L2=1 DO 5 I=1,K L2=L2*(N‐I+1) L1=L1*I
5 CONTINUE L2=L2/L1 PRINT*,L2 END
![Page 38: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/38.jpg)
Zbir članova niza celih brojeva
Dat je prirodan broj N (N ≤1000) i niz celih brojeva X(I), I = 1, N. Sastaviti program koji određuje zbir članova niza. Broj N i članove niza uneti preko tastature.
PROGRAM SNIZC INTEGER X(1000) READ*,N L=0 DO 5 I=1,N PRINT*,'X(',I,')=' READ*,X(I) L=L+X(I)
5 CONTINUE PRINT*,L END
![Page 39: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/39.jpg)
Zbir članova niza realnih brojeva
Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I=1,N. Sastaviti
program koji određuje zbir članova niza. Broj N i članove niza uneti preko tastature. PROGRAM SNIZR DIMENSION X(1000) READ*,N S=0 DO 5 I=1,N PRINT*,'X(',I,')=' READ*,X(I) S=S+X(I)
5 CONTINUE PRINT*,S END
![Page 40: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/40.jpg)
Zbir članova niza kompleksnih brojeva
Dat je prirodan broj N (N ≤1000) i niz kompleksnih brojeva Z(I), I =1, N. Sastaviti program koji određuje zbir članova niza. Broj N i članove niza uneti preko tastature.
PROGRAM SNIZK COMPLEX Z(1000), S READ*,N S=0 DO 5 I=1,N PRINT*,'Z(',I,')=' READ*,Z(I) S=S+Z(I)
5 CONTINUE PRINT*,S END
![Page 41: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/41.jpg)
Proizvod članova niza celih brojeva
Dat je prirodan broj N (N ≤ 1000) i niz celih brojeva X(I), I = 1, N. Sastaviti
program koji određuje proizvod članova niza. Broj N i članove niza uneti preko tastature.
PROGRAM PRONIZC INTEGER X(1000) READ*,N L=1 DO 5 I=1,N PRINT*,'X(',I,')=' READ*,X(I) L=L*X(I)
5 CONTINUE PRINT*,L END
![Page 42: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/42.jpg)
Proizvod članova niza realnih brojeva
Dat je prirodan broj N (N ≤1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti program koji određuje proizvod članova niza. Broj N i članove niza uneti preko tastature.
PROGRAM PRONIZR REAL X(1000) READ*,N P=1 DO 5 I=1,N PRINT*,'X(',I,')=' READ*,X(I) P=P*X(I)
5 CONTINUE PRINT*,P
END
![Page 43: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/43.jpg)
Proizvod članova niza kompleksnih brojeva
Dat je prirodan broj N (N ≤ 1000) i niz kompleksnih brojeva X(I), I = 1, N.
Sastaviti program koji određuje proizvod članova niza. Broj N i članove niza uneti preko tastature.
PROGRAM PRONIZK COMPLEX Z, X(1000) READ*,N Z=1 DO 5 I=1,N PRINT*,'X(',I,')=' READ*,X(I) Z=Z*X(I)
5 CONTINUE PRINT*,Z END
![Page 44: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/44.jpg)
Aritmetička sredina niza realnih brojeva
Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti program koji određuje aritmetičku sredinu članova niza. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT.
PROGRAM ASRNIZ REAL X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N PRINT*,AS CLOSE(1) END
![Page 45: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/45.jpg)
Aritmetička sredina niza celih brojeva
Dat je prirodan broj N (N ≤ 1000) i niz celih brojeva X(I), I = 1, N. Sastaviti
program koji određuje aritmetičku sredinu članova niza. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT.
PROGRAM ASCNIZ INTEGER X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N PRINT*,AS CLOSE(1) END
![Page 46: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/46.jpg)
Aritmetička sredina niza kompleksnih brojeva
Dat je prirodan broj N (N ≤1000) i niz kompleksnih brojeva X(I), I = 1, N. Sastaviti program koji određuje Aritmetičku sredinu članova niza. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT.
PROGRAM ASKNIZ COMPLEX AS, X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N PRINT*,AS CLOSE(1) END
![Page 47: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/47.jpg)
Najveći element u nizu
Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti program koji određuje najveći element u nizu i njegov indeks. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT.
PROGRAM MAXNIZ REAL X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) L=1 DO 5 I=2,N IF(X(I).GT.X(L))L=I
5 CONTINUE PRINT*,L,X(L) CLOSE(1) END
![Page 48: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/48.jpg)
Najmanji element u nizu
Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti program koji određuje najmanji element u nizu i njegov indeks. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT.
PROGRAM MINNIZ REAL X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) L=1 DO 5 I=2,N IF(X(I).LT.X(L))L=I
5 CONTINUE PRINT*,L,X(L) CLOSE(1) END
![Page 49: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/49.jpg)
Uređivanje niza u rastući niz Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti
program koji Uređuje dati niz u rastući niz. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT. Uređeni niz zapisati u datoteku UNIZ.DAT.
PROGRAM RASNIZ REAL X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) DO 10 I=N,2,‐1 DO 5 J=1,(I‐1) IF(X(J).GT.X(J+1))THEN C=X(J) X(J)=X(J+1) X(J+1)=C ENDIF
5 CONTINUE 10 CONTINUE
OPEN(UNIT=2,FILE='UNIZ.DAT',STAUS='NEW') WRITE(2,*) (X(I),I=1,N) CLOSE(1) CLOSE(2) END
![Page 50: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/50.jpg)
Uređivanje niza u opadajući niz Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I = 1, N. Sastaviti
program koji Uređuje dati niz u opadajući niz. Broj N uneti preko tastature a članove niza iz datoteke NIZ.DAT. Uređeni niz zapisati u datoteku UNIZ.DAT.
PROGRAM OPSNIZ REAL X(1000) READ*,N OPEN(UNIT=1,FILE='NIZ.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) DO 10 I=N,2,‐1 DO 5 J=1,(I‐1) IF(X(J).LT.X(J+1))THEN C=X(J) X(J)=X(J+1) X(J+1)=C ENDIF
5 CONTINUE 10 CONTINUE
OPEN(UNIT=2,FILE='UNIZ.DAT',STAUS='NEW') WRITE(2,*) (X(I),I=1,N) CLOSE(1) CLOSE(2) END
![Page 51: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/51.jpg)
Suma dve matrice Dati su prirodni brojevi m, n ≤ 100 i matrice realnih brojeva A, formata m x n i
B, formata m x n. Sastaviti program koji određuje matricu C=A+B. Matricu A uneti iz datoteke A.DAT, matricu B iz datoteke B.DAT, a matricu C zapisati u datoteku C.DAT. Brojeve m i n uneti preko tastature.
PROGRAM SUMMAT REAL A(100,100),B(100,100),C(100,100) READ*,M,N OPEN(UNIT=1,FILE='A.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='B.DAT',STATUS='OLD') OPEN(UNIT=3,FILE='C.DAT',STATUS='NEW') READ(1,*) ((A(I,J),J=1,N),I=1,M) READ(2,*) ((B(I,J),J=1,N),I=1,M) DO 10 I=1,M DO 5 J=1,K C(I,J)=A(I,L)+B(L,J)
5 CONTINUE 10 CONTINUE
WRITE(3,*) ((C(I,J),J=1,N),I=1,M) CLOSE(1) CLOSE(2) CLOSE(3) END
![Page 52: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/52.jpg)
Proizvod dve matrice Dati su prirodni brojevi m, n, k ≤ 100 i matrice realnih brojeva A, formata m x n i
B, formata n x k. Sastaviti program koji određuje matricu C = AB. Matricu A uneti iz datoteke A.DAT, matricu B iz datoteke B.DAT, a matricu C zapisati u datoteku C.DAT. Brojeve m, n i k uneti preko tastature.
PROGRAM PROMAT REAL A(100,100),B(100,100),C(100,100) READ*,M,N,K OPEN(UNIT=1,FILE='A.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='B.DAT',STATUS='OLD') OPEN(UNIT=3,FILE='C.DAT',STATUS='NEW') READ(1,*) ((A(I,J),J=1,N),I=1,M) READ(2,*) ((B(I,J),J=1,K),I=1,N) DO 15 I=1,M DO 10 J=1,K C(I,J)=0 DO 5 L=1,N C(I,J)=C(I,J)+A(I,L)*B(L,J)
5 CONTINUE
![Page 53: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/53.jpg)
10 CONTINUE 15 CONTINUE
WRITE(3,*) ((C(I,J),J=1,K),I=1,M) CLOSE(1) CLOSE(2) CLOSE(3) END
![Page 54: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/54.jpg)
Rastojanje dva ndimenzionalna vektora Dat je prirodni broj n n ≤ 50 i dva n‐dimenzionalna vektora X i Y svojim
koordinatama X(i) i Y(i), i = 1, n. Sastaviti program koji određuje njihovo rastojanje. Koordinate vektora X uneti iz datoteke X.DAT; koordinate vektora Y uneti iz datoteke Y.DAT; broj n uneti preko tastature.
PROGRAM RASVEK REAL X(50),Y(50) READ*,N OPEN(UNIT=1,FILE='A.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='B.DAT',STATUS='OLD') READ(1,*) (X(I),I=1,N) READ(2,*) (Y(I),I=1,N) R=0 DO 5 I=1,N R=R+(X(I)‐Y(I))**2
5 CONTINUE R=SQRT(R) PRINT*,R CLOSE(1) CLOSE(2) END
![Page 55: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/55.jpg)
Izračunavanje faktorijela
Dat je prirodni broj N. Sastaviti funkcijski podprogram koji izračunava N!. FUNCTION NF(N) NF=1 DO 5 I=2,N NF=NF*I
5 CONTINUE RETURN END
![Page 56: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/56.jpg)
Izračunavanje binomnih koeficijenata
Dati su prirodni brojevi N i K (N\ge K). Sastaviti funkcijski podprogram koji
izračunava binomni koeficijenat \dsize{\binom n k}. FUNCTION BINOMK(N,K) INTEGER BINOMK L1=1 L2=1 DO 5 I=1,K L2=L2*(N‐I+1) L1=L1*I
5 CONTINUE L2=L2/L1 BINOMK=L2 RETURN END
![Page 57: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/57.jpg)
Aritmetička sredina niza celih brojeva
Dat je prirodan broj N (N≤ 1000) i niz celih brojeva X(I), I=1,N. Sastaviti funkcijski podprogram koji određuje aritmetičku sredinu članova niza.
FUNCTION AS(N,X) INTEGER X(1000) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N RETURN END
![Page 58: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/58.jpg)
Aritmetička sredina niza realnih brojeva
Dat je prirodan broj N (N≤ 1000) i niz realnih brojeva X(I), I=1,N. Sastaviti
funkcijski podprogram koji određuje aritmetičku sredinu članova niza. FUNCTION AS(N,X) REAL X(1000) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N RETURN END
![Page 59: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/59.jpg)
Aritmetička sredina niza kompleksnih brojeva
Dat je prirodan broj N (N≤ 1000) i niz kompleksnih brojeva X(I), I=1,N. Sastaviti
funkcijski podprogram koji određuje aritmetičku sredinu članova niza. FUNCTION AS(N,X) COMPLEX X(1000) AS=0 DO 5 I=1,N AS=AS+X(I)
5 CONTINUE AS=AS/N RETURN END
![Page 60: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/60.jpg)
Uređivanje niza u rastući niz
Dat je prirodan broj N (N≤ 1000) i niz realnih brojeva X(I), I=1,N. Sastaviti opšti podprogram koji uređuje dati niz u rastući niz.
SUBROUTINE RASNIZ(N,X) REAL X(1000) DO 10 I=N,2,‐1 DO 5 J=1,(I‐1) IF(X(J).GT.X(J+1))THEN C=X(J) X(J)=X(J+1) X(J+1)=C ENDIF
5 CONTINUE 10 CONTINUE
RETURN END
![Page 61: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/61.jpg)
Uređivanje niza u opadajući niz
Dat je prirodan broj N (N ≤ 1000) i niz realnih brojeva X(I), I=1,N. Sastaviti opšti podprogram koji uređuje dati niz u rastući niz.
SUBROUTINE RASNIZ(N,X) REAL X(1000) DO 10 I=N,2,‐1 DO 5 J=1,(I‐1) IF(X(J).LT.X(J+1))THEN C=X(J) X(J)=X(J+1) X(J+1)=C ENDIF
5 CONTINUE 10 CONTINUE
RETURN END
![Page 62: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/62.jpg)
Suma dve matrice
Dati su prirodni brojevi m,n≤ 100 i matrice realnih brojeva A i B formata m x n.
Sastaviti opšti podprogram koji određuje matricu C=A+B. SUBROUTINE SUMMAT (M,N,A,B,C) REAL A(100,100),B(100,100),C(100,100) DO 10 I=1,M DO 5 J=1,N C(I,J)=A(I,J)+B(I,J)
5 CONTINUE 10 CONTINUE
RETURN END
![Page 63: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/63.jpg)
Proizvod dve matrice
Dati su prirodni brojevi m,n,k≤ 100 i matrice realnih brojeva A, formata m x n i
B, formata n x k. Sastaviti opšti podrogram koji određuje matricu C=AB. SUBROUTINE PROMAT (M,N,K,A,B,C) REAL A(100,100),B(100,100),C(100,100) DO 15 I=1,M DO 10 J=1,K C(I,J)=0 DO 5 L=1,N C(I,J)=C(I,J)+A(I,L)*B(L,J)
5 CONTINUE 10 CONTINUE 15 CONTINUE
RETURN END
![Page 64: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/64.jpg)
Najveći element u matrici
Dati su prirodani brojevi m,n ≤ 50 i matrica A formata m x n. Sastaviti opšti
podprogram koji određuje vrednost i koordinate najvećeg elementa u matrici A. SUBROUTINE MAXMAT(M,N,A,K,L,P) REAL A(50,50) K=1 L=1 DO 5 I=1,M DO 10 J=1,N IF(A(I,J).GT.A(K,L))THEN K=I L=J ENDIF
5 CONTINUE 10 CONTINUE
P=A(K,L) RETURN END
![Page 65: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/65.jpg)
Rastojanje dva ndimenzionalna vektora
Dat je prirodni broj n n ≤ 50 i dva n‐dimenzionalna vektora X i Y svojim koordinatama X(i) i Y(i), i = 1, n. Sastaviti funkcijski podprogram koji određuje njihovo rastojanje.
FUNCTION RASVEK(N,X,Y) REAL X(50),Y(50) RASVEK=0 DO 5 I=1,N RASVEK=RASVEK+(X(I)‐Y(I))**2
5 CONTINUE RASVEK=SQRT(RASVEK) RETURN END
![Page 66: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/66.jpg)
Trag matrice
Dat je prirodan broj n ≤ 50 i kvadratna matrica A reda n. Sastaviti funkcijski
podprogram koji određuje trag matrice A: tr (A) = a11 + a22 + a33 + ... + ann, FUNCTION TR(N,A) REAL A(50,50) TR=0 DO 5 I=1,N TR=TR+A(I,I)
5 CONTINUE RETURN END
![Page 67: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/67.jpg)
Transponova matrica
Dati su prirodani brojevi m, n ≤ 50 i matrica A formata m x n. Sastaviti opšti podprogram koji određuje matricu B = AT.
SUBROUTINE TRANSMAT(N,A,B) REAL A(50,50),B(50,50) DO 5 I=1,N DO 5 J=1,M B(I,J)=A(J,I)
5 CONTINUE 10 CONTINUE
RETURN END
![Page 68: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/68.jpg)
nti stepen matrice
Dati su prirodni brojevi k,n≤ 50 i kvadratna matrica A reda n sastaviti opšti
podprogram za određivanje matrice B=Ak gde je Ak = E (E je jedinična matrica reda n), za k=0 i Ak=Ak‐1A za k>0. U podprogramu koristiti podprogram IV.5.
SUBROUTINE STPMAT (N,K,A,B) REAL A(50,50),B(50,50),C(50,50) DO 10 I=1,N DO 5 J=1,N B(I,J)=0 IF(I.EQ.J)B(I,J)=1
5 CONTINUE 10 CONTINUE
DO 25 L=1,K CALL PROMAT(N,N,N,A,B,C) DO 20 I=1,N DO 15 J=1,N B(I,J)=C(I,J)
15 CONTINUE 20 CONTINUE 25 CONTINUE
RETURN END
![Page 69: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/69.jpg)
Izračunavanje implikacije
Dati su logičke promenljive P i Q. Sastaviti funkcijski podprogram koji
izračunava implikaciju P Q. FUNCTION IMPLIC(P,Q) LOGICAL P,Q,IMPLIC IMPLIC=.NOT.P.OR.Q RETURN END
Izračunavanje ekvivalencije
Dati su logičke promenljive P i Q. Sastaviti funkcijski podprogram koji izračunava ekvivalenciju P Q.
FUNCTION EQV(P,Q) LOGICAL P,Q,EQW EQW=(P.AND.Q).OR.(.NOT.P.AND..NOT.Q) RETURN END
![Page 70: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/70.jpg)
Izračunavanje vrednosti Šeferove operacije
Dati su logičke promenljive P i Q. Sastaviti funkcijski podprogram koji izračunava vrednost šeferove operacije P ↑ Q.
FUNCTION SHEFER(P,Q) LOGICAL P,Q,SHEFER SHEFER=.NOT.(P.AND.Q) RETURN END
Izračunavanje vrednosti Pirsove operacije
Dati su logičke promenljive P i Q. Sastaviti funkcijski podprogram koji
izračunava vrednost Pirsove operacije P ↓ Q. FUNCTION PIRS(P,Q) LOGICAL P,Q,PIRS PIRS=.NOT.(P.OR.Q) RETURN END
![Page 71: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/71.jpg)
Inverzna relacija Na konačnom skupu A= a1, ...,an koji se sastoji od n ≤ 50 elemenata zadata je
relacija ρ A2 celobrojnom matricom R po sledećem pravilu:R(i,j) = 1 ako je: ai ρ aj; 0 u suprotnom slučaju. Sastaviti program koji određuje matricu S koja odgovara relaciji σ = ρ‐1. Broj n uneti preko tastature; matricu R iz datoteke R.DAT; matricu S zapisati u datoteku S.DAT.
PROGRAM INVREL INTEGER R(50,50), S(50,50) OPEN(UNIT=1,FILE='R.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='S.DAT',STATUS='NEW') READ*,N READ(1,*)((R(I,J),J=1,N),I=1,N) DO 10 I=1,N DO 5 J=1,N S(I,J)=R(J,I)
5 CONTINUE 10 CONTINUE
WRITE(2,*)((S(I,J),J=1,N),I=1,N) CLOSE(1) CLOSE(2) END
![Page 72: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/72.jpg)
Kompozicija relacija
Na konačnom skupu A = a1, ...,an koji se sastoji od n ≤ 50 elemenata zadate su
relacije ρ, σ A2 celobrojnim matricama R i S po sledećim pravilima: R(i,j) = 1 ako je: ai ρ aj; 0 u suprotnom; S(i,j) = 1 ako je: ai σ aj; 0 u suprotnom .
Sastaviti program koji određuje matricu T koja odgovara relaciji τ = ρ ◦ σ. Broj n uneti preko tastature; matricu R iz datoteke R.DAT; matricu S iz datoteke S.DAT; matricu T zapisati u datoteku T.DAT.
PROGRAM KOMREL INTEGER R(50,50), S(50,50), T(50,50) OPEN(UNIT=1,FILE='R.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='S.DAT',STATUS='OLD') OPEN(UNIT=3,FILE='T.DAT',STATUS='NEW') READ*,N READ(1,*)((R(I,J),J=1,N),I=1,N) READ(2,*)((S(I,J),J=1,N),I=1,N) DO 15 I=1,N DO 10 J=1,N
![Page 73: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/73.jpg)
T(I,J)=0 L=0
5 IF(L.EQ.N) GOTO 15 L=L+1 IF((R(I,L).EQ.0).OR.(S(L,J).EQ.0)) GOTO 5 T(I,J)=1
10 CONTINUE 15 CONTINUE
WRITE(3,*)((T(I,J),J=1,N),I=1,N) CLOSE(1) CLOSE(2) CLOSE(3) END
![Page 74: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/74.jpg)
Metoda polovljenja intervala
Dati su realni brojevi E > 0, a i b (a < b), i funkcija f, koja ispunjava uslov
f(a)*f(b) < 0. Sastaviti program koji nalazi približno rešenje jednačine f(x) = 0 metodom polovljenja intervala. Izračunavanje prekinuti kada apsolutna vrednost funkcije f u približnom rešenju jednačine bude manja od E. Funkciju f zadati funkcijskom naredbom. Na primer: f(x) = x5 + x + 1; a = ‐1; b = 0; E = 10‐6.
PROGRAM POLINT F(X)=X**5+X+1 READ*,A,B,E
5 C=(A+B)/2 IF(ABS(F(C)).LT.E)GOTO 10 IF(F(C)*F(A).GT.0)THEN A=C ELSE B=C ENDIF GOTO 5
10 PRINT*,C END
![Page 75: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/75.jpg)
Metoda sečice
Dati su realni brojevi E > 0, a i b, i funkcija f, koja ispunjava uslov f(a)*f(b) < 0. Sastaviti program koji nalazi približno rešenje jednačine f(x) = 0 metodom sečice. Izračunavanje prekinuti kada apsolutna vrednost funkcije f u približnom rešenju jednačine bude manja od E. Funkciju f zadati funkcijskom naredbom. Prvo uneti pokretni a zatim nepokretni kraj intervala. Na primer: f(x) = x5 + x + 1; a=0; b=‐1; E=10‐6.
PROGRAM SECICA F(X)=X**5+X+1 READ*,A,B,E
5 A=A‐F(A)*(B‐A)/(F(B)‐F(A)) IF(ABS(F(A)).LT.E)GOTO 10 GOTO 5
10 PRINT*,A END
![Page 76: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/76.jpg)
Njutnov metod
Dati su realni brojevi E>0, a, i funkcija f. Sataviti program koji nalazi približno rešenje jednačine f(x) = 0 Njutnovim metodom. Izračunavanje prekinuti kada apsolutna vrednost funkcije f u približnom rešenju jednačine bude manja od E. Funkcije f i f' zadati funkcijskim naredbama. Kao početnu iteraciju uzeti broj a. Na primer: f(x) = x5 + x + 1; a = ‐1; E = 10‐6.
PROGRAM NEWTON F(X)=X**5+X+1 G(X)=5*X**4+1 READ*,A,E
5 A=A‐F(A)/G(A) IF(ABS(F(A)).LT.E)GOTO 10 GOTO 5
10 PRINT*,A END
![Page 77: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/77.jpg)
Vrednost Lagranževog interpolacionog polinoma
Dat je rastući niz realnih brojeva x0, ..., xn i niz realnih brojeva y0, ..., yn. Sastaviti
program koji određuje vrednost Lagranževog interpolacionog polinoma, koji prolazi kroz čvorove interpolacije (xi, yi) i = 0, n, u datoj tački a (x0 < a < xn). Brojeve a i n uneti preko tastature; niz xi iz datoteke X.dat; niz yi iz datoteke Y.dat
PROGRAM LAGRANGE REAL X(0:20),Y(0:20) OPEN(UNIT=1,FILE='X.DAT',STATUS='OLD') OPEN(UNIT=2,FILE='Y.DAT',STATUS='OLD') READ*,A,N READ(1,*) (X(I),I=0,N) READ(2,*) (Y(I),I=0,N) B=0 DO 15 I=0,N P=Y(I) DO 5 J=0,(I‐1) P=P*(A‐X(J))/(X(I)‐X(J))
5 CONTINUE DO 10 J=(I+1),N
![Page 78: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/78.jpg)
P=P*(A‐X(J))/(X(I)‐X(J))
10 CONTINUE B=B+P
15 CONTINUE PRINT*,B CLOSE(1) CLOSE(2) END
![Page 79: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/79.jpg)
Gausov postupak
Dat je prirodni broj n ≤ 30, realna kvadratna matrica A reda n i realni niz b koji
ima n elemenata. Sastaviti program koji rešava sistem linearnih algebarskih jednačina AX = B Gausovim postupkom, gde je X kolona nepoznatih, a kolona slobodnih članova B se sastoji od članova niza b.
PROGRAM GAUS REAL B(30),A(30,30),X(30) READ*,N READ*,(B(I),I=1,N) READ*,((A(I,J),J=1,N),I=1,N) DO 50 I=1,N L=I
5 IF (A(I,I).NE.0) GOTO 25 10 IF (L.EQ.(N+1)) GOTO 20
L=L+1 IF (A(L,I).NE.0) THEN C=B(L) B(L)=B(I) B(I)=C
![Page 80: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/80.jpg)
DO 15 K=I,N C=A(L,K) A(L,K)=A(I,K) A(I,K)=C 15 CONTINUE ENDIF GOTO 25
20 PRINT*,'SISTEM NEMA JEDINSTVENO RESENJE' GOTO 65
25 B(I)=B(I)/A(I,I) DO 30 L=(I+1),N A(I,L)=A(I,L)/A(I,I)
30 CONTINUE DO 35 K=(I+1),N B(K)=B(K)‐A(K,I)*B(I)
35 CONTINUE DO 45 K=(I+1),N DO 40 J=(I+1),N A(K,J)=A(K,J)‐A(K,I)*A(I,J)
40 CONTINUE 45 CONTINUE 50 CONTINUE
![Page 81: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/81.jpg)
DO 60 K=N,1 S=0 DO 55 L=(K+1),N S=S+X(L)*A(K,L)
55 CONTINUE X(K)=B(K)‐S
60 CONTINUE PRINT*,(X(I),I=1,N)
65 CONTINUE END
![Page 82: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/82.jpg)
Jakobijev postupak
Dat je prirodni broj n≤100, realna kvadratna matrica A reda n i realni niz b koji
ima n elemenata. Sastaviti program koji rešava sistem linearnih algebarskih jednačina AX = B Jakobijevim postupkom, gde je X kolona nepoznatih, a kolona slobodnih članova B se sastoji od članova niza b. Izračunavanje prekinuti kada rastojanje dva poslednja približna rešenja bude manje od E (videti IV.7 i koristiti odgovarajući podprogram). Podprogrami za sabiranje i množenje matrica IV.4 i IV.5 mogu se takođe koristiti. Pretpostvlja se da sistem ima jedinstveno rešenje. Parametar za transformaciju sistema učitati na ulazu.
PROGRAM JACOBI REAL B(100),A(100,100),X(100),D(100),C(100,100),Y(100) READ*,N,P,E READ*,(B(I),I=1,N) READ*,((A(I,J),J=1,N),I=1,N) DO 5 I=1,N D(I)=‐P*B(I) X(I)=‐P*B(I)
5 CONTINUE DO 15 I=1,N
![Page 83: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/83.jpg)
DO 10 J=1,N C(I,J)=A(I,J)*P IF(I.EQ.J) C(I,J)=C(I,J)+1
10 CONTINUE 15 CONTINUE 20 CALL PROMAT (N,N,1,C,X,Y)
CALL SUMMAT (N,1,Y,D,Y) IF(RASVEK(N,X,Y).LT.E) GOTO 30 DO 25 J=1,N X(J)=Y(J)
25 CONTINUE GOTO 20
30 PRINT*,(Y(I),I=1,N) END
![Page 84: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/84.jpg)
GausZajdelov postupak
Dat je prirodni broj n ≤ 100, realna kvadratna matrica A reda n i realni niz b koji
ima n elemenata. Sastaviti program koji rešava sistem linearnih algebarskih jednačina AX = B Gaus‐Zajdelovim postupkom, gde je X kolona nepoznatih, a kolona slobodnih članova B se sastoji od članova niza b. Izračunavanje prekinuti kada rastojanje dva poslednja približna rešenja bude manje od E (videti IV.7 i koristiti odgovarajući podprogram). Pretpostvlja se da sistem ima jedinstveno rešenje. Parametar za transformaciju sistema učitati na ulazu.
PROGRAM SEIDEL REAL B(100),A(100,100),X(100),D(100),C(100,100),Y(100) READ*,N,P,E READ*,(B(I),I=1,N) READ*,((A(I,J),J=1,N),I=1,N) DO 5 I=1,N D(I)=‐P*B(I) X(I)=‐P*B(I)
5 CONTINUE DO 15 I=1,N DO 10 J=1,N
![Page 85: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/85.jpg)
C(I,J)=A(I,J)*P IF(I.EQ.J) C(I,J)=C(I,J)+1
10 CONTINUE 15 CONTINUE 20 D0 35 I=1,N
Y(I)=D(I) D0 25 J=1,(I‐1) Y(I)=Y(I)+C(I,J)*Y(J)
25 CONTINUE D0 30 J=I,N Y(I)=Y(I)+C(I,J)*X(J)
30 CONTINUE 35 CONTINUE
IF(RASVEK(N,X,Y).LT.E) GOTO 45 DO 40 J=1,N X(J)=Y(J)
40 CONTINUE GOTO 20
50 PRINT*,(Y(I),I=1,N) END
![Page 86: FORTRAN](https://reader035.fdocuments.net/reader035/viewer/2022081720/54719bdfb4af9f8b6e8b462e/html5/thumbnails/86.jpg)
Determinanta i inverzna matrica
Dati su je prirodni broj n ≤ 99 i kvadratna matrica realnih brojeva A=[aij] reda n.
Sastaviti program koji: 1) izračunava determinantu matrice A 2) u slučaju da je det(A) ≠ 0 određuje matricu A‐1. tr(A)= a11 + a22 + ... + ann
U rešavanju ovog zadatka preporučujemo korišćenje Leverijeve teoreme: Leverijeva teorema Neka je A realna kvadratna matrica reda n, E jedinična matrica istog reda i sk=tr(Ak). Ako je: bn = 1, bn‐1 = ‐s1, bn‐2 = ‐(s2 + bn‐1s1) / 2, ..., bn‐k = ‐ (s_k+\sum_{j=1}^{n‐1}b_{n‐j}s_{k‐j})\text{\hskip0.8cm}k=1,n\endalign tada je: 1)\text{\hskip0.5cm}detA=b_0,\text{\hskip0.5cm} 2)\text{\hskip0.5cm}A^{‐1}=‐\frac1{b_0}\sum_{i=1}^nb_kA^k.