racunari i programiranje (primjeri)

9
2. Napisati program za određivanje dometa i visine kod kosog hitca koristeći potprogram SUBROUTINE domet,gdje ćemo uzeti poznate početne vrijednosti brzine i ugla. program dva real::Vo,theta,H,D Vo=230.0 theta=39.0 g=9.81 call domet(Vo,theta,g,H,D) print*,'maksimalna visina H=',H print*,'Maximalni domet D=',D end program dva subroutine domet (Vo,theta,g,H,D) real,intent(in)::Vo,theta,g real::Vox,Voy,theta1,thmax real,intent(out)::H,D theta1=theta*3.14/180.0 Vox=Vo*cos(theta1) Voy=Vo*sin(theta1) thmax=Voy/g H=Voy**2/(2*g) D=Vox*2*thmax return end 3. Napisati program koji učitava dvije matrice A(3,3) i B(3,3). Odrediti matricu C kao sumu A i B matrica. Unos i ispis elemenata matrica uraditi u potprogramima SUBROUTINE unesi matricu i ispisi matricu. Sabiranje matrica uraditi u funkcijskom potprogramu. program sabiranjeMatrica implicit none real,dimension(:,:)::A(3,3),B(3,3),C(3,3) print*,'Unesi matricu A(3X3)' call UnesiMatricu(A) print*,'Unesi matricu B(3X3)' call UnesiMatricu(B) C=SaberiMatrice(A,B) print*,'Elementi matrice C su:' call IspisiMatricu(C) print*,'Elementi matrice A su:' call IspisiMatricu(A) print*,'Elementi matrice B su:' call IspisiMatricu(B) contains subroutine UnesiMatricu(A) real,dimension(:,:)::A(3,3) integer::i,j do i=1,3 print*,'Unesite red',i read*,(A(i,j),j=1,3) end do end subroutine Function SaberiMatrice(A,B)result(C) Real,dimension(:,:)::A(3,3),B(3,3),C(3,3) integer::i,j do i=1,3 do j=1,3 C(i,j)=A(i,j)+B(i,j)

Upload: kasim

Post on 10-Sep-2015

21 views

Category:

Documents


8 download

DESCRIPTION

Fortran

TRANSCRIPT

2. Napisati program za odreivanje dometa i visine kod kosog hitca koristei potprogram SUBROUTINE domet,gdje emo uzeti poznate poetne vrijednosti brzine i ugla.program dvareal::Vo,theta,H,DVo=230.0theta=39.0g=9.81call domet(Vo,theta,g,H,D)print*,'maksimalna visina H=',Hprint*,'Maximalni domet D=',Dend program dvasubroutine domet (Vo,theta,g,H,D)real,intent(in)::Vo,theta,greal::Vox,Voy,theta1,thmaxreal,intent(out)::H,Dtheta1=theta*3.14/180.0Vox=Vo*cos(theta1)Voy=Vo*sin(theta1)thmax=Voy/gH=Voy**2/(2*g)D=Vox*2*thmaxreturnend3. Napisati program koji uitava dvije matrice A(3,3) i B(3,3). Odrediti matricu C kao sumu A i B matrica. Unos i ispis elemenata matricauraditi u potprogramima SUBROUTINE unesi matricu i ispisi matricu. Sabiranje matrica uraditi u funkcijskom potprogramu.program sabiranjeMatricaimplicit nonereal,dimension(:,:)::A(3,3),B(3,3),C(3,3)print*,'Unesi matricu A(3X3)'call UnesiMatricu(A)print*,'Unesi matricu B(3X3)'call UnesiMatricu(B)C=SaberiMatrice(A,B)print*,'Elementi matrice C su:'call IspisiMatricu(C)print*,'Elementi matrice A su:'call IspisiMatricu(A)print*,'Elementi matrice B su:'call IspisiMatricu(B)contains subroutine UnesiMatricu(A)real,dimension(:,:)::A(3,3)integer::i,jdo i=1,3print*,'Unesite red',iread*,(A(i,j),j=1,3)end doend subroutineFunction SaberiMatrice(A,B)result(C)Real,dimension(:,:)::A(3,3),B(3,3),C(3,3)integer::i,jdo i=1,3do j=1,3C(i,j)=A(i,j)+B(i,j)end doend doend functionsubroutine IspisiMatricu(C)real,dimension(:,:)::C(3,3)integer::i,jdo i=1,3print*,(C(i,j),j=1,3) end do end subroutine end program sabiranjeMatrica1. Napisati program koji e nai matricu C kao proizvod matrica A i B. Matrice A i B su formata 4X4.

! Naci matricu C kao proizvod!matrica A i Bdimension A(4,4),B(4,4),C(4,4),D(4,4)real::A,B,C,Dinteger::i,j,kprint*,'Program za mnozenje matrica A i B'print*,'Unesi elemente matrice A'do i=1,4print*,'Unesite red',iread*,(A(i,j),j=1,4)end doprint*,'Unesi elemente matrice B'do i=1,4print*,'Unesi red',iread*,(B(i,j),j=1,4)end doprint*,'Elementi matrice A su:'do i=1,4print*,(A(i,j),j=1,4)end doprint*,'Elementi matrice B su:'do i=1,4print*,(B(i,j),j=1,4)end do! Mnoenje matricado i=1,4do j=1,4C(i,j)=0do k=1,4C(i,j)=C(i,j)+A(i,k)*B(k,j)end doend doend doprint*,'Elementi matrice su:'do i=1,4print*,(C(i,j),j=1,4)end do! ProvjeraD=matmul(A,B)A=D-Cprint*,'Matrica provjere je'do i=1,4print*,(A(i,j),j=1,4)end dostop end

! Naci matricu C kao proizvod matrica A i Bdimension A(4,4),B(4,4),C(4,4),D(4,4)real::A,B,C,Dinteger::i,j,kprint*,'Program za mnozenje matrica A i B'print*,'Unesi elemente matrice A'do i=1,3print*,'Unesite red',iread*,(A(i,j),j=1,3)end doprint*,'Unesi elemente matrice B'do i=1,3print*,'Unesi red',iread*,(B(i,j),j=1,2)end doprint*,'Elementi matrice A su:'do i=1,3print*,(A(i,j),j=1,3)end doprint*,'Elementi matrice B su:'do i=1,3print*,(B(i,j),j=1,2)end do! Mnoenje matricado i=1,3do j=1,2 Ado i ja to jedemo :DC(i,j)=0do k=1,3C(i,j)=C(i,j)+A(i,k)*B(k,j)end doend doend doprint*,'Elementi matrice su:'do i=1,3print*,(C(i,j),j=1,2)end do! ProvjeraD=matmul(A,B)A=D-Cprint*,'Matrica provjere je'do i=1,3print*,(A(i,j),j=1,2)end dostop end

2. Napisati program za unos 3 broja i nalaenje srednje vrijednosti koristei potprogram subroutine.program srednja_vrijednostreal::x,y,z,sprint*,'Unesite tri broja'read*,x,y,zcall srv(x,y,z,s)print*,' Srednja vrijednost tri broja je',sstop end program srednja_vrijednostsubroutine srv(x,y,z,s)real::x,y,z,ss=(x+y+z)/s.return end3. Uitati matricu A(4,4). Nau sumu elemenata iznad glavne dijegonale, zatim nai max elemenat matrice i njegovi lokaciju. Sve to obraditi pomou opteg potprograma elementi iznad.! m=prvi indeks! n= drugi indeksdimension A(4,4)print*,'program za nalaenje sume elemenata iznad G.D. i maksimalni el. Unesi elemente matrice'do i=1,4read*,(A(i,j),j=1,4)end docall elementiiznad (A,suma,m,n,pmax)print*,'Suma elemenata iznad G.D. je:',sumaprint*,'Maksimalni elemenat u matrici je:',pmaxprint*,'Prvi indeks je:',m,'drugi indeks je:',nstopendsubroutine elementiiznad(B,s,m,n,pmax)dimension B(4,4)s=0do i=1,4do j=1,4if(i.lt.j)thens=s+B(i,j)end ifend doend dopmax=B(1,1)m=1n=1do i=1,4do j=1,4if(pmax.lt.B(i,j))thenpmax=B(i,j)m=in=jend ifend doend doreturn end

1. Ako je zadana matrica formata 5X5 napisati program koji e ustanoviti u kojem je redu aritmetika sredina elemenata najmanja.

program jedanimplicit noneinteger::i,jreal::A(5,5),sredina(5),minred,red,sumaprint*,'Unesite elemente matrice A'do i=1,5print*,'Unesi red',iread*,(A(i,j),j=1,5)end dosuma=0.0do I=1,5sredina(i)=(suma+(A(i,1)+A(i,2)+A(i,3)+A(i,4)+A(i,5)))/5end dominred=sredina(i)do i=1,5if(minred.gt.sredina(i))thenminred=sredina(i)red=iend ifend doprint*,'Traena vrijednost nalazi se u redu',red,'i iznosi',minredstopend program jedan

2. Ako je zadana matrica 4x4 napisati program koji e ustanoviti u kojem je aritmetika sredina najvea.

program jedanimplicit noneinteger::i,jreal::A(4,4),sredina(4),maxred,red,suma,nprint*,'Unesite elemente matrice A'do i=1,4print*,'Unesi red',iread*,(A(i,j),j=1,4)end dosuma=0.0do I=1,4sredina(i)=(suma+(A(i,1)+A(i,2)+A(i,3)+A(i,4)))/4end domaxred=sredina(i)do i=1,4if(maxred.le.sredina(i))thenmaxred=sredina(i)red=iend ifend doprint*,'Traena vrijednost nalazi se u redu',red,'i iznosi',maxredstopend program jedan

3. Napisati program koji formira niz C(i) ako je zadana matrica 3x3 i niz od 3 lana.

program matricareal::A(3,3),B(3),C(3)integer::i,jprint*,'Unesite elemente matrice A'do i=1,3print*,'Unesi red',iread*,(A(i,j),j=1,3)end doprint*,'Unesi elemente niza B'do i=1,3read*, B(i)end dodo i=1,3C(i)=(A(i,1)+A(i,2)+A(i,3))*B(i)end doprint*,'Elementi matrice A su:'do i=1,3Print*,(A(i,j),j=1,3)end doprint*,'Niz B je:'do i=1,3print*,B(i)end doprint*,'Novonastali niz C je:'do i=1,3print*,C(i)end dostop end program matrica

4. uitati matricu k-tog reda gdje je k>3. Napisati program za izraunavanje aritmetike sredine pri prva 3 reda matrice A. Ispisati elemente matrice A i aritmetiku sredinu.

! Komentarprogram triimplicit noneinteger::i,j,kreal::sredina,sumadimension A(4,4)print*,'Unesite koliko ima redova matrica'read*,kprint*,'Unesite elemente matrice'do i=1,4print*,'Unesi red',iread*,(A(i,j),j=1,4)end dosuma=0.0do i=1,3do j=1,4suma=suma+A(i,j)end doend dosredina=suma/(3*k)print*,'Aritmetika sredina prva tri reda je:',sredinastop end program tri

implicit noneinteger::i,j,u;real::A(3,3),B(3),X(3);do i=1,3print*,'Unesi koeficiente i konstantu za jednacinu',iread*,(A(i,j),j=1,3),B(i)end docall cramer(A,B,X,u)if (u.eq.1) print*,'Rjesenje sistema je',(X(i),i=1,3)end

subroutine cramer(A,B,X,u)implicit noneinteger::i,ureal::A(3,3),B(3),X(3),detsis,det,A1(3,3),A2(3,3),A3(3,3);detsis=det(A)u=1if (detsis.eq.0)thenprint*,'Sistem nema rjesenja'u=0returnend ifA1=A;A2=A;A3=A;do i=1,3A1(i,1)=B(i)A2(i,2)=B(i)A3(i,3)=B(i)end doX(1)=det(A1)/detsis; X(2)=det(A2)/detsis; X(3)=det(A3)/detsisreturnend subroutine cramer

real function det(A)implicit nonereal 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)return end

1. Za zadane vrijednosti niza podataka za koje su zabiljeene ukupne potrosnje Yi (GWh) i koje su prikazane tabelarno, potrebno je aproksimirati trend ukupne potrosnje pomou linearne f-je (pravca).Na osnovu dobivene definisane krive odrediti oekivanu potronju za buduu 2016 godinu.implicit noneinteger::i,nreal::A,B,C,Dreal::x,y,aa,bbdimension x(12),y(12)print*,'unesi proj podataka n'read*,ndo i=1,nprint*,'Unesite vrijednost x broj:',iread*,x(i)end dodo i=1,nprint*,'Unesite vrijednost y broj',iread*,y(i)end do!proraunA=0.0do i=1,nA=A+X(i)**2end doB=0.0do i=1,nB=B+X(i)end doC=0.0C=C+Y(i)*X(i)end doD=0.0do i=1,nD=D+Y(i)end do!koeficijentibb=(A*D-B*C)/(n*A-B**2)aa=(1./A)*(C-bb*B)print*,'koeficijenti pravca su a:',aa, 'i b:',bb!izrauny16=aa*13+bbprint*,'Vrijednost za 2015 je',y16stop end