primjeri programiranje

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