30
Računari i Programiranje Zadaci za Vježbu

Zadaci Za Vjezbu

Embed Size (px)

DESCRIPTION

dsssssssssssss

Citation preview

  • Raunari i Programiranje Zadaci za Vjebu

  • Instalacija Fortran editora i compilera

    Code::Blocks je besplatan editor za fortran i moze se pronaci na sledecoj adresi:

    http://darmar.vgtu.lt/downloads

    Pored editora potreban je i fortran compiler, na adresi http://tdm-gcc.tdragon.net/download

    moguce je pronaci Gfortran comipler, prilikom instalacije potreno je odrati Full Install ili ukljuciti

    Fortran Compiler kod izbora komponenti.

    Ispod je direktan Link za download Fortran Compiler-a za Windows OS:

    http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.8.1-

    3.exe/download

  • Kreiranje novog projekta upotrebom Code::Blocks IDE-a:

    Odabrati: File -> New -> Project iz glavnog menija.

    Zatim u Category, odabrati Fortran i listi ispod odabrati Fortran application.

  • U narednom koraku unijeti ime projekta kao na islici ispod (npr. Test).

    U zadnjem koraku odabrati fortran compiler, npr. GNU Fortran Compiler ili G95 fortran

    compiler. Nakon potvrde bie kreiran novi projekat koji sadri fajl main.f90 sa defaultnim Hello

    World prgramom.

  • Zadatak 1.

    Napisati program za izracunavanje povrsine trougla primjenom Heronovog obrasca ako su

    zadate koordinate vrhova trougla.

    Rjeenje:

    program PovrsinaTrougla ! Onemoguci implicitnu deklaraciju variabli implicit none ! Deklaracija novog tipa podataka type Vektor real x real y end type ! Deklaracija variabli type (Vektor) :: A, B, C ! d1,d2,d3 - duzine stranica trougla ! s - poluobim trougla ! p - povrsina trougla real d1,d2,d3, s, p ! Unos podataka print *, 'Unesi tacku A (x y):' read *, A print *, 'Unesi tacku B (x y):' read *, B print *, 'Unesi tacku C (x y):' read *, C ! Obrada podataka d1 = Udaljenost(A,B) d2 = Udaljenost(B,C) d3 = Udaljenost(C,A) s = (d1+d2+d3) / 2.0 p = sqrt(s*(s-d1)*(s-d2)*(s-d3)); ! Ispis podataka print *, 'Povrsina iznosi:', p pause stop contains ! Funkcija racuna udaljenost od tacke A do tacke B function Udaljenost(A, B) result (d) implicit none type(Vektor) :: A, B ! Deklaracija tipova paramatara funkcije real :: d, dx, dy ! Deklaracija povratnog tipa funkcije dx = B%x - A%x ! A%x A je vektor, x je komponenta vektora dy = A%y - B%y d = sqrt( dx**2 + dy**2) end function end program

    d1

    d2

    d3

    A

    B

    C

    Ax B

    x C

    x

    Ay

    Cy

    By

    = ( 1)( 2)( 3)

    =1 + 2 + 3

    2

    P Povrina trougla

    s poluobim trougla

  • Zadatak 2.

    Uitati niz A od 8 elemenata, nai sumu lanova niza A. Sumu niza A odtampati u glavnom

    programu.

    Rjeenje:

    program suma_niza implicit none real, dimension :: A(8) real :: s integer :: i print *, "Unesi 8 elemenata:" do i = 1, 8 read *, A(i) end do s = 0 ! Postavi vrijednost sume na 0 do i = 1, 8 s = s + A(i) ! Dodaj vrijednost elementa Ai na s end do print *, "Suma niza iznosi:", s end program

  • Zadatak 3.

    Uitati niz B od 6 elemenata, nai proizvod lanova niza B. Proizvod niza B odtampati u

    glavnom programu.

    Rjeenje:

    program Zadatak3 implicit none ! Deklaracija niza B sa 6 elemenata real :: B(6) real :: p ! proizvod integer :: i ! Naredba read podrzava unos nizova, ! umjesto DO petlje mozemo napisati samo read *, ime_niza print *, 'Unesi 6 elemenata:' read *, B ! Postavi p na prvi element niza p = B(1) ! Kreni od drugog do zadnjeg elementa, ubound(B,1) ! funkcija vraca zadnji index niza u 1. dimenziji ! U ovom primjeru ubound(B,1) iznosi 6, jer B ima 6 elemenata od 1 do 6 do i = 2, ubound(B,1) p = p * B(i) end do print '(AF18.3)', 'Proizvod elemenata je:', p end program

  • Zadatak 4.

    Uitati niz A od 10 elemenata, nai proizvod i sumu niza. Proizvod i sumu niza A odtampati u

    glavnom programu.

    Rjeenje:

    program proizvod_i_suma implicit none real, dimension(:) :: A(10) real :: p, s integer :: i print *, "Unesi 10 elemenata:" read *, A ! Suma elemenata s = 0 Do i = 1, 10 s = s + A(i) End Do p = A(1) Do i = 2, 10 p = p * A(i) End Do Print *, "Suma elemenata je:", s Print *, "Proizvod elemenata je:", p end program

  • Zadatak 5.

    Uitati niz A od 20 elemenata, sortirati ih u rastucem redoslijedu te odstampati u glavnom

    programu.

    program sortiranje implicit none real :: A(5) real :: t integer :: i,j,n print *, 'Unesi 5 elemenata niza:' read *, A ! Odredi zadnji element u niz n = ubound(A,1) ! Naredni blok koda implementira "Selection Sort" algoritam do i = 1, n-1 do j = i+1, n ! Ako je element na indeksu i manji od elementa na indekus j ! izvrsi zamjenu if (A(i) < A(j)) then t = A(i) A(i) = A(j) A(j) = t end if end do end do ! Ispis elemenata niza print *,'Elementi niza su:' print '(F8.2)', A end program

  • Zadatak 6.

    Program ucitava N cijelih brojeva i nalazi: najvecu,najmanju i prosjecnu vrijednost.

    program min_max_average implicit none integer :: n, broj, min_val, max_val, suma, i real :: avg_val print *, 'Unesi broj cijelih brojeva:' read *, n ! Postavi vrijednosti na 0 min_val = 0 max_val = 0 avg_val = 0.0 suma = 0 do i = 1, n ! Ovde se koristi format kod unosa sa sledecim znacenjem ! A - tekst za dio "Unesi broj " ! I4 - integer sa maksimalno 4 broja za dio i ! ": " - dodatni string koji ce biti ispisan ! adavnce="no" zadrzava unos u istoj liniji kao i ispis write (*,'(A I4 ": ")', advance="no") , "Unesi broj ", i read *, broj ! Nakon unosa prvog elementa inicijaliziraj min i max vrijednosti if (i == 1) then min_val = broj max_val = broj end if if (min_val > broj) min_val = broj if (max_val < broj) max_val = broj suma = suma + broj end do avg_val = suma / real(n) print *, 'Minimalna vrijednost je:', min_val print *, 'Maksimalna vrijednost je:', max_val print *, 'Prosjecna vrijednost je:', avg_val end program

  • Zadatak 7.

    Program nalazi najveci zajednicki djelilac dva zadana prirodna broja.

    program najveci_djelilac implicit none integer :: a, b, t,r print *, 'Unesi dva cijela broja:' read *, a,b ! Osiguraj da je A vece od B if (a < b) then t = a a = b b = a end if ! Koristi euklidov algoritam za najveci zajednicki djelilac ! 1. Odredi ostatak dijeljenja broja a sa brojem b i snimi u variablu r ! 2. Ako je ostatak razlicit od nule odredi ostatak dijeljenja broja b i r ! 3. Ponavljaj postupak dok ostatak ne bude jednak nuli r = mod(a,b) do while (r /= 0) a = b ! Postavi gornju granicu na donju b = r ! Postavi donju granicu na ostatak dijeljenja broja a sa brojem b r = mod(a,b) ! Odredi novi ostatak end do print *, "Najveci zajednicki djelilac dva cijela broja je:", b end program

  • Zadatak 8.

    Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata na neparnim

    mjestima. Sumu i proizvod odtampati u glavnom programu.

    program nizovi implicit none real :: A(6) , s, p integer :: i print *, 'Unesi 6 elemenata:' do I = 1,6 read *, A(i) end do s = 0 p = A(1) do i = 2, 6 if (mod(i, 2) == 0) then s = s + A(i) else p = p * A(i) end if end do print *, "Suma na parnim mjestima je:", s print *, "Proizvod na ne parnim mjestima je:", p end program

  • Zadatak 9.

    Napisati program u Fortranu koji izraunava prosjenu vrijednost uneenog niza od N

    elemenata ili npr. izraunavanje prosjene vrijednosti za nekoliko unijetih ocjena.

    program prosjek_elemenata implicit none real, allocatable, dimension(:) :: A real :: prosjek integer :: n,i print *, 'Unesi broj elemenata niza:' read *, n ! Alociraj elemente niza allocate(A(n)) print *, 'Unesi elemente niza:' do i = 1, n read *, A(i) end do ! Primjenom sum funkcije odreduje se suma elemenata niza ! Funkcija sum uzima niz kao prvi argument i dimenziju kao drugi argument ! Ukoliko dimenzija nije navedena uzima se prva dimenzija prosjek = sum(A) / n ! Dealociraj niz A ! Svaki element koji se alocira na kraju programa, kada vise nije potreban ! potrebno je dealocirati (osloboditi iz memorije) deallocate(A) print *, "Prosjecna vrijednost je:", prosjek end program

  • Zadatak 10.

    Napisati program koji za zadane vrijednosti duzine predjenog puta, vremena za koje je taj put

    predjen i ukupno potrosenog goriva racuna i stampa prosjecnu brzinu automobila i prosjecnu

    potrosnju goriva.

    program Primjer10 implicit none real L ! duzina predjenog puta real t ! vrijeme za koje je put predjen real pg! potrosnja goriva real v ! srednja brzina real pgL ! potrosnja goriva po jedinici predjenog puta real pgt ! potrosnja goriva po jedinici vremena print *, "Unesi predjenu duzinu puta [km]:" read *, L print *, "Unesi vrijeme za koje je put predjen [h]:" read *, t print *, "Unesi ukupnu kolicinu potrosenog goriva [L]:" read *, pg !Formula: s = v * t => v = s/t v = L / t ! srednja brina auta pgL = (pg / L)*100.0 ! Potrosnja na 100 km pgt = pg / t ! U naredbi print format ima sledeca znacenja: ! A - oznacava prvi string ! F8.3 - oznacava ispis realnog broja ! A - oznacva zadnji string print "(A F8.3 A)", "Srednja brzina auta je:", v, " [km/h]" print "(A F8.3 A)", "Srednja potrosnja goriva:", pgL, "[L/100km]" print "(A F8.3 A)", "Srednja potrosnja goriva:", pgt, "[L/h]" end program

  • Zadatak 11.

    Izracunati ukupnu i neto zaradu nekog radnika ako je zadana cijena po jednom satu i ukupan

    broj sati rada. Na dio zarade koji prelazi 900 km, placa se 10% poreza na dohodak.

    program Zadatak11 implicit none real cijenaPoSatu real ukupnoSati real ukupnaZarada, netoZarada, odbici ! Parameter oznacava da variabla ima konstantnu vrijednost real, parameter :: granicnaZarada = 900.0 real, parameter :: porez = 10.0 print *, "Unesi cijenu po satu:" read *, cijenaPoSatu print *, "Unesi ukupn broj sati:" read *, ukupnoSati ukupnaZarada = cijenaPoSatu * ukupnoSati netoZarada = ukupnaZarada if (ukupnaZarada > granicnaZarada) then ! porez na dio zarade koji prelazi granicnu zaradu odbici = (ukupnaZarada-granicnaZarada)* porez/100.0 netoZarada = ukupnaZarada - odbici end if print *, "Ukupna zarada je:", ukupnaZarada print *, "Neto zarada je:", netoZarada print *, "Iznos poreza je:", odbici end program

  • Zadatak 12.

    Napisati program koji pretvara temperaturu izracunatu u stepenima Farenhajta (Tf) u stepene

    celizijuse (Tc) koristei obrazac. Tc= 5

    9( 32) , za temperature od 30 do 60 F, sa korakom

    2F.

    program Zadatak12 implicit none real Tc ! Temperatura u stepenima celzijus real Tf ! Temperatura u farenhaitima Print "(A14 A4 A14)", "Tf", "|", "Tc" Print "(A)", repeat("-",33) ! ispisuje znak "-" 33 Do Tf = 30, 60, 2 Tc = 5.0/9.0 * (Tf-32.0) print "(A8 F8.3 A8 F8.3 )", "Tf = ", Tf, " Tc = ", Tc End Do end program

  • Zadatak 13.

    Napisati program u fortranu koji za unesene vrijednosti temperature koje su zadate u intervalu

    od: 0 do 300 C ispisuje sljedee: T < 0 - smrzavanje; T < 10 hladno; T < 20 umjereno;

    T < 30 toplo; T > 30 - vrlo toplo.

    program Zadatak13 implicit none real T character ch 10 continue print *, "Unesi temperaturu:" read *, T if (T < 0) then print *, "Smrzavanje" else if (T < 10) then print *, "Hladno" else if (T < 20) then print *, "Umjereno" else if (T < 30) then print *, "Toplo" else if (T >= 30) then print *, "Vrlo toplo" end if print *, "Da li zelite ponoviti (y,n):" read *, ch if (ch == 'y') goto 10 end program

  • Zadatak 14.

    U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog potprograma

    izraunati kombinaciju

    =!

    J! (I J)!

    program Zadatak14 implicit none integer k, i,j print *, "Unesi brojeve i,j:" read *, i, j k = fact(i) / ( fact(j) * (fact(i-j))) ! k = i! /( j!*(i-j)!) print *, "Prvi broj je:", i print *, "Drugi broj je:", j print *, "Broj kombinacije je:", k contains ! Racuna factoriel broja n ! f(0) = 1 po definiciji ! f(1) = 1 ! f(n) = 1*2*3*...*n function fact(n) result(f) integer :: n, i,f f = 1; do i = 1, n f = f*i end do end function end program

  • Zadatak 15.

    Uitati x,y koordinate 10 taaka. Napisati funkcijski potprogram koji e da rauna rastojanja datih

    taaka sa kordinatom XA = 0.5 i YA = 1.0, te nai najveu i najmanju duinu u glavnom programu.

    program Zadatak15 implicit none real X(10), Y(10), d(10) real dmin, dmax integer i real, parameter :: Xa = 0.5 real, parameter :: Ya = 1.0 print *, "Unesi 10 tacaka x y:" do i = 1, 10 read *, X(i),Y(i) end do do i = 1, 10 d(i) = udaljenost(x(i), y(i), Xa, Ya) end do ! postavi minimalnu i maksimalnu udaljenost ! tako da odgovaraju vrijednostima prvog elementa dmin = d(1) dmax = d(1) do i = 2, 10 if (dmin > d(i)) dmin = d(i) ! postavi dmin na manju vrijednost if (dmax < d(i)) dmax = d(i) ! postavi dmax na vecu vrijednost end do print *, "Maksimalna udaljenost je:", dmax print *, "Minimalna udaljenost je:", dmin contains function udaljenost(x1,y1,x2,y2) result (d) real x1,y1, x2,y2, d d = sqrt((x2-x1)**2 + (y2-y1)**2) end function end program

  • Zadatak 16.

    Napisati program u Fortranu koji rauna elemente trajektorije kod kosog hica koristei poziv za traject funkciju.

    program Zadatak16 implicit none real Vo, alfa real Vx, Vy, x,y real T, D real, parameter :: PI = 3.1415926 real, parameter :: g = 9.81 integer i,n print *, "Unesi pocetnu brzinu:" read *, Vo print *, "Unesi ugao izbacivanja:" read *, alfa print *, "Unesi broj tacaka na trajektoriji:" read *, n alfa = alfa * (PI / 180.0) Vx = Vo * cos(alfa) ! Vx - komponenta po x osi Vy = Vo * sin(alfa) ! Vy - komponenta po y osi T = 2.0 * Vy/g D = Vx*T print '(A8 A1 A8)', "X","|", "Y" print '(A)', repeat("-",17) ! 8+1+8 = 17 do i = 0, n x = D*i/n y = traject(x, Vx, Vy) print '(F8.3 "," F8.3)', x,y end do pause contains function traject(x, Vx, Vy) result (y) real x, Vx, Vy, y,t ! S obzirom da je funkcija definisan unutar ! glavnog programa parameter g u formuli ispod je ! dostupan funkcijskom potprogramu t = x / Vx y = Vy*t - 0.5 * g * (t**2) end function end program

  • Podatke mozemo predstaviti graficki prmijenom Ms Excell programa.

  • Zadatak 17.

    Napisati program koji odreuje reakcije i dimenzionira prostu gredu za sluaj prikazan na slici.

    Greda je okruglog poprenog presjeka.

    program Zadatak17 implicit none real F1, F2, x1, x2, L , x, deltaX, Mx, dz, SigmaDoz, Mmax, M1, M2 real Fab ! suma sila Fa i Fb real Fa ! sila Fa real Fb ! sila Fb real d ! precnik grede real, parameter :: PI = 4*atan(1.0) integer, parameter :: BrojTacaka = 50 integer i print *, "Unesi silu F1 [kN] i udaljenost x1 [m] od oslonca A (F1, x):" read *, F1, x1 print *, "Unesi silu F2 [kN] i udaljenost x2 [m] od oslonca A (F2, x):" read *, F2, x2 print *, "Unesi razmak izmedju oslonaca A i B [m]:" read *, L print *, "Unesi dozvoljni napon [kN/mm2]:" read *, SigmaDoz ! 1. Uslov: Suma svih sila po Y osi je jednaka 0 Fab = F1 + F2 ! 2. Uslov: Suma momenata za datu tacku je jednaka 0 Fa = (F1*(L-x1) + F2*(L-x2)) / L Fb = Fab - Fa print *, "Reakcije u osloncima su:" print *, " Fa = ", Fa print *, " Fb = ", Fb deltaX = L / BrojTacaka ! Podijelimo interval 0 - L na odredjen broj tacaka i odredimo Moment u svakoj tacki ! Kod racunanja precnika Moment se mnozi sa 1000 radi pretvadanja kNm u kNmm jer se ! ocekuje da su rastojanja unijeta u metrima, dok je dozvoljeni napon unesen u kN/mm2 print '(A10 A10 A10)', "x", "Mx", "d" print '(A)', repeat("-",30) do i = 0, BrojTacaka x = i * deltaX Mx = Fa * x ! moment od reakcije u osloncu A if (x > x1) Mx = Mx - F1 * (x-x1) ! Ako je x vece od x1 umanji momenat od sile F1 if (x > x2) Mx = Mx - F2 * (x-x2) ! Ako je x vece od x2 umanji momenat od sile F2 d = ( 32*Mx*1000/ (PI*SigmaDoz)) ** (1.0/3.0) print "(F10.3 F10.3 F10.3)", x, Mx, d end do ! Maksimalan moment trazimo u karakteristicnim tackama (tacke gdje dejeluju sile F1 i F2) M1 = Fa * x1 M2 = Fa * x2 - F1 *(x2-x1) Mmax = max(M1, M2) d = (32 * Mmax * 1000.0 / (PI*SigmaDoz)) ** (1.0/3.0) print *, "--" print "(A F8.3 ' mm')" , "Potreban precnik grede iznosi: ", d end program

  • Nakon pokretanja programa iznad treba da dobijem izlaz kao na sledeoj slici:

  • Podatke sa terminala je moge prenijeti u program Ms Excel te predstaviti graficki kao na slici

    ispod.

    Figure 1 Grafiki prikaz momenta savijanja i idealnog prenika grede

  • Zadatak 18.

    Uitati matricu A(44) i matricu B(44), onda nai matricu C kao proizvod matrica A i B.

    =

    program Zadatak18 implicit none integer i,j, k real, dimension(4,4) :: A, B, C ! A,B,C su dvodimenzionalni nizovi (matrice dimenzija 4 x 4) ! Naredba read podrzava unos nizova, pa mozemo napisati samo read *, A print *, "Unesi matricu A 4x4:" read *, A print *, "Unesi matricu B 4x4:" read *, B ! Mnozenje dvije matrice do i = 1, 4 do j = 1, 4 C(i,j) = 0 do k = 1, 4 C(i,j) = C(i,j) + A(i,k)*B(k,j) end do end do end do print *, "Matrica C:" print '(4F8.3)', C ! Ispis matrice C u formatu 4F8.3 ! To znaci da ce matrica biti ispisan sa po 4 elementa u jednom redu end program

  • Zadatak 19.

    U glavnom programu uitati varijable A i B i pozivom funkcijskog potprograma izraunati sumu tih

    varijabli.

    program Zadatak19 implicit none real a, b, c print *, "Unesi A:" read *, a print *, "Unesi B:" read *, b c = Suma(a,b) print *, "Suma je:" , c contains function Suma (x,y) result(r) real x,y, r r = x + y end function end program

  • Zadatak 20.

    U glavnom programu uitati varijablu X, te pomou funkcijskog potprograma odrediti:

    () = {2, > 5

    2 + 2, = 55, < 5

    program Zadatak20 implicit none real x print *, "Unesi vrijednost x:" read *, x print *, "Vrijednost funkcije f(x) je:", f(x) contains ! r je varibala preko koje se vraca vrijednost iz funkcije ! glavnom programu ! x je paramater funkcije ! f je ime funkcije function f(x) result(r) real x, r if ( x > 5) then r= x**2 else if (x == 5) then r = x*2+2 else if (x < 5) then r = 5*x end if end function end program

  • Zadatak 21.

    Uitati matricu A(44). Nai sumu elemenata iznad glavne dijagonale. Zatim nai maksimalni

    elemenat (vrijednost) i njegove indekse. Sve to obraditi pomou opteg potprograma - subroutine

    racun.

    program Primjer21 implicit none real A(4,4), suma integer i,j print *, 'Unesi elemente matrice A(4x4):' read *, A call racun (A, suma, i,j) print *, "A =" print '(4F8.3)', A print *, "Suma iznad glavne diagonale je:", suma print *, "Maksimalna vrijednost elementa je na poziciji:", i,j print *, "Maksimalna vrijednost elemenat iznosi:", A(i,j) contains subroutine racun(A, suma, mi,mj) real A(4,4), suma integer i,j, mi,mj suma = 0 ! postavi da je suma iznad glavne diagonale jednaka 0 mi = 1 ! pretpostavi indexe na kojoj se nalazi max. vrijednost elementa mj = 1 do i = 1, 4 do j = 1,4 if (j (A(mi,mj))) then mi = i ! Ako jeste onda postavi novu vrijednost indexa mj = j end if end do end do end subroutine end program

  • Zadatak 22.

    Uitati matricu A(44). Nai sumu elemenata ispod glavne dijagonale. Sve to obraditi pomou

    opteg potprograma - subroutine racun.

    program Zadatak22 implicit none real A(4,4), suma integer i,j print *, 'Unesi elemente matrice A(4x4):' read *, A call racun (A, suma) print *, "Suma ispod glavne diagonale je:", suma contains subroutine racun(A, suma) real A(4,4), suma integer i,j suma = 0 do i = 1, 4 do j = i+1,4 suma = suma + A(i,j) end do end do end subroutine end program

  • Zadatak 23.

    Napisati program za rjesavanje linearnog sistema jednacina sa tri nepoznate koristei cramerov metot i podprogram subroutine cramer.

    program Zadatak23 implicit none real A(3,3), B(3), X(3) integer r,i,j print *, "Unesi koeficijente i slobodne clanove:" do i = 1, 3 read (*,*) , (A(j,i) ,j=1,3) , B(i) end do call cramer(A, B, X, r) if (r == 0) then print *, 'Rjesenje sistema je:' print '("x = " F8.3)', X(1) print '("y = " F8.3)', X(2) print '("z = " F8.3)', X(3) else print *, "Sistem nema rjesenja ili ima beskonacno mnogo rjesenja." end if contains subroutine cramer(A,B,X, r) real, dimension(3,3) :: A, Ax, Ay, Az real, dimension(3) :: B, X real detA integer r r = 0 ! Oznacava da ne postoji greska detA = det(A) if (detA == 0) then r = 1 ! Sistem nema rjesenje ili ima beskonacno rjesenja return ! Izlaz iz potprograma end if ! Kopiraj matricu A u Ax, Ay, Az ! i zamijeni odgovarajuce kolone sa vektorom B Ax = A ; Ay = A ; Az = A do i=1,3 Ax(1,i) = B(i) Ay(2,i) = B(i) Az(3,i) = B(i) end do X(1) = det(Ax)/detA X(2) = det(Ay)/detA X(3) = det(Az)/detA end subroutine ! Racuna determinantu matrice 3x3 real function det(A) real A(3,3) det = A(1,1)*A(2,2)*A(3,3) + A(1,2)*A(2,3)*A(3,1) + & A(2,1)*A(3,2)*A(1,3) - A(3,1)*A(2,2)*A(1,3) - & A(2,1)*A(1,2)*A(3,3) - A(3,2)*A(2,3)*A(1,1) end function end program