Rozwiązanie statyki belki

0x01 graphic

Reakcje

Układ równań:

0x01 graphic

Reakcje:

0x01 graphic

Przy obliczeniach reakcji posiłkowano się programem Derive 4 windows

Tnące i momenty

Przedział 1

0x01 graphic

Przedział 2

0x01 graphic

Przedział 3 i 4

0x01 graphic

Przedział 5

0x01 graphic

Przedział 6

0x01 graphic

Przedział 7

0x01 graphic

Przedział 8

0x01 graphic

Przedział 9

0x01 graphic

Przykład obliczeniowy

Dla danych wejściowych:

Dane do programu

l1[m]= 1.000

l2[m]= 2.000

l3[m]= 3.000

l4[m]= 4.000

l5[m]= 5.000

l6[m]= 4.000

l7[m]= 3.000

l8[m]= 2.000

l9[m]= 1.000

q1[kN/m]= 2.300

q2[kN/m]= 3.400

P[kN]= 10.000

M[kNm]= 12.000

Wyniki programu:

0x01 graphic

Wyniki programu graficznego:

0x01 graphic
Instrukcja użytkownika programu

Po uruchomieniu programu pojawia się menu, należy wybrać jedną z opcji.

Aby program graficzny zadziałał prawidłowo należy wyprowadzić wyniki do pliku (wyniki.grf), po uprzednim wprowadzeniu danych wejściowych.

Uwaga: Program graficzny nie uruchamia się w systemie Windows Vista.

Kod źródłowy programu liczącego

real l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M,L

integer i,K

real minT,maxT,minM,maxM

integer opcja

10 write(*,"(20(/))")

write(*,"(20x,a)") ' MENU GLOWNE '

write(*,"(20x,a)") ' 1. Wejscie danych z klawiatury '

write(*,"(20x,a)") ' 2. Wejscie danych z pliku (dane.dat) '

write(*,"(20x,a)") ' 3. Wyjscie danych na ekran '

write(*,"(20x,a)") ' 4. Wyjscie danych do pliku (dane.dat) '

write(*,"(20x,a)") ' 5. Wyjscie wynikow na ekran '

write(*,"(20x,a)") ' 6. Wyjscie wynikow do pliku '

write(*,"(20x,a)") ' 99. KONIEC'

read(*,*) opcja

select case(opcja)

case(1)

write(*,"(25(/),a)") 'Dane z klawiatury:'

write(*,*) 'l1, l2, l3, l4, l5, l6, l7, l8, l9 [m]'

read(*,*) l1,l2,l3,l4,l5,l6,l7,l8,l9

write(*,*) 'q1, q2 [kN/m]'

read(*,*) q1,q2

write(*,*) 'P [kN]'

read(*,*) P

write(*,*) 'M [kNm]'

read(*,*) MM

L=l1+l2+l3+l4+l5+l6+l7+l8+l9

go to 10

case(2)

900 format((/),13(10x,f8.3,(/)))

open(1,file='dane.dat')

read(1,900) l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM

close(1)

L=l1+l2+l3+l4+l5+l6+l7+l8+l9

pause 'Odczytano dane z dane.dat [ENTER]'

go to 10

case(3)

1000 format(1x,'Dane do programu',(/),

$ 1x,' l1[m]=',f8.3,(/),

$ 1x,' l2[m]=',f8.3,(/),

$ 1x,' l3[m]=',f8.3,(/),

$ 1x,' l4[m]=',f8.3,(/),

$ 1x,' l5[m]=',f8.3,(/),

$ 1x,' l6[m]=',f8.3,(/),

$ 1x,' l7[m]=',f8.3,(/),

$ 1x,' l8[m]=',f8.3,(/),

$ 1x,' l9[m]=',f8.3,(/),

$ 1x,'q1[kN/m]=',f8.3,(/),

$ 1x,'q2[kN/m]=',f8.3,(/),

$ 1x,' P[kN]=',f8.3,(/),

$ 1x,' M[kNm]=',f8.3,(/)

$ )

write(*,1000) l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM

pause '[ENTER]'

go to 10

case(4)

open(1,file='dane.dat')

write(1,1000) l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM

close(1)

pause 'Zapisano dane do pliku [ENTER]'

go to 10

case(5)

write(*,*) ' Ile wynikow? >'

read(*,*) K

call blk(l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M)

write(*,*) 'Ra=',Ra,', Rb=',Rb,', Rc=',Rc

do i=1,K

x=(i-1)*(L/K)

call blk(l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M)

write(*,*) x,T,M

end do

pause '[ENTER]'

go to 10

case(6)

K=600

call blk(l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M)

open(1,file='wyniki.grf',access='direct',recl=16)

do i=1,K

x=(i-1)*(L/K)

call blk(l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M)

if(x.eq.0.0) then

minT=T

maxT=T

minM=M

maxM=M

else

minT=min(minT,T)

maxT=max(maxT,T)

minM=min(minM,M)

maxM=max(maxM,M)

end if

write(1,rec=i) T,M

end do

write(1,rec=601) Ra,Rb,Rc

write(1,rec=602) minT,maxT,minM,maxM

close(1)

pause 'Zapisano do pliku wyniki.grf [ENTER]'

go to 10

case(99)

pause

stop

end select

end

subroutine blk(l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,

$M)

real l1,l2,l3,l4,l5,l6,l7,l8,l9,q1,q2,P,MM,Ra,Rb,Rc,x,T,M

Ra=(MM+P*l3)/(l2+l3)

Rb=-(2*MM*(l4+l5+l6+l7)-2*P*l2*(l4+l5+l6+l7)-(l2+l3)*(l6**2*q1+2*l

$6*l7*q1-l9*q2*(2*l8+l9)))/(2*(l2+l3)*(l5+l6+l7))

Rc=(2*MM*l4-2*P*l2*l4+(l2+l3)*(2*l5*(l6*q1+l9*q2)+l6**2*q1+2*l6*l9

$*q2+l9*q2*(2*l7+2*l8+l9)))/(2*(l2+l3)*(l5+l6+l7))

if(x.le.l1) then

T= 0

M= -MM

else if(x.gt.l1.and.x.le.(l1+l2)) then

T= 0+Ra

M= -MM+Ra*(x-l1)

else if(x.gt.(l1+l2).and.x.le.(l1+l2+l3)) then

T= 0+Ra+(-P)

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))

else if(x.gt.(l1+l2+l3).and.x.le.(l1+l2+l3+l4)) then

T= 0+Ra+(-P)

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))

else if(x.gt.(l1+l2+l3+l4).and.x.le.(l1+l2+l3+l4+l5)) then

T= 0+Ra+(-P)+Rb

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))+Rb*(x-(l1+l2+l3+l4))

else if(x.gt.(l1+l2+l3+l4+l5).and.x.le.(l1+l2+l3+l4+l5+l6)) then

T= 0+Ra+(-P)+Rb+(-q1*(x-(l1+l2+l3+l4+l5)))

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))+Rb*(x-(l1+l2+l3+l4))+(-q1*(x-

$(l1+l2+l3+l4+l5))*(x-(l1+l2+l3+l4+l5))*(0.5))

else if(x.gt.(l1+l2+l3+l4+l5+l6).and.x.le.(l1+l2+l3+l4+l5+l6+l7)

$) then

T= 0+Ra+(-P)+Rb+(-q1*((l1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5)))

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))+Rb*(x-(l1+l2+l3+l4))+(-q1*((l

$1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(x-((l1+l2+l3+l4+l5)+((l1+l2+l

$3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(0.5))))

else if(x.gt.(l1+l2+l3+l4+l5+l6+l7).and.x.le.(l1+l2+l3+l4+l5+l6+

$l7+l8)) then

T= 0+Ra+(-P)+Rb+(-q1*((l1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5)))+Rc

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))+Rb*(x-(l1+l2+l3+l4))+(-q1*((l

$1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(x-((l1+l2+l3+l4+l5)+((l1+l2+l

$3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(0.5))))+Rc*(x-(l1+l2+l3+l4+l5+l6+l7

$))

else if(x.gt.(l1+l2+l3+l4+l5+l6+l7+l8)) then

T= 0+Ra+(-P)+Rb+(-q1*((l1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5)))+(-

$q2*(x-(l1+l2+l3+l4+l5+l6+l7+l8)))+Rc

M= -MM+Ra*(x-l1)+(-P*(x-(l1+l2)))+Rb*(x-(l1+l2+l3+l4))+(-q1*((l

$1+l2+l3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(x-((l1+l2+l3+l4+l5)+((l1+l2+l

$3+l4+l5+l6)-(l1+l2+l3+l4+l5))*(0.5))))+(-q2*(x-(l1+l2+l3+l4+l5+l6+

$l7+l8))*(x-(l1+l2+l3+l4+l5+l6+l7+l8))*(0.5))+Rc*(x-(l1+l2+l3+l4+l5

$+l6+l7))

end if

end

Kod źródłowy programu graficznego
include 'c:\f5e\fgraph.fi'

include 'c:\f5e\fgraph.fd'

real minT,maxT,minM,maxM,T,M,Ra,Rb,Rc

integer i,d

real skalaT, skalaM, xB, mT, mM

character*80 napis

record /xycoord/ xy

d=setvideomode($VRES16COLOR)

d=registerfonts("*.fon")

d=setcolor(14)

d=rectangle($GBORDER,10,10,630,470)

d=setcolor(15)

d=setfont("t'helv'h22w10b")

write(napis,"(a)") 'Wykres tnacych i momentow'

call moveto(170,10,xy)

call outgtext(napis)

open(1,file='wyniki.grf',access='direct',recl=16)

read(1,rec=601) Ra,Rb,Rc

read(1,rec=602) minT,maxT,minM,maxM

d=setfont("t'helv'h12w8b")

call moveto(100,50,xy)

write(napis,"(a,f4.1,a)") 'Ra=',Ra,'[kN]'

call outgtext(napis)

call moveto(100,65,xy)

write(napis,"(a,f4.1,a)") 'Rb=',Rb,'[kN]'

call outgtext(napis)

call moveto(100,80,xy)

write(napis,"(a,f4.1,a)") 'Rc=',Rc,'[kN]'

call outgtext(napis)

call moveto(250,60,xy)

write(napis,"(a,f4.1,a)") 'min T=',minT,'[kN]'

call outgtext(napis)

call moveto(250,75,xy)

write(napis,"(a,f4.1,a)") 'max T=',maxT,'[kN]'

call outgtext(napis)

call moveto(400,60,xy)

write(napis,"(a,f4.1,a)") 'min M=',minM,'[kNm]'

call outgtext(napis)

call moveto(400,75,xy)

write(napis,"(a,f4.1,a)") 'max M=',maxM,'[kNm]'

call outgtext(napis)

mT=max(abs(minT),abs(maxT))

mM=max(abs(minM),abs(maxM))

if(mT.gt.0.0) skalaT=80.0/mT

if(mM.gt.0.0) skalaM=80.0/mM

d=setcolor(14)

call moveto(20,107,xy)

call outgtext('Tnace')

call moveto(20,287,xy)

call outgtext('Momenty')

d=setcolor(9)

d=rectangle($GBORDER,20,120,620,280)

d=rectangle($GBORDER,20,300,620,460)

c ------------------------------ WYKRES TNACYCH I MOMENTOW

xB=20

d=setcolor(15)

do i=1,600

read(1,rec=i) T,M

call moveto(xB,120+80,xy)

d=lineto(xB,120+80-(skalaT*T))

call moveto(xB,300+80,xy)

d=lineto(xB,300+80+(skalaM*M))

xB=xB+1

end do

close(1)

pause ' '

d=setvideomode($DEFAULTMODE)

end