Rozwiązanie statyki belki
Reakcje
Układ równań:
Reakcje:
Przy obliczeniach reakcji posiłkowano się programem Derive 4 windows
Tnące i momenty
Przedział 1
Przedział 2
Przedział 3 i 4
Przedział 5
Przedział 6
Przedział 7
Przedział 8
Przedział 9
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:
Wyniki programu graficznego:
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