FORTRAN

86
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

Transcript of FORTRAN

Page 1: FORTRAN

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

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

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

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

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

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

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

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

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

 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

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

 

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

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

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

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

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

 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

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

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

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

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

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

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

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

 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

 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

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

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

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

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

 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

 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

   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

 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

 

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

  

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

 

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

 

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

 

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

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

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

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

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

   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

Rastojanje dva n­dimenzionalna 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

 

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

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

 

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

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

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

 

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

 

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

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

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

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

 

Rastojanje dva n­dimenzionalna 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

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

 

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

n­ti 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

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

 

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

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

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

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

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

 

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

 

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

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

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

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

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

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

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

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

Gaus­Zajdelov 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

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

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.