Upload
elvir-celikovic-cela
View
159
Download
12
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