Upload
edin-cerjakovic
View
215
Download
0
Embed Size (px)
Citation preview
8/13/2019 primjeri programiranje
1/14
Skripta za Raunare i programiranje Izudin Deli
1
Primjer 1.Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata
na neparnim mjestima. Sumu i proizvod odtampati u glavnom programu.
! Suma parnih i proizvod neparnih elemenata niza A
dimensionA(10)print*,'Program za sabiranje parnih i mnoenje neparnih elemenata niza A'print*,'Unesite 10 elemenata niza A'! unosenje elemenata niza A
do 1I=1,10read*,A(I)1continue! operacija sa elementima niza A
P=1S=0do 2I=1,5
S=S+A(2*I)P=P*A(2*I-1)2continue! stampanje sume i proizvoda niza A
print*,'Suma je= ' ,S, 'Proizvod je= ' ,P! zaustavljanje programa
stopend
Primjer 2.Uitati 20 elemenata niza A, sortirati ih u rastuem redosljedu i odtampati.
! ucitati niz A od 20 elemenata, napisati prog. za sortiranje u rastucem redosljedudimensionA(20)print*,'Program za sortiranje el. niza A u rastucem redosljedu'print*,'Unesite 20 elemenata niza A'do 10i=1,20read*, A(i)10continue! sortiranje elemenata
do20i=1,19do15j=i+1,20
if(A(i) .lt.A(j)) go to15c=A(i)A(i)=A(j)A(j)=c15 continue20 continueprint*, 'Sortirani elementi niza A su:'do30j=1,20print*, A(j)30 continuestop
end
8/13/2019 primjeri programiranje
2/14
Skripta za Raunare i programiranje Izudin Deli
2
Primjer 3.
Uitati matricu A(44) i matricu B(44), onda nai matricu C kao proizvod matricaA i B.
Ci,j= A i,jx B i,j
! Naci proizvod matrica A i B, kao matricu CdimensionA(4,4), B(4,4), C(4,4)print*,'Program za racunanje proizvoda dvije matrice'print*,'Unesite elemente matrice A(44)'do 10 i=1,4do10 j=1,4print*,i,jread*,A(i,j)10 continueprint*,'Unesite elemente matrice B(44)'do 20i=1,4
do 20j=1,4print*,i,jread*,B(i,j)20 continueprint*,'Proizvod matrica A i B je: 'do30i=1,4do30j=1,4C(i,j)=0do40k=1,4C(i,j)=C(i,j)+A(i,k)*B(k,j)40continue
print*,i,jprint*,C(i,j)30continuestopend
Primjer 4.
U glavnom programu uitati varijable A i B i pozivom funkcijskog potprogramaizraunati sumu tih varijabli.
! funkcijski potprogram
print*,'Program za sabiranje varijabli pomocu funkcijskog potprograma'print*,'Unesite varijablu a'read*,aprint*,'Unesite varijablu b'read*,bsuma=f(a,b)print*,'Suma varijabli a i b je =',sumastopendfunctionf(a,b)f=a+breturnend
8/13/2019 primjeri programiranje
3/14
Skripta za Raunare i programiranje Izudin Deli
3
Primjer 5.U glavnom programu uitati varijablu X, te pomou funkcijskog potprograma
odrediti:X2 ako je X>5
f(X)= X2+2 ako je X=5
5X ako je X5! f(x)= x**2+2 x=5! 5x x5! f(x)= x**2+2 x=5
! 5x x
8/13/2019 primjeri programiranje
4/14
Skripta za Raunare i programiranje Izudin Deli
4
Primjer 6.U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom
funkcijskog potprograma izraunati kombinaciju:
!JI!J!I
K
! proracun kombinacije k=i!/[j!(i-j)!]integerA,B,C,fakt! i=prvi broj! j=drugi broj! k=rezultatprint*,'Program za racunanje broja kombinacija'print*,'Unesite prvi,pa drugi broj kombinacije'read*,I,JA=fakt(I)B=fakt(J)C=fakt(I-J)K=A/(B*C)print*,'Prvi broj je= ' ,I, ' Drugi broj je= ',J, ' Broj kombinacija je= ',Kstopendinteger functionfakt(L)fakt=1do 10 N=1,Lfakt=fakt*N10 continuereturn
end
Primjer 7.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 najmanjuduinu u glavnom programu.
! ucitati x,y koordinate 10 tacaka.napisati funkcijski potprogram koji ce daracuna rastojanja datih tacaka od tacke sa Koordinatom xa=0,5 i y=1,0. nacinajvecu i najmanju duzinu u glavnom programudimensionx(10),y(10),d(10)
print*,'Program za racunanje rastojanje tacaka od tacke'print*,'Xa=0,5 i Y=1,0'print*,'Unesite koordinate 10 tacaka a(x,y)'do 10 i=1,10print*,'Tacka broj',iread*,x(i),y(i)10continuexa=0.5ya=1.0do 20 i=1,10d(i)=duzina(x(i),y(i),xa,ya)
20continuedmax=d(1)
8/13/2019 primjeri programiranje
5/14
Skripta za Raunare i programiranje Izudin Deli
5
dmin=d(1)do 30 i=1,10if (dmax.lt.d(i))thendmax=d(i)else if (dmin.gt.d(i))then
dmin=d(i)end if30continueprint*,'Maksimalna duzina je= ',dmax,' minimalna duzina je= ',dminstopendfunctionduzina(a,b,c,d)duzina=sqrt((a-c)**2+(b-d)**2)returnend
Primjer 8.Uitati matricu A(44). Nai sumu elemenata iznad glavne dijagonale. Zatim nai
maksimalni elemenat (vrijednost) i njegove indekse. Sve to obraditi pomou optegpotprograma.
! suma elemenata iznad glavne dijagonale i max. elem. matrice! m= prvi indeks! n= drugi indeksdimensiona(4,4)print*,'Program za racunanje sume elemenata iznad glavne dijagonale i max.
elem. matrice unesite elemente matrice a(4x4)'do 10 i=1,4do 10 j=1,4print*,i,jread*,a(i,j)10continuecall racun(a,suma,m,n,pmax)print*, 'Suma elemenata iznad glavne dijagonale je= ' ,suma, 'Maksimalni
element matrice', pmax, 'prvi indeks ' ,m, 'drugi indeks' ,nstopend
subroutineracun(b,s,m,n,pmax)dimensionb(4,4)s=0do 20 i=1,4do 20 j=1,4if(i.lt.j)thens=s+b(i,j)end if20continuepmax=b(1,1)m=1
n=1do 30 i=1,4
8/13/2019 primjeri programiranje
6/14
Skripta za Raunare i programiranje Izudin Deli
6
do 30 j=1,4if(pmax.lt.b(i,j))thenpmax=b(i,j)m=in=j
end if30continuereturnend
Primjer 9.Uitati matricu A(44). Nai sumu elemenata ispod glavne dijagonale. Sve to
obraditi pomou opteg potprograma.
! suma elemenata ispod glavne dijagonale
dimension a(4,4)print*, 'program za racunanje sume elemenata ispod'print*, 'glavne dijagonale matrice'print*, ' 'print*, 'unesite elemente matrice a(4x4)'do10 i=1,4do10 j=1,4print*,i,jread*,a(i,j)10 continuecall racun(a,suma)print*,'suma ispod glavne dijagonale',sumastopendsubroutineracun(b,s)dimensionb(4,4)s=0do20 i=1,4do 20 j=1,4if (i.gt.j) thens=s+b(i,j)
end if20continuereturnend
8/13/2019 primjeri programiranje
7/14
Skripta za Raunare i programiranje Izudin Deli
7
Primjer 10.Napraviti program za proraun reakcija, momenata savijanja i transverzalnih sila
na desetinama raspona proste grede optereene ravnomjernim kontinuiranimoptereenjem.
real m,t,q,lprint*,'program za proracun m i t sila proste grede'print*,'za ravnomjerno kontinuirano opterecenje'print*,'na desetini raspona grede'print*,'unesite staticki raspon grede kao realan broj'print*,'staticki raspon grede l='read*,lprint*,'unesite vrijednost opterecenja kao realan broj'print*, 'vrijednost opterecenja q='read*,q
r=q*l/2print*,'reakcije oslonca su= ',rprint*,'momenti savijanja na desetinama raspona'do 10 i=0,10m=r*(i*l/10)-q*(i*l/10)**2/2print*,i,m10 continueprint*,'transverzalne sile na desetinama raspona'do 20 k=0,10t=r-q*(k*l/10)print*,k,t20 continuestopend
Primjer 11.
program vjezba2
! ovaj program manipulise sa vektorima! i racuna prosjecnu vrijednost za nekoliko unijetih ocjena
! deklaracija varijabliimplicit noneinteger:: i,ocjene(5),zbir;real:: prosjek;character:: predmeti*10 !(rijec sa 10 slovnih mjesta)dimension predmeti(5) !(vektor sa 5 elemenata)print*,'UNESI LISTU PREDMETA (1-5)'do i=1,5print*,i,'predmet: 'read(*,*) predmeti(i)end do
print*,'************************************';
8/13/2019 primjeri programiranje
8/14
Skripta za Raunare i programiranje Izudin Deli
8
zbir=0 ! inicijalizacija (davanje pocetne vrijednosti)unos: do i=1,5print*,'unesite ocjene iz predmeta'print*,i,'predmet: ',predmeti(i)read(*,*)ocjene(i)
zbir=zbir+ocjene(i)end do unosprint*,'********************************';prosjek=0.2*zbir ! efikasnije je mnozenje nego dijeljenje /5print*,'PROSJECNA OCJENA IZNOSI ',prosjekend programvjezba2
Pimjer 12.
programvjezba3! program rjesava kvadratnu jednacinu u opstem obliku a1x**2+a2*x+a3=0
implicit noneinteger:: i,ponovo;real::a(3),jed1,jed2;real::X1,X2;real::DIS;10 continueprint*,'UNESITE VRIJEDNOSTI ZA KOEFICIJENTE a,b,c'do i=1,3read(*,*)a(i)end doDIS=a(2)**2-4.*a(1)*a(3);
! uslovIf(DIS.lt.0.) thenprint*,'negativna diskriminanta, jednacina nema realno rjesenje'elseX1=(-1.*a(2)+sqrt(dis))/(2.*a(1))X2=(-1.*a(2)-sqrt(dis))/(2.*a(1))jed1=a(1)*X1**2+a(2)*X1+a(3)jed2=a(1)*X2**2+a(2)*X2+a(3)print*, '******************************************************************'print*,'Rjesenja date jednacine iznose X1=',X1,'X2=',X2
print*, '******************************************************************'print*,'PROVJERA, jed1=',jed1print*,'PROVJERA, jed2=',jed2end if
! ponoviti postupakprint*,'Zelis li ponoviti unos,unesi odgovarajuci broj ?'print*,'DA ---- unesi 1'print*,'NE ---- unesi 0'read(*,*)ponovoif(ponovo.eq.1) go to10end programvjezba3
8/13/2019 primjeri programiranje
9/14
Skripta za Raunare i programiranje Izudin Deli
9
Primjer 13.
programvjezba4! ovaj program racuna povrsinu trokuta za koji su date koordinate vrhova! primjenom Heronove formule P=sqrt(s(s-a)(s-b)(s-c)); s=(a+b+c)/2
implicit nonereal::K(3,2); ! koordinate vrhovareal::a,b,c,s,P; !stranice i povrsinaintegeri,j;do i=1,3print*,'Unesi koordinate vrha',i,' X eneter Y'do j = 1,2read(*,*) K(i,j)end doend do
! racunamo stranice
a=sqrt((K(2,2)-K(1,2))**2 + (K(2,1)-K(1,1))**2)b=sqrt((K(2,2)-K(3,2))**2 + (K(2,1)-K(3,1))**2)c=sqrt((K(3,2)-K(1,2))**2 + (K(3,1)-K(1,1))**2)s=0.5*(a+b+c) !poluobim trouglaP=sqrt(s*(s-a)*(s-b)*(s-c)) !Heronov obrazacprint*, '*******************************************************************'print*,'Povrsina trougla iznosi',Pend programvjezba5
Primjer 14.
programvjezba5! ovaj program racuna vrijednost reakcija,momenta savijanja i maksimalnihnapona za prostu gredu opterecenu kontinualnim opterecenjem.! Dato je: L,l1,l2,q,W;implicit noneINTEGERi,N;REAL::Ra,Rb,L,l1,l2,q,M(30),x,dx,W;N=30;print*,'UNESI RASPON GREDE L[m]'read(*,*)L
print*,'UNESI POLOZAJ 1 KONTINUALNOG OPTERECENJA l1[m]'read(*,*)l1print*,'UNESI DUZINU KONTINUALNOG OPTERECENJA l2[m]'read(*,*)l2print*,'UNESI VRIJEDNOST KONTINUALNOG OPTERECENJA q[kN/m]'read(*,*)qprint*,'UNESI VRIJEDNOST OTPORNOG MOMENTA PRESJEKA [cm3]'read(*,*)W! reakcije oslonacaRa=q*l2*(L-l1-0.5*l2)/LRb=q*l2-Ra
! moment savijanja duz rasponadx=L/N
8/13/2019 primjeri programiranje
10/14
Skripta za Raunare i programiranje Izudin Deli
10
do i=1,Nx=i*dxif (x.le.l1) thenM(i)=Ra*xelse if(x.ge.l1.and.x.le.l1+l2) then
M(i)=Ra*x-q*(x-l1)*(x-l1)/2.elseM(i)=Rb*(L-x)end ifend doprint*,'REAKCIJE U OSLONCIMA IZNOSE: Ra=',Ra,'kN ','Rb=',Rb,'kN'print*,'MOMENT SAVIJANJA [kNm] i MAKSIMALNI NAPON [kN/cm2]'do i=1,Nprint*,i,M(i),100.*M(i)/Wend doend programvjezba5
Primjer 15.
programvjezba_6! ovaj program vrsi sortiranje datog niza prema velicini clanova! Nakon sortiranja, originalni i sortirani niz se ispisuju na ekran
implicit noneinteger::N,i,j,Niz1(100),Niz1Copy(100),Max;print*,'Unesi broj clanova niza N, N
8/13/2019 primjeri programiranje
11/14
Skripta za Raunare i programiranje Izudin Deli
11
Primjer 16.
program Putanja! ovaj program racuna elemente trajektorije kod kosog hica! koristeci poziv za traject funkciju
implicit noneinteger::i,N;real::g,PI ! fizicke konstantereal::alfa,Vo,D,T,x,yreal::trajectg = 9.806pi = 3.1415926print*,'Unesi ugao izbacivanja alfa i pocetnu brzinu Vo'read(*,*)alfa,Voalfa = alfa * pi / 180.0 ! prevedi u radijaneD=Vo*Vo*sin(2.*alfa)/g ! maximalni domet
print*,'maximalni domet D za date parametre iznosi',D,'[m]'T=2.*Vo*sin(alfa)print*,'Vrijeme leta T za date parametre iznosi',T,'[s]'print*,'Unesi broj tacaka na trajektoriji'read(*,*)Nprint*,' tacke trajektorije su 'do i=0,Nx=i*D/Ny=traject(x,alfa,Vo,g)print*,i,x,yend do
end programPutanja
! ********************************************************************
real functiontraject(x,alfa,Vo,g)implicit nonereal x,y,alfa,Vo,gtraject = tan(alfa)*x - g*(1.+tan(alfa)*tan(alfa))*x*x/(2.*Vo*Vo)returnend
Primjer 17.
program vjezba8! ovaj program primjenom potprograma racuna! prostornu rotaciju vektora X
implicit noneinteger::i;real::X(3),Xrot(3),alfa;print*,'Unesi komponente vektora Xi, i=1,2,3';do i=1,3print*,'komponenta',iread(*,*)X(i)
end doprint*, 'Unesi ugao rotacije oko Z ose, alfa';
8/13/2019 primjeri programiranje
12/14
Skripta za Raunare i programiranje Izudin Deli
12
read(*,*)alfa;callRotacija(X,alfa,Xrot)print*,'Zarotirani vektor ima koordinate:'do i=1,3write(*,101),i,Xrot(i)
end do101 format(i3,3x,f8.3,/)
end programvjezba8
! ********************************************************
subroutineRotacija(Xin,fi,Xout)implicit noneinteger::i,j;real::Xin(3),fi,Xout(3),T(3,3)fi = fi*3.14159/180.d0 ! pretvorba stepeni u radijaneT=0.d0
T(1,1)=cos(fi)T(1,2)=sin(fi)T(2,1)=-1.*sin(fi)T(2,2)=cos(fi)T(3,3)=1.callmatvec(T,Xin,Xout)returnend subroutineRotacija
! ******************************************************
subroutinematvec(T,Xin,Xout)
! ova subroutina mnozi matricu T i vektor Xinimplicit noneinteger::i,jreal::T(3,3),Xin(3),Xout(3)Xout=0.d0do i=1,3do j=1,3Xout(i)=Xout(i)+T(i,j)*Xin(j)end doend doreturn
end subroutinematvec
8/13/2019 primjeri programiranje
13/14
Skripta za Raunare i programiranje Izudin Deli
13
Primjer 18.
programLinSistem! ovaj program kramerovom metodom rjesava
! sistem od tri linearne jednacineimplicit noneinteger::i,j,u;real::A(3,3),B(3),X(3);do i=1,3print*,'Unesi koeficijente i konstantu za jednacinu',iread(*,*)(A(i,j),j=1,3),B(i)end docallcramer(A,B,X,u)if(u.eq.1) print*,'Rjesenje sistema je',(X(i),i=1,3)end program LinSistem
!*****************************************subroutinecramer(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);
! sistem ima rjesenje u=1, sistem nema rjesenja u=0detsis=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)/detsis
returnend subroutinecramer
!***************************************real functiondet(A)implicit nonerealA(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)returnend
8/13/2019 primjeri programiranje
14/14
Skripta za Raunare i programiranje Izudin Deli
14
Primjer 19.
programvjezba10! ovaj program vrsi multiplikaciju matrica A(3,3)i B(3,3)
implicit none;
integer:: i,j,k;real::A(3,3),B(3,3),C(3,3),D(3,3)
! inicijalizacija matricaA=0.;B=0.;C=0.;D=0.;do i=1,3print*,'unesi red',iread*,(A(i,j),j=1,3)end doprint*,'________________Unesi matricu B_________________'do i=1,3print*,'unesi red',i
read*,(B(i,j),j=1,3)end dowrite(*,10) ! dva prazna reda radi odvajanja matricado i=1,3print*, (A(i,j),j=1,3)end dowrite(*,10)
10 format(2/)do i=1,3print*,(B(i,j),j=1,3)end do! mnozenje matricado i=1,3do j=1,3do k=1,3C(i,j)=C(i,j)+A(i,k)*B(k,j)end doend doend dowrite(*,10)do i=1,3
print*,(C(i,j),j=1,3)end doD=matmul(A,B) ! poziv sistemskoj funkciji za mnozenje matricaA=D-C ! kontrola, A=0.write(*,10)do i=1,3print*,(A(i,j),j=1,3)end doend programvjezba10