Sunteți pe pagina 1din 11

Universitatea Tehnic Gheorghe Asachi din Iai Facultatea de Construcii i Instalaii

PROGRAMARE AVANSAT PENTRU


PROIECTARE I CERCETARE N CONSTRUCII
LUCRAREA III

Masterand Solonaru Maria Reabilitarea i Creterea Siguranei Construciilor

2011-2012

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 1
Grafice pentru diagrame de eforturi secionale la o grind dat.

1. Enunul problemei S se traseze graficele de for tietoare i moment ncovoietor pentru o grind. 2. Analiza problemei Se vor citi de la tastatur dimensiunile intervalelor grinzii i va fi testat validitatea acestora. Se va calcula lungimea grinzii, respectiv reaciunile dup care se vor determina forele tietoare i momentele ncovoietoare pentru fiecare interval n parte. Pentru trasarea diagramelor de fore tietoare i momente ncovoietoare se folosete Array Visualizer i se mparte grinda ntr-un interval ct mai mare de intervale pentru acurateea diagramelor. 3. Programarea problemei
program grinda ! Masterand Maria Solonaru, RCSC, an I use iflogm implicit none external sb1 external sb2 include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text real ier real a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 common ier,a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 ! stabilirea indice de eroare pe eroare existenta ier=0 write(*,*) 'utilizare ferestre de dialog' rtr=dlginit(dext,dint) rtr=dlgsetsub(dint,adlg,sb1) rtr=dlgsetsub(dint,bdlg,sb1) rtr=dlgsetsub(dint,cdlg,sb1) rtr=dlgsetsub(dint,ddlg,sb1) rtr=dlgsetsub(dint,eedlg,sb1) rtr=dlgsetsub(dint,fdlg,sb1) rtr=dlgsetsub(dint,gdlg,sb1) rtr=dlgsetsub(dint,hhdlg,sb1) rtr=dlgsetsub(dint,PPdlg,sb1) rtr=dlgsetsub(dint,q1dlg,sb1) rtr=dlgsetsub(dint,q2dlg,sb1) rtr=dlgsetsub(dint,M1dlg,sb1) rtr=dlgsetsub(dint,M2dlg,sb1) rtr=dlgsetsub(dint,calcul,sb2) rtr=dlgmodal(dint) print *, 'the end!' read * call dlguninit(dint) end program grinda Solonaru Maria Page 2

Programare avansat pentru proiectare i cercetare n construcii subroutine sb1(dint,valc,ce) use iflogm implicit none include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text integer valc,ce real ier real a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 common ier,a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 rtr=dlgget(dint,adlg,text) ! transformare a din text in numar read(text,*,iostat=ve) a if (ve==0) then ! ramura cu valoare acceptata if (a<=0.) then rtr=dlgset(dint,msj,' a numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,bdlg,text) ! transformare b din text in numar read(text,*,iostat=ve) b if (ve==0) then ! ramura cu valoare acceptata if (b<=0.) then rtr=dlgset(dint,msj,' b numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,cdlg,text) ! transformare c din text in numar read(text,*,iostat=ve) c if (ve==0) then ! ramura cu valoare acceptata if (c<=0.) then rtr=dlgset(dint,msj,' c numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,ddlg,text) ! transformare d din text in numar Solonaru Maria Page 3

Programare avansat pentru proiectare i cercetare n construcii read(text,*,iostat=ve) d if (ve==0) then ! ramura cu valoare acceptata if (d<=0.) then rtr=dlgset(dint,msj,' d numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,eedlg,text) ! transformare ee din text in numar read(text,*,iostat=ve) ee if (ve==0) then ! ramura cu valoare acceptata if (ee<=0.) then rtr=dlgset(dint,msj,' ee numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,fdlg,text) ! transformare f din text in numar read(text,*,iostat=ve) f if (ve==0) then ! ramura cu valoare acceptata if (f<=0.) then rtr=dlgset(dint,msj,' f numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,gdlg,text) ! transformare g din text in numar read(text,*,iostat=ve) g if (ve==0) then ! ramura cu valoare acceptata if (g<=0.) then rtr=dlgset(dint,msj,' g numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return Solonaru Maria Page 4

Programare avansat pentru proiectare i cercetare n construcii endif rtr=dlgget(dint,hhdlg,text) ! transformare hh din text in numar read(text,*,iostat=ve) hh if (ve==0) then ! ramura cu valoare acceptata if (hh<=0.) then rtr=dlgset(dint,msj,' hh numar ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,PPdlg,text) ! transformare PP din text in numar read(text,*,iostat=ve) PP if (ve==0) then ! ramura cu valoare acceptata if (PP<=0.) then rtr=dlgset(dint,msj,' PP numar ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,q1dlg,text) ! transformare q1 din text in numar read(text,*,iostat=ve) q1 if (ve==0) then ! ramura cu valoare acceptata if (q1<=0.) then rtr=dlgset(dint,msj,' q1 numar ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,q2dlg,text) ! transformare q2 din text in numar read(text,*,iostat=ve) q2 if (ve==0) then ! ramura cu valoare acceptata if (q2<=0.) then rtr=dlgset(dint,msj,' q2 numar ier=0 return endif else ! ramura cu eroare Solonaru Maria

negativ sau zero !')

negativ sau zero !')

negativ sau zero !')

negativ sau zero !')

Page 5

Programare avansat pentru proiectare i cercetare n construcii rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,M1dlg,text) ! transformare M1 din text in numar read(text,*,iostat=ve) M1 if (ve==0) then ! ramura cu valoare acceptata if (M1<=0.) then rtr=dlgset(dint,msj,' M1 numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgget(dint,M2dlg,text) ! transformare M2 din text in numar read(text,*,iostat=ve) M2 if (ve==0) then ! ramura cu valoare acceptata if (M2<=0.) then rtr=dlgset(dint,msj,' M2 numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,'eroare!') ier=0 return endif rtr=dlgset(dint,msj,'') ier=1 write(*,*) 'ok!' end subroutine sb1 subroutine sb2(dint,valc,ce) use iflogm !pentru visualizer use avfrt use avobjmod implicit none !pentru visualizer integer status ,st integer viewerid,hroot,hgraph include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text integer valc,ce,I real ier real a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 common ier,a,b,c,d,ee,f,g,hh,PP,q1,q2,M1,M2 real L,VA,VB,verif !numar de intervale pentru grafice integer, parameter:: imp=5000 !forta taietoare, momentul incovoietor Solonaru Maria Page 6

Programare avansat pentru proiectare i cercetare n construcii real ft(imp+1),mi(imp+1),x(imp+1) if (ier==0) then rtr=dlgset(dint,msj,' Nu se pot trasa diagramele') else rtr=dlgset(dint,msj,' Se pot trasa diagramele') ! se fac calculele si se traseaza diagramele ! lungimea grinzii L=a+b+c+d+ee+f+g+hh write(text,*) L rtr=dlgset(dint,Ldlg,text) !reactiuni VA=(-M1+M2+q1*d*(d/2+ee+f+g+hh)-q2*f*(f/2+g+hh)+PP*hh)/L write(text,*) VA rtr=dlgset(dint,VAdlg,text) VB=(M1-M2+q1*d*(a+b+c+d/2)-q2*f*(L-f/2-g-hh)+PP*(L-hh))/L write(text,*) VB rtr=dlgset(dint,VBdlg,text) !verificarea reactiunilor verif=VA+VB+q2*f-q1*d-PP write(text,*) verif rtr=dlgset(dint,verifdlg,text) !eforturi sectionale ft(1)=VA mi(1)=0. x(1)=0. do i=2,imp x(i)=x(i-1)+l/imp ! impartire in intervale ale lui x if (x(i)<a) then !interval 1 ft(i)=VA mi(i)=-(VA*x(i)) elseif (x(i)<(a+b))then !interval 2 ft(i)=VA mi(i)=-(VA*x(i)+M1) elseif (x(i)<(a+b+c)) then !interval 3 ft(i)=VA mi(i)=-(VA*x(i)+M1-M2) elseif (x(i)<(a+b+c+d)) then !interval 4 ft(i)=VA-q1*(x(i)-a-b-c) mi(i)=-(VA*x(i)+M1-M2-q1*(x(i)-a-b-c)**2/2.) elseif(x(i)<(a+b+c+d+ee)) then !interval 5 ft(i)=VA-q1*d mi(i)=-(VA*x(i)+M1-M2-q1*d*(x(i)-a-b-c-d/2.)) elseif(x(i)<(a+b+c+d+ee+f)) then !interval 6 ft(i)=VA-q1*d+(x(i)-a-b-c-d-ee)*q2 mi(i)=-(VA*x(i)+M1-M2-q1*d*(x(i)-a-b-c-d/2.)+q2*(x(i)-a-b-c-dee)**2/2.) elseif (x(i)<(a+b+c+d+ee+f+g)) then ft(i)=VA-q1*d+q2*f mi(i)=-(VA*x(i)+M1-M2-q1*d*(x(i)-a-b-c-d/2.)+q2*f*(x(i)-a-b-cd-ee-f/2.)) elseif(x(i)<(L)) then !interval 7 ft(i)=VA-q1*d+q2*f-PP Solonaru Maria Page 7

Programare avansat pentru proiectare i cercetare n construcii mi(i)=-(VA*x(i)+M1-M2-q1*d*(x(i)-a-b-c-d/2.)+q2*f*(x(i)-a-b-cd-ee-f/2.)-PP*(x(i)-a-b-c-d-ee-f-g)) endif enddo ft(imp+1)=-VB mi(imp+1)=0. x(imp+1)=L call avstartwatch(loc(x),1,shape(x),av_real4,"x",status) call avstartwatch(loc(ft),1,shape(ft),av_real4,"ft",status) call avstartwatch(loc(mi),1,shape(mi),av_real4,"mi",status) call avnewviewer(viewerid) hroot=avgetobject("/") call avCreateGraph2DObj(avGraphs(hroot),"fortat|plot:xyplot,xsource:/x,ysource:f t",hgraph) call avCreateGraph2DObj(avGraphs(hroot),"momenti|plot:xyplot,xsource:/x,ysource: mi",hgraph) call avvisible(viewerid,1,status) call avsaveimage('diagft.jpg','graph:/fortat',1200,1600,72,st) call avsaveimage('diagmi.jpg','graph:/momenti',1200,1600,72,st) endif write(*,*)'ok!' end subroutine sb2

4. Rezultate

Solonaru Maria

Page 8

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 9

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 10

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 11

S-ar putea să vă placă și