Racunari i Programiranje-prva Parcijala

Embed Size (px)

Citation preview

JU UNIVERZITET U TUZLI

ZADACI ZA VJEBE IZ PREDMETA RAUNARI I PROGRAMIRANJE

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

Rjeenje:! suma elemenata niza Adimension A(8)print*,'program za sabiranje elemenata miza A'print*,'Unesite 8 elemenata niza A'! unosenje elemenata niza Ado 1 I=1,8read*,A(I)1 continue! Operacija sa elementima niza AS=0do 2 I=1,8S=S+A(I)2 continue! stampanje sume elemenata niza Aprint*,'Suma je=',S! zaustavljanje programastopend

PRIMJER: 3Uitati niz B od 6 elemenata, nai proizvod lanova niza B.Proizvod niza B odtampati u glavnom programu.

Rjeenje:! Proizvod elemenata niza Bdimension B(6)print*,'Program za izracunavanje proizvoda elemenata niza B'print*,'Unesite 6 elemanata niza B'! Unosenje elemenata niza Bdo 1 I=1,6read*,B(I)1 continue! Operacija sa elementima niza BP=1do 2 I=1,6P=P*B(I)2 continue! Stampanje proizvoda niza Bprint*,'proizvod je=',P! zaustavljanje programastopend

PRIMJER: 4Uitati niz A od 10 elemenata, nai proizvod i sumu niza.Proizvod i sumu niza A odtampati u glavnom programu.

Rjeenje:! Proizvod i suma elemenata niza Adimension A(10)print*,'Program za izracunavanje proizvoda i sume elemenata niza A'print*,'Unesite 10 elemanata niza A'! Unosenje elemenata niza Ado 1 I=1,10read*,A(I)1 continue! Operacije sa elementima niza AP=1S=0do 2 I=1,10S=S+A(I)P=P*A(I)2 continue! Stampanje proizvoda i sume niza Aprint*,'proizvod je=',P,'Suma je=',S! zaustavljanje programastopend

PRIMJER: 5Uitati niz A od 20 elemenata, sortirati ih u rastucem redoslijedu te odstampati u glavnom programu.

Rjeenje:! niz od 20 elemenata u rastujucem redoslijedudimension A(20)print*,'program za sortiranje ele. niza A u rastujucem redoslijedu'print*,'unesite 20 elemenata niza A'do 10 i=1,20read*,A(i)10 continue! sortiranje elemenatado 20 i=1,19do 15 j=i+1,20if(A(i).lt.A(j)) go to 15c=A(i)A(i)=A(j)A(j)=c15 continue20 continueprint*,'Sortirani elementi niza A su:'do 30 j=1,20print*,A(j)30 continuestopend

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

Rjeenje:! Program ucitava N cijelih brojeva i nalazi! najvecu,najmanju i prosjecnu vrijednost ! Deklaracija promjenjljivihINTEGER::N,IREAL::MINIM,MAXIM,SUMA,PROSVR,BROJ! Ucitavanje broja Nprint*,'Koliko ima ukupno brojeva (N>o):'read*,N! Ucitavanje prvog brojaprint*,' Unesite prvi broj:'read*,BROJMINIM=BROJMAXIM=BROJSUMA=BROJ! Ucitavanje ostalih brojeva do 10 I=2,N (ako umjesto broja 2 stavimo broj 1 u DO petlji vidjeti izlaz!!!)print*,'I ostali brojevi:'read*,BROJSUMA=SUMA+BROJIF (BROJ.LT.MINIM)THENMINIM=BROJELSE IF (BROJ.GT.MAXIM)THENMAXIM=BROJEND IF10 continue! Racunanje prosjecne vrijednosti i stampanje rezultataPROSVR=SUMA/Nprint*,'Minimalna vrijednost je :',MINIMprint*,'Maximalna vrijednost je :',MAXIMprint*,'Prosjecna vrijednost je :',PROSVRSTOPEND

PRIMJER: 7Progrm nalazi najveci zajednicki djelilac dva zadana prirodna broja.

Rjeenje:! Progrm nalazi najveci zajednicki djelilac! dva zadana prirodna broja! Deklaracija promjenjljivihINTEGER::I,J,N,R,POM! Ucitavanje podatakaprint*,'Unesite dva cijela prirodna broja:'read*,I,J! Racunanje najveceg zajednickog djelilca NZDprint*,'NZD brojeva ',I,' i',J,' je:'IF (I.NE.MIN(I,J)) THENPOM=II=JJ=POMEND IFR=MOD(I,J)DO WHILE (R.NE.0) I=JJ=RR=MOD(I,J)END DOprint*,JSTOPEND

PRIMJER: 8Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata na neparnim mjestima. Sumu i proizvod odtampati u glavnom programu.

Rjeenje:! Suma parnih i proizvod neparnih elemenata niza Adimension A(10)print*, 'Program za sabiranje parnih i mnoenje neparnih elemenata niza A'print*, 'Unesite 10 elemenata niza A'! unosenje elemenata niza Ado 1 I=1,10read*, A(I)1 continue! operacija sa elementima niza AP=1S=0do 2 I=1,5S=S+A(2*I)P=P*A(2*I-1)2 continue! stampanje sume i proizvoda niza Aprint*, 'Suma je= ' ,S, 'Proizvod je= ' ,P! zaustavljanje programastopend

PRIMJER: 9Napisati program u Fortranu koji izraunava prosjenu vrijednost uneenog niza od N elemenata ili npr. izraunavanje prosjene vrijednosti za nekoliko unijetih ocjena.

Rjeenje:! Program srednje ocjene iz programiranja i racunara! Ucitavamo 6 ocjena i trazimo srednju vrijednostreal::n1,n2,n3,n4,n5,n6, SRV=0.0, Suma=0.0integer::n=6,CBprint*,'unesite ocjene iz predmeta Rac i Prog'read*,n1,n2,n3,n4,n5,n6Suma=n1+n2+n3+n4+n5+n6SRV=Suma/nCB=Suma/nprint*,' Suma elemenata je:',Sumaprint*,' Srednja vrijednost je:',SRVprint*,' Srednja vrijednost cijeli broj je:',CBend program

PRIMJER: 10Napisati 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.

Rjeenje:! program za racunanje prosjecne potrosnje goriva! dekleracija varijablireal:: brzina,vrijeme,duzinaputa,ukpotr,prpotr! ucitavanje podatakaprint*,' predjeno rastojanje u (km)'read*,duzinaputaprint*,' vrijeme trajanja voznje u (h)'read*, vrijemeprint*,' ukupno potroseno goriva u (l)'read*, ukpotr! racunanje i ispisivanje rezultatabrzina=duzinaputa/vrijemeprpotr=100*ukpotr/duzinaputaprint*,' prosjecna brzina je:',brzina,' (km/h)'print*,' prosjecna potrosnja goriva je:',prpotr,' (l/100km)'stopend

PRIMJER: 11Izracunati 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.

Rjeenje:! Program racuna ukupnu i neto zaradu nekog radnika ako je zadano! cijena po jednom satu rada i ukupan broj sati na dio zarade koji prelazi ! 900 km placa se 10% porez na dohodak! deklaracija varijablireal:: netzar,ukzar,brsati,zarsat,grzar,porez,odbiciparameter (grzar=900.0, porez=10.0)! ucitavanje podatakaprint*,' ukupan broj sati:'read*,brsatiprint*,' zarada po satu:'read*,zarsat! racunanje rezultataukzar=brsati*zarsatif (ukzar.lt.900.0) goto 30 odbici=ukzar*porez/100netzar=ukzar-odbici! stampanje rezultata30 print*,'ukupna zarada:',ukzar print*,'za isplatu:',netzarstopend

PRIMJER: 12: Demonstracija rada do petlje

Napisati program koji pretvara temperaturu izracunatu u stepenima Farenhajta (Qf) u stepene celizijuse (Qc) koristei obrazac. .Za temperature od 30 do 60 F, sa korakom 2F.Rjeenje:PRVI SLUCAJ! pretvaranje temperature u stepenima fahrenhajta ! u stepene celizijusa po zadatom obrascu! TCELZ=(5.0/9.0)*(TFRNHT-32)! stampanje odgovarajuce tabele! dekleracija promjenjljivih i definisanje konstantireal:: TCELZ,TFRNHT,TFPOC,TFKRAJ,TKORAKparameter (TFPOC=30.,TFKRAJ=60.,TKORAK=2.)! stampanje zaglavlja tabeleprint 1010 format(4x,'t(F) t(C)'/4x,'------+------+')TFRNHT=TFPOC! pretvaranje temperature u stepene celizijusa i stampanje20 TCELZ=(5.0/9.0)*(TFRNHT-32)print 30,INT(TFRNHT),TCELZ30 format(5x,I3,F8.2)TFRNHT=TFRNHT+TKORAKif(TFRNHT.LE.TFKRAJ) go to 20stopend

Izlaz na ekran

DRUGI SLUCAJ SA DO PETLJOM

! Pretvaranje temperature sa do petljom! deklaracija varijablireal:: TECELZ,TFRNHT,TFPOC,TFKRAJ,TFKORAKparameter (TFPOC=30.,TFKRAJ=60.,TKORAK=2)print 1010 format (4x,'t(F) t(C)'/4x,'-----+-----+')do 1 TFRNHT=TFPOC,TFKRAJ,TKORAKTCELZ=(5.0/9.0)*(TFRNHT-32.0)print 20, INT (TFRNHT),TCELZ1 continue20 format (5x,I3,F8.2)stopend

Demonstracija rada do petlje

! demonstracija do petljeinteger:: brojac,poc,kraj,korakparameter (poc=1,kraj=10,korak=1)N=0do 10 brojac=poc,kraj,korakN=N+110 continueprint 20, N20 format (5x,'petlja izvrsena',I3,'puta')stopend

PRIMJER: 13: Primjer za pokazivanje rada IF THEN I ELSE Napisati program u fortranu koji za unesene vrijednosti temperature koje su zadate u intervalu od: 0 do 300C ispisuje sljedee: T < 0 - smrzavanje; T < 10 hladno; T < 20 umjereno;T < 30 toplo;T>30-vrlo toplo.Rjeenje:! program za pokazivanje if then i else if uslova10 print*,'unesi temperaturu u C'read*,CIF(C.le.0) thenprint*,'smrzavanje'elseIF(C.le.10) thenprint*,'hladno'elseIF(C.le.20) thenprint*,'umjereno'elseIF(C.le.30) thenprint*,'toplo'elseprint*,'vrlo toplo'end ifend ifend ifend ifprint*,'zeliteli ponoviti unos unesite odg broj?'print*,' Da unesite 1'print*,' Ne unesite 0'read(*,*) ponovoif (ponovo.eq.1) go to 10stopendIF THEN ELSE IF USLOV ZA ISTI PRIMJER! program za pokazivanje if then i else if uslova10 print*,'unesi temperaturu u C'read*,CIF(C.le.0) thenprint*,'smrzavanje'else if(C.le.10) thenprint*,'hladno'else if(C.le.20) thenprint*,'umjreno'else if(C.le.30) thenprint*,'toplo'elseprint*,'vrlo toplo'end ifprint*,'zeliteli ponoviti unos unesite odg broj?'print*,' Da unesite 1'print*,' Ne unesite 0'read(*,*) ponovoif (ponovo.eq.1) go to 10stopendPRIMJER: 14 (Funkcijski podprogram)U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog potprograma izraunati kombinaciju:

Rjeenje:! proracun kombinacije k=i!/[j!(i-j)!]integer A,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 function fakt(L)fakt=1do 10 N=1,Lfakt=fakt*N10 continuereturnend

PRIMJER: 15Uitati 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.

Rjeenje:! ucitati x,y koordinate 10 tacaka.napisati funkcijski potprogram koji ce da racuna rastojanja datih tacaka od tacke sa Koordinatom xa=0,5 i y=1,0. naci najvecu i najmanju duzinu u glavnom programudimension x(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)10 continuexa=0.5ya=1.0do 20 i=1,10d(i)=duzina(x(i),y(i),xa,ya)20 continuedmax=d(1)dmin=d(1)do 30 i=1,10if (dmax.lt.d(i)) thendmax=d(i)else if (dmin.gt.d(i)) thendmin=d(i)end if30 continueprint*, 'Maksimalna duzina je= ',dmax,' minimalna duzina je= ',dminstopendfunction duzina(a,b,c,d)duzina=sqrt((a-c)**2+(b-d)**2)returnend

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

Rjeenje:program Putanja!ovaj program racuna elemente trajektorije kod kosog hica!koristeci poziv za traject funkcijuimplicit noneinteger:: i,N;real:: g,PI! fizicke konstantereal::alfa,Vo,D,T,x,yreal::trajectg = 9.806pi = 3.1415926 print*, '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 dometprint*, 'maximalni domet D za date parametre iznosi',D,'[m]'T=2.*Vo*sin(alfa)/gprint*, '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 doend program Putanja

!********************************************************************real function traject(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: 17Napisati program koji odreuje reakcije i dimenzionira prostu gredu za sluaj prikazan na slici. Greda je okruglog poprenog presjeka. SLIKA

Rjeenje:Program prosta_greda! Program racuna staticke velicine proste grede! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka! Eksplicitno deklarisanje velicina koje se koriste u programuimplicit nonereal::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;10 continueprint*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'read(*,*)L,l1,l2 ! unos velicina u slobodnom formatuif(l1+l2.ge.L) thenprint*,'Pogresan unos podataka'; go to 10end if! unos vrijednosti za sile F1 i F2print*,'Unesite vrijednosti sila F1 i F2, u (kN)'read(*,*)F1,F2! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)read(*,*)SigmaDoz! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0Ra=(F2*l2+F1*(L-l1))/LRb=F1+F2-Raprint*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb

! Momenti savijanja u tackama 1 i 2! Mmax=maksimalni moment savijanjaM1=Ra*l1M2=Rb*l2Mmax=M1if(M2.gt.Mmax) Mmax=M2;

! dimenzionisanje precnika greded=(32*Mmax/(3.14159*SigmaDoz))**0.33333print*,'potrebni precnik grede iznosi',d,' (mm)'

end program prosta_greda

Primjer prosta gleda bez if uslova

Program prosta_greda! Program racuna staticke velicine proste grede! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka! Eksplicitno deklarisanje velicina koje se koriste u programuimplicit nonereal::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;print*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'read(*,*)L,l1,l2 ! unos velicina u slobodnom formatu

! unos vrijednosti za sile F1 i F2print*,'Unesite vrijednosti sila F1 i F2, u (kN)'read(*,*)F1,F2! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)read(*,*)SigmaDoz! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0Ra=(F2*l2+F1*(L-l1))/LRb=F1+F2-Raprint*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb

! Momenti savijanja u tackama 1 i 2! Mmax=maksimalni moment savijanjaM1=Ra*l1M2=Rb*l2Mmax=M1if(M2.gt.Mmax) Mmax=M2;

! dimenzionisanje precnika greded=(32*Mmax/(3.14159*SigmaDoz))**0.33333print*,'potrebni precnik grede iznosi',d,' (mm)'

end program prosta_greda

UPISAN ISPIS MAKSIMALNOG MOMENTAProgram prosta_greda! Program racuna staticke velicine proste grede! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka! Eksplicitno deklarisanje velicina koje se koriste u programuimplicit nonereal::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;print*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'read(*,*)L,l1,l2 ! unos velicina u slobodnom formatu

! unos vrijednosti za sile F1 i F2print*,'Unesite vrijednosti sila F1 i F2, u (kN)'read(*,*)F1,F2! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)read(*,*)SigmaDoz! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0Ra=(F2*l2+F1*(L-l1))/LRb=F1+F2-Raprint*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb

! Momenti savijanja u tackama 1 i 2! Mmax=maksimalni moment savijanjaM1=Ra*l1M2=Rb*l2Mmax=M1if(M2.gt.Mmax) Mmax=M2;print*,'Maksimalni moment je=',Mmax

! dimenzionisanje precnika greded=(32*Mmax/(3.14159*SigmaDoz))**0.33333print*,'potrebni precnik grede iznosi',d,' (mm)'

end program prosta_greda

PRIMJER: 20U glavnom programu uitati varijablu X, te pomou funkcijskog potprograma odrediti:X2 ako je X>5f(X)= X2+2 ako je X=5 5X ako je X5! f(x)= x**2+2 x=5! 5x x5! f(x)= x**2+2x=5! 5x x0! Y = 2X ZA X=0! X ZA X 6 izraunati i ispisati suma - 9/3.

RJEENJE:

! Suma elemanata niza A i usporedbadimension A(100)REAL::Z,USLOV1,USLOV2,i,n,ponovo10 continueprint*,'program za sabiranje i usporedbu elemenata niza A'print*,'koliko ima elemanata niza A'read*,nprint*,'ucitavanje elemenata niza A'do 1 i=1,nread*,A(i)1 continue! Operacije sa elementima niza AZ=0do 2 i=1,nZ=Z+A(i)2 continue! Stampanje sume elemenata niza Aprint*,'Suma je =',Z! Usporedbaif (Z.le.6)thenUSLOV1=Z+(6/2)print*,'posto je Z6 ispunjen je drugi uslov'print*,'Uslov dva iznosi =',USLOV2end ifprint*,'Zelite li nastaviti unos unesite odgovarajuci broj'print*,' Da ----- unesite 1'print*,' Ne ----- unesite 0'read(*,*)ponovoif(ponovo.eq.1) go to 10! Zaustavljanje programastopend

PRIMJER 10

Nacrtati dijagram toka i napisati fortranski kod za program koji e uitati dva niza, izvrsiti sabiranje prvih elemanata nizova te izvrsiti sabiranje zadnjih elemenata nizova. Nakon sabiranja pojedinih elemenata nizova nai koji je zbir vei i odtampati ga.

! Dva Nizadimension A(100),B(100)real:: i,Na,Nb,C,Dprint*,'program dva niza'10 continueprint*,'koliko ima elemenata niza A'read*,Naprint*,'unesite elemenate niza A'do 1 i=1,Naread*,A(i)1 continueprint*,'koliko ima elemenata niza B'read*,Nbprint*,'unesite elemenate niza B'do 2 i=1,Nbread*,B(i)2 continue! operacije sa elementima nizovaC=A(1)+B(1)D=A(Na)+B(Nb)if(C.gt.D)thenprint*,'Vrijednost C veca je od D i iznosi=',Celse if (C.eq.D)thenprint*,'Brojevi su jednaki i vrijednost C je =',C,' i vrijednost D je=',Delse print*,'Vrijednost D je veca i iznosi=',Dend ifprint*,'Zelite li nastaviti unos unesite odgovarajuci broj'print*,' Da ----- unesite 1'print*,' Ne ----- unesite 0'read(*,*)ponovoif(ponovo.eq.1) go to 10! Zaustavljanje programastopend

PRIMJER:11Napisati fortranski kod programa koji ucitava tri cijela broja te nalazi razliku najveceg i zbira preostala dva broja.

! Program koji ucitava tri cijela broja te nalazi razliku! najveceg i preostala dvaIMPLICIT NONEINTEGER::A,B,C,ponovoREAL::Razlika10 continueprint*,' Unesite tri cijela broja'read*,A,B,Cif(A.gt.B.and.A.gt.C)thenRazlika=A-(B+C)Print*,' Posto je A>B i A>C razlika je=',Razlikaelse if(B.gt.A.and.B.gt.C)thenRazlika=B-(A+C)Print*,' Posto je B>A i B>C razlika je=',RazlikaelseRazlika=C-(A+B)Print*,' Posto je C>A i C>B razlika je=',Razlikaend ifprint*,'Zelite li nastaviti unos unesite odgovarajuci broj'print*,' Da ----- unesite 1'print*,' Ne ----- unesite 0'read(*,*)ponovoif(ponovo.eq.1) go to 10! Zaustavljanje programastopend

28